Sola
A desktop environment for Linux on Wayland, written in Rust. Sola runs the session, the shell, and its own applications, all drawn with one toolkit and one theme. The compositor is rivulet, Oath's port of River.
Design
One toolkit for the whole desktop. The shell and every first-party application are Iced programs built on sola-kit, which supplies the buttons, fields, sidebars, menus, type roles, and colors. The theme travels on Sola's bus: change a color or a font and every running application redraws with it, without a restart.
Separate processes, each restartable. Oath's PID 1 runs the event bus, the request/reply host, the window manager, the shell, and the session manager as services. When one of them fails it is started again, and the rest of the session carries on. Applications are separate processes too, and they reconnect when the bus or the window manager comes back.
Native, not web. The shell and the applications draw with Iced on the GPU. There is no HTML in the desktop's own interface. A web engine (Chromium, through CEF) runs only where web pages are the content: the browser, the web apps it hosts, and Design's artboards.
Scriptable, by people and by agents.
Each application registers its methods with the request/reply host, and
solactl calls them from a shell.
solactl mcp offers every live method to an AI agent as an MCP
tool; the list changes as applications start and quit.
solactl compositor windows # every window, by application
solactl compositor screenshot # the screen, as PNG
solactl browser tabs # id, URL, and title of each page
solactl open https://example.com # in Sola's browser
claude mcp add sola -- solactl mcp # every live method as an MCP tool
Applications
Each is its own process, with its menus in its windows' titlebars. The shell is stable in daily use; the applications are early, and each is incomplete. docs/capabilities.md lists what each can do and what it lacks.
- Shell
- The top row (system status, missed notifications, and an island for each agent that asks or finishes), the bar of windows on the left with the desktop workspaces at its head (Super+1…9), the launcher (Super+Space), and window zones.
- Terminal
- A terminal on Alacritty's grid: a window per tab, split panes, each in tmux.
- Projects
- A window per project, its tabs (the checkout and its git worktrees) along the top, each with terminal panes. A tab shows whether the coding agent in it (Claude Code, Codex, Grok) is working, waiting, or done.
- Browser
- Chromium's engine under Sola's own chrome: a window per page, a profile per workspace, a Bitwarden vault, downloads, and developer tools.
- IMAP and SMTP for several accounts, with drafts and attachments.
- Calendar
- Month, week, and day views of local, Google, and iCloud calendars, with reminders. Signing in to Google lets it show and edit your events from your own computer; nothing passes through a server of ours.
- Web apps
- A website the browser runs as an application of its own, wrapped from one of its pages: a launcher entry, its own windows and menus.
- Settings
- Appearance (light or dark for web pages, the background picture and the colors taken from it, every picture set before with the look it was worn with, the desk's opacity, the idle fade), the login (a password, auto-login), applications and web apps in the launcher, and mail and calendar accounts.
- Paint
- The default image viewer and editor, a window per image; it sets the background picture.
- Preview
- A quick viewer for screenshots and images.
- Design
- HTML artboards on a canvas, written and edited by AI agents: a window per project.
- Oath
- Oath's packages: turn one on or off and apply, or undo the last change.
- Monitor
- A live view of bus traffic and of the methods each application offers.
- Scope
- A pixel loupe: the screen under the pointer, magnified.
- KVM
- One keyboard and mouse across two machines, with a shared clipboard. Paired machines seal every packet with a shared key and drop what they did not seal.
Architecture
A session is these processes, plus one for each application that is open. The manual covers each in full: sockets, wire formats, topics, restart rules, and the command line.
PID 1- Oath's init. Runs rivulet and each component below as a service of the desk user, and restarts one that fails.
sola-bus- Event bus on a Unix socket. Fans facts out to every client: focus, windows, the theme, application menus.
sola-call- Request/reply host. Applications register methods; solactl and agents call them.
sola-river- Window manager for River's protocol (rivulet on Oath), and its bridge to the bus.
sola-session- Launches applications and tracks them.
sola-shell- The top row, the bar of windows, the launcher, and notifications, in one Iced program.
sola-kit- The shared Iced toolkit and the theme every application follows.
Status
Sola is pre-release. It runs every day on
Oath, which carries it as packages
built from this repository's master branch: pkg:sola
for the desk, and one package for each application. Not there yet:
- Releases of its own. x86-64 is the only platform.
- Other systems. Sola is built and packaged for Oath.
- Complete applications. Each has gaps, and the capability list names them.
The work under way is in CURRENT.md, and what each part can do in docs/capabilities.md.
Building
Sola builds on an Oath machine with the desk profile, on x86-64 with an AMD
GPU. Oath supplies the compositor, the browser
engine (pkg:cef), and the graphics stack as packages; Sola's
packages run as Oath services, and oath apply restarts them
when a package moves. From a clone:
git clone https://github.com/moonlight-pm/Sola
cd Sola
cargo make oath stage # build the packages under target/oath
cargo make oath apply # stage, store, pin, and apply them
oath undo goes back a generation. The
manual covers the processes of a session,
the bus, the call plane, and the command line.