pikru 1.0.0

A pure Rust implementation of pikchr, a PIC-like diagram markup language that generates SVG
Documentation

pikru

crates.io docs.rs MIT/Apache 2.0

A pure Rust implementation of pikchr, a PIC-like diagram markup language for creating technical diagrams that generates SVG.

Usage

let svg = pikru::pikchr(r#"box "Hello" arrow box "World""#).unwrap();
assert!(svg.contains("<svg"));

Features

  • Pure Rust - No C dependencies, safe and portable
  • Light/Dark Mode Support - Generate SVGs with CSS variables that automatically adapt to prefers-color-scheme
  • Drop-in Compatible - Aims for full compatibility with the original C implementation

Light/Dark Mode

Enable CSS variables for automatic light/dark theming:

use pikru::{pikchr_with_options, RenderOptions};

let options = RenderOptions { css_variables: true };
let svg = pikchr_with_options(r#"box "Hello""#, &options).unwrap();
assert!(svg.contains("light-dark("));

The generated SVG includes a <style> block with CSS variables using light-dark(), so colors automatically adapt to the user's color scheme.

Dependencies

pikru has a minimal dependency footprint (7 direct dependencies by default):

Crate Purpose
glam 2D vector math for coordinates and geometry
pest PEG parser generator for the pikchr grammar
facet-svg SVG DOM generation and XML serialization
miette Error reporting with source snippets
thiserror Derive macro for error types
enum_dispatch Efficient shape rendering dispatch

Optional Features

  • tracing - Enable debug logging via the tracing crate. Disabled by default for smaller builds.

Development

Testing

The test suite validates output against the original C implementation:

cargo test                     # Run all tests
cargo xtask compare-html       # Generate visual comparison HTML
cargo xtask generate-pngs      # Convert SVGs to PNGs for debugging

See comparison.html for a side-by-side visual comparison of C vs Rust output.

Pre-commit Hooks

./hooks/install.sh

Attribution

pikru is a clean-room Rust implementation inspired by:

  • pikchr by D. Richard Hipp - The original C implementation, released under the 0-clause BSD license. The C source is vendored in vendor/pikchr-c/ for reference during development.

  • gopikchr - A Go port of pikchr by @zellyn, which served as inspiration for this Rust implementation.

Continuous Integration

Our CI runs on Depot hosted runners — huge thanks to Depot for sponsoring the compute that keeps the pikru test suite flying.

Sponsors

Thanks to all individual sponsors:

...along with corporate sponsors:

License

Licensed under either of:

at your option.