v0.7.1 — M21 rename and static graph export

Higher-level tooling for understandable software

M21 is an experiment in higher-level software tooling: tools that help people build systems that stay maintainable, extensible, reliable, professional, clean, and understandable as they grow.

Get started Read the vision View project graph See how it works
$ npx @moejay/m21 ./spec/
Vision

Higher-level tooling for understandable software

Specs describe intent

Capture what each module is responsible for, what it depends on, and what it deliberately does not own.

Contracts over vibes

Dependency edges name the exact features they use, making architecture traceable instead of implicit.

Living documentation

Specs, Gherkin scenarios, test results, and the graph reinforce each other so docs do not drift from behavior.

Read the full vision
Features

Everything you need

Interactive graph

D3-powered dependency visualization with zoom, pan, and drag. Click any node to explore its details.

Tree-and-groups layout

The default view combines dependency depth with group clustering. Drag nodes or group labels to rearrange, lock nodes for a stable map, or reverse the tree direction.

Inline editing

Edit spec bodies and feature files directly in the browser. Changes save back to disk instantly.

Live reload

Dev server watches your files and pushes changes via SSE. Edit in your editor, see it update in real time.

Feature tracking

Declare which features each module uses from its dependencies. Gherkin feature files define the interface — uses tracks the contracts.

Group clustering

Organize specs into groups. Modules in the same group are visually clustered with colored hulls in the graph.

Test results overlay

Feed M21 a Cucumber JSON or Jest/vitest report and every node is ringed green/red/amber with a passed/total count. Click scenarios in the side panel to inspect step status and source-backed Given/When/Then definition snippets.

How it works

Three steps to a living spec graph

Write specs

Create .md files with YAML frontmatter declaring name, depends_on with uses, group, tags, and a features path.

Add features

Write standard Gherkin .feature files with Scenarios and Given/When/Then steps. Link them from your spec.

Visualize

Run m21 ./spec/ and open the browser. Explore your dependency graph, click nodes, and drag nodes or group labels when you want to rearrange the map.

---
name: persistence
description: SQLite database layer
group: infrastructure
tags: [database, storage]
depends_on:
  - name: bootstrap
    uses: [project-scaffolding]
features: features/persistence/
---

# Persistence

Handles the database abstraction layer.
Uses SQLite for local-first storage.