ferrocv 0.1.0

Render JSON Resume documents to PDF, HTML, and plain text via embedded Typst.
Documentation

ferrocv

Render JSON Resume to PDF, HTML, and text via Typst — single static binary, no Node or TeX required.

Status

Pre-implementation. Work is tracked as GitHub issues, organized into phase milestones. Tracking issues stand in for future phases until their scope is activated. The non-negotiable design principles live in CONSTITUTION.md.

Why

The JSON Resume schema is a sound single-source-of-truth for resume data, but its JavaScript theme ecosystem is thin and fragile (many themes are abandoned, others ship with broken dependencies). This project keeps the schema and replaces the rendering pipeline with something more robust:

  • Rust for a single-binary CLI with no runtime dependencies.
  • Typst for modern typesetting — embeddable as a crate, no TeX distro needed, with a growing ecosystem of resume templates.
  • JSON Resume v1.0.0 remains the canonical input format.

Goals

  • Validate resume.json against the JSON Resume schema.
  • Compile to PDF in-process via the typst crate (no subprocess).
  • Emit HTML and plain text as first-class outputs, not afterthoughts.
  • Ship adapters over popular Typst Universe templates so users have visual variety from day one.
  • Define a native theme contract so new themes can target JSON Resume directly.

Usage

The only subcommand available today is validate, which checks a document against the bundled JSON Resume v1.0.0 schema. Exits 0 on valid input, 1 on schema violations (diagnostics on stderr), and 2 on IO or JSON parse errors.

# From a file
ferrocv validate resume.json

# From stdin
cat resume.json | ferrocv validate

No network is touched — the schema is compiled into the binary.

Non-goals

  • Replacing the JSON Resume schema or project.
  • Supporting arbitrary input formats (Markdown, YAML, etc.).
  • Becoming a general-purpose Typst build tool.

Prior art

License

Dual-licensed under either of:

at your option. This is the standard Rust ecosystem dual license.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual-licensed as above, without any additional terms or conditions.