Cantus
@sjm/cantus · the chant engine

The score, engraved.
The chant, alive.

Cantus is the first JavaScript engraver with machine-verified Gregorio parity — and the only chant engine anywhere, Gregorio included, that doesn’t stop at printing the score. It sings it.

Browse the library Open the editor
Salve Regina engraved in square notation by Cantus
Salve Regina, engraved live by the same code that plays it — parse → engrave → interpret → sing, one engine, browser or server.
796 / 796
chants note-for-note identical to Gregorio’s own parser
2,397
conformance runs — full corpus × three interpretation schools
1 parse
behind every projection: score, print, audio, export
1 engine
in the browser and on the server — the same code, byte-identical output
What it is

One engine for the whole chant.

Gregorian chant software has always made you choose. Tools that engrave beautifully can’t make a sound. Tools that play can’t print. Web previews quietly disagree with the PDF they hand you. Every one of them reads GABC its own way — and every disagreement becomes your problem.

Cantus ends the choosing. It reads a chant once, into one model, and projects that single reading everywhere: square notation on screen, book-grade vector PDF in print, MusicXML and MEI for interchange, and — the part nothing else has — a living performance: synth or SoundFont voices, syllable-synced highlighting, and phrasing shaped by real schools of interpretation. The preview can’t drift from the print, and the sound can’t drift from the score, because there is nothing to drift between.

Architecture

Notation is sacred. Interpretation is data.

The core design rule: engraving and export never see an interpretation — only time and loudness do. The score you print is exactly what the manuscript says; how it is sung is a profile you choose, or write yourself.

Interpretations are plain data — timing tables and dynamic doctrine. The tutorial’s theory tables are generated from the profiles, so what we teach, what we play, and what the code does cannot disagree.

What it does

Every workbench, one parse.

Engrave

Square notation with authentic neumes — podatus to torculus resupinus flexus — plus modern staff notation from the same reading. Total-fit line breaking and elastic spacing tuned for books and screens alike.

Sing

Live WebAudio playback through synth guide tones or real sampled choirs — Florestan, KBH Real Choir, Saint James — loaded and played in the page. Offline WAV and MIDI render from the same timing, so what you hear live is what you write to disk.

Interpret

Solesmes, equalist, and mensural schools built in as data, not code — and custom profiles as simple JSON. Change the school; the whole performance follows, down to the chironomy curve.

Print

The page is one artifact: titles, rubrics, paper, margins, and notation composed as a single SVG. What the screen mounts is literally what the vector PDF (subsetted fonts, book-grade) exports.

Exchange

GABC in and out, of course — but also MEI with a verified round-trip, MusicXML, MIDI, and Volpiano import. The only chant renderer that speaks the scholarly interchange formats at all.

Study & edit

A live editor that is a pure GUI over the engine’s API, click-to-note sync, syllable highlighting during playback, and a full catalog with provenance tracked back to source — every chant knows where it came from.

Proof

Trust, mechanically earned.

Every chant engraver claims fidelity. Cantus is the only one that proves it — against Gregorio itself, the engine behind the Church’s modern chant books, using Gregorio’s own parser as the referee. Not eyeballed. Not sampled. Machine-checked, corpus-wide, re-runnable in minutes.

The first JavaScript engraver with machine-verified Gregorio parity — and the only chant engine of any kind with a true performance layer.
Gregorio can’t play a note. We can prove ours are the same notes.
The field

How it beats everything else.

The alternatives each solve a slice. Gregorio engraves beautifully — through a TeX toolchain, with no sound and no browser. Exsurge drew in the browser and went quiet years ago. Web editors preview with one engine and print with another, hoping they agree. Scholarly tools speak MEI but not GABC. Cantus is the only complete instrument.

Capability Cantus Gregorio exsurge jgabc / S&S Neon + Verovio
Runs in-browser and server-side (same code)✓ bothserver onlybrowser onlyserver / SaaS
Verified against Gregorio, corpus-wide✓ 796/796is Gregorion/a
One engine for preview and printprint only✗ two enginesMEI only
Plays the chant (live + offline)basic
Interpretation schools as data
Syllable-synced highlight & chironomy
Vector PDF, book-gradevia Gregorio~
MEI / MusicXML / MIDI / Volpiano interchangeMEI native
Modern staff notation from the same parse
Embeddable library you can ship~
Actively developeddormantSaaS

✓ yes · ~ partial · ✗ no. Full technical comparison with sources and honest limits in design/chant-library-landscape.md.

The corpus

Eight hundred chants, with receipts.

The engine ships alongside a curated library of nearly 800 chants — ordinaries, propers, hymns, tones — each with provenance to its source edition, synced against the world’s largest open chant database, and guarded: where upstream data is broken, we repair it, prove the repair against Gregorio, and pin it so no automated update can ever quietly regress it. The library gets better and stays better.

Begin

Find a chant. Read it. Hear it. Print it.

Everything on this page is live in the app right now — the same engine, end to end, from the library to the last vector on the page.

Browse the library Open the editor Learn to read chant