A Rust-powered release CLI for JS/TS monorepos — version bumps, changelogs, pre-release mode, and npm publishing.
This project contains two components:
| Component | Description |
|---|---|
NAPI addon (vp_release) |
Native Node.js addon built with napi-rs |
CLI (oxrls) |
Rust binary for release management |
npm install @bdbchgg/oxrls --save-devThen add this to your package.json scripts:
{
"scripts": {
"oxrls": "oxrls", # for convenience, you can run `npm run oxrls` instead of `npx oxrls`
"changeset": "oxrl new", # create a new release file (similar to `changeset add`)
"bump": "oxrls bump", # apply version bumps, update deps, generate changelogs, similar to `changeset version`
"release": "oxrls release" # publish to npm (after bumping versions)
}
}# Initialize
oxrls init
# Create a release file
oxrls new --package @scope/core:patch --summary "Fix transaction mapping bug"
# Preview
oxrls status
oxrls bump --dry-run
# Pre-release mode (optional)
oxrls pre # interactive, or
oxrls pre enter alpha --package @scope/core # enter pre-release mode for @scope/core with "alpha" tag
oxrls pre exit @scope/core # exit pre-release mode for @scope/core
# Alternatively, you can set pre-release mode in the config file for specific packages or groups, and it will be applied automatically when bumping versions.
# Just make sure to also remove the counter of the pre-released package in pre.json
# Apply
oxrls bump
# Publish to npm
oxrls releaseThis project was vibecoded. I'm still learning Rust, and I use AI agents to review code, explain patterns, and help me understand what's going on. That said, I don't just blindly trust the output: I read through every change, I understand (most of) what the code does, and I make deliberate decisions. I also enforce TDD to make sure existing features don't break as the project evolves.
I'd love to get some eyes from the Rust community on best practices, patterns, and anything that could be improved. Pull requests, issues, and feedback are very welcome.
| Command | Description |
|---|---|
oxrls init |
Create oxrls.json config and .oxrls/ directory |
oxrls new |
Create a release file (interactive or --package --summary) |
oxrls status |
Show pending release files and calculated bumps |
oxrls bump |
Apply version bumps, update deps, generate changelogs |
oxrls release |
Publish bumped packages to npm |
oxrls pre |
Manage pre-release mode (interactive or enter/exit) |
See the docs/ directory:
- Getting Started — installation, quick start, workflow
- Configuration — all config options (changelog, pre-mode, fixed/linked groups)
- Usage — full command reference, release files, version rules, internals
cargo build --release
# binary at target/release/oxrlsThe NAPI addon provides native Rust bindings for Node.js:
yarn build
yarn test