π¦ doksnet
A Rust CLI tool for documentation β code mapping verification. Create lightweight symbolic links between documentation sections and code snippets, then verify that both sides stay synchronized using cryptographic hashes.
π Installation
From crates.io (Recommended)
# Install from crates.io
From GitHub Releases
Download pre-built binaries from GitHub Releases:
- Linux:
doksnet-linux-amd64 - Windows:
doksnet-windows-amd64.exe - macOS:
doksnet-macos-amd64(Intel) ordoksnet-macos-arm64(Apple Silicon)
From Source (Development)
# Clone and build from source
π Commands Overview
| Command | Purpose | Interactive | CI/CD Safe |
|---|---|---|---|
new |
Initialize a .doks file |
β | β |
add |
Create docβcode mappings | β | β |
edit <id> |
Edit specific mapping | β | β |
remove-failed |
Remove all failed mappings | β | β |
test |
Verify all mappings | β | β |
test-interactive |
Test with guided fixing | β | β |
π Usage Guide
1. Initialize Project
# Create .doks file in current directory
# Create .doks file in specific directory
What it does:
- Scans for documentation files (README.md, etc.)
- Prompts you to select default documentation file
- Creates
.doksconfiguration file
2. Create Documentation-Code Mappings
Interactive flow:
- Documentation partition:
README.md:15-25orREADME.md:10-20@5-30 - Content preview: Shows extracted documentation text
- Confirmation: Verify the selection is correct
- Code partition:
src/lib.rs:45-60orsrc/main.rs:10-25@10-50 - Content preview: Shows extracted code text
- Confirmation: Verify the selection is correct
- Description: Optional description for the mapping
- Hash generation: Creates Blake3 hashes and saves mapping
3. Edit Existing Mappings
# Edit by ID (first 8 characters sufficient)
What you can edit:
- Documentation partition reference
- Code partition reference
- Description
- Both partitions at once
Features:
- Shows current values
- Pre-fills input with existing values
- Previews new content before applying
- Updates hashes automatically
4. Test Mappings (CI/CD)
# Non-interactive testing for automation
Output:
- β PASS: Content matches stored hashes
- β FAIL: Content has changed
- Exit code 1 if any mappings fail (perfect for CI/CD)
5. Interactive Testing & Fixing
# Interactive mode with change preview
For each failed mapping, you can:
- Update hashes: Accept current content as new baseline
- Edit mapping: Redirect to
doksnet edit <id> - Remove mapping: Delete the broken mapping
- Skip: Leave as-is for now
Shows:
- Current content that changed
- Hash mismatches
- Detailed change previews
6. Bulk Remove Failed Mappings
# Remove all mappings that fail verification
Safety features:
- Lists all failed mappings before removal
- Shows failure reasons (doc/code/both)
- Requires confirmation before deletion
π Partition Format
Partitions use this lightweight format to reference file ranges:
<relative_path>:<start_line>-<end_line>@<start_col>-<end_col>
Examples:
README.md- Entire fileREADME.md:10-20- Lines 10-20README.md:15- Single line 15src/lib.rs:10-20@5-30- Lines 10-20, columns 5-30docs/guide.md:1-5@1-50- First 5 lines, first 50 characters
Notes:
- Line numbers are 1-indexed
- Column numbers are 1-indexed
- Ranges are inclusive
- Non-contiguous ranges require multiple mappings
π Hash-Based Verification
How it works:
- Text β Hash: Extract content from partition β Generate Blake3 hash
- Hash β Text: Re-extract content β Compare with stored hash
- Change Detection: Any character-level change produces different hash
What's detected:
- Content changes
- Whitespace modifications
- Line ending changes
- File deletions/moves
- Invalid partition ranges
π .doks File Structure
The .doks file uses a compact, machine-optimized format:
# .doks v2 - Compact format
version=0.2.0
default_doc=README.md
# Format: id|doc_partition|code_partition|doc_hash|code_hash|description
a1b2c3d4|README.md:10-15|src/lib.rs:20-35|abc123def456...|789xyz012abc...|API usage example
main-func|README.md:25-30|src/main.rs:1-10|fedcba987654...|123456789abc...|Main function example
Benefits of the compact format:
- π¦ 5x smaller than TOML (faster parsing, less storage)
- β‘ Machine-optimized (perfect for automation)
- π§ Grep-friendly (easy to analyze with standard tools)
- π Simple parsing (no complex dependencies)
π Typical Workflow
Local Development
# 1. Initialize project
# 2. Create mappings between docs and code
# 3. Test locally
# 4. When changes are detected
# 5. Edit specific mappings
# 6. Clean up broken mappings
CI/CD Integration
Using GitHub Action (Recommended):
# .github/workflows/docs.yml
name: Documentation Sync
on:
jobs:
verify-docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Pulko/doksnet@v1
Manual Installation:
# In your CI/CD pipeline
π― Use Cases
- API Documentation: Link examples in README to actual implementation
- Tutorial Sync: Ensure code samples in guides match working code
- Architecture Docs: Connect design decisions to code structures
- Code Reviews: Verify documentation updates accompany code changes
- Legacy Code: Track which docs describe which code sections
π GitHub Action
Doksnet provides a ready-to-use GitHub Action for seamless CI/CD integration:
Basic Usage
name: Documentation Sync Check
on:
jobs:
verify-docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Pulko/doksnet@v1
# Uses defaults: command='test', fail-on-error=true
Advanced Configuration
- uses: Pulko/doksnet@v1
with:
command: 'test' # Command to run
version: 'latest' # Doksnet version
working-directory: '.' # Directory to run in
fail-on-error: true # Fail workflow on issues
Action Inputs
| Input | Description | Default | Options |
|---|---|---|---|
command |
Doksnet command to run | test |
test, remove-failed |
version |
Doksnet version to use | latest |
latest, 0.2.0, etc. |
working-directory |
Directory to run doksnet in | . |
Any valid path |
fail-on-error |
Fail workflow if issues found | true |
true, false |
Action Outputs
| Output | Description |
|---|---|
result |
Full output from doksnet command |
exit-code |
Exit code (0 = success, 1 = failure) |
Common Patterns
Enforce Documentation Sync (Fail Build):
- uses: Pulko/doksnet@v1
# Fails CI if docs are out of sync (default behavior)
Warning Only (Don't Fail Build):
- uses: Pulko/doksnet@v1
with:
fail-on-error: false
Cleanup Failed Mappings:
- uses: Pulko/doksnet@v1
with:
command: 'remove-failed'
Benefits:
- β Zero setup - No need to install Rust/Cargo
- β‘ Fast - Cached dependencies, optimized for CI
- π§ Flexible - Configurable commands and error handling
- π Cross-platform - Works on Linux, Windows, macOS
π§ Future Extensions
- VSCode Extension: GUI for creating/managing mappings
- Diff Visualization: Show exact changes between versions
- Batch Operations: Mass edit/update operations
- Export Formats: Generate reports in various formats
Built with β€οΈ in Rust β’ Lightweight β’ Fast β’ Reliable