This is the EXDA versioning workflow.
-
Latest release version:
2.13.0 -
Latest release tag:
browser-MVP-v2.13.0 -
Updated on:
2026-05-03The safe rule is: -
develop on
CODEX-Updates -
release from
main -
create the release tag from
main
CODEX-Updates: development branchmain: stable branch for releases
These are the steps:
- Make changes in
CODEX-Updates. - Test the changes in
CODEX-Updates. - If the changes work, commit and push them to
CODEX-Updates. - When you are ready to release, switch to
main. - Pull the latest
main. - Merge
CODEX-Updatesintomain. - Push
main. - Bump the version on
main. - Create the release tag from
main. - Push the tag.
Short version:
develop on CODEX-Updates -> test -> commit -> merge into main -> bump version on main -> tag on main
Use this while building features:
git switch CODEX-Updates
git status --short --branchMake your changes, test them, then commit and push:
git add .
git commit -m "update"
git push origin CODEX-UpdatesImportant:
- do not create the release tag from
CODEX-Updates - do not make the public release from
CODEX-Updates
Use this only when you want to send a version to users.
Before switching branches:
git status --short --branchIf there are local edits, clean them first.
If you want to discard all local unstaged changes:
git restore .Why this matters:
- if
git switch mainfails, you stay on the current branch - if you stay on
CODEX-Updates, the version bump and tag can be created from the wrong branch
git switch main
git pull --ff-only origin main
git branch --show-currentThis must print:
main
If Git prints Aborting, stop there. You are not on main.
First switch to main, then merge CODEX-Updates into it:
git switch main
git merge CODEX-Updates
git push origin mainThis is the step that moves the tested development work into the release branch.
If there are merge conflicts:
- resolve them first
- complete the merge
- push
main - only then continue
npm version <semver> --no-git-tag-version
git add package.json package-lock.json
git commit -m "Bump app version to <semver>"
git push origin mainExample:
npm version 1.18.0 --no-git-tag-version
git add package.json package-lock.json
git commit -m "Bump app version to 1.18.0"
git push origin maingit branch --show-currentThis must still print:
main
Use the format:
browser-vMAJOR.MINOR.PATCH
Example:
git tag -a browser-v1.18.0 -m "browser-v1.18.0"
git push origin browser-v1.18.0If you run the commands manually (without ./release.sh), update ## Current Release in this file before committing on main.
git switch CODEX-Updates
git status --short --branch
git add .
git commit -m "Release-ready changes"
git push origin CODEX-Updates
git status --short --branch
git restore .
git switch main
git pull --ff-only origin main
git branch --show-current
git merge CODEX-Updates -m "Merge CODEX-Updates into main"
git push origin main
npm version 2.10.0 --no-git-tag-version
git add package.json package-lock.json VERSIONING.md
git commit -m "Prepare release 2.10.0 (browser-MVP-v2.10.0)"
git push origin main
git branch --show-current
git tag -a browser-MVP-v2.10.0 -m "browser-MVP-v2.10.0"
git push origin browser-MVP-v2.10.0
git switch CODEX-Updates
git merge main
git push origin CODEX-UpdatesIf you do not want to copy/paste all release commands every time, use:
./release.shThe script will:
- show current branch, current version, and latest tag
- ask only for the new release tag (must end with
vMAJOR.MINOR.PATCH) - auto-detect the new app version from the tag
- run the full release flow:
- commit/push
CODEX-Updateschanges - merge
CODEX-Updatesintomain - bump version on
mainif needed - update
VERSIONING.mdwith latest release version, tag, and date - create and push the tag from
main - merge
mainback intoCODEX-Updates
- commit/push
- Develop in
CODEX-Updates - Test in
CODEX-Updates - Commit to
CODEX-Updates - Merge into
main - Bump version on
main - Tag on
main
- do not tag from
CODEX-Updates - do not bump the public release version on
CODEX-Updates - do not continue if
git switch mainfails - do not ignore an
Abortingmessage from Git - do not reuse an existing tag name unless you intentionally want to replace it
That usually means you still have local changes.
Check:
git status --short --branchThen restore, commit, or stash the blocking changes.
If you want to discard all local unstaged changes:
git restore .Check:
git branch --show-currentIf it says CODEX-Updates, the version bump was created on the wrong branch.
Check:
git show --no-patch --decorate <tag-name>If the tag was already pushed, be careful. In many cases, creating a new patch version is safer than rewriting a public tag.
- Bug fix: increase
PATCHExample:1.17.0->1.17.1 - Backward-compatible feature: increase
MINORExample:1.17.0->1.18.0 - Breaking change: increase
MAJORExample:1.17.0->2.0.0
Show current branch:
git branch --show-currentShow current version string:
git describe --tags --always --dirtyInspect app version:
npm pkg get versionList browser tags:
git tag --list 'browser-v*'