Skip to content

Product-grade translation catalogs

Make translations part of your release process.

Ferrocat is a Rust-native catalog engine for teams that want localized copy to be reviewable, testable, and ready for runtime delivery. It keeps source text, translator context, validation, QA, and compiled payloads in one inspectable layer.

cargo add ferrocat

Why Ferrocat

A catalog engine, not another pile of translation files.

Treat copy as product data

Source text, translator context, placeholders, tags, plural logic, and obsolete messages stay visible instead of disappearing into loose files.

Know what is safe to ship

Run structured audits for missing translations, empty strings, stale target entries, ICU drift, metadata conflicts, and fuzzy flags before release.

Stay ready for AI translation

Keep machine-generated entries traceable with model, confidence, modified time, and a hash that clears stale metadata after human edits.

Keep runtime delivery predictable

Compile locale-resolved artifacts with stable keys and explicit fallback behavior instead of reparsing translator files in production.

Performance

Fast paths are designed, measured, and documented.

Ferrocat is designed for catalogs that grow with real products. Large translation sets get byte-oriented parsing, borrowed read paths, deterministic updates, structured diagnostics, runtime compilation, and benchmark coverage.

Byte-oriented scanning

PO parsing works directly on byte sequences, keeping the hot path tight for large catalogs.

Borrowed and owned APIs

Read-heavy paths can borrow from the input buffer. Mutation flows use owned catalog structures.

Benchmark fixtures

Parser, serializer, merge, combine, and runtime paths are measured against repeatable fixtures.

Read the benchmark methodology

Standards where they help

Proven formats, one product workflow.

Ferrocat presents PO, ICU MessageFormat, and NDJSON as explicit choices instead of hidden implementation details. Use translator-friendly files when people need editing context, line-oriented records when teams need clean diffs, rich-message semantics when copy needs runtime values, and compiled artifacts when applications need fast loading.

Translator-friendly PO

Storage
Gettext PO
Semantics
Gettext-compatible plurals

Use the catalog shape many translation tools already understand, with comments, references, flags, and plural forms preserved.

Rich-message PO

Storage
Gettext PO
Semantics
ICU MessageFormat

Keep translator-facing PO files while authoring messages with placeholders, formatting, plurals, selects, and structural diagnostics.

Reviewable NDJSON

Storage
NDJSON
Semantics
ICU MessageFormat

Use one-message-per-line JSON records that are easier to review, merge, stream, batch, and hand to external systems.

Evidence

Quality is part of the catalog contract.

60conformance casesupstream-derived
454assertionschecked by harness
3catalog modesexplicit combinations

Start here

Pick the path that matches your question.

Get started

Install Ferrocat, parse your first catalog, and see the main product workflows.

Open

API surface

Choose between parsing, catalog updates, audit reports, runtime compilation, and rich-message diagnostics.

Open

Performance

Benchmark methodology, fixtures, and performance history.

Open

Palamedes

See how the JS and TS framework can use Ferrocat as its shared catalog engine.

Open

Architecture

ADRs and engineering notes behind semantic choices, storage modes, and hot paths.

Open

Catalog QA

Audit completeness, stale entries, ICU drift, metadata conflicts, obsolete entries, and visible fuzzy flags.

Open

Build with catalog behavior you can inspect.