IFM Release Channels
Versioning, promotion criteria, and release management for all IFM products.
Versioning Scheme
Semantic Versioning 2.0 (MAJOR.MINOR.PATCH)
| Component | When to Increment | Example |
|---|---|---|
| MAJOR | Breaking protocol changes, incompatible API, wire format changes | 1.0.0 → 2.0.0 |
| MINOR | New features, new APIs, new frequencies types, backward compatible | 1.2.0 → 1.3.0 |
| PATCH | Bug fixes, security patches, performance improvements | 1.2.3 → 1.2.4 |
Pre-release identifiers (for non-stable channels):
1.3.0-beta.1— Beta release1.3.0-nightly.20241215— Nightly build1.3.0-rc.1— Release candidate
Channel Definitions
🌙 Nightly (nightly)
| Aspect | Details |
|---|---|
| Trigger | Every merge to main branch |
| Version | MAJOR.MINOR.PATCH-nightly.YYYYMMDD.HHMM (e.g., 1.3.0-nightly.20241215.0300) |
| Artifacts | All Tier 1 targets |
| Testing | Unit tests + integration tests (subset, ~15 min) |
| Signing | ✅ cosign (ephemeral key) |
| Retention | 30 days (auto-cleanup) |
| Audience | CI integration, early adopters, framework authors |
| Install | curl -fsSL https://ifm.sh/install-nightly.sh | bash |
| Docker | ghcr.io/ifm/ifm-node:nightly |
| npm | @ifm/sdk@nightly (dist-tag) |
Promotion Criteria: None — automatic on merge.
🧪 Beta (beta)
| Aspect | Details |
|---|---|
| Trigger | Manual (Release Manager) — every 2 weeks from main |
| Version | MAJOR.MINOR.PATCH-beta.N (e.g., 1.3.0-beta.1) |
| Artifacts | All Tier 1 + Tier 2 targets |
| Testing | Full test suite + E2E + soak tests (2+ hours) |
| Signing | ✅ cosign (production key) |
| Retention | Until next stable (or 3 betas) |
| Audience | Power users, plugin authors, early deployments |
| Install | curl -fsSL https://ifm.sh/install-beta.sh | bash |
| Docker | ghcr.io/ifm/ifm-node:beta |
| npm | @ifm/sdk@beta (dist-tag) |
Promotion to Stable:
- ✅ All CI passes (unit, integration, E2E, cross-platform)
- ✅ No critical/regressions open
- ✅ Performance benchmarks within 5% of previous stable
- ✅ Security scan clean (no high/critical CVEs)
- ✅ Documentation updated for new features
- ✅ Migration guide published (if breaking changes)
- ✅ Release Manager + 1 Core Maintainer approval
✅ Stable (stable, latest)
| Aspect | Details |
|---|---|
| Trigger | Manual (Release Manager) — every 6 weeks or as needed |
| Version | MAJOR.MINOR.PATCH (e.g., 1.3.0) |
| Artifacts | All targets (Tier 1 + Tier 2 + mobile) |
| Testing | Full suite + release validation + canary deploy |
| Signing | ✅ cosign (production key, hardware-backed) |
| Retention | Permanent |
| Audience | Production, general public, package managers |
| Install | curl -fsSL https://ifm.sh/install.sh | bash (default) |
| Docker | ghcr.io/ifm/ifm-node:stable, :latest, :v1.3.0 |
| npm | @ifm/sdk@latest (default dist-tag) |
Promotion from Beta:
- All Beta criteria +
- ✅ 2-week soak in beta channel (or 1 week for patch)
- ✅ Zero P0/P1 bugs reported in beta
- ✅ Package manager PRs prepared (Homebrew, winget, etc.)
- ✅ Changelog finalized
- ✅ Blog post / release notes drafted
- ✅ Unanimous Core Team approval
🏢 LTS (lts, lts-v1)
| Aspect | Details |
|---|---|
| Trigger | Annual — first stable of the year becomes LTS candidate |
| Version | MAJOR.MINOR.PATCH-lts.N (e.g., 1.2.5-lts.1) |
| Base | Forked from stable branch (release/v1.x) |
| Testing | Full suite + extended compatibility matrix |
| Support | 2 years from LTS designation |
| Backports | Security fixes only (no features) |
| Audience | Enterprise, embedded, regulated environments |
| Docker | ghcr.io/ifm/ifm-node:lts, :lts-v1 |
| npm | @ifm/sdk@lts (dist-tag) |
LTS Branches:
LTS Policy:
- Only security fixes and critical bug fixes backported
- New features → next MINOR on
main - Maximum 1 PATCH per month (batched)
- Announced 3 months before EOL
Channel Promotion Flow
Version Coordination Across Products
All IFM products in a release share the same version number:
| Product | Version | Notes |
|---|---|---|
ifm-cli | 1.3.0 | Binary |
ifm-node | 1.3.0 | Binary + Docker |
@ifm/sdk | 1.3.0 | npm |
@ifm/sdk-wasm | 1.3.0 | npm |
@ifm/react | 1.3.0 | npm |
@ifm/vue | 1.3.0 | npm |
ifm-python | 1.3.0 | PyPI |
ifm-go | v1.3.0 | Go module (prefix v) |
libifm | 1.3.0 | C library |
ifm-android | 1.3.0 | Maven (no v) |
IFM (iOS) | 1.3.0 | CocoaPods/SPM |
ifm_flutter | 1.3.0 | pub.dev |
ifm-pwa | 1.3.0 | Static site (HTTPS/CDN) |
Exception: Cargo packages use 1.3.0 (no v prefix), Go uses v1.3.0.
Release Branching Strategy
Rules:
main= always deployable (protected, requires PR + CI)- Nightly = auto from
main - Beta = cut from
mainby Release Manager - Stable = cut from Beta branch (or
mainfor patches) - Hotfixes = branch from target channel, PR back to
main+ channel
Release Checklist (Release Manager)
Pre-Release (T-1 week)
- [ ] Create release branch (
release/vX.Y.Zfrom beta/main) - [ ] Update
CHANGELOG.mdwith all changes since last stable - [ ] Verify all CI pipelines green on release branch
- [ ] Run full benchmark suite, compare to previous stable
- [ ] Security scan (cargo audit, npm audit, osv-scanner)
- [ ] Prepare package manager PRs (draft)
Release Day (T-0)
- [ ] Tag release:
git tag -s v1.3.0 -m "Release v1.3.0" - [ ] Push tag:
git push origin v1.3.0 - [ ] GitHub Actions release workflow triggers
- [ ] Monitor build matrix (all targets)
- [ ] Verify all artifacts published
- [ ] Verify signatures + checksums
- [ ] Publish npm packages (with provenance)
- [ ] Publish Docker images (multi-arch)
- [ ] Publish PyPI wheels
- [ ] Publish Maven artifacts
- [ ] Submit Homebrew PR
- [ ] Submit winget PR
- [ ] Submit Chocolatey/Scoop PRs
- [ ] Update
stableDocker tag - [ ] Update npm
latestdist-tag - [ ] Update install.sh to point to new version
Post-Release (T+1 day)
- [ ] Verify package manager merges
- [ ] Publish release notes (GitHub + blog)
- [ ] Announce on Discord, Twitter, mailing list
- [ ] Monitor error tracking for regressions
- [ ] Close release milestone
Rollback Procedure
If critical issue found post-release:
- Immediate — Push new patch tag (
v1.3.1) with fix - Docker — Retag
stableto previous version:docker tag ifm-node:v1.2.5 ifm-node:stable - npm —
npm dist-tag add @ifm/sdk@1.2.5 latest - Install script — Hotfix
install.shto point to previous version - Communicate — Post incident report, timeline, root cause
Deprecation & Removal Schedule
| Version | Deprecated | Removed In | Migration |
|---|---|---|---|
1.3.0 | ifm tune --legacy flag | 2.0.0 | Use ifm tune <freq> |
1.2.0 | PacketType::Raw enum | 2.0.0 | Use PacketType::Plugin |
1.0.0 | Frequency::parse_v0() | 2.0.0 | Use Frequency::parse() |
Policy: Minimum 3 stable releases (18 weeks) between deprecation and removal.
Channel-Specific Install URLs
| Channel | Install Script | Docker Tag | npm Dist-Tag |
|---|---|---|---|
| Nightly | install-nightly.sh | :nightly | @nightly |
| Beta | install-beta.sh | :beta | @beta |
| Stable | install.sh | :stable, :latest | @latest |
| LTS | install-lts.sh | :lts | @lts |
All scripts at: https://ifm.sh/install-<channel>.sh