tish-desktop
The cross-device app runtime for Tish: a Tish shell and a capability broker driving Tauri webviews, with one CLI to scaffold, run, sign and ship desktop apps
- BPM
- 195
- GRADE
- SS
- LEVEL
- 8
- RELEASES
- 11
- YEARS
- 2026–2026
- GitHub
- npm
- tishlang/tish-desktop
- npm @tishlang/tish-desktop-shared
- npm @tishlang/tish-desktop-api
- npm @tishlang/tish-app-api
- npm @tishlang/tish-desktop-ui-theme
- npm @tishlang/tish-desktop
- cargo tishlang_broker
- cargo tishlang_desktop
- cargo tishlang_app
tish-desktop is how a Tish program becomes a desktop app. The app's logic runs as a compiled Tish shell; the interface runs in Tauri webviews; and between them sits BrokerCore, a capability broker the UI talks to through invoke(cmd, args), listen(event) and shared state.*. The same protocol is meant to carry a single codebase across web, desktop and mobile, with Apple-native surfaces handled by its sibling, tish-apple.
The broker handles the desktop side: dock, tray, menus, notifications, titlebar styles and window geometry; clipboard, global shortcuts, native dialogs and folder pickers; stored preferences, autostart and an auto-updater; keyring secrets and OAuth2 PKCE sign-in with a deep-link callback; file drop, sleep blocking, and allowlisted shell.exec, http.fetch and printing. Anything outside the allowlist isn't reachable from the UI at all, the same secure-by-default approach Tish itself takes.
There is one CLI, mode, that covers the lifecycle: init scaffolds an app, dev runs the webview UI through Vite next to the compiled Tish/Tauri shell, build produces the binaries, and distribute handles release artifacts, macOS code signing and notarization, updater manifests and the GitHub release. doctor checks a machine for a given platform and surface. Lattish is the default UI layer, but it is optional — --ui none gives you the shell and a webview with plain DOM.
The examples cover the range: a basic ping-and-tick app with a second window, a sandboxed file browser, a full native-chrome demo, a bring-your-own-UI app with no framework, and a hybrid app that runs dual webviews and switches a screen between a native and a webview implementation at runtime. It publishes as @tishlang/tish-desktop on npm and as the tishlang_desktop, tishlang_app and tishlang_broker crates.
What runs on it
Dune IDE is the big one. Its desktop app is a tish-desktop host: the IDE's shell is written in Tish on tishlang_desktop, porting what used to be a hand-written Tauri backend into Tish command families over the broker, with the Tish workbench as the interface. The same build pulls tishlang_desktop straight from crates.io, so it also shows the published packages working without sibling checkouts.
tish-apple, the native macOS and iOS hosts for Tish JSX, builds on tish-desktop's capability broker (tishlang_broker), so a Tish app talks to the same invoke, listen and state.* protocol whether it is in a desktop webview or a native Apple view.
before this
- tish2026the language its apps are written in; the runtime ships Tish to the desktop