panschema

Crates.iopanschema
lib.rspanschema
version0.2.0
created_at2026-01-25 20:23:51.407578+00
updated_at2026-01-25 20:23:51.407578+00
descriptionA universal CLI for schema conversion, documentation, validation, and comparison
homepage
repositoryhttps://github.com/padamson/panschema
max_upload_size
id2069458
size423,734
Paul Adamson (padamson)

documentation

README

panschema

A universal CLI for schema conversion, documentation, validation, and comparison.

Status: Active Development

Vision

panschema aims to be the universal tool for data modeling workflows:

  • Convert between schema languages (LinkML, OWL/TTL, JSON Schema, SHACL, SQL DDL)
  • Generate documentation from any supported format
  • Validate schemas and check compatibility
  • Compare schemas and track changes

Think of it as pandoc for data modeling — a single tool that speaks all schema languages.

Current Features (v0.2.0)

  • OWL/Turtle input → HTML documentation
  • LinkML IR as canonical internal representation
  • Fast: Generate complete documentation in milliseconds
  • CI-native: Single binary, no JVM or complex dependencies
  • Hot reload: Development server with live preview

Installation

cargo install panschema

Or download pre-built binaries from GitHub Releases.

Quick Start

Generate documentation from an OWL ontology:

panschema generate --input ontology.ttl --output docs/

Start a development server with hot reload:

panschema serve --input ontology.ttl

Open http://localhost:3000 to view the documentation.

Supported Formats

Input Formats

Format Status Extension
OWL/Turtle Full support .ttl
LinkML YAML Coming soon .yaml
JSON Schema Planned .json
SHACL Planned .ttl

Output Formats

Format Status
HTML Documentation Full support
LinkML YAML Planned
Markdown Planned
JSON Schema Planned

Architecture

panschema uses a Reader/Writer architecture with LinkML as the internal representation:

Input File → Reader → LinkML IR → Writer → Output
   (TTL)    (OwlReader)  (SchemaDefinition)  (HtmlWriter)  (HTML)

This design enables:

  • Adding new input formats by implementing the Reader trait
  • Adding new output formats by implementing the Writer trait
  • Format-agnostic documentation and conversion

Why panschema?

Read our WHY.md to understand the full vision.

TL;DR: Data modeling is fragmented across many schema languages. panschema provides a unified interface — fast, CI-native, and extensible.

Development

Prerequisites

  • Rust 1.85+ (edition 2024)
  • cargo-nextest (recommended for testing)
  • Node.js 20+ and Playwright browsers (for E2E tests)
# Install Playwright browsers
npx playwright@1.56.1 install

Building & Testing

cargo build
cargo nextest run --features dev

Manual Verification

panschema serve --input tests/fixtures/reference.ttl

UI Component Style Guide

cargo watch -w src -w templates -x 'run --features dev -- styleguide --serve'

Contributing

Contributions are welcome! Please follow our standards:

  • TDD First: Write tests before implementation
  • Strict Linting: Pass cargo fmt and cargo clippy
  • Pre-commit: Use our pre-commit hooks

License

Apache-2.0

Commit count: 12

cargo fmt