2026-07-24 09:00:12 +02:00
2026-04-05 12:47:58 +02:00
2026-07-18 18:12:41 +02:00
2026-07-22 18:49:27 +02:00
2026-07-22 18:49:27 +02:00
2026-07-24 09:00:12 +02:00

RuDS

RuDS is a native Rust blogging desktop application and the successor to bDS2. It manages local projects from authoring through preview, static-site generation, integrity checks, and publishing while preserving the existing bDS filesystem and SQLite formats.

The desktop is a single-window application: closing its window persists UI state and exits RuDS. Background notifications remain unobtrusive and preserve keyboard focus while editing.

The project is under active development. Core blogging workflows are broadly available; remaining core work and optional extensions are tracked separately.

Available Features

  • Native Iced desktop workspace with localized menus, tabs, anchored editor popovers, automatically paged post/media sidebars with locale-aware post dates, calendar months, and relative-dated entity lists, row deletion, dialogs, tasks, embedded Wry previews, a live Pico CSS theme editor, and per-project restart restoration of the active activity, shell visibility, and open editor tabs.
  • Post and translation authoring with change-aware draft/published/archive lifecycle, file-backed change discard, canonical draft reopening after manual translation edits, non-disruptive automatic translation, desktop archive/unarchive actions, in-place published-frontmatter updates, metadata, tags, categories, live link/backlink graphs, media, and batch gallery-image import.
  • Media import including HEIC/HEIF decoding, q80 WebP thumbnails (plus q85 AI JPEGs), metadata translations, filters, validation, post assignment, and sequential drag-and-drop insertion into post editors.
  • WordPress WXR migration with saved analyses, HTML-to-Markdown and shortcode conversion, conflict/taxonomy review, recoverable 500-item execution batches, media-parent linking, progress reporting, and optional AI-assisted taxonomy mapping.
  • Post, Liquid template, and Lua script editing with dedicated syntax highlighting, explicit syntax-check feedback, change-aware published/draft lifecycle, normalized collision-safe template/script slug changes, reference-safe template renames, and publish-time enforcement of the bDS2 Liquid tag/filter/operator subset, using a custom Ropey/Syntect/Cosmic Text editor and the documented, bDS2-signature-compatible project-scoped bds host API across utilities, rendered macros, and Blogmark transforms, including airplane-gated Git sync.
  • SQLite and filesystem persistence with byte-canonical bDS2 frontmatter, media sidecars, metadata JSON, and OPML menus; rebuild; bidirectional metadata diff/repair including project categories and publishing preferences; stale post-path cleanup on republish; bDS2-compatible checksums and NFD slug generation; and FTS5 search.
  • Optional on-device multilingual semantic search and similar-post tag suggestions backed by a persistent USearch index, plus always-available partial-name tag autocomplete and duplicate-post review in the desktop workspace.
  • Read-only in-app browsers in the Help menu for the bundled global DOCUMENTATION.md, the generated Lua API reference with public types and runnable examples, the CLI/server/TUI documentation, and the MCP server documentation, with safe GFM rendering and confirmed external links.
  • A localized Tags workspace manages tags and category settings; its category table includes the main language and every configured translation, whose titles are used by the matching category archives.
  • A localized OPML menu editor manages pages, submenus, and category archives with protected Home ordering, keyboard-accessible tree controls, drag-and-drop, and bDS2-compatible persistence.
  • Project-scoped typed domain events synchronize desktop views with shared-engine and future CLI mutations; persisted CLI notifications are consumed once, and the selected UI language is shared through settings.
  • Headless bds-cli automation for rebuild/repair/render, publishing and Git sync, post/media/gallery creation, effective shared settings with secret-presence redaction, projects, utility Lua tasks, JSON I/O, airplane-mode AI routing, and guarded launcher installation from Settings → Data or bds-cli install.
  • Local MCP automation over stdio or a localhost-only stateless HTTP endpoint, with project resources, read/search/count tools, uniquely identified inert write proposals, clean duplicate-pending rejection, explicit desktop approval, and opt-in Claude Code/Copilot configuration.
  • A fully localized Ratatui terminal workspace, available locally through bds-cli tui/BDS_MODE=tui and remotely through authenticated SSH shell sessions, with shared post/template/script editing and publishing, project/search/command overlays, settings, tags, Git, reports, task progress, live multi-client locale updates, and airplane-mode AI gating.
  • bds-cli server hosting the shared application engines over a loopback-by-default, public-key-only SSH service, with restrictive private key material, live authorization updates, terminal-session transport, CLI-change synchronization, ordered domain/task events, and native desktop remote-project selection.
  • bDS2-compatible Markdown/Liquid rendering with built-in macros rendered from bundled Liquid templates in isolated scopes (customizable with macros/* partial-template slugs), category-controlled list title visibility, descriptive category archive titles, canonical multilingual and flat page routes for every configured blog language, recursive menus, calendar archives, feeds, a root hreflang sitemap, Pagefind, shared cached multicore full-site rendering, change-aware and forced full renders from the native Blog menu/CLI/TUI, and fast route/mtime-based incremental validation whose targeted repair refreshes affected aggregate pages through cancellable section task groups with bDS2-style per-URL progress.
  • Navigable generated-route preview in the app or system browser, with draft database overlays and published filesystem content.
  • Optional one-shot AI translation, description, analysis, taxonomy, and language-detection operations run in background tasks with editor-level waiting indicators, using provider-portable JSON-only requests through independent online and local OpenAI-compatible profiles. Each profile has secure credentials, persistently discovered chat/title/image model selections, explicit tool/vision overrides, chat testing, and restart-persistent status-bar airplane-mode routing.
  • Persistent conversational AI with safe Markdown, streamed and cancellable responses, model/session/token tracking, bounded project-aware blog tools, and localized conversation management in the Chat workspace. Allowlisted render tools add persistent native cards, charts, forms, lists, metrics, mind maps, tables, and tabs without executing assistant-provided HTML or JavaScript.
  • SSH-agent-based SCP or rsync publishing.
  • Integrated Git workflow for each blog project's current repository, with repository initialization, read-only origin discovery, Git LFS image tracking, status and diffs, branch/file history with bDS2-compatible sync-status colors, commits, cancellable fetch/pull/push, and post-pull filesystem reconciliation; network actions respect airplane mode.
  • Site, media, and translation validation plus ruds://new-post Blogmark capture and Lua transforms; captures open directly in the post editor and defer automatic translation until an explicit manual save, which queues one task per still-missing language. Rendering tasks keep long generated URLs compact in progress messages. Publishing never starts automatic translation. bDS2 keeps its separate bds2:// bookmarklet protocol.

RuDS uses no JavaScript application runtime and loads no CSS or JavaScript from CDNs. The preview is served by the Rust application and displayed by the operating-system webview.

The packaged Apple Silicon application requires macOS 26 or newer.

Packaged executables share native bds-core and bds-server dynamic libraries. ONNX Runtime is statically contained in bds-core; the package does not ship or download a separate ONNX library. The Install CLI action writes a small forwarding launcher to ~/.local/bin, so the command continues to execute the packaged CLI beside the same runtime libraries instead of copying them.

Local macOS packages are ad-hoc signed without hardened runtime. A Developer ID and notarization remain optional release-channel steps for downloads that should pass Gatekeeper without a user override.

Repository Map

  • crates/bds-core — data, engines, rendering, AI, publishing, and Lua
  • crates/bds-editor — reusable syntax-highlighting editor
  • crates/bds-ui — desktop application and platform integration
  • crates/bds-cli — headless automation CLI over the shared engines
  • crates/bds-mcp — packaged stdio MCP transport over the shared MCP engine
  • crates/bds-server — reusable headless host, SSH transport, remote protocol, and desktop client library
  • specs — authoritative Allium behavior specifications
  • fixtures — compatibility projects and generated-site fixtures
  • locales — UI and native-menu translations

References

Contributor workflow and project invariants are documented in AGENTS.md.

Development gates

Install the dependency audit tools once:

cargo install cargo-machete cargo-outdated

Before committing, verify dependency usage and freshness, then build and test the complete workspace:

cargo machete --with-metadata
cargo outdated --workspace --root-deps-only --exit-code 1
cargo build --workspace
cargo test --workspace

The full test suite starts loopback-only mock and preview servers, so localhost binding must be permitted.

Headless server

Run bds-cli server for a dedicated headless process, or set BDS_MODE=server when launching bds-ui. The SSH listener defaults to 127.0.0.1:2222; use --bind/BDS_SSH_BIND and --port/BDS_SSH_PORT to opt into another address. Startup prints the private authorized_keys path. The desktop creates its own private id_ed25519.pub; add that public key to the server file, then use File → Connect to Server… and select a remote project. Host keys are recorded on first connection and verified thereafter. Run bds-cli tui or set BDS_MODE=tui for the local terminal workspace; an authenticated SSH shell opens the same workspace against server-side data and locale. Press : for its command list and :? for help.

Description
Rust rewrite of bDS
Readme 22 MiB
Languages
Rust 87.4%
Fluent 5.6%
HTML 5.1%
JavaScript 0.9%
Liquid 0.4%
Other 0.6%