Skip to content
prod e051e98
Browse

Version management

Two version lines, never confused

There are two versions in play in a CodeCanyon project, and confusing them is how upgrades go sideways. One is the vendor’s version — the author’s release line, which you don’t control. The other is your fork’s version — the line you assign to your changes on top of theirs. Keeping the two clearly separated tells you, at any moment, exactly which set of changes you’re looking at.

graph TD
subgraph Vendor["Vendor's line (you don't control it)"]
AV1["author-v1.0.0"] --> AV2["author-v1.1.0"] --> AV3["author-v2.0.0"]
end
subgraph Yours["Your fork's line (SemVer you assign)"]
Y1["v1.0.0"] --> Y2["v1.1.0"] --> Y3["v1.2.0"]
end
AV1 -.->|you build on top of| Y1
Vendor’s lineYour fork’s line
Looks likeauthor-v1.0.0, author-v2.0.0v1.0.0, v1.1.0
Who sets itThe CodeCanyon authorYou
What it marksA frozen snapshot of vendor code as shippedYour changes layered on top
Why it existsSo you can always diff back to pristine vendor codeSo you can track and roll back your work

The author- prefix is the tell: anything starting with author- is a snapshot of the vendor’s code exactly as they shipped it — your safety net to diff against. Anything without the prefix is yours.

Your line follows Semantic Versioning — three numbers, MAJOR.MINOR.PATCH, each with a precise meaning:

MAJOR . MINOR . PATCH
2 . 1 . 3
│ │ └── bug fixes only
│ └────────── new features, backward compatible
└────────────────── breaking changes
You changed…BumpExample
Something that breaks existing behavior (renamed a config key, changed an API)MAJOR1.4.22.0.0
A new feature that doesn’t break anythingMINOR1.4.21.5.0
A bug fix or typo, nothing newPATCH1.4.21.4.3

The discipline that makes this useful: bump the version and record the change in a CHANGELOG at the same time. A version number with no story behind it tells you nothing six months later.

Keep a CHANGELOG.md where every version has a dated entry grouped by the kind of change. This is the difference between an upgrade you understand and one you fear:

# Changelog
## [1.2.0] - 2026-06-09
### Added
- New page-view tracking event
### Changed
- Better error handling on API timeouts
### Fixed
- Date parsing crash on null values
## [1.1.0] - 2026-05-20
### Added
- Consent management support

The standard categories, and when to reach for each:

CategoryUse when
AddedA new feature
ChangedAn existing feature behaves differently
DeprecatedA feature will be removed soon
RemovedA feature is gone in this version
FixedA bug fix
SecurityA security-related change

The payoff of keeping the lines separate shows up when the vendor ships an update. Because you have a frozen author-vX.X.X snapshot, you can diff the new vendor release against it to see exactly what they changed — and because your fork’s SemVer + CHANGELOG records what you changed, you can reason about the two sets of changes independently instead of as one tangled mess.

The size of your fork’s bump after an upgrade depends on how the vendor’s change lands:

  • Backward-compatible vendor change you absorb cleanly → a MINOR or PATCH bump on your line.
  • Breaking vendor change that forces you to adjust your own modules or customizations → read your CHANGELOG, plan the work, and cut a MAJOR bump.

Version discipline is also what makes rollback calm. There are three levels, smallest first:

graph TD
Issue["Something's wrong"]
Issue --> L1["Config disable<br/>flip the .env toggle off"]
L1 -->|not enough| L2["Code rollback<br/>git revert to the last good commit"]
L2 -->|not enough| L3["Full rollback<br/>redeploy the previous release"]
  1. Config disable — flip a module’s .env flag to false and clear the config cache. The module stops instantly, no code change.
  2. Code rollbackgit revert to the last known-good commit on your line. Your SemVer tags make “last known-good” easy to find.
  3. Full rollback — if you use zero-downtime deploys, redeploy the previous release wholesale.

You reach for the smallest level that fixes the problem — most issues never get past level 1.

Your change is…BumpAlso do
A typo or bug fixPATCHCHANGELOG → Fixed
A new, backward-compatible featureMINORCHANGELOG → Added
A breaking changeMAJORCHANGELOG → Changed/Removed + an upgrade note