Register / registry (Finnish: rekisteri) manages catalogs of documents organized per publication identifier stem, issue, and optionally revision.
Project description
rekisteri
Register / registry (Finnish: rekisteri) manages catalogs of documents organised per publication identifier stem, issue, and optionally revision.
Requires Python 3.11 or later.
Install
pip install rekisteri
Documentation
- Quick tour — feature walkthrough you can follow in minutes
- Tutorial — step-by-step guided build of a running registry
- Man page — full CLI reference (
man rekisteriafter placing the file on yourMANPATH) - Changes — release history
- SBOM — dependency inventory
To use man rekisteri, copy docs/rekisteri.1 to a directory on your MANPATH, for example:
mkdir -p ~/.local/share/man/man1
cp docs/rekisteri.1 ~/.local/share/man/man1/
Overview
rekisteri is for operators of document publication registries — typically teams
that publish structured document sets (specifications, guides, manuals) and need a
stable, browsable web tree alongside a machine-readable catalog.
Given a rekisteri.yaml configuration it:
- Scans a
source/ref/tree for documents organised by stem, issue, and (optionally) revision. - Validates the tree: checks metadata completeness, issue numbering consistency, slug uniqueness, and catalog cross-references.
- Publishes a
web-parent/tree:ref/— anchor copies of all documents withindexnavigation symlinks at issue and stem level.pub/— per-slug cross-reference symlinks intoref/, grouped by issue.reference → refandpublication → pubalias symlinks at the root.
- Generates catalog JSON files (
documents.json,cards.json) at a separatecatalog-outpath for consumption by a side-loading web application.
Source tree structure
Two-level (levels: 2, default)
source/ref/
└── <STEM>/
├── meta.yaml ← stem-level metadata (title, status, …)
├── <ISSUE>/
│ ├── issue.yaml ← optional issue-level metadata overrides
│ └── <stem>-<some_id>-<issue>.<ext>
└── <ISSUE>/
└── …
Three-level (levels: 3)
source/ref/
└── <STEM>/
├── meta.yaml
└── <ISSUE>/
├── issue.yaml
└── <REVISION>/
├── revision.yaml ← optional revision-level metadata overrides
└── <stem>-<some_id>-<issue>.<ext>
Issue directories contain only digits (01, 2, …).
Revision directories are any non-numeric non-hidden name (A, B, draft, …).
Quick start
# Write rekisteri.yaml and meta.yaml templates into the current directory
rekisteri eject .
# Check the tree is well-formed
rekisteri validate --config rekisteri.yaml
# Show the discovered publication tree
rekisteri explain
# Publish the web-parent tree
rekisteri publish
Configuration
rekisteri.yaml controls all paths and behaviour.
Run rekisteri eject to write a commented template.
source-root: ./source/ref # path to the source document tree
web-root: ./web-parent # path where the published tree is written
catalog-out: ./catalog # path where catalog JSON files are written
levels: 2 # 2 (stem/issue) or 3 (stem/issue/revision)
# stem-pattern: null # optional regex; only matching stems are scanned
# slug-pattern: null # optional regex applied to some_id before slugifying
catalog:
documents-file: documents.json
cards-file: cards.json
cards:
- title: Guides # display name for this card group
identifiers: [INTRO] # slugs of publications belonging to this group
All multi-word keys are kebab-case.
--config / -c accepts either a file path or a directory (looks for
rekisteri.yaml inside it).
Metadata files
Each stem, issue, and revision may carry a YAML metadata file. Outer scope (stem) keeps its keys; inner levels only add keys not already present.
title: "" # human-readable publication title (required; must not be empty)
abstract: "" # short abstract
responsible: "" # team or person responsible
tags: [] # free-form tags
status: active # active | superseded | archived
supersedes: [] # list of STEM/ISSUE entries this publication supersedes
Filename conventions
Documents are named <stem>-<some_id>-<issue>.<ext>, all lowercase.
The some_id part is extracted by stripping the stem prefix and the issue suffix
from the filename stem. It is then uppercased (after optional slug-pattern
filtering) to form the slug used in pub/ and catalog.
Example: x-guide-intro-01.pdf in stem X-GUIDE, issue 01
→ some_id = intro → slug = INTRO.
The slug is stable as long as some_id is preserved across stem renames and
issue increments.
Web-parent tree topology
After rekisteri publish:
web-parent/
├── ref/
│ └── <STEM>/
│ ├── index.<ext> → latest issue's document
│ └── <ISSUE>/
│ ├── <doc-name>.<ext> ← anchor copy
│ └── index.<ext> → <doc-name>
├── pub/
│ └── <SLUG>/
│ ├── index.<ext> → latest issue's document
│ └── <ISSUE>/
│ ├── <doc-name>.<ext> → ../../../ref/STEM/ISSUE/doc
│ └── index.<ext> → <doc-name>
├── reference → ref
└── publication → pub
With --copy, pub/ entries are real file copies instead of symlinks
(useful for Windows or archival scenarios).
Commands
rekisteri doctor
Check the environment and configuration: Python version, config file presence, source-root existence, and web-root parent.
rekisteri doctor [-c PATH]
rekisteri eject
Write rekisteri.yaml and meta.yaml templates to a target directory.
Skips existing files unless --overwrite is given.
rekisteri eject [TARGET] [--overwrite]
rekisteri explain
Print the discovered publication tree: stems, issues (and revisions for three-level trees), documents, and slugs.
rekisteri explain [-c PATH]
rekisteri publish
Build the web-parent/ tree from the source tree.
Creates anchor copies in ref/, cross-reference symlinks in pub/,
and the reference / publication alias symlinks.
rekisteri publish [-c PATH] [--copy]
--copy replaces pub/ cross-reference symlinks with real file copies.
rekisteri validate
Validate the source tree and metadata.
Prints findings tagged [error] or [warning].
Exits 1 on any error; with --strict, also exits 1 on warnings.
rekisteri validate [-c PATH] [--strict]
Dependencies
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rekisteri-2026.6.18.tar.gz.
File metadata
- Download URL: rekisteri-2026.6.18.tar.gz
- Upload date:
- Size: 27.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f7fcff4b1382d632c562b4c6435658949ca3569555fd438494bae6b5f934c46
|
|
| MD5 |
62f2069284d9c4205b4889f724a1d4b5
|
|
| BLAKE2b-256 |
60ca5a345e09eb5f01ca7cd9d0485167e175fed707309b3b617166863088c2fc
|
File details
Details for the file rekisteri-2026.6.18-py3-none-any.whl.
File metadata
- Download URL: rekisteri-2026.6.18-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
991ef0dad162b800ddef22fde4fe4687652b12aa7770046dca74bab33fe8bd5b
|
|
| MD5 |
b3e0e82b710eaa964476ec7cd5dfe4f4
|
|
| BLAKE2b-256 |
f7d3cd0394c627aefa15930944a264ec27c11fa5eadbc0f9d7af8381e206bb23
|