必须先单独克隆并构建 starling-engine,bootstrap.sh 只创建指向它的 engine 符号链接;不要直接从 .build 运行,子应用会清理 LD_LIBRARY_PATH,需经 staging 布局;打包 deb 前需先构建 shell、各应用和 engine 的 host_release。
starling
starling-buildApache-2.0活跃维护用 Swift 从零打造的 Linux 桌面环境,自带合成器和 Flutter 到 Swift 的框架移植,还配了一方应用。
Starling — a new Linux desktop environment: Swift shell, its own compositor, a Flutter-to-Swift framework port, and first-party apps
git clone 本仓库并把 starling-engine 克隆到同级目录后:
./bootstrap.sh
cd shell && swift build -c release
build/run-desktop.shREADME 未给出显存或具体 GPU 型号要求;运行桌面需 GPU 空闲(无显示管理器或合成器占用),走发行版 Mesa,并优先用 libseat 以非特权方式运行。
用 Swift 重写 Flutter 框架并自研 Wayland 合成器的 Linux 桌面环境
用 Swift 从零打造的 Linux 桌面环境,自带合成器和 Flutter 到 Swift 的框架移植,还配了一方应用。
核心能力
- 自带 Wayland 合成器与 X11 服务器
- 把 Flutter 框架移植到 Swift,无需 Dart VM
- 桌面 dock、菜单、窗口统一为一棵 widget 树
- 终端支持持久会话,断连后由 starling-termd 保活
- Office 浏览器版与原生版共用 Swift 实现
容易踩的坑
- office-v0.1.0Starling Office 0.1.0 — Writer, Sheets and Slides for macOS, Windows and Linux最新正式版2026-10-14 · 2026-10-14 03:19 UTC
Starling Office 0.1.0 — Writer, Sheets and Slides for macOS, Windows and Linux
The first standalone release of Starling Office: a word processor, a spreadsheet and a presentation editor in one app. It opens and saves the files you already have —
.docx,.xlsxand.pptx— and it does not need the Starling desktop to run.What's in it
- Writer. Documents with styles, lists, tables, pictures, links, headers and footers, find and replace, and spelling marked as you type.
- Sheets. Workbooks with formulas that recalculate as you type, number formats, AutoSum, sorting, and row and column editing from the right-click menu.
- Slides. Decks with layouts, shapes, speaker notes, a slide sorter and a slide show — F5 starts it from wherever you are.
- One familiar shape. All three share a ribbon, a File page for Open, Save As, Export and Print, and the usual shortcuts for save, undo, find and bold.
- Unsaved work comes back. A file you had not saved is restored the next time the app starts.
- Its own icons. A flock of starlings, one colour per app — on the menu and in each app's title row.
Install
macOS — Apple silicon:
curl -LO https://github.com/starling-build/starling/releases/download/office-v0.1.0/starling-office-0.1.0-macos-arm64.zip ditto -xk starling-office-0.1.0-macos-arm64.zip /ApplicationsThe app is not notarized, so macOS holds a downloaded copy on first launch: right-click → Open, or allow it under Privacy & Security.
Windows x86_64 — a portable
.zip: starling-office-0.1.0-windows-x86_64.zip. Unzip it into a folder of its own and runOfficeApp.exe. Nothing is installed or registered, so double-clicking a.docxwill not find it; drop the file on the exe instead. It is unsigned, so SmartScreen warns on first run.Ubuntu and Debian x86_64 — the
.deb:curl -LO https://github.com/starling-build/starling/releases/download/office-v0.1.0/starling-office_0.1.0_amd64.deb sudo apt install ./starling-office_0.1.0_amd64.debWriter, Sheets and Slides appear on the applications menu.
Fedora, openSUSE, Arch and others x86_64 — the single-file Flatpak:
curl -LO https://github.com/starling-build/starling/releases/download/office-v0.1.0/starling-office_0.1.0_x86_64.flatpak flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak install --user starling-office_0.1.0_x86_64.flatpak flatpak run build.starling.OfficeIt uses the GNOME 49 runtime, which Flatpak fetches from Flathub on install. The app itself is not on Flathub yet. It can read and write files in your home folder.
On every platform a file given as the argument opens in the right app, and
--sheetsand--slidesstart in those.In the browser — nothing to install. The same three apps run as web pages: writer.starling.build, sheets.starling.build and slides.starling.build, introduced at openoffice.starling.build. There is no web download on this page; the sites are the web release.
Known issues
- macOS: in Slides, opening the font or size box on the Home tab crashes the app about one time in two. Closing the window or ⌘Q with unsaved changes does not ask first (the work is restored on the next launch), and ⌘W does nothing.
- Windows: the slide show plays inside the window, not full screen.
- Linux: closing the window with unsaved changes does not ask first.
Started from a terminal, it prints
libxml2.so.2: no version information availablea few times; it is harmless. On the Starling desktop the window shows two title bars.
How it was tested
Each file here was run on a machine that had never had a toolchain on it.
- **mac
- v0.5.0Starling 0.5.0 — a desktop you can walk into2026-09-20 · 2026-09-20 06:34 UTC
查看更新说明
Starling keeps the familiar 2D desktop and adds a walkable 3D waterfront city. Open the control panel and choose 3D Desktop to change perspectives. The city includes moving boats, traffic and clouds, a clock tower, sunset lighting, and cream, bronze and sage window chrome.
Your apps, in the city
Chrome, Video Player, Files, Terminal and the other desktop apps remain real windows. Switch between them with Alt + Tab, or bring a live preview forward from the rail. Double-click a window's outer title bar to center the view on it. Popups follow their parent window in the scene.
Each display has its own scene and camera. Walking, turning or pointer-driven parallax on one display leaves the other display's view unchanged. Scene rendering shares a backend while keeping each output's camera and render target independent.
Remote desktops
Windows through WSL2 with Ubuntu 26.04 (amd64) is supported. The city runs through RDP display mode. When the RDP viewer leaves, ambient animation stops; connecting again resumes it. The release gate checks idle CPU before and after a connection, visible city motion, and motion after reconnecting.
Website and demo
The website is now a single desktop showcase, styled with the city's palette. It includes real 2D/3D captures, a narrated demo with original music and captions, and Ubuntu and WSL installation instructions. The film walks from an empty desktop to the waterfront, then launches and switches between Chrome, Video Player, Files and Terminal.
Install
The package targets Ubuntu 26.04 LTS, amd64, on a PC or in Windows through WSL2. Graphics have been tested with AMD, Intel, and NVIDIA, plus VirtIO-GPU / virgl in a VM.
Download and install from an Ubuntu terminal:
curl -fLO https://github.com/starling-build/starling/releases/download/v0.5.0/starling_0.5.0_amd64.deb sudo apt install ./starling_0.5.0_amd64.debOn Ubuntu Desktop, log out, select Starling from the login screen's session menu, and sign in. On Server or a minimal local install, first add a login manager with
sudo apt install gdm3.On WSL2, no login manager is needed. After installing inside Ubuntu 26.04, start the desktop:
starling-sessionThen connect from Windows PowerShell or the Run dialog:
mstsc /v:localhost:3390See the installation guide for requirements, WSL setup, upgrades and troubleshooting.
Release branches and validation
Use
release-0.5.0in both the desktop and engine repositories for the matching sources. The package version is0.5.0.Gate results and the tested package checksum are recorded in GATES.md.
Validation completed on the attached package:
- SDK: 4,307 XCTest tests and 822 Swift Testing tests passed.
- Accelerated VM: 34 passed, six skipped.
- Software-rendered VM: 28 passed, 12 skipped; UI shutdown passed.
- WSL: all 15 checks passed, including idle CPU and city animation after reconnect.
- Build, packaging, independent-display regressions and website checks passed.
The gate report lists the skipped checks and their environment limitations. Software rendering has a noticeably slower cold city start: the first frame took 15.3 seconds in the test VM. Hardware acceleration is preferable for exploring the city.
SHA256SUMSverifies the attached Ubuntu package.Release source:
97f3c72. The attached package remains the gate-tested runtime build; subsequent commits update tests, documentation, and the website. - terminal-v0.2.0Starling Terminal 0.2.0 — remote workspaces, and sessions that outlive the connection2026-09-05 · 2026-09-05 22:24 UTC
查看更新说明
Starling Terminal 0.2.0 — remote workspaces, and sessions that outlive the connection
The terminal grows a workspace: split it into panes, stack tabs, and reach any host from one switcher. The sessions live in
termd, so they survive a dropped connection and you reattach where you left off — the shell keeps running while you were gone.What's new
- Splits and panes. Divide a workspace into panes that float with a visible gap, see at a glance which pane is working and which finished while you were looking elsewhere, and move between them from the keyboard.
- Tabs. Stack workspaces as tabs, each on its own surface so a tab looks and behaves like a tab, and reach any of them without the mouse.
- One switcher for every host. Type an
sshcommand straight into the switcher to open a remote workspace, and let a host say how it is reached. A launch is a local shell where you are, not wherever you were last, and the switcher remembers where each client was. - Sessions that belong to nothing.
termdgives a session a real lifecycle: it can end and say so, it asks the kernel where a session is when the shell will not, and two clients can share one workspace with a clear rule for who drives. A dropped connection no longer ends the session — you reattach and it is still there, still running. - A find bar that pastes. Paste into the find bar (and the switcher) and it gives back the match.
- Font zoom. ⌘+ and ⌘− change the type size, and it is remembered.
- Auto-answered prompts. Answer a recurring prompt from a pattern, once per question, with a ten-second grace so a human can step in first.
- A darker ground with the purple cast removed.
- vim's search is no longer underlined. A keyboard-protocol control was being read as a text attribute; it is a control again.
Install
macOS arm64 — macOS 14 or newer:
curl -LO https://github.com/starling-build/starling/releases/download/terminal-v0.2.0/starling-terminal-0.2.0-macos-arm64.zip ditto -xk starling-terminal-0.2.0-macos-arm64.zip /ApplicationsUnpack with
ditto -xk, notunzip: the bundle is ad-hoc signed, and plainunzipmaterialises AppleDouble sidecar files inside it that break the signature. The bundle is not notarized, so macOS holds it on first launch — right-click → Open, or clear the quarantine attribute.Linux x86_64 — a
.debfor Ubuntu/Debian.Windows x86_64 — a portable
.zip; unzip and run.The remote server,
starling-termd. Remote workspaces reach a host by running the session daemon there. It is one statically-linked Linux x86_64 binary with no dependencies —scp starling-termd-0.2.0-linux-x86_64to the server, mark it executable, and the switcher'ssshconnects to it. Nothing to install and no toolchain needed on the far end.Built from branch
release-terminal-0.2.0, engine pinned by the same branch name in starling-engine; the commit and engine are recorded in the archive.sha256:
starling-terminal-0.2.0-macos-arm64.zipb9187d7e5beb762e5cefaa9fbf4e5f6e5c96c4bf38a677b188003327c33ac771starling-terminal_0.2.0_amd64.deb8bd89b6ceabab6104191a12c21574952b5f5aa3000b7088146a51a26007b3fc1starling-terminal-0.2.0-windows-x86_64.zip5f2eebbc1c2d098d1920f892fd875a9646783c6212f99aa53a2cbe94f3492ddastarling-termd-0.2.0-linux-x86_64f4bf3ce21ee70cbbb1d11980b2dc1bde525868fc8d47841313500a80e5ac52ed
- winshell-v0.2.0Starling Windows Shell 0.2.0 — now on Windows 10, and the first outside reports closed2026-09-05 · 2026-09-05 17:37 UTC
查看更新说明
The Windows shell, replaced per user — dock, Start menu, desktop, file manager and notification tray, with Explorer kept alive underneath for packaged apps and file dialogs. No admin rights, no system files touched: one registry value in your own account, and Explorer comes back the moment you ask. 0.2.0 runs on Windows 10 as well as Windows 11.
What changed since 0.1.0.
- Windows 10 (22H2) is supported with the same binary and the same look. The dock's icons start in the corner there, as Windows 10's own do.
- The first outside reports, all closed (#26–#29): the taskbar alignment follows Windows' own setting (change it in Settings and the dock follows); right-clicking the bar itself opens its menu, with Task Manager and Taskbar settings on it; an app launched from the dock comes up in front; a new dock starts from the taskbar pins you already had.
- Minimized windows are parked off screen by the setting that actually decides it, on both Windows, instead of relying on Explorer having done it.
- A profile that never set a wallpaper gets the theme's, instead of black, and the desktop now fills the screen when the display's resolution changes.
- The Start menu's File Explorer opens Starling's own file manager — the same one the dock's Files tile and Win+E open, not Windows' Explorer.
- The desktop stays painted when an Explorer starts beside the shell — including after an Explorer crash.
- Windows 10's Explorer no longer crashes at logon. It was ours: a message telling its taskbar to auto-hide reached it before the taskbar was built. It now waits.
On Windows 10. The dock, the Start menu, and the shell's own file explorer, on a Windows 10 22H2 VM running this build.



Measured on the same PC, filmed side by side (medians of 20, 0.1.0 numbers; nothing on this path changed):
Starling Windows 11 Start menu, key to fully drawn 100 ms 300 ms Right-click menu, complete 67 ms 267 ms Win+E to a usable file list 83 ms 1116 ms Install.
StarlingSetup-0.2.0.exe— double-click, confirm, sign out and back in. It installs to%LOCALAPPDATA%\Programs\Starlingand registers per user; other accounts keep Explorer, and nothing needs administrator rights. The zip is the same payload with the options:Install.ps1takes-Now(switch this session),-NoRegister, and-Destination.Leave.
Uninstall.ps1un-registers, restores Explorer's taskbar, and removes the files (-KeepFilesto keep them). If a Starling process is ever killed rather than closed,WinShellBar.exe --restore-taskbarputs Explorer's taskbar and tray back — and if the shell crash-loops it un-registers itself and hands the session back to Explorer on its own. The full install/uninstall/recovery story:docs/WINDOWS-INSTALL.md.Unsigned, for now. SmartScreen will warn on first run (More info → Run anyway); a machine with Smart App Control enforcing will refuse it. Signing is planned (docs/WINDOWS-SIGNING.md) and 0.2.0 ships before it.
The exact binary in these downloads passed the shell's 28-check gate three times: installed from this very setup exe on a clean Windows 11 VM with no toolchain on it, on a Windows 10 22H2 VM, and on the physical Windows 11 machine. The checks cover the session processes, the work-area reservation, minimize and restore, the file explorer (its context menu, and copy/move/ re
- v0.4.0Starling 0.4.0 — runs on Windows through WSL, picks how it looks, and costs nothing idle2026-08-30 · 2026-08-30 18:00 UTC
查看更新说明
Starling 0.4.0 — runs on Windows through WSL, picks how it looks, and costs nothing idle
Two and a half weeks and 649 commits since 0.3.0. Three things changed that you will notice: the desktop runs on a Windows machine through WSL, it has more than one look, and it costs almost nothing when you leave it alone.
It runs on Windows, through WSL
You do not need a Linux machine to run Starling any more. Install WSL on Windows, install the
.debinside it, and connect with any RDP client — Windows' own Remote Desktop will do. The whole desktop comes up: the shell, the dock or taskbar, the apps, the file manager, the terminal.This works because WSL has no graphics device at all — not an empty one, an absent one — so the desktop takes a different path entirely. The remote screen becomes the display. There is no local window being mirrored to you; the RDP surface is where the desktop is drawn in the first place, in software, and what you connect to is the real thing rather than a copy of it.
It is a supported platform now, not an experiment. It has its own gate that runs on every release, on real WSL on a real Windows machine — eleven checks covering that the package installs on a clean Ubuntu, that the shell starts with no GPU, that a real client connects and is activated, that the pixels it receives are an actual desktop rather than a black rectangle, and that the session leaves the shell alive and back at idle afterwards.
Three things that are true of it and were not before:
- It honours the style you picked. It used to come up macOS whatever you had chosen, because the code that restores your choice only ran on the graphics path. Both styles work over RDP now.
- Idling costs nothing. With the listener up and nobody connected, the desktop uses 0.00% of a core. The listener used to wake five times a second just to notice if it had been asked to stop.
- It behaves the same as the local desktop, because it is the same desktop — same shell, same apps, same package.
The same path serves any headless Linux box: a machine in a cupboard with no monitor runs the full desktop and you connect to it.
The desktop has styles
Settings → Appearance → Desktop Style. Two of them today: the macOS one you already had, and a Windows 11 one. The whole desktop rebuilds into your choice and remembers it across a relogin.
This is a change of shape, not a repaint. In the Windows style there is no menu bar along the top; the taskbar runs the full width of the screen edge and reserves its space, so a maximised window stops above it rather than sliding under. Start is a panel that opens above the bar instead of a full-screen grid. Window buttons move to the right and become the caption trio, with the close button turning Microsoft's red when you point at it. Hovering a taskbar tile shows a live preview of that window — the real thing, updating, not a thumbnail taken when it opened.
The colours are not eyeballed. They come from WinUI's own resource dictionary, by name, the same values our Windows shell uses. The chrome takes a tint from your wallpaper the way Mica does. Text is Selawik, Segoe UI's metric-compatible stand-in, which we can actually ship.
The first-party apps follow the style too — Files, Settings, the terminal, the rest. They were ten separate hand-written palettes of the same shape; now they share one, and it points at whichever style is active.
Adding a third style is one file and one line. There is deliberately no
if style == …anywhere else in the shell.It stops working when you stop working
An idle Starling desktop used to spend 1.40% of a CPU core doing nothing in particular. It now spends 0.02% — seventy times less. On a laptop that is the difference between the desktop being a background cost and not being one.
Everything that used to run on a timer now waits to be told:
- The frame pump asked recording, screen sharing and RDP thirty times
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Starling
starling.build · GitHub releases
Starling is an open software factory building world-class applications and the shared foundation behind them. A fast terminal, an office suite, a desktop, and a Swift SDK are part of the same project. The Linux desktop is where Starling began; it is one of the products we build today.
Our ambition is great software that everyone can use, study, change, and build on. Free to use. Open source. Starling's own code is Apache-2.0; the framework port and engine retain their upstream licenses (see Licensing).
Applications
| Project | What it does | Explore |
|---|---|---|
| Starling Terminal | A fast terminal with tabs, split panes, local shells, SSH connections, and remote workspaces. Persistent sessions can outlive the connection through starling-termd. | Terminal releases · Source · Session daemon |
| Starling Office | Writer, Slides, and Sheets: documents, presentations, and spreadsheets. The browser apps share the Swift implementation with native builds. | Office presentation · Writer · Slides · Sheets · Build guide |
| Starling Desktop | A native desktop with its own Wayland compositor and X11 server, built-in tools, floating and tiling windows, and dedicated agent workspaces. Familiar 2D and a living 3D city are two views of the same desktop. | Desktop presentation · Install · User Guide |
| Starling SDK | Flutter's framework ported to Swift: widgets, rendering, painting, gestures, animation, and platform hosts, without a Dart VM. The building blocks behind our applications are open, too. | SDK guide · Source |
The applications have different platform support and levels of maturity. Terminal has macOS, Windows, and Linux builds; Office can be tried directly in the browser; Desktop targets Ubuntu and Windows through WSL2. Follow each product's guide for its supported setup. These are actively developed projects, and features and interfaces continue to evolve.
A shared foundation
Starling applications are written in Swift against the SDK in this repository. Native hosts use the Flutter engine's C core through starling-engine. Browser builds use Swift WebAssembly and the skwasm renderer. Applications can run in their own host windows or in the Starling desktop; they are not limited to a Linux desktop session.
The desktop brings the same approach to the whole workspace: its dock, menus, and windows are widgets in one tree. That architecture supports everyday app use, dedicated agent workspaces, and new views such as the 3D city.
Repository map
| Path | Contents |
|---|---|
apps/ | First-party applications, including Terminal and Office, plus desktop tools such as Files and Settings. |
sdk/ | The Swift framework port, UI libraries, platform bindings, and examples; included in this repository. |
shell/ | Desktop shell, compositor, window management, dock, spaces, portals, and desktop views. |
termd/ | The terminal-session daemon for sessions that survive client disconnects. |
host/ | Windowed application-host plumbing. |
build/ | Build, packaging, browser, and platform tooling. |
ui/ | The Starling landing page and the Office and Desktop slide presentations. |
docs/ | Setup and user guides, engineering notes, and project plans. |
macos-compat/ | Research into running unmodified Mach-O macOS binaries on Linux. |
engine | A local symlink to a sibling starling-engine checkout, created by bootstrap.sh. |
Development
Start with the SDK guide for the shared framework or the Office build guide for native and browser builds. Desktop setup is documented in docs/BUILDING.md; its common commands follow. Product-specific instructions take precedence over these Linux desktop commands.
Desktop development
Setup
Building both halves on a machine that has neither — toolchains, gclient,
apt packages, timings, and the Ubuntu 26.04 workarounds — is
docs/BUILDING.md. The short version follows.
Clone starling-engine next to this repo (a built one — see its README), then:
./bootstrap.sh # creates the `engine` symlink -> ../starling-engine/engine
Every engine reference (bridge headers, libflutter_engine.so,
libflutter_linux_drm.so, icudtl.dat) goes through that symlink; point it at
any engine checkout with ./bootstrap.sh <path>.
Build
cd shell && swift build -c release # the shell (+ sdk as dependency)
cd apps/TerminalApp && swift build -c release # each app is its own package
Engine C++ changes rebuild in the engine repo (ninja -C engine/src/out/...);
the shell needs no relink — it binds only the engine's stable C API.
Run
build/run-desktop.sh
Stages everything into one self-contained tree and runs the desktop from it —
the same layout the package installs, so the dev loop exercises the shipping
configuration. Needs the GPU free (no display manager or compositor). Uses the
distro's Mesa; takes the unprivileged libseat path when a seat manager is
reachable, else sudo. --no-stage reuses the existing .stage/.
Drive it and take screenshots with sudo build/shell-drive.py "dock settings" click "shot /tmp/x.png" (run with no args for the action list).
Do not run straight out of .build: child apps are spawned with
LD_LIBRARY_PATH scrubbed and resolve libraries through their own $ORIGIN,
so they only work when the libraries sit next to them — which is what staging
does.
Package
build/stage.sh [outdir] # the assembled tree (defaults to .stage/)
build/package-desktop.sh [outdir] # -> starling-desktop_<ver>_amd64.deb
stage.sh is the single definition of the layout; package-desktop.sh wraps
its output with control metadata, the polkit policy, and the session entry.
Prereqs: shell + apps built (swift build -c release), engine host_release
built. The deb installs under /usr/lib/starling + /usr/share/starling and
adds a "Starling" session to the login screen.
Packages are maintained as Starling <[email protected]> — the same project
identity every commit here uses. Use it rather than a personal address for the
Maintainer: field and anywhere else the project needs a contact.
Provenance
This repo starts from a fresh snapshot, with no history before it. The code was
developed in two private repos and re-imported here: the framework port and
shell came from a working branch (flutter_swift/ → sdk/,
apps/DesktopShellApp/ → shell/, apps/* → apps/), the packaging tools
from a second one. Neither is public, so the pre-import history is not
reachable — everything since is in this repo's log.
The framework port lives in this repo at sdk/ (it spent a stretch as the
separate starling-sdk repo; that history came back with it as a subtree).
It is a derivative of Flutter and keeps Flutter's licence. The C++ half
lives in
starling-engine, a fork of
flutter/flutter whose starling branch carries the Starling delta on top of
real upstream history.
Credits
Starling is a small amount of new code sitting on a great deal of other people's work. Named here with thanks — the legally required attributions are in NOTICE, but these deserve saying out loud:
- Flutter — the engine Starling runs on, and the
framework design
sdk/is a port of. The embedder API is a genuinely well-drawn seam: it let a desktop shell supply its own surface, input and vsync without forking the renderer. Skia and Impeller do the drawing; Dart's tooling built the assets. - Wayland and wayland-protocols — the
compositor implements these. Kristian Høgsberg, Collabora, Intel, Red Hat,
Samsung, Purism, Simon Ser, Jonas Ådahl, Kenny Levinsen and others wrote the
protocol definitions in
shell/Sources/WaylandServer/*-protocol.c. - Mesa — EGL, GBM and the gallium drivers; every frame Starling puts on screen goes through it.
- libinput, libseat/seatd, libxkbcommon, libdrm, libevdev — Peter Hutterer,
Kenny Levinsen and the freedesktop.org maintainers.
libseatin particular is why the desktop runs unprivileged instead of as root. - Swift — the language, and the corelibs Foundation, Dispatch and Observation the whole tree is written against.
- FreeType, HarfBuzz and ICU — text rendering and internationalisation, bundled inside the engine.
- PDFium — PDF rendering in the Image Viewer.
- Roboto Mono and Cupertino Icons for the typefaces and glyphs, and Daniel Lloyd Blunk-Fernández for the Golden Gate photograph the desktop ships as its wallpaper, via Unsplash.
- Debian and Ubuntu — the packaging conventions this ships under, and the distribution it is developed and tested on.
Starling's own contribution is the DRM/KMS embedder, the Wayland compositor, the Swift port of the framework, and the shell and apps built on top. None of it would exist without the above.
Licensing
Starling's own code is Apache-2.0 (LICENSE). Two subtrees keep their upstream license instead, because they are ports and forks rather than original work — matching upstream keeps rebasing and contributing back possible:
| Path | License |
|---|---|
shell/, apps/, build/, docs/, host/ | Apache-2.0 — © the Starling authors |
sdk/ — the Flutter framework port | BSD-3-Clause — © the Flutter Authors |
shell/Sources/WaylandServer/*-protocol.{c,h} | MIT — generated from wayland-protocols XML; the upstream copyright sits in each file |
sibling starling-engine | BSD-3-Clause — a Flutter engine fork |
NOTICE lists the third-party components the binaries redistribute —
the Swift runtime, the Flutter engine and its bundled libraries, fonts, and the
wallpaper. The .deb ships it as /usr/share/doc/starling-desktop/copyright.
No third-party application artwork is shipped: those logos are their owners'
trademarks. When such an app is installed, the launcher reads its icon from the
host at runtime via the freedesktop lookup, recorded into the app registry
at install time (registry/);
otherwise the shell draws its own generic glyph.
Apache-2.0 is not GPLv2-compatible, which costs nothing today: the shipped desktop links no GPL code at all (MIT/BSD, dynamically-linked LGPL for glibc and sd-bus, and the GCC runtime under its Runtime Library Exception).