The single-repo workflow, step by step
The workflow that scales is boring on purpose: one repo, explicit tiers, flags as data.
Define your tiers as names, not branches — open-source, saas, pro. They describe distributions of the same code. For every feature that differs, create a boolean flag (PRO_DASHBOARD_ENABLED) with a default and per-tier overrides. Generate one config file per tier — JSON or YAML — and commit it; the build for each tier reads its own block.
Gate code paths with a one-line check — the open-source build hits the same line and simply resolves to false. Review flag changes like code: the config diff is the release note for what each tier gains or loses.
What about code that truly can't be public?
Most 'saas-only' code can ship dark — present in the repo, disabled by flag. For the small remainder (proprietary algorithms, partner integrations under NDA), keep a thin private package that the saas build depends on, behind the same flag. The open-source build never imports it. That's one private module, not a private fork of the whole product.
Teams that adopt this split report a calmer cadence: contributors work against the real codebase, the saas deploy is just a flag-resolved build of main, and 'which version has that fix' stops being a question — every version has it.
Where tier·dev fits
tier·dev is the bookkeeping layer for exactly this workflow: connect the GitHub repo, define the tiers, manage the flags in a matrix, and copy generated JSON/YAML/code snippets into the repo. No runtime SDK, no vendor call in your hot path — the config is yours, committed in git like everything else.
frequently asked
- Should I ever fork for an enterprise edition?
- Almost never. A fork doubles maintenance forever in exchange for short-term convenience. A private add-on package plus per-tier flags covers the genuine secrecy cases with a fraction of the cost.
- Do feature flags slow the open-source build down?
- No — values resolve from a committed config file at build or boot time. There's no network call and no third-party dependency in the open-source distribution.
- How do I stop contributors enabling paid features?
- You don't need to — and that honesty is a feature. Anyone can flip a local flag; what they can't do is use your hosted infrastructure, support, and updates. Open-core companies have shipped this way for years.
Published June 12, 2026 · Last updated June 16, 2026