A Rust + Svelte 5 framework for hyper-responsive desktop apps. Laravel's ergonomics — container, providers, middleware, a typed bridge — but compiled, binary, and without runtime overhead.
The CLI is Ratatosk (rata): the squirrel that runs messages up and down
Yggdrasil, between the Rust root and the Svelte crown.
📚 Documentation: elyracode.com/framework (source in
docs/). This page is just a landing page.
- Binary IPC — MessagePack over an
elyra://localhostcustom protocol; no JSON in the hot path. (wire format) #[command] async fndispatched through a middleware pipeline, with a container and providers.EventBus+channel()— Rust→frontend push, batched per flush over a long-poll; the UI thread never blocks. (events)- Typed bridge —
rata codegenturns specta types into TS + a typedapi.*facade. (codegen) - Windows, tray, updater — multi-window, system tray, and an ed25519-verified updater.
- Built-in UI components — a themed About dialog, auto-update toast, and dialogs / toasts / ⌘K palette / context menu.
- Desktop APIs — native dialogs, shell-open, clipboard, notifications, window control + file drop, global shortcuts, app menu, a settings store, autostart, and sidecar processes.
- Data — one
Databaseover SQLite/MySQL/Postgres,rata migrate, and#[derive(Model)]Active Record with a query builder and relations. - AI SDK — a Laravel-inspired
elyra::ai: agents, tools, structured output, images, and embeddings over Anthropic + OpenAI (aifeature).
elyra-framework/
├── framework/ # elyra — App, Container/Ctx, Command, events, shell (tao+wry)
├── macros/ # elyra-macros — #[command] and #[derive(Model)]
├── database/ # elyra-db — Database, migrations, models (GUI-free)
├── ratatosk/ # ratatosk — the `rata` CLI
├── runtime/ # @elyra/runtime — invoke(), channel(), generated api.*
└── example/ # elyra-example — the demo app / DX benchmark
rata new myapp # scaffold (see docs/getting-started.md)
cd myapp
(cd app && npm install && npm run build)
rata codegen # generate typed bindings
cargo run # launchOr run the bundled demo from this repo — no npm needed (serves a built-in fallback page):
cargo run -p elyra-exampleuse elyra::{command, commands, App, Ctx};
#[command]
async fn greet(_ctx: Ctx, name: String) -> String {
format!("Hello, {name}!")
}
fn main() -> elyra::Result<()> {
App::new()
.commands(commands![greet])
.assets(elyra::asset_resolver::<Assets>())
.run()
}import { api } from "./bindings"; // generated by `rata codegen`
const greeting = await api.greet("World"); // (name: string) => Promise<string>| Feature | Enables |
|---|---|
database |
Database, #[derive(Model)], migrations, App::database |
tray |
App::tray, the system tray |
updater |
the updater module (ed25519) |
system |
native dialogs, shell-open, clipboard, notifications, paths |
shortcuts |
OS-level global keyboard shortcuts |
elyra = { version = "0.3", features = ["database", "tray", "updater", "system", "shortcuts"] }v0.3.0 — a big step toward an Electron alternative. On top of the core (commands, events, DB/models, codegen, About + auto-update), 0.3 adds native system integration (dialogs, shell-open, clipboard, notifications, paths), UI components (dialogs, toasts, ⌘K command palette, context menu), window control + file drop + state persistence, global shortcuts, a native app menu, a settings store, autostart, and sidecar processes. See the changelog and the roadmap.
Each milestone is compiled, clippy-clean, and tested (SQLite for the DB layer; GUI/OS integrations are launch-smoked, with visual / side-effecting steps called out as unverified).
Full documentation lives at elyracode.com/framework. Start with getting started and the architecture overview, then dive into any topic from the documentation index.
Licensed under the MIT License.
See CONTRIBUTING.md and the Code of Conduct to get involved.