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). - Shared facades —
Cache,Storage, andQueuewith the same surface as the Askr/Laravel side, over local backends — one ecosystem, two worlds. - Hardened IPC — a per-run token, origin-scoped CORS, a capability model with deny-by-default sidecar spawn, a default CSP, and bounded request bodies.
- Laravel ergonomics —
Log,Config,Secrets,TestApp, a schema builder + seeders, and Eloquent-style pagination / aggregates / joins / soft deletes / transactions.
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 |
secrets |
Secrets — tokens in the OS keychain |
elyra = { version = "0.5.7", features = ["database", "tray", "updater", "system", "shortcuts", "secrets"] }v0.5.7 — a hardening + Laravel-parity release on top of an already broad feature set.
The IPC surface is now gated: a random per-run token, CORS
only for the dev origin, a capability model where destructive
routes are opt-in, a default CSP, deny-by-default sidecar spawn, a policy for
shell.open, and bounded + depth-checked request bodies. The event bus fans out
per window (multi-window apps no longer lose events), a panicking command answers
with an error instead of hanging the caller, and the settings store writes
atomically.
The Laravel-shaped gaps are filled: Log,
Config, Secrets over the OS
keychain, TestApp, a schema builder with
Rust migrations + seeders, and Eloquent-style pagination / aggregates / joins /
soft deletes / transactions. Plus queue retries + a failed-job list, typed event
channels in codegen, asset ETag/Range caching, a
cross-platform app menu, and .deb / portable bundling.
Earlier releases brought the core (commands, events, DB/models, codegen, About +
auto-update), 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,
sidecar processes, single-instance + deep-linking, a Laravel-inspired
AI SDK (agents, tools, sub-agents, structured output, streaming,
provider tools, images, audio, embeddings, RAG, plus retries / failover /
caching), and the shared Cache / Storage /
Queue facades over the backend-agnostic
substrate-core contract. See the
changelog and the roadmap.
Every milestone is compiled, clippy-clean and tested — 250 Rust tests and 9 TypeScript tests, with the IPC surface covered end to end and CI running across macOS, Linux and Windows. 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.