Typst Hebrew Letter

August 5, 2026 · View on GitHub

A Typst template for formal letters in Hebrew.

Right-to-left throughout, set in David Libre, with a centred underlined heading, a details block, numbered paragraphs and dual Hebrew/Gregorian dating. The same template renders an RTL Hebrew original and an LTR English translation with identical page geometry, so the two editions can sit side by side without either looking like the afterthought.

Page one of the Hebrew sample letter

Use it

git clone https://github.com/danielrosehill/Typst-Hebrew-Letter.git
cd Typst-Hebrew-Letter
./build.sh          # builds both sample letters into pdf/

Then:

  1. Edit src/sender.typ once. Name in both scripts, identifier, address, phone, email. Every placeholder in the samples comes from there — the details block, the signature and the page footer all read the same values, so they cannot end up disagreeing with each other.
  2. Copy examples/letter-he.typ to a new file and replace the content.
  3. Build it: typst compile --root . --font-path fonts my-letter.typ out.pdf

Requires Typst 0.14 or newer. Nothing else — the fonts are vendored.

Layout

PathWhat
src/profile.typThe template. Page setup, and every block the letters use.
src/sender.typThe only file carrying an identity. Placeholders — edit this.
src/strings.typLabel sets, he and en. The template contains no literal words.
examples/letter-he.typWorked example, with dummy content.
examples/letter-en.typThe same letter as an English convenience translation.
fonts/David Libre (OFL), three faces.
pdf/Built samples. Build output — do not hand-edit.
docs/typesetting-hebrew.mdRead this before writing a letter.

What you get

FunctionWhat it draws
formal-docPage setup: A4, margins, footer with contact line and "page N of M", numbered-paragraph and heading styles
doc-headCentred underlined heading with a subtitle line beneath it
detailsLabel/value block for sender, addressee, reference and date, closed by a rule
subject-lineThe הנדון — centred, underlined
noticeTinted, rule-flanked block for what must be read first
contentsShort tinted contents list for a long letter (there is no title page)
sender-blockYour own details, assembled from sender.typ
signatureSign-off, name, identifier, phone, email, your reference
dual-dateHebrew · Gregorian, in the right order for the edition

Every one takes is-rtl. Nothing reads direction from a global, which is what lets both editions share one template.

Things that will bite

Full list in docs/typesetting-hebrew.md. The four that cost the most time:

  • --font-path fonts is not optional. Without it Typst falls back to a system font for Hebrew, silently and often mid-word. The build still exits zero. Always look at the PDF.
  • * after a Hebrew prefix letter is not emphasis. ש*מילה* fails to parse; write ש#strong[מילה]. The examples use #strong[...] throughout.
  • @ in a content block starts a reference. Write an email address as you\@example.com.
  • The Hebrew date is passed in, not computed. Typst has no Hebrew calendar. Convert against hebcal and record the pairing next to the letter. The Hebrew day starts at sunset.

Licence

The template and the sample text are released under the MIT licence — see LICENSE.

David Libre in fonts/ is by Yanek Iontef and is licensed separately under the SIL Open Font License 1.1. See fonts/OFL-DavidLibre.txt, which must travel with the font files.