| Crates.io | oxur-odm |
| lib.rs | oxur-odm |
| version | 0.3.3 |
| created_at | 2026-01-08 17:33:27.388502+00 |
| updated_at | 2026-01-25 06:41:05.63882+00 |
| description | An odd document manager - CLI tool for managing design documentation |
| homepage | |
| repository | https://github.com/oxur/oxur |
| max_upload_size | |
| id | 2030756 |
| size | 862,447 |
A command-line tool for managing design documents with YAML frontmatter, git integration, and automatic indexing.
cd design
cargo build --release
The binary will be at target/release/odm.
# List all documents
odm list
# Create a new document
odm new "My Feature Design"
# Add an existing document
odm add path/to/document.md
# Transition a document to review
odm transition docs/01-draft/0001-my-feature.md "under review"
# Validate all documents
odm validate
# Update the index
odm update-index
odm list (alias: ls)List all design documents, optionally filtered by state.
# List all documents
odm list
# List only drafts
odm list --state draft
# Show full details
odm list --verbose
odm show <number>Display a specific document by number.
# Show document with full content
odm show 42
# Show only metadata
odm show 42 --metadata-only
odm new <title>Create a new design document from template.
# Create with auto-detected author
odm new "Feature Name"
# Specify author
odm new "Feature Name" --author "Alice"
odm add <path>Add a document with full processing (numbering, headers, git staging).
# Add a document
odm add ~/Downloads/new-design.md
# Preview what would happen
odm add ~/Downloads/new-design.md --dry-run
odm add-headers <path> (alias: headers)Add or update YAML frontmatter headers.
odm add-headers docs/01-draft/0001-feature.md
odm transition <path> <state> (alias: mv)Transition a document to a new state.
odm transition docs/01-draft/0001-feature.md "under review"
Valid states:
odm sync-location <path> (alias: sync)Move document to match its YAML state header.
odm sync-location docs/wrong-dir/0001-feature.md
odm validate (alias: check)Validate all documents for consistency.
# Check for issues
odm validate
# Auto-fix issues where possible
odm validate --fix
odm update-index (alias: sync-index)Synchronize the index with documents on filesystem.
odm update-index
odm indexGenerate the index file.
# Generate markdown index
odm index
# Generate JSON index
odm index --format json
Documents progress through these states:
Each document should have YAML frontmatter:
---
number: 1
title: "Feature Name"
author: Alice Smith
created: 2024-01-15
updated: 2024-01-20
state: Draft
supersedes: null
superseded-by: null
---
# Feature Name
## Overview
...
docs/
├── 00-index.md # Auto-generated index
├── 01-draft/ # Draft documents
├── 02-under-review/ # Documents under review
├── 03-revised/ # Revised documents
├── 04-accepted/ # Accepted documents
├── 05-active/ # Active implementation
├── 06-final/ # Final documents
├── 07-deferred/ # Deferred documents
├── 08-rejected/ # Rejected documents
├── 09-withdrawn/ # Withdrawn documents
└── 10-superseded/ # Superseded documents
# 1. Create from template
odm new "Authentication System"
# 2. Edit the document
vim docs/01-draft/0001-authentication-system.md
# 3. When ready for review
odm transition docs/01-draft/0001-authentication-system.md "under review"
# 4. Update index
odm update-index
# Add document with full processing
odm add ~/Documents/my-design.md
# The tool will:
# - Assign number (e.g., 0042)
# - Move to project
# - Place in draft directory
# - Add YAML headers
# - Stage with git
# - Update index
# After manually moving files
git mv 01-draft/*.md 02-under-review/
# Fix YAML states to match new location
for file in 02-under-review/*.md; do
odm sync-location "$file"
done
# Update index
odm update-index
Make sure you're in a directory with design docs or specify the docs directory:
odm --docs-dir path/to/docs list
Run odm validate --fix to automatically correct mismatches.
Run odm update-index to sync the index.
Ensure you're in a git repository and have committed the docs directory.
odm validate before committing--dry-run with add to preview changesls, mv, sync)