Connect
For platform & DevEx teams

Control your SDLC, laptop to production.

One hash-pinned baseline, identical on every laptop, in CI, and in production. Environment drift stops costing your team hours, every week.

environmentsha256:9f2c…d6f3
Dana's laptop9f2c…d6f3
GitHub Actions9f2c…d6f3
Claude Code9f2c…d6f3
Production9f2c…d6f3
Flox doesn’t make us choose between strong reproducibility and a normal local workflow. You get strong reproducibility on your local machine. When you share what you’ve built, it just works.
Amin KarbasMember of the Technical Staff
Read the case study
The cost of drift

What environment drift costs platform teams

Nobody decides to let environments diverge. It happens one version bump, one undocumented step, one new laptop at a time. The bill arrives as lost hours, and it lands on the platform team.

A bug only one machine has

A bug reproduces for one engineer and vanishes for the next. The difference is a tool version nobody wrote down, hiding in a shell somewhere.

Setup, paid over and over

It is not just new hires. Every dependency bump, new service, and fresh laptop sends an engineer back to chasing tool versions before the next green build. The setup tax is never paid off, it is paid again.

Snowflake CI

CI becomes the only place the real environment exists. It passes, the laptop does not, and nobody can say which difference matters.

Three problems, one declarative baseline.

One baseline, three lifecycle stages

One declarative, hash-pinned baseline across the SDLC

Version managers pin the tools you named. Container images pin one stage. Flox pins the whole environment, down to the transitive dependency, identically on every laptop, in CI, and in production. All the reproducibility of Nix, without writing Nix.

Stage 01

While on your laptop

Every engineer runs flox activate and lands in the exact same toolchain, down to the transitive dependency. The environment lives in a file next to the code and activates in the shell they already use. No Nix to learn.

hash-pinned · sha256:9f2c8a1e7b04d6f3
manifest.toml
# the org baseline, pulled in one command
[install]
go.pkg-path = "go"
postgresql.pkg-path = "postgresql"
redis.pkg-path = "redis"
Stage 02

While in CI

CI activates the same locked manifest the laptop resolved. There is no separate CI image drifting on its own schedule. If it is green on the laptop, it is green in the pipeline, for the same reason.

hash-pinned · sha256:9f2c8a1e7b04d6f3
.github/workflows/ci.yml
- uses: flox/install-flox-action@v2
- run: flox activate -- make test
 
# same lockfile the laptop resolved
# no separate CI image to maintain
Stage 03

While in production

Ship the same environment as an OCI image with flox containerize. It is a standard image you push to your registry and deploy the way you already do. What runs in production traces back to the one baseline, not a hand-built image nobody remembers assembling.

hash-pinned · sha256:9f2c8a1e7b04d6f3
build & ship
# emit an OCI image from the same env
$ flox containerize -t prod
 
✅ image built from the locked manifest
# what shipped == what you ran
The same Tuesday, two ways

A teammate bumps a dependency, with and without

Not a feature matrix, and not a new-hire edge case. Any engineer pulls main on a normal Tuesday and the stack has moved underneath them. The only variable is whether one baseline exists.

Tuesday, without Flox

A morning lost to a version bump

  • main moved to a new Postgres. Their local copy is still on the old one, and the app will not boot.
  • A senior engineer burns an hour pairing on the mismatched toolchain.
  • CI passes. The laptop does not. Nobody can say which version differs.

Half a day gone, to a change that was one line.

Tuesday, with Flox

Back in sync in one command

  • flox activate re-resolves the exact baseline the team just moved to.
  • Identical, hash-pinned environment. The same one CI uses, down to the dependency.
  • Tests pass locally because there is nothing left to differ from the pipeline.

Back to a green build in minutes.

The shift

Even onboarding, days to minutes

The recurring drift tax has an episodic cousin: a new hire’s first environment. Same mechanism, most visible payoff.

Onboarding
daysminutes

Day one, not week one. Clone, run one command, and land in the exact environment the team already runs. No setup wiki, no version chasing.

Adoption

Roll out a golden path

No big-bang migration. Platform teams adopt this service by service, in a sequence that proves the value before it scales. One team becomes the whole org.

Assess

Inventory how each team sets up today and where the versions quietly diverge.

Pin

Capture the golden toolchain in a single declarative, hash-locked manifest.

Pilot

Roll it to a single team. Measure setup time and reproduced-bug rate.

Roll out

Publish the baseline on FloxHub. Each team starts from it and layers on only what their own service needs.

Scale

Evolve one definition. A version bump ships to everyone through the lockfile.

FAQ

Questions platform teams ask first

Yes. CI activates the same locked manifest your laptop resolved. In GitHub Actions you add the install-flox-action step and run your build with flox activate, as in flox activate -- make test, against the identical hash-pinned toolchain. There is no separate CI image drifting on its own schedule: if it is green on the laptop, it is green in the pipeline, for the same reason.

A container image pins one stage and ships it as an opaque artifact, and two builds of the same Dockerfile are not guaranteed to produce the same bytes. Flox pins the environment itself, down to the transitive dependency, and resolves to the same hash on every laptop, in CI, and in production. When you do want an image, flox containerize emits a standard OCI image from that same locked manifest, so the container you ship traces back to the baseline your team runs locally instead of a hand-built image nobody remembers assembling.

You have both options. You can run flox activate on the production host so it uses the exact environment the laptop and CI did, or you can run flox containerize to emit a standard OCI image from the same locked manifest and deploy it the way you already do. Either way, what runs in production traces back to one baseline, not a separately maintained prod image.

Service by service. Capture the golden toolchain in one declarative manifest, pilot it with a single team, and measure setup time and reproduced-bug rate before you scale. Publish the baseline on FloxHub so each team starts from it and layers on only what their own service needs. One definition evolves, and a version bump ships to everyone through the lockfile.

They add it. Flox environments layer, so a team starts from the published baseline and runs flox install for the extra packages their service needs, without forking the baseline or blocking on the platform team. The shared definition still governs the common toolchain, and the local additions stay declarative and reviewable.

No. Flox gives you the reproducibility of Nix through a declarative manifest, and nobody on the team has to write Nix to use it. You get a hash-pinned baseline that resolves identically everywhere, exposed as a normal command-line workflow.

Standardize your SDLC, laptop to production.

We would like to compare notes on how your platform team sets the standard for development. Talk to us, or read the docs to see the baseline in action.