Quillmark
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
- User Guide - Tutorials, concepts, and language bindings
- Rust API Reference - for the Quillmark crate
Installation
Add Quillmark to your Cargo.toml:
Quick Start
use ;
use Quill;
// Create engine with Typst backend
let mut engine = new;
// Load a quill template
let quill = from_path?;
engine.register_quill;
// Parse markdown with version specification
let markdown = "---\nQUILL: resume_template@2.1\ntitle: Example\n---\n\n# Hello World";
let parsed = from_markdown?;
// Load workflow (resolves version from document)
let workflow = engine.workflow?;
// Or specify version directly: engine.workflow("resume_template@2")?;
let result = workflow.render?;
// Access the generated PDF
let pdf_bytes = &result.artifacts.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:
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.