Releases: kwhorne/elyra-framework
Release list
Elyra Framework 0.3.1
A feature-rich point release: Elyra gains a built-in AI SDK plus the last of the Electron-parity desktop features.
Added
AI SDK (ai feature)
A new Laravel-inspired elyra-ai crate, re-exported as elyra::ai. Keys stay in the Rust backend.
- Agents — anonymous (
ai.chat().instructions(…).prompt(…)) and named (impl Agent+ai.prompt(&agent, …)). - Tools —
Tooltrait with an automatic tool-use loop across both providers. - Sub-agents — an
Agentused as a tool (sub_agent/AgentTool); delegates run in isolation. - Structured output —
prompt_as::<T>()viaserde+schemars. - Streaming —
stream()yieldsStreamChunks (SSE), ideal for piping to the event bus. - Images —
ai.image(prompt).landscape().generate()(OpenAIgpt-image-1). - Embeddings —
ai.embeddings([...]).generate(). - Vector store (RAG) — in-memory
VectorStore+cosine_similarity, portable across the sqlxAnydriver. AiProviderbinds an env-configuredAiclient into the container.
Default provider Anthropic (claude-sonnet-5); images gpt-image-1; embeddings text-embedding-3-small. See docs/ai.md.
Single-instance & deep-linking
App::single_instance()— later launches focus the running window and forward their command line onelyra:second-instance, then exit (portable loopback rendezvous + handshake).App::deep_link("myapp")— launch URL viadeepLink.initial(), later URLs onelyra:deep-link(macOS open-URL event; Windows/Linux scheme registration). See docs/single-instance.md.
Notes
Everything is compiled, clippy-clean, and tested (21 suites; SQLite locally, MySQL/Postgres in CI, runtime typechecked with TypeScript 7). AI live calls are exercised only with ELYRA_AI_LIVE=1 and keys — they were not run in CI or during development (no keys present), so the live provider path is documented as unverified. RAG ranks in-process by design (the Any driver has no pgvector).
Full changelog: https://github.com/kwhorne/elyra-framework/blob/main/CHANGELOG.md · MIT licensed.
Elyra Framework 0.3.0
A big step toward being a Rust + Svelte alternative to Electron. On top of the core (typed IPC, events, database/models, codegen, About + auto-update), 0.3.0 adds the native desktop APIs apps actually need.
Added
System integration (system)
Native file dialogs (dialog.open/save), open in OS (shell.openExternal), clipboard (clipboard.readText/writeText), notifications (notify), and standard paths.
UI components (@elyra/runtime)
Themed, dependency-free alert / confirm / prompt dialogs, toast() notifications, a ⌘K command palette (registerCommands), and contextMenu().
Windows
Frontend window control (appWindow: minimize/maximize/fullscreen/close/focus/…) with live state, native file drop (onFileDrop), and opt-in window-state persistence (App::persist_window_state).
Native app menu
App::menu(…) adds custom submenus (with accelerators) that emit elyra:menu (onMenu). Rendered on macOS.
Global shortcuts (shortcuts)
App::global_shortcut("CmdOrCtrl+Shift+P") → onShortcut.
Settings store
A persistent key-value store (get/set/delete/all/clear), also Store in the container.
Autostart (autostart)
Launch at login: autostart.enable() / disable() / isEnabled().
Sidecar processes (sidecar)
Spawn + stream child processes: sidecar.spawn/write/kill with stdout/stderr/exit on onSidecar.
Notes
Everything is compiled, clippy-clean, and tested (SQLite locally; MySQL/Postgres in CI; runtime typechecked with TypeScript 7). GUI/OS integrations are launch-smoked; visual or side-effecting steps are documented as unverified. Native menu bars on Windows/Linux, single-instance, and deep-linking are planned next.
Full changelog: https://github.com/kwhorne/elyra-framework/blob/main/CHANGELOG.md · MIT licensed.
Elyra Framework 0.2.0
Second release of Elyra Framework. Builds on 0.1.0 with codegen fidelity, richer models, real cross-database testing, and a full dependency refresh.
Added
- Models — relation auto-hydration. Declare a relation on a field (
#[model(has_many(Book, fk = "author_id"))] books: Vec<Book>) and a generatedwith_<field>batch hydrator fills it in one query — no more joining aHashMapby hand. Works forhas_many(Vec<T>) andhas_one/belongs_to(Option<T>;belongs_totargets must beClone). - Models — non-
i64primary keys. A single-column key may now be any type (e.g.String), marked#[model(id)]; app-supplied, included in theINSERT, andfindtakes that key type. Thei64autoincrement path is unchanged. Composite keys remain unsupported. - Models — column-aware
belongs_to. Owners are looked up against the related model's actual PK column (<T>::PK) and the child FK is read by column name, so relations work when the owner's PK column is renamed. - Codegen — serde attributes. Types export through
specta-serde:rename/rename_all, tagged & untagged enums (as discriminated unions),flatten(as intersections), andskipare now reflected in the generated TypeScript. Elyra's numeric policy (i64/floats →number) still applies on top. - Database tests in CI. Model CRUD runs against real MySQL 8 and Postgres 16 service containers, covering per-driver placeholders (
?vs$n) and key retrieval (last_insert_idvsRETURNING). Opt-in locally viaELYRA_TEST_MYSQL_URL/ELYRA_TEST_POSTGRES_URL.
Changed
- Updater:
UpdaterConfig::auto_checknow defaults tofalse— the startup check (and its toast) is opt-in via.auto_check(true). - Dependencies: refreshed to latest —
sqlx0.9 (dynamic SQL wrapped inAssertSqlSafe),ureq3,ed25519-dalek3,tray-icon0.24 +muda0.19. - Tooling: CI typechecks the runtime with TypeScript 7 on Node 24;
@msgpack/msgpackbumped to^3.1.3. - Docs: clarified that code signing, notarization, and binary distribution are the application's responsibility, not the framework's.
Full changelog: https://github.com/kwhorne/elyra-framework/blob/main/CHANGELOG.md · Licensed under MIT.
Elyra Framework 0.1.0
First public release of Elyra Framework — 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.
Highlights
- Binary IPC — MessagePack over an
elyra://localhostcustom protocol; no JSON in the hot path. #[command] async fndispatched through a middleware pipeline, with a container and providers.EventBus+channel()— batched Rust→frontend push over a long-poll; the UI thread never blocks.- Typed bridge —
rata codegenturns specta types into TypeScript + a typedapi.*facade. - Windows, tray, updater — multi-window, system tray, and an ed25519-verified updater.
- Built-in UI components — a themed About dialog (
App::about) and an auto-update toast (App::updater), each wired from one builder call. - Data — one
Databaseover SQLite / MySQL / Postgres,rata migrate, and#[derive(Model)]Active Record with a query builder and relations. - Ratatosk (
rata) —new,dev,codegen,build,bundle,migrate.
Quick start
rata new myapp
cd myapp
(cd app && npm install && npm run build)
rata codegen
cargo runSee the documentation and the full changelog.
Verification
Compiled, clippy-clean, and tested (SQLite for the database layer). GUI/OS integrations are launch-smoked; visual or side-effecting steps (bundling, notarization, live self-update) are documented as unverified.
Licensed under MIT.