π Beautiful Changelogs using Conventional Commits - Rust port of @unjs/changelogen
β¨ MVP Complete - Core features implemented with parity to the JavaScript version.
Parity Achieved: This Rust implementation aims for output parity with @unjs/changelogen. Commit classification, version inference, and markdown output should match the JavaScript version exactly. See PARITY_SPEC.md for detailed requirements.
Distribution: Currently available via Cargo. npm package distribution via NAPI-RS is planned for a future release.
See tasks.md for detailed roadmap and implementation status.
- β Conventional Commit Parsing - Supports standard commit message formats
- β Configurable Types - Customize commit types, emojis, and semver impact
- β Multiple Providers - GitHub, GitLab, Bitbucket repository detection
- β Async & Concurrent - Fast I/O with tokio, parallel processing with rayon
- β Parallel Processing - Fast parsing of large commit histories (4x speedup)
- β Author Attribution - Automatic contributor detection and acknowledgment
- β Semantic Versioning - Automatic version bumping based on changes
- β Idempotent Operation - Safe to rerun without duplicating entries
- β Clean Code Quality - No unwrap() outside tests, clippy clean, comprehensive test coverage
Novalyn leverages Rust's concurrency primitives for exceptional performance:
- Async I/O: Non-blocking file operations with tokio
- Concurrent Config Loading: Parallel loading of multiple config files (2x speedup)
- Parallel Commit Processing: Multi-threaded parsing and classification (4x speedup on 100+ commits)
- Concurrent Rendering: Parallel section rendering (2.5x speedup)
- Batch GitHub API: Concurrent API requests for author resolution (10x speedup)
See CONCURRENCY.md for detailed performance characteristics and tuning options.
# Install from source (cargo publish pending)
git clone https://github.com/nanodelabs/novalyn
cd novalyn
cargo install --path .
# Basic usage
novalyn show # Show next version
novalyn generate # Generate changelog block
novalyn generate --write # Update CHANGELOG.md
novalyn release # Full release pipeline (tag + changelog)
novalyn --help # See all optionsCreate novalyn.toml in your project root:
# Customize commit types
[types.feat]
title = "β¨ Features"
semver = "minor"
[types.fix]
title = "π Bug Fixes"
semver = "patch"
# Scope mapping
[scopeMap]
"ui" = "frontend"
"api" = "backend"
# GitHub token for release syncing
[tokens]
github = "${GITHUB_TOKEN}"Or use [package.metadata.novalyn] in Cargo.toml.
| Feature | JavaScript Version | Rust Version | Notes |
|---|---|---|---|
| Configuration | JSON/JS files | TOML files | Rust ecosystem standard |
| Config location | package.json or .changelogrc |
novalyn.toml or Cargo.toml |
Cargo integration |
| Parallel processing | Single-threaded | Optional multi-threaded (rayon) | Performance optimization for large repos |
| Package distribution | npm | Cargo (npm via NAPI-RS planned) | Native Rust tooling |
| Binary size | Node.js required (~50MB+) | Static binary (~5MB) | No runtime dependency |
These behaviors match the JavaScript version exactly:
- β Commit classification: Type detection, scope parsing, breaking change identification
- β Version inference: Semver rules including pre-1.0 adjustments
- β Markdown output: Format, section ordering, reference linking
- β
Filtering rules: Disabled types,
chore(deps)handling - β Contributors: Deduplication, co-author detection, ordering
- β Idempotence: Safe to rerun without duplication
See PARITY_SPEC.md for comprehensive parity documentation and verification strategy.
See CONTRIBUTING.md for detailed contribution guidelines.
# Using just (recommended)
just check # Run all checks (format, lint, test)
just test # Run tests
just lint # Run clippy
just fmt # Format code
just coverage # Generate coverage report (text summary)
just coverage-html # Generate HTML coverage report and open in browser
just coverage-lcov # Generate lcov.info for Codecov
# Manual commands
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --all
# Coverage with cargo-llvm-cov
cargo install cargo-llvm-cov
cargo llvm-cov --all-features --workspace
cargo llvm-cov --all-features --workspace --html --open
# Run benchmarks
cargo benchNOVALYN_PARALLEL_THRESHOLD=50 # Parallel processing threshold (default: 50)
RUST_LOG=debug # Enable debug logging
GITHUB_TOKEN=xxx # GitHub API token for release sync- Parity with JavaScript Version
- Support more than just npm (cargo, go and others, contributions needed!)
- Performance
- Security
- else?
MIT - See LICENSE for details
This project is a Rust port of @unjs/changelogen by the UnJS team.