rela

module
v0.0.0-...-6c5e581 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 26, 2026 License: AGPL-3.0

README

Rela

A database layer on top of markdown. Define entities, link them together, and query their relationships—all stored as human-readable, version-controllable markdown files.

Rela is a schema-driven entity-graph platform. You define the shape of your domain in a YAML metamodel; rela gives you typed entities, typed relations between them, and a set of tools for querying, validating, analyzing, and presenting the resulting graph.

Common domains:

  • Architecture & design — Link requirements to decisions to components
  • Compliance & ISMS — Connect controls to evidence and audit findings
  • Risk management — Trace risks through mitigations to controls
  • Product development — Map features to user stories to tasks
  • Knowledge bases — Relate concepts, documents, and references
  • Project governance — Track goals through milestones to deliverables
  • Issue tracking — Bugs, features, and tickets with their lifecycle

Traceability is one use case, not the identity. Anything with typed entities and typed relations fits. Rela handles the rest: ID generation, bidirectional linking, orphan detection, coverage analysis, validation rules, and graph export.

Quick Start

# Initialize a project
rela init

# Create entities
rela create requirement -P title="System must support 1000 users"
rela create decision -P title="Use PostgreSQL for persistence"

# Link them together
rela link DEC-001 addresses REQ-001

# View the relationship
rela show REQ-001

# Launch the interactive TUI
rela tui

# Work with a project in a different directory
rela -p /path/to/project list
export RELA_PROJECT=/path/to/project && rela list

Features

  • Entity Management - Create, update, delete entities
  • Relationship Tracing - Link entities and trace dependencies
  • Quality Analysis - Find orphans, check coverage, detect gaps
  • Graph Export - Export to Graphviz DOT format
  • Interactive TUI - Full-featured terminal interface
  • MCP Server - Expose rela to AI assistants via Model Context Protocol
  • Markdown Storage - Human-readable, version-controllable files

Installation

go install github.com/Sourcehaven-BV/rela/cmd/rela@latest

Or build from source:

git clone https://github.com/Sourcehaven-BV/rela.git
cd rela
go build -o rela ./cmd/rela

Documentation

Document Description
Getting Started Installation, first project, core workflow
Concepts Architecture traceability fundamentals
CLI Reference Complete command reference
Metamodel Reference Configure entity types and relations
Export Guide Export, import, and data integration
Best Practices Maintenance tips and team workflows
MCP Server AI assistant integration via MCP
Data Entry Web App Config-driven web UI for entity management
Lua Scripting Programmable automation with embedded Lua
Encrypting a rela repo with git-crypt Use git-crypt for confidentiality when pushing to untrusted git hosts
Scheduled Tasks Run Lua scripts on recurring schedules
Audit Log Forensic JSONL log of every entity / relation write
PostgreSQL Backend Run rela-server and the CLI against PostgreSQL instead of markdown files
Attachment Security: Scanning, MIME Allowlist & Transforms Virus scanning, a sniffed MIME allowlist, and byte transforms for uploaded attachments
Sync Two-way sync between a local fsstore project and a remote pgstore rela-server
Security model for rela-server Threat model, HTTP defenses, audit attribution, and residual risks for the rela-server data-entry app; how its read-side ACL coverage stands today.
ACL: Authorization Overview How rela's role-based authorization works end-to-end: from acl.yaml + the graph to a write decision and its audit attribution
ACL: Security Hardening Operator's hardening guide for rela's ACL system: group membership trust, fail-loud boot, audit-isolation invariants
Generated documentation: the rela docs language Author a deployment manual in Markdown with embedded Lua islands that pull reference fragments (field tables, enum meanings, mermaid lifecycles, relation graphs, role matrices) straight from the schema.
Tutorials
Tutorial Description
Tutorial: Building an ISO 27001 ISMS with Rela Build a complete Information Security Management System
Tutorial: Hybrid Project Management with Rela Build a hybrid project management system
Scenarios
Scenario Description
Scenario: DevOps/SRE Runbooks & Infrastructure Operations DevOps/SRE runbooks and infrastructure operations
Scenario: ISO 27001 Information Security Management System ISO 27001 Information Security Management System
Scenario: Hybrid Project Management Hybrid project management documentation
Examples
Example Description
Ticket tracker — operator handbook A generated operator handbook for the demo ticket tracker, built by rela-docs — field tables, a mermaid lifecycle, a role matrix, and an annotated screenshot, all derived from the project's schema so they can't drift.

Project Structure

After running rela init:

your-project/
├── metamodel.yaml       # Entity types and relations config
├── entities/            # Markdown entity files (by type)
│   ├── requirements/
│   ├── decisions/
│   └── ...
├── relations/           # Markdown relation files
├── templates/           # Optional: templates for new entities/relations
│   ├── entities/        # One template per entity type
│   └── relations/       # One template per relation type
└── .rela/               # Cache (gitignored)

Core Traceability Chain

Requirement ──addresses──> Decision ──implements──> Solution ──realizes──> Component

Use rela analyze coverage to check for gaps in this chain.

License

AGPL-3.0 - See LICENSE for details.

Directories

Path Synopsis
cmd
rela command
rela-desktop command
rela-desktop runs the data entry application as a native desktop app using Wails.
rela-desktop runs the data entry application as a native desktop app using Wails.
rela-docs command
rela-docs renders a Markdown manual with embedded rela Lua islands (field tables, enum meanings, lifecycle/relation diagrams, role matrices, and live screenshot{} captures) to resolved Markdown.
rela-docs renders a Markdown manual with embedded rela Lua islands (field tables, enum meanings, lifecycle/relation diagrams, role matrices, and live screenshot{} captures) to resolved Markdown.
rela-server command
rela-server runs the data entry web application as a standalone HTTP server.
rela-server runs the data entry web application as a standalone HTTP server.
internal
acl
Package acl provides principal-aware authorization for entity and relation writes.
Package acl provides principal-aware authorization for entity and relation writes.
aclaudit
Package aclaudit is an on-demand linter for an acl.Policy loaded from `acl.yaml`.
Package aclaudit is an on-demand linter for an acl.Policy loaded from `acl.yaml`.
aclmap
Package aclmap materializes slices of the effective-access relation — who can perform a verb on an entity, and by which route — from the declarative ACL policy plus the graph.
Package aclmap materializes slices of the effective-access relation — who can perform a verb on an entity, and by which route — from the declarative ACL policy plus the graph.
affordances
Package affordances builds a policy-driven field/option/relation affordance resolver from an acl.yaml acl.Policy.
Package affordances builds a policy-driven field/option/relation affordance resolver from an acl.yaml acl.Policy.
ai
Package ai provides LLM access for rela via OpenAI-compatible providers.
Package ai provides LLM access for rela via OpenAI-compatible providers.
analysis
Package analysis exposes the read-only analysis facades the CLI uses to surface graph health: orphans, duplicates, gaps, cardinality violations, custom Lua validations, and orphan temp files left by interrupted writes.
Package analysis exposes the read-only analysis facades the CLI uses to surface graph health: orphans, duplicates, gaps, cardinality violations, custom Lua validations, and orphan temp files left by interrupted writes.
apiwire/v1
Package v1 holds the v1 data-entry API wire vocabulary: the JSON-shaped request/response types the server serializes to and that an in-process native bridge can consume directly.
Package v1 holds the v1 data-entry API wire vocabulary: the JSON-shaped request/response types the server serializes to and that an in-process native bridge can consume directly.
app
Package app provides factories that construct the concrete services needed by each rela entry point (cli, data-entry server, desktop, MCP).
Package app provides factories that construct the concrete services needed by each rela entry point (cli, data-entry server, desktop, MCP).
appbuild
Package appbuild assembles the focused services every project entry point (rela-server, rela-desktop, future bindings) needs from a project directory.
Package appbuild assembles the focused services every project entry point (rela-server, rela-desktop, future bindings) needs from a project directory.
appbuild/appbuildtest
Package appbuildtest provides a test fixture for assembling an appbuild.Services bundle.
Package appbuildtest provides a test fixture for assembling an appbuild.Services bundle.
attachment
Package attachment exposes the CLI-shaped facade for managing entity file attachments (attach, list).
Package attachment exposes the CLI-shaped facade for managing entity file attachments (attach, list).
audit
Package audit records every entity and relation write performed by the project as an append-only JSONL stream.
Package audit records every entity and relation write performed by the project as an append-only JSONL stream.
autocascade
Package autocascade executes the side effects of automation results produced by automation.Engine.
Package autocascade executes the side effects of automation results produced by automation.Engine.
automation
Package automation provides a trigger-action engine for entity lifecycle events.
Package automation provides a trigger-action engine for entity lifecycle events.
cache
Package cache provides small generic cache data structures.
Package cache provides small generic cache data structures.
calfeed
Package calfeed models calendar feeds and serializes them to calendar interchange formats (iCalendar and JSON) as a service separate from the store.
Package calfeed models calendar feeds and serializes them to calendar interchange formats (iCalendar and JSON) as a service separate from the store.
canonical
Package canonical produces a deterministic, backend-independent content hash for an entity.Entity or entity.Relation.
Package canonical produces a deterministic, backend-independent content hash for an entity.Entity or entity.Relation.
cli
Package cli wires the kong-based CLI.
Package cli wires the kong-based CLI.
cli/sync
Package sync implements the rela CLI sync client: a hash-indexed, topologically-ordered push/pull between a local fsstore project and a remote pgstore-backed rela-server's /api/sync/ API (FEAT-NJ9FEN, TKT-T4H4YK).
Package sync implements the rela CLI sync client: a hash-indexed, topologically-ordered push/pull between a local fsstore project and a remote pgstore-backed rela-server's /api/sync/ API (FEAT-NJ9FEN, TKT-T4H4YK).
cmdexec
Package cmdexec runs external commands safely for the "bytes in → bytes out" pattern shared by attachment processing and view export.
Package cmdexec runs external commands safely for the "bytes in → bytes out" pattern shared by attachment processing and view export.
conditionlint
Package conditionlint performs author-time validation of the condition expressions used by wizard forms (`visible_when` / `required_when`).
Package conditionlint performs author-time validation of the condition expressions used by wizard forms (`visible_when` / `required_when`).
config
Package config provides read-only access to project-root configuration files — the YAML/JSON files users check into their repo alongside metamodel.yaml (data-entry.yaml, schedules.yaml, and so on).
Package config provides read-only access to project-root configuration files — the YAML/JSON files users check into their repo alongside metamodel.yaml (data-entry.yaml, schedules.yaml, and so on).
conflict
Package conflict provides detection and resolution of git merge conflicts in entity and relation markdown files.
Package conflict provides detection and resolution of git merge conflicts in entity and relation markdown files.
dataentry
Package dataentry provides a config-driven data entry web application built on top of rela's metamodel system.
Package dataentry provides a config-driven data entry web application built on top of rela's metamodel system.
dataentryconfig
Package dataentryconfig contains the configuration types and validation logic for the data-entry web application.
Package dataentryconfig contains the configuration types and validation logic for the data-entry web application.
desktop
Package desktop provides desktop-specific functionality for the Wails desktop app, including user preferences persistence.
Package desktop provides desktop-specific functionality for the Wails desktop app, including user preferences persistence.
docs
Package docs implements the rela-docs "doc language": a Markdown file with embedded Lua "islands" that pull reference fragments from the schema and a seeded in-memory graph.
Package docs implements the rela-docs "doc language": a Markdown file with embedded Lua "islands" that pull reference fragments from the schema and a seeded in-memory graph.
docscapture
Package docscapture implements the browser-backed screenshot capture for the rela-docs screenshot{} island (Tier B).
Package docscapture implements the browser-backed screenshot capture for the rela-docs screenshot{} island (Tier B).
docscli
Package docscli is the command layer for the standalone `rela-docs` binary: it resolves a Markdown manual's rela Lua islands (field tables, lifecycles, relation graphs, role matrices, and live `screenshot{}` captures) against a project's metamodel + acl.yaml.
Package docscli is the command layer for the standalone `rela-docs` binary: it resolves a Markdown manual's rela Lua islands (field tables, lifecycles, relation graphs, role matrices, and live `screenshot{}` captures) against a project's metamodel + acl.yaml.
entity
Package entity defines the domain types for rela entities and relations.
Package entity defines the domain types for rela entities and relations.
entitymanager
Package entitymanager defines the EntityManager service — the "human intent" write path that runs automations, validation, and any policy concerns (future: ACL, audit logging, rate limiting).
Package entitymanager defines the EntityManager service — the "human intent" write path that runs automations, validation, and any policy concerns (future: ACL, audit logging, rate limiting).
entitymanager/entitymanagertest
Package entitymanagertest provides test doubles for the entitymanager.EntityManager interface.
Package entitymanagertest provides test doubles for the entitymanager.EntityManager interface.
frontmatter
Package frontmatter splits a YAML-frontmatter markdown document into its raw frontmatter block and body.
Package frontmatter splits a YAML-frontmatter markdown document into its raw frontmatter block and body.
git
Package git provides git operations for the data entry app.
Package git provides git operations for the data entry app.
htmlutil
Package htmlutil provides HTML post-processing utilities.
Package htmlutil provides HTML post-processing utilities.
importer
Package importer provides functionality to import entities and relations from JSON, YAML, and CSV files into rela projects.
Package importer provides functionality to import entities and relations from JSON, YAML, and CSV files into rela projects.
jwtauth
Package jwtauth verifies signed identity assertions (ES256 JWTs) from an upstream OIDC identity proxy against its published JWKS.
Package jwtauth verifies signed identity assertions (ES256 JWTs) from an upstream OIDC identity proxy against its published JWKS.
lua
Lua bindings for the ai.* module (ai.chat, ai.complete, ai.embed).
Lua bindings for the ai.* module (ai.chat, ai.complete, ai.embed).
mcp
coverage-ignore: MCP prompt handlers - tested via integration tests
coverage-ignore: MCP prompt handlers - tested via integration tests
mermaid
Package mermaid renders mermaid diagram source from neutral, primitive inputs.
Package mermaid renders mermaid diagram source from neutral, primitive inputs.
migration
Package migration provides schema migration support for rela project files.
Package migration provides schema migration support for rela project files.
natsort
Package natsort provides natural sorting for strings containing numbers.
Package natsort provides natural sorting for strings containing numbers.
openapi
Package openapi provides OpenAPI 3.1 spec generation from rela metamodels.
Package openapi provides OpenAPI 3.1 spec generation from rela metamodels.
pattern
Package pattern provides glob pattern parsing, validation, and regex conversion.
Package pattern provides glob pattern parsing, validation, and regex conversion.
predicate
Package predicate is a small, sandboxed expression-evaluation engine for boolean predicates over named values and host-registered functions.
Package predicate is a small, sandboxed expression-evaluation engine for boolean predicates over named values and host-registered functions.
predicatefns
Package predicatefns is the shared host-function standard library for the predicate engine.
Package predicatefns is the shared host-function standard library for the predicate engine.
principal
Package principal carries the identity attribution attached to each request: who initiated it (User) and through what entry point (Tool).
Package principal carries the identity attribution attached to each request: who initiated it (User) and through what entry point (Tool).
renametype
Package renametype handles the entity-type rename operation (metamodel + directory + per-file YAML frontmatter + template).
Package renametype handles the entity-type rename operation (metamodel + directory + per-file YAML frontmatter + template).
scheduler
Package scheduler runs Lua scripts on simple recurring schedules.
Package scheduler runs Lua scripts on simple recurring schedules.
schema
Package schema provides analysis and cleanup utilities for metamodel schemas.
Package schema provides analysis and cleanup utilities for metamodel schemas.
script
Package script orchestrates script execution for automations and user- initiated script runs.
Package script orchestrates script execution for automations and user- initiated script runs.
search
Package search provides full-text search over a store.Store, satisfied by a Backend (today: [bleveindex.Index]).
Package search provides full-text search over a store.Store, satisfied by a Backend (today: [bleveindex.Index]).
search/bleveindex
Package bleveindex provides a bleve-backed implementation of search.Backend for full-text entity search.
Package bleveindex provides a bleve-backed implementation of search.Backend for full-text entity search.
secrets
Package secrets loads per-script secret values from .rela/secrets.yaml.
Package secrets loads per-script secret values from .rela/secrets.yaml.
state
Package state provides a per-user key/value store for state that persists between runs but isn't part of the project's tracked source — UI state, render caches, scheduler bookkeeping.
Package state provides a per-user key/value store for state that persists between runs but isn't part of the project's tracked source — UI state, render caches, scheduler bookkeeping.
statemachine
Package statemachine compiles the declarative enum state machines in a metamodel (CustomType.Transitions, see TKT-E4LW2) into an executable form and enforces them on the entity write path.
Package statemachine compiles the declarative enum state machines in a metamodel (CustomType.Transitions, see TKT-E4LW2) into an executable form and enforces them on the entity write path.
storage
Package storage provides filesystem abstraction for rela's file I/O operations.
Package storage provides filesystem abstraction for rela's file I/O operations.
store
Package store provides the storage abstraction for rela workspaces.
Package store provides the storage abstraction for rela workspaces.
store/fsstore
Package fsstore provides a filesystem-backed implementation of store.Store.
Package fsstore provides a filesystem-backed implementation of store.Store.
store/graphquerynaive
Package graphquerynaive ships the unoptimised, backend-agnostic implementation of store.GraphQueryer.
Package graphquerynaive ships the unoptimised, backend-agnostic implementation of store.GraphQueryer.
store/memstore
Package memstore provides an in-memory implementation of store.Store.
Package memstore provides an in-memory implementation of store.Store.
store/pgstore
Package pgstore provides a PostgreSQL implementation of store.Store.
Package pgstore provides a PostgreSQL implementation of store.Store.
store/storetest
Package storetest provides a conformance test suite for store.Store implementations.
Package storetest provides a conformance test suite for store.Store implementations.
store/storeutil
Package storeutil provides shared helpers for store.Store implementations.
Package storeutil provides shared helpers for store.Store implementations.
sync
Package sync holds backend-neutral value types shared by the sync feature (FEAT-NJ9FEN).
Package sync holds backend-neutral value types shared by the sync feature (FEAT-NJ9FEN).
templating
Package templating: fsloader.go contains the filesystem primitives used by FSTemplater to read, discover, and generate entity/relation template files.
Package templating: fsloader.go contains the filesystem primitives used by FSTemplater to read, discover, and generate entity/relation template files.
tracer
Package tracer provides graph traversal operations (trace, path, orphan detection, cycle detection, clustering) as a service separate from the store.
Package tracer provides graph traversal operations (trace, path, orphan detection, cycle detection, clustering) as a service separate from the store.
transform
Package transform is the view-export engine: it converts markdown produced by a Renderer into an output format (PDF, DOCX, ...) by running a named, project-configured external command.
Package transform is the view-export engine: it converts markdown produced by a Renderer into an output format (PDF, DOCX, ...) by running a named, project-configured external command.
validation
Package validation provides custom validation rule checking for entities.
Package validation provides custom validation rule checking for entities.
validator
Package validator provides a Validator service that runs metamodel validation rules over a store.
Package validator provides a Validator service that runs metamodel validation rules over a store.
visibility
Package visibility is the read-side ACL enforcement seam: wrappers that row-gate and field-redact entity reads ABOVE the (deliberately ungated) base services, per DEC-ZBI39P.
Package visibility is the read-side ACL enforcement seam: wrappers that row-gate and field-redact entity reads ABOVE the (deliberately ungated) base services, per DEC-ZBI39P.
visibility/visibilitytest
Package visibilitytest is the conformance suite for the internal/visibility contracts (the analog of storetest's RunVisibleSearchTests): any visibility.Reader implementation and any visibility-decorated tracer.Tracer must pass it.
Package visibilitytest is the conformance suite for the internal/visibility contracts (the analog of storetest's RunVisibleSearchTests): any visibility.Reader implementation and any visibility-decorated tracer.Tracer must pass it.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL