Skip to main content

Versioning

Control4 identifies a driver build by the integer <version> in driver.xml, and Director only reloads a driver when it sees a higher number. driverforge manages that integer for you, using a versioning scheme you choose once during driverforge init.

The two schemes

Your scheme is recorded in .driverforge/config when you initialise the project:

Date is the default for new drivers. Versions are the date plus a two-digit sequence: 2026070501 is the first version of 5 July 2026. The first bump on a given day jumps to that day's 01; later bumps the same day count up from there. The number always grows, reads as a date at a glance, and needs no bookkeeping. (Ship more than 99 times in a day and the sequence simply spills forward; it stays monotonic.)

Integer is a plain counter: each bump adds one, preserving any zero-padding. This is what driverforge init proposes for an existing driver whose <version> doesn't look like a date, so an established numbering scheme is never silently converted. The wizard states which scheme it detected before anything is written.

When the version changes

CommandEffect on <version>
driverforge buildNever changes it. The driver builds exactly as authored.
driverforge build --incrementBumps per your scheme, persisted to driver.xml after a successful build.
driverforge build --version NStamps the exact value you give, persisted to driver.xml after a successful build.
driverforge syncNever changes it. A hot-swap updates the running instance without a reload.
driverforge deployBumps per your scheme. Director needs a higher version to reload, so every deploy consumes a version slot.

Uninitialised projects

Plain driverforge build works on any driverpackager-style project with no account and no setup, and the version passes through exactly as authored. What driverforge init unlocks is version management and the ship commands: bumping needs a scheme, and the scheme is chosen during init. Without one, --increment stops with a friendly "Versioning not configured" pointing you at driverforge init, and sync/deploy require an initialised project up front.

--version is the exception: an explicit value needs no scheme, so it works anywhere, initialised or not.