1 unstable release
Uses new Rust 2024
| 0.2.0 | Jan 25, 2026 |
|---|
#428 in Build Utils
140KB
3K
SLoC
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
Readertrait - Adding new output formats by implementing the
Writertrait - 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 fmtandcargo clippy - Pre-commit: Use our pre-commit hooks
License
Apache-2.0
Dependencies
~20–36MB
~448K SLoC