rela

module
v0.0.0-...-dcf4134 Latest Latest
Warning

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

Go to latest
Published: Jun 10, 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 --title "System must support 1000 users"
rela create decision --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
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
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

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-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.
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.
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.
cli
Package cli wires the kong-based CLI.
Package cli wires the kong-based CLI.
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.
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.
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
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.
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).
rename
Package rename implements entity ID renames against a store.Store: it updates the entity, rewrites every incident relation (in either direction) to use the new ID, and removes the old entity and old relation files.
Package rename implements entity ID renames against a store.Store: it updates the entity, rewrites every incident relation (in either direction) to use the new ID, and removes the old entity and old relation files.
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.
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.
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.
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.

Jump to

Keyboard shortcuts

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