Skip to content

nibsbin/quillmark

Repository files navigation

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 TTQ.

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.

About

Markdown parameterization for typesetted documents

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •