Rust framework for authored Works · v0.1.0

Opus — the Work, and every way it is expressed

A Rust framework for authored Works: a book, a workshop, an educational programme are spaces of one coherent whole, and print, digital, web and interactive are its expressions, never its definition.

A Work is one coherent whole. Print, digital, web and interactive are how it is expressed, never what it is.

One source, one vocabulary, every format: the expressions of a Work cannot contradict each other without something failing first.

The Work first, then its spaces, then their expressions.

What a Work gains when it is the unit

Three things that hold because the domain is the Work, not the book, the site or the course it happens to be published as.

ONE WORK · MANY SPACES

Spaces that coexist

A book, a logbook, a workshop and educational material are spaces of one Work, each with its own sources, structure and editorial state. Every format is projected from a space, downstream of it, and never redefines it.

CITED · CHECKED

Rules with a source and a check

A language's orthotypography is a catalogue: each rule states the norm, gives a good and a bad example, cites its source by chapter and section, and names the checker that holds it. A Work composes the catalogue and may harden a rule, never relax a mandatory one.

YOUR WORDS · OUR RULES

The line between a language and a Work

Title, chapter term, captions and callouts belong to the Work and live only in its configuration. Orthography, punctuation and cleanup belong to the language and live in the framework, applied only to a Work that declares that language.

Build on Opus

Three steps from a Work to its expressions.

1

Declare the Work

Your Work's vocabulary and presentation go in its own configuration (project, chapters, presentation), typed in Nickel, with English defaults in the framework.

2

Implement the traits

ContentLoader hands the framework each section as SectionContent; PedagogyEngine, EmbeddingProvider and VectorStore are the other stable seams. Mocks for all of them ship with the framework.

3

Express it

opus-processor composes ODT and typst output, opus-rag indexes the Work for local semantic search, and opus-mcp serves it to agents through McpServer<T>.

Build on the Work, not on its format

Opus is consumed by Work-specific implementations through path dependencies. The framework carries no consumer logic, so the second Work does not inherit the first one's decisions.

We use cookies to help this site function, understand service usage, and support marketing efforts. Cookie Policy for more info.