Nix at Shopify: Q&A From the ShipIt! Presentation
Shopify’s May 2020 ShipIt! session walked through how the company rebuilt its developer tooling around Nix. Building on the earlier “What is Nix” post, the talk covered the day-to-day tooling Shopify engineers actually use, plus the rationale behind moving from a Ruby-based dev workflow to a Nix-driven one. Not every question from the live session made it into the talk, so the answers below fill in the gaps.
Interop and the Road Ahead
One question raised was whether runix would interoperate well with lorri once open sourced. The short answer is “maybe.” The two tools approach development environments differently — Shopify’s entire shadowenv strategy is similar but not identical to lorri’s model. Compatibility could probably be achieved without major effort, provided it doesn’t force a significant tradeoff. The team would welcome a pull request to make that work.
As for CI/CD adoption, Shopify isn’t using Nix there yet, but hopes to by late in the year.
Environment Pinning and Dependency Management
A question about a dev.yml file that contained import < nixpkgs> prompted clarification on versioning. Shopify does pin nixpkgs revisions: the dev tool enforces a specific nixpkgs revision every time dev up runs.
On the dependency front, the team still doesn’t manage Node modules with Nix. That’s a future project requiring a substantial time investment — profpatsch/yarn2nix looks promising. Gems were tackled first because they were more annoying and the team had more familiarity with how they behave. By default, gem dependencies populate a global cache, which creates different problems than a project-local node_modules.
Challenges With Working From Home
The shift to remote work has changed how dependency updates affect engineers. When nixpkgs revisions do get bumped, everyone has to re-download large packages. In the office, multi-gigabit fiber made that a non-issue. Now that many people are on home connections, large downloads are a more frequent complaint. Shopify doesn’t bump its nixpkgs revision very often, in part for this reason. The broader question of how to provide remote workers with better internet speeds is still unresolved — Canada and the US are doing an “abysmal job” of it, per the presenter.
Where Nix Falls Short
The biggest pain point with Nix at Shopify is that the tooling is optimized for build workflows, not development workflows. That’s especially clear in the bundleEnv/bundleApp workflows, which required significant custom work to map onto how the team actually uses the tool. The solution Shopify put together is expected to be upstreamed eventually, but more problems in the same vein are anticipated.
Clarifying the Lisp Reference
During the demo, some code was written in Lisp. It was Ketos, a small Rust-based implementation. The choice of language is nearly irrelevant — there are only a few documented functions available, making it less of a “real” Lisp and more of a DSL.
For more detail, Shopify has released a public series of screencasts called Nixology, originally recorded for internal developer education.



