quillmark

Crates.ioquillmark
lib.rsquillmark
version0.32.1
created_at2025-10-04 15:28:07.377233+00
updated_at2026-01-24 16:43:44.631936+00
descriptionQuillmark engine API
homepagehttps://github.com/nibsbin/quillmark
repositoryhttps://github.com/nibsbin/quillmark
max_upload_size
id1867995
size149,708
Nibs (nibsbin)

documentation

https://docs.rs/quillmark

README

Quillmark

Crates.io PyPI npm CI License

A template-first Markdown rendering system that converts Markdown with YAML frontmatter into PDF, SVG, and other output formats.

Maintained by tonguetoquill.com.

UNDER DEVELOPMENT

Features

  • Template-first design: Quill templates control structure and styling, Markdown provides content
  • Version management: Two-segment versioning (MAJOR.MINOR) for reproducible rendering with flexible version selectors
  • YAML metadata: Extended YAML support for inline metadata blocks
  • Multiple backends:
    • PDF and SVG output via Typst backend
    • PDF form filling via AcroForm backend
  • Structured error handling: Clear diagnostics with source locations
  • Dynamic asset loading: Fonts, images, and packages resolved at runtime

Documentation

Installation

Add Quillmark to your Cargo.toml:

cargo add quillmark

Quick Start

use quillmark::{Quillmark, OutputFormat, ParsedDocument};
use quillmark_core::Quill;

// Create engine with Typst backend
let mut engine = Quillmark::new();

// Load a quill template
let quill = Quill::from_path("path/to/quill")?;
engine.register_quill(quill);

// Parse markdown with version specification
let markdown = "---\nQUILL: resume_template@2.1\ntitle: Example\n---\n\n# Hello World";
let parsed = ParsedDocument::from_markdown(markdown)?;

// Load workflow (resolves version from document)
let workflow = engine.workflow(&parsed)?;
// Or specify version directly: engine.workflow("resume_template@2")?;
let result = workflow.render(&parsed, Some(OutputFormat::Pdf))?;

// Access the generated PDF
let pdf_bytes = &result.artifacts[0].bytes;

Version Management

Quillmark supports two-segment versioning for templates, enabling reproducible rendering:

---
QUILL: "template@2.1"      # Pin to exact version
QUILL: "template@2"        # Latest 2.x version
QUILL: "template@latest"   # Latest overall
QUILL: "template"          # Latest overall (default)
---

Templates specify versions in Quill.yaml:

Quill:
  name: resume_template
  version: "2.1"
  backend: typst

Multiple versions of the same template can coexist in the engine. See VERSIONING.md for details.

Examples

Run the included examples:

cargo run --example appreciated_letter
cargo run --example usaf_memo
cargo run --example taro
cargo run --example usaf_form_8
cargo run --example auto_plate
cargo run --example test_defaults

Documentation

Project Structure

This workspace contains:

  • crates/core - Core parsing, templating, and backend traits
  • crates/quillmark - High-level orchestration API
  • crates/backends/typst - Typst backend for PDF/SVG output
  • crates/backends/acroform - AcroForm backend for PDF form filling
  • crates/bindings/python - Python bindings (PyO3)
  • crates/bindings/wasm - WebAssembly bindings
  • crates/bindings/cli - Command-line interface
  • crates/fixtures - Test fixtures and utilities
  • crates/fuzz - Fuzz testing suite

License

Licensed under the Apache License, Version 2.0. See LICENSE for details.

Commit count: 1841

cargo fmt