This document defines the release and versioning policy for Node Plane.
The goal is to keep the process simple:
- one stable branch
- one integration branch
- predictable version numbers
- clear rules for alpha builds and stable releases
Stable branch.
Rules:
- only stable releases live here
- versions on
mainusex.y.z - production should track
main
Examples:
0.1.00.1.10.2.0
Integration branch.
Rules:
- new work is merged here first
- versions on
devusex.y.z-alpha.N - staging or test deployments should track
dev
Examples:
0.2.0-alpha.10.2.0-alpha.20.2.0-alpha.3
Short-lived working branches.
Rules:
- branch from
dev - merge back into
dev - do not release directly from
feature/*
Examples:
feature/xray-traffic-fixfeature/admin-ux-cleanupfeature/server-metrics
Node Plane uses Semantic Versioning with prerelease labels.
Stable releases:
x.y.z
Alpha releases:
x.y.z-alpha.N
Examples:
0.1.00.1.10.2.0-alpha.10.2.0-alpha.20.2.0
The project version is stored in:
VERSION
Increase z for:
- bug fixes
- small UX fixes
- minor internal improvements
- low-risk maintenance changes
Examples:
0.1.0->0.1.10.1.1->0.1.2
Increase y for:
- new features
- new screens
- new admin actions
- meaningful workflow improvements
Examples:
0.1.2->0.2.00.2.0->0.3.0
Increase x for:
- breaking changes
- incompatible config changes
- incompatible storage or deployment changes
- anything that requires explicit migration or coordination
Examples:
0.9.4->1.0.01.3.2->2.0.0
Alpha builds are used on dev.
Rules:
- start a new development cycle with
x.y.z-alpha.1 - bump the alpha counter after a meaningful batch of changes
- keep the base version stable until release
Example:
main: 0.1.0
dev: 0.2.0-alpha.1
dev: 0.2.0-alpha.2
dev: 0.2.0-alpha.3
main: 0.2.0
Recommended interpretation:
alpha.1— first testable build for the next releasealpha.2+— additional testable builds after fixes or new changes
Stable releases should always be tagged.
Format:
vX.Y.Z
Examples:
v0.1.0v0.1.1v0.2.0
Alpha tags are optional.
If used, keep the same format:
v0.2.0-alpha.1v0.2.0-alpha.2
Recommended minimum:
- tag every stable release
- alpha tags only when they add real value
- Create a branch from
dev. - Implement the change in
feature/*. - Merge the change into
dev. - If the result should be tested as a new build, bump
VERSIONondev. - Deploy or test from
dev.
After shipping a stable release from main:
- Decide the next target version.
- Update
VERSIONondevto the next alpha.
Example:
- current stable:
0.1.0 - next cycle on
dev:0.2.0-alpha.1
- Ensure
devis in a releasable state. - Update
VERSIONfromx.y.z-alpha.Ntox.y.z. - Merge the release into
main. - Create a git tag
vX.Y.Z. - Deploy production from
main.
Release tags and VERSION must always match.
Examples:
- tag
v0.3.1-alpha.3requiresVERSION=0.3.1-alpha.3 - tag
v0.4.0requiresVERSION=0.4.0
This repository includes a helper:
scripts/tag_release.sh
The helper:
- validates the tag format
- checks that
VERSIONmatches the tag without thevprefix - refuses to tag a dirty tracked worktree
- refuses to overwrite an existing tag
Example:
./scripts/tag_release.sh v0.3.1-alpha.3Recommended release order:
- Update
VERSION. - Commit the version bump.
- Run
./scripts/tag_release.sh vX.Y.Z[-alpha.N]. - Push the branch and tag.
Use this as the default:
- production:
main - staging or test bot:
dev - daily work:
feature/*
If the next release is only a fix release:
main:0.1.0dev:0.1.1-alpha.1- after testing:
main:0.1.1- tag:
v0.1.1
main:0.1.0dev:0.2.0-alpha.1- more changes:
0.2.0-alpha.20.2.0-alpha.3
- release:
main:0.2.0- tag:
v0.2.0
If you want the short version, it is this:
mainis stabledevis prereleasefeature/*branches merge intodevmainusesx.y.zdevusesx.y.z-alpha.N- stable releases are tagged as
vX.Y.Z VERSIONis the source of truth for the app version