An open API service indexing awesome lists of open source software.

https://github.com/kwhorne/elyra-framework

Elyra Framework — a Rust + Svelte 5 framework for fast, compiled, binary desktop apps. Laravel-like ergonomics: container, providers, middleware, and a typed MessagePack IPC bridge.
https://github.com/kwhorne/elyra-framework

desktop desktop-app framework gui laravel-inspired messagepack rust svelte tao tauri-alternative webview wry

Last synced: 3 days ago
JSON representation

Elyra Framework — a Rust + Svelte 5 framework for fast, compiled, binary desktop apps. Laravel-like ergonomics: container, providers, middleware, and a typed MessagePack IPC bridge.

Awesome Lists containing this project

README

          

# Elyra Framework

[![CI](https://github.com/kwhorne/elyra-framework/actions/workflows/ci.yml/badge.svg)](https://github.com/kwhorne/elyra-framework/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](#license)

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](https://elyracode.com/framework)**
> (source in [`docs/`](docs/README.md)). This page is just a landing page.

## Highlights

- **Binary IPC** — MessagePack over an `elyra://localhost` custom protocol; no
JSON in the hot path. ([wire format](docs/wire-format.md))
- **`#[command] async fn`** dispatched through a [middleware](docs/middleware.md)
pipeline, with a [container](docs/container-and-providers.md) and
[providers](docs/container-and-providers.md).
- **`EventBus` + `channel()`** — Rust→frontend push, batched per flush over a
long-poll; the UI thread never blocks. ([events](docs/events.md))
- **Typed bridge** — `rata codegen` turns specta types into TS + a typed
`api.*` facade. ([codegen](docs/codegen.md))
- **Windows, tray, updater** — [multi-window](docs/windows.md),
[system tray](docs/tray.md), and an [ed25519-verified updater](docs/updater.md).
- **Built-in UI components** — a themed [About dialog](docs/about.md),
[auto-update toast](docs/updater.md), and [dialogs / toasts / ⌘K palette /
context menu](docs/components.md).
- **Desktop APIs** — native [dialogs, shell-open, clipboard, notifications](docs/system.md),
[window control + file drop](docs/windows.md), [global shortcuts](docs/shortcuts.md),
[app menu](docs/menu.md), a [settings store](docs/store.md),
[autostart](docs/autostart.md), and [sidecar processes](docs/sidecar.md).
- **Data** — one [`Database`](docs/database.md) over SQLite/MySQL/Postgres,
[`rata migrate`](docs/migrations.md), and [`#[derive(Model)]`](docs/models.md)
Active Record with a query builder and relations.
- **AI SDK** — a Laravel-inspired [`elyra::ai`](docs/ai.md): agents, tools,
structured output, images, and embeddings over Anthropic + OpenAI (`ai` feature).
- **Shared facades** — [`Cache`](docs/cache.md), [`Storage`](docs/storage.md), and
[`Queue`](docs/queue.md) with the same surface as the Askr/Laravel side, over
local backends — one ecosystem, two worlds.

## Layout

```
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
```

## Quick start

```bash
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 # launch
```

Or run the bundled demo from this repo — no npm needed (serves a built-in
fallback page):

```bash
cargo run -p elyra-example
```

## A command, end to end

```rust
use 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::())
.run()
}
```

```ts
import { api } from "./bindings"; // generated by `rata codegen`
const greeting = await api.greet("World"); // (name: string) => Promise
```

## Cargo features (`elyra` crate)

| 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 |

```toml
elyra = { version = "0.5", features = ["database", "tray", "updater", "system", "shortcuts"] }
```

## Status

**v0.5.1** — a big step toward an Electron alternative, with a built-in AI SDK
and shared `Cache` / `Storage` / `Queue` facades over the backend-agnostic
[`substrate-core`](docs/substrate.md) contract. 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**,
**sidecar** processes, **single-instance** + **deep-linking**, and a
Laravel-inspired **[AI SDK](docs/ai.md)** (agents, tools, sub-agents, structured
output, streaming, provider tools, images, audio, embeddings, RAG, plus
retries / failover / caching), plus ergonomic [`Cache`](docs/cache.md) /
[`Storage`](docs/storage.md) / [`Queue`](docs/queue.md) facades that mirror the
Askr/Laravel side. See the [changelog](CHANGELOG.md) and the
[roadmap](docs/roadmap.md).

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).

## Learn more

Full documentation lives at **[elyracode.com/framework](https://elyracode.com/framework)**.
Start with [getting started](docs/getting-started.md) and the
[architecture](docs/architecture.md) overview, then dive into any topic from the
[documentation index](docs/README.md).

## License

Licensed under the [MIT License](LICENSE).

See [CONTRIBUTING.md](CONTRIBUTING.md) and the
[Code of Conduct](CODE_OF_CONDUCT.md) to get involved.