Files
RuDS/docs/COMPATIBILITY_INVENTORY.md
2026-04-04 08:10:05 +02:00

3.2 KiB

bDS Compatibility Inventory: TypeScript vs Rust

Tracks feature parity between the TypeScript bDS app and the Rust rewrite (RuDS).

Legend: [x] implemented/verified, [ ] not yet implemented


Database Schema

  • projects table
  • posts table (with published_* legacy columns)
  • post_translations table
  • media table
  • media_translations table (mediaTranslations)
  • tags table
  • templates table (with kind/status defaults matching TypeScript)
  • scripts table (with kind/status defaults matching TypeScript)
  • post_links table (postLinks)
  • post_media table
  • settings table
  • generated_file_hashes table
  • db_notifications table
  • chat_conversations table
  • chat_messages table
  • ai_providers table
  • ai_models table
  • ai_model_modalities table
  • ai_catalog_meta table
  • embedding_keys table
  • dismissed_duplicate_pairs table
  • import_definitions table
  • All 10 unique indexes
  • FTS5 virtual tables (posts_fts, media_fts) -- present in fixture DB, runtime creation deferred to M1
  • Default values match TypeScript (status, kind, enabled, version, entrypoint)

File Formats

  • Post frontmatter (YAML) read/write
  • Translation file format (posts/YYYY/MM/slug.lang.md)
  • Media sidecar (.meta) read/write
  • Template frontmatter read/write
  • Script frontmatter read/write
  • meta/tags.json
  • meta/project.json
  • meta/categories.json
  • meta/category-meta.json
  • meta/publishing.json
  • meta/menu.opml

Slug Generation

  • Basic transliteration (Unicode to ASCII, lowercase, hyphens, trim)
  • German umlauts: ae/oe/ue/ss/Ae/Oe/Ue (matches TypeScript transliteration npm)
  • Uniqueness: base, then {slug}-2..999, then {slug}-{timestamp}

Content Location

  • Published posts have NULL content in DB, body in filesystem .md
  • Draft posts have content in DB
  • Published translations have NULL content in DB
  • Published templates have NULL content in DB
  • Published scripts have NULL content in DB

Rendering

  • Liquid template rendering (subset: if/elsif/else, for, assign, render, whitespace stripping)
  • Liquid filters: escape, url_encode, default, append, i18n, markdown
  • Markdown rendering via pulldown-cmark
  • Built-in macros: gallery, youtube, vimeo, photo_archive, tag_cloud
  • RSS/Atom feed generation
  • Sitemap generation
  • Generated file hash tracking (incremental)
  • Pagefind search index generation (via pagefind crate library API)
  • FTS5 post indexing with Snowball stemmers (24 languages)
  • FTS5 media indexing
  • Cross-language stemming

Publishing

  • SSH/SCP upload
  • Rsync upload
  • Three parallel upload targets (html, thumbnails, media)
  • .meta files excluded from upload

AI Integration

  • Two-endpoint model (online + airplane)
  • One-shot operations (translate, analyze, etc.)
  • Chat with tool use
  • Model catalog refresh
  • Secure key storage (OS keychain)

Thumbnails

  • Small (150px), Medium (400px), Large (800px), AI (448x448 JPEG)
  • WEBP output

MCP Server

  • HTTP + stdio transports
  • Read-only tools
  • Proposal-based write tools