Architecture Overview

Rust workspace crate map, dependency flow, and component responsibilities.

Rustume follows a modular Rust workspace architecture. Core logic lives in shared crates; delivery surfaces (CLI, server, WASM, web app) are thin adapters.

High-level diagram

Rustume workspace crate map — WASM, CLI, Server, Web, and shared crates

Core logic lives in shared crates; delivery surfaces are thin adapters.

Crate responsibilities

CratePurpose
rustume-schemaResume data types, validation, JSON Schema definitions
rustume-parserImport parsers for JSON Resume, LinkedIn, Reactive Resume
rustume-renderTypst-based PDF/PNG generation with 12 templates
rustume-storagePlatform-agnostic storage abstraction (IndexedDB, memory)
rustume-utilsShared utilities (ID generation, string, date, color, HTML→Typst)
rustume-cliCommand-line interface binary
rustume-serverREST API with OpenAPI documentation (Axum)
rustume-wasmWebAssembly bindings for browser usage
apps/webSolidJS resume builder (Vite)
apps/siteAstro documentation site (this site)

Dependency flow

Crate dependency flow — utils and schema at the core, parser/render/storage above, cli/server/wasm on top

Core crates (utils, schema) have no dependencies on higher-level crates. This keeps WASM bundle size minimal and allows CLI and server to share identical parsing and rendering logic.

Server crate structure (Cloud)

When RUSTUME_CLOUD=true the server adds:

Cloud server crate layout — auth, database, routes, and observability modules

Self-hosted mode skips Cloud auth and database initialization — the same connected capabilities are enabled when an operator configures the required services. Hosted billing controls use of the Rustume-operated deployment, not application feature access.

Web app structure

SolidJS web app layout — components, stores, api, wasm, and pages

Persistence store routes to IndexedDB or cloud API based on auth state.

Rendering pipeline

  1. ResumeData JSON validated against schema
  2. Rich-text HTML fields sanitized and converted to Typst markup
  3. Typst template selected from metadata.template
  4. Theme colors injected from metadata.theme
  5. Typst compiles to PDF; PNG preview renders page 0 (or specified page)

No browser or headless Chrome — Typst runs natively in Rust.

Testing strategy

  • Unit tests — inline #[cfg(test)] in each crate
  • Integration teststests/ directories per crate
  • Web testsVitest for stores and API client
  • CLI testscrates/cli/tests/cli_tests.rs

Run all: make test — see Development setup and Linting.

See also