Skip to main content

Accessibility-first publishing engine — PDF/UA-2 + WTPDF + PDF/A-4f, C2PA + PAdES + SLSA provenance, multi-format emission, MCP server.

Project description

Inclusio logo

Inclusio

Publishing that includes everyone.

Accessibility-first publishing engine for LaTeX, packaged as a Python CLI. PDF/UA-2 + WTPDF + PDF/A-4f triple-conformance, C2PA + PAdES + SLSA provenance, multi-format emission (HTML5 / JATS / EPUB3), LLM-augmented judges, and an MCP server for agent integration. Built for macOS, Linux, and WSL.

Engine Validation veraPDF Audit Python >= 3.11 PDF/UA-2 | WTPDF | PDF/A-4f License


Install

Run the local bootstrap:

./bin/setup

Then validate the engine:

make test
make coverage

Requires python3, git, and a TeX toolchain. Use WSL for full Windows support. Install tagpdf.sty if you need accessibility tagging.


Publish

Publish against the private content repository with the shell-agnostic form:

make publish CONTENT_DIR=/absolute/path/to/inclusio-private

Use the shell-specific form only when you need it:

# Bash / Zsh / POSIX sh
INCLUSIO_CONTENT_DIR=/absolute/path/to/inclusio-private make publish

# fish
env INCLUSIO_CONTENT_DIR=/absolute/path/to/inclusio-private make publish

# PowerShell
$env:INCLUSIO_CONTENT_DIR = "/absolute/path/to/inclusio-private"
make publish

EUXIS_PUBLISHER_CONTENT_DIR is not supported.

Drop supported briefs into data/jobs/ in the private content repo, then run publish. The build now promotes .txt, .md, .markdown, .rtf, .doc, .docx, .odt, and .html briefs into data/tailored/ automatically before compiling PDFs.


Overview

Use this repository as the public engine layer of the Euxis publishing stack. Keep private content in inclusio-private.

You get:

  • LaTeX classes and styles through core/cls/ and core/sty/
  • Packaged Python entrypoints through inclusio/cli/
  • Operator utilities through inclusio/tools/
  • Compatibility wrappers through scripts/
  • Public fixture content through data/, src/, and templates/
  • 100% package coverage over inclusio

Architecture

First, render or tailor content. Then compile camera-ready output from the same engine.

graph TD
    A[Private or Public Content] --> B{inclusio.cli.build}
    B --> C[Render: Jinja2 to LaTeX or Markdown]
    B --> D[Build: latexmk or TeX compiler]
    B --> E[Tailor: Brief to structured YAML]
    C --> F[build/.cache/rendered]
    D --> G[PDF artifacts]
    E --> H[data/tailored]
    G --> I[Stamping and metadata tooling]

Features

Engine Packaged Python CLI with build, render, blog, tailor, lint, and cleanup commands
Typography Shared LaTeX classes and style packages for CVs, papers, patents, FAQs, guides, and bios
Build Modes Draft, submission, and camera-ready flows managed from one orchestration layer
Publishing PDF/A-oriented metadata flow with provenance stamping support
Fixtures Public sample content for engine validation without exposing private briefs or templates
Coverage 100% package coverage across inclusio
Platforms macOS, Linux, and WSL
Docs Sphinx docs plus folder-level READMEs for every major public surface

Commands

Command Execute this to...
make list inspect registered documents
make draft compile all public documents in draft mode
make final compile camera-ready output from the current content root
make publish CONTENT_DIR=/absolute/path/to/inclusio-private auto-tailor briefs from data/jobs/ and compile the full private set
make render render Jinja2 templates to LaTeX
make render-md render Markdown output
make blog render blog posts
make tailor BRIEF=data/jobs/job.txt generate one tailored document explicitly and build it
make sitemap generate build/site-map.json
make test run the public engine test target
make coverage enforce the package coverage gate
make docs build the Sphinx site

Use the packaged CLIs directly when you need lower-level control:

python3 -m inclusio.cli.build list
python3 -m inclusio.cli.render --doc cv
python3 -m inclusio.cli.sitemap --pretty
python3 -m inclusio.cli.tailor data/jobs/test.txt --no-ai

For bulk private publishing, prefer make publish. It scans data/jobs/, refreshes stale tailored YAML, and compiles the resulting PDFs in one pass.


Public vs Private Boundary

Keep these surfaces public:

  • core/
  • inclusio/
  • scripts/
  • tests/
  • non-sensitive fixtures in data/, src/, and templates/
  • CI, docs, and build metadata

Keep these surfaces private:

  • real briefs and client content
  • proprietary templates and assets
  • content-bearing metadata sets
  • content-specific QA and linguistic validation

For the full boundary contract, read docs/public-private-boundary.md.


Documentation

Start here:

Folder guides:


License

Licensed under the MIT License. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

inclusio-0.0.2.tar.gz (183.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

inclusio-0.0.2-py3-none-any.whl (101.3 kB view details)

Uploaded Python 3

File details

Details for the file inclusio-0.0.2.tar.gz.

File metadata

  • Download URL: inclusio-0.0.2.tar.gz
  • Upload date:
  • Size: 183.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for inclusio-0.0.2.tar.gz
Algorithm Hash digest
SHA256 21448932237061039db66e15d0e745f7ae4e99af28b6ccf63325c7605aaf3aed
MD5 f2928f07fab0b678a9187437684936fe
BLAKE2b-256 2460be301620c277eae4c0ae74db8b7d1aeb21167d8138224f013a7863b83711

See more details on using hashes here.

File details

Details for the file inclusio-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: inclusio-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 101.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for inclusio-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e42570e091dc6f9f0d05f014e25a0b1940a2d5046bc8036e135272b240011f9b
MD5 e1a85512f5edfb2e1ddc4462e3c39803
BLAKE2b-256 7ad29bd6c25563f2bd8d55f2a7689c25065f7696effc13f89b4761c0b2688184

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page