os
Other1 providersOS-style desktop shell for togo — login/desktop/dock/windows + an app registry any plugin can join
togo install togo-framework/osInstall
togo install togo-framework/osos — an OS-style desktop shell for togo apps
Turns a togo app's web frontend into a macOS-style desktop environment: a login/lock screen, a wallpapered desktop with draggable icons, a dock, draggable / resizable / snappable windows, a Launchpad app directory, Spotlight search, a notification center, and a Settings app with live theming. Any togo plugin can register itself as a launchable OS app (icon, color, category, window spec).
The shell is fully responsive — on phones windows go full-screen and the UI drills in iOS-style.
Register an app
Each OS-app plugin calls os.RegisterApp from its init(), alongside its normal
provider registration:
func init() {
os.RegisterApp(os.AppMeta{
Slug: "notes",
Name: "Notes",
Icon: "sticky-note", // lucide icon (kebab-case)
Color: "#f59e0b",
Category: "productivity",
Window: os.WindowSpec{Width: 720, Height: 520, Resizable: true},
})
}
Scaffold a full app bundle (UI + backend + MCP + Claude agent + this metadata)
with togo make:os-app <name>, or start a whole project on the desktop shell
with togo new <app> --frontend os.
REST API
Method | Path | Purpose |
|---|---|---|
| GET | /api/os/session | Current user's DesktopPrefs (theme, wallpaper, dock pins, icon positions, …) |
| PUT | /api/os/session | Persist DesktopPrefs |
| GET | /api/os/apps | Registered apps (icon/color/category/window + enabled state) |
| GET | /api/os/apps/{slug} | One app's metadata |
Desktop preferences are stored through the settings
plugin (scope os:desktop, key = user id); enabled state is joined from
plugin-host when present. The
plugin registers at PriorityLate+15 and reads the current user generically, so
it works with any auth driver.
MIT
<div align="center"> <h3>Premium sponsors</h3> <p> <a href="https://id8media.com"><strong>ID8 Media</strong></a> · <a href="https://one-studio.co"><strong>One Studio</strong></a> </p> <p><sub>Support togo — <a href="https://github.com/sponsors/fadymondy">become a sponsor</a>.</sub></p> </div>