Every source behind this page, graded. There is no engineering-blog,
talk or paper tier here, and that is a property of the research environment rather than of
the topic: those hosts were blocked, so the guide was built from repositories and registries
only.
Postmortem
Bytecode Alliance2026-08
Filesystem sandbox escape when paths or symlinks contain trailing slashes
A High-severity advisory against the runtime that executes Shopify Functions, reporting
that guests could "escape their filesystem sandbox and read/write external files and
directories". Four release lines were patched the same day.
Carry forwardRenting isolation converts a security property into a patch-latency commitment; know how fast you can cross a major version.
github.com/bytecodealliance/wasmtime/security/advisories/GHSA-vqjp-4c8c-hfgg
Postmortem
Bytecode Alliance2026-09
Wasmtime security advisory index
Ten advisories between 15 June and 24 September 2026, including host panics through
filesystem datetime overflow and guest-driven host memory exhaustion. This is the
operational cost profile of a sandbox you did not write.
Carry forwardCount advisories per quarter before adopting a VM as a trust boundary; that number is your upgrade cadence.
github.com/bytecodealliance/wasmtime/security/advisories
Decision record
Ruby core2026-09
doc/jit/zjit.md, the second compiler's design document
Describes ZJIT as "a method-based just-in-time (JIT) compiler" that "uses profile
information from the interpreter to guide optimization", and directs bug reports either
to the Ruby tracker or to Shopify's fork.
Carry forwardWhen a vendor's fork is named as an acceptable bug tracker for an upstream subsystem, the upstream has accepted a governance dependency; know which one you are filing into.
raw.githubusercontent.com/ruby/ruby/master/doc/jit/zjit.md
Decision record
Ruby core2026-09
doc/jit/yjit.md, the first compiler's design document
States the architecture, "It lazily compiles code using a Basic Block Versioning (BBV)
architecture", and is candid that the compiler "will use more memory than the Ruby
interpreter", with a whole section on reducing it.
Carry forwardA tracing or versioning compiler trades memory for CPU; the capacity question it raises is resident set size per worker, not throughput.
raw.githubusercontent.com/ruby/ruby/master/doc/jit/yjit.md
Decision record
Shopify2026-09
packwerk USAGE.md, including the package todo file
Names the gap it fills, "Ruby does not provide a good solution to enforcing boundaries
between code", and documents recording existing violations so enforcement can begin
before the codebase complies.
Carry forwardShip the debt ledger with the check. Enforcement without a recorded-violations mechanism is only adoptable on new code.
raw.githubusercontent.com/Shopify/packwerk/main/USAGE.md
Decision record
Rails2023-11
Pull request 49947, enable YJIT by default if running Ruby 3.3+
The moment one company's compiler became the default runtime configuration for the
framework. The description cites "public reports of 15-25% latency improvements", and
the review argues about where in boot the compiler should be enabled.
Carry forwardA framework default is the fastest distribution channel for runtime work, and the slowest to reverse. Read the initialiser ordering argument before copying the pattern.
github.com/rails/rails/pull/49947
Decision record
Shopify2026-09
ghostferry technical overview
Documents that "Ghostferry mandates that you stop writes to the dataset you are copying
at a stage of execution called cutover", and prices the resulting downtime "on the order
of seconds to minutes". A TLA+ specification accompanies the design.
Carry forwardA bounded, honest write freeze beats an unbounded promise of zero downtime; specify the freeze and rehearse it.
raw.githubusercontent.com/Shopify/ghostferry/main/docs/technicaloverview.md
Source
Shopify2026-09
Shopify/ruby, branch listing
The language fork, "forked from ruby/ruby", carrying a patch branch per upstream
release, currently v4.0.7-pshopify1, alongside a dozen active compiler
branches.
Carry forwardIf you fork a runtime, name the patch line after the upstream version and cut it mechanically; that is what makes the fork survivable.
github.com/Shopify/ruby/branches/all
Source
Shopify2026-09
shopify-ruby-definitions
Build definitions for "Rubies we use at Shopify", described as "API compliant with
release Rubies, but with additional backports for bugfixes and performance", with a rake
task that cuts the next patch level.
Carry forwardA fork is a loan. Publishing the build definition is how you keep the interest visible to everyone who has to reproduce it.
github.com/Shopify/ruby-definitions
Source
RubyGems2023-10
shopify-ruby-definitions release history
Five versions, ending at 1.4.0 on 11 October 2023, while the repository and the fork it
describes remained active into September 2026. The public gem stopped being the way the
patched runtime is distributed.
Carry forwardDate a dependency from its registry, not its repository. An active repository with a dead registry means the real artefact is internal.
rubygems.org/api/v1/versions/shopify-ruby-definitions.json
Source
Shopify2025-05
Shopify/zjit, archived
The whole README is a redirection: "We have upstreamed the project into ruby/ruby in
the zjit directory. This repository is mostly for historical interest."
Carry forwardThe healthiest end state for infrastructure you built is an archive notice pointing at an upstream that now carries it.
raw.githubusercontent.com/Shopify/zjit/master/README.md
Source
Ruby core2025-12
NEWS for Ruby 4.0.0
Introduces ZJIT and states that it "is faster than the interpreter, but not yet as fast
as YJIT", advising against production deployment, with production readiness targeted at
4.1. Building it requires Rust 1.85.0 or later.
Carry forwardA second-generation rewrite regresses before it wins. Keep the first generation shipping and default until the replacement passes it on your workload.
raw.githubusercontent.com/ruby/ruby/master/doc/NEWS/NEWS-4.0.0.md
Source
Ruby core2022-12
NEWS for Ruby 3.2.0
"YJIT is no longer experimental", justified by having "been tested on production
workloads for over a year", and from this release building the reference implementation
with the compiler requires a Rust toolchain.
Carry forwardGetting your work into a runtime everyone uses also imports your build dependencies into their pipeline; expect that to be the contested part.
raw.githubusercontent.com/ruby/ruby/master/doc/NEWS/NEWS-3.2.0.md
Source
Ruby core2023-12
NEWS for Ruby 3.3.0
The compiler's call threshold is raised automatically "from 30 to 120 when the
application has more than 40,000 ISEQs", and code garbage collection is disabled by
default for "Better copy-on-write behavior on servers reforking with Pitchfork".
Carry forwardRuntime defaults that key off application size are a signal: the tuning that matters is yours, and the vendor is telling you where the cliff is.
raw.githubusercontent.com/ruby/ruby/master/doc/NEWS/NEWS-3.3.0.md
Source
Shopify2026-01
pitchfork
A reforking Rack server that periodically promotes "a warmed-up worker as the new
template from which workers are forked", explicitly to raise the proportion of shared
memory.
Carry forwardIf you adopt a JIT, revisit the process model in the same quarter. Compiled code is only affordable if it is shared.
raw.githubusercontent.com/Shopify/pitchfork/master/README.md
Source
Shopify2026-08
packwerk README
Documents the deliberate trade in the checker's precision: avoid false positives "at
any cost", accept false negatives, and ignore method calls and arguments entirely
because only constant references are resolved.
Carry forwardWrite down your boundary checker's blind spot next to the rule it enforces, or teams will trust it for coupling it cannot see.
raw.githubusercontent.com/Shopify/packwerk/main/README.md
Source
Shopify2026-09
Tapioca
Generates the type signatures a checker "cannot otherwise see", from gems, Rails and
metaprogramming-heavy DSLs, and validates in continuous integration that the generated
files are still in sync.
Carry forwardGradual typing in a dynamic language is a generated-artefact pipeline with a staleness problem; budget the generator, not just the checker.
raw.githubusercontent.com/Shopify/tapioca/main/README.md
Source
Shopify2026-09
rubydex
A Rust "high-performance static analysis toolkit for the Ruby language", intended as "a
solid foundation to power a variety of tools, such as type checkers, linters, language
servers", with 124 gem releases since August 2025.
Carry forwardWhen several build-time checks each parse the whole codebase, the next investment is one shared index, not a faster checker.
raw.githubusercontent.com/Shopify/rubydex/main/README.md
Source
Shopify2024-09
shopify-scripts, archived
Merchant customisations "written in a stripped-down version of Ruby", archived on
3 September 2024 with a deprecation notice giving a removal date of 28 August 2025.
Carry forwardAn extension point is a public contract. Retiring it needs a dated removal, a live replacement, and archive of the examples people copied from.
github.com/Shopify/shopify-scripts
Source
Shopify2026-09
Enterprise Script Service and mruby-engine
The first-generation sandbox: "a thin Ruby API layer that spawns a process, the
enterprise_script_engine, to execute an untrusted Ruby script", using an
mruby engine under seccomp, with timeout, instruction quotas and memory limits.
Carry forwardUntrusted code needs three limits, not one: wall clock, instructions and memory. The substrate changes; those three do not.
github.com/Shopify/ess
Source
Shopify2026-09
deterministic-wasi-ctx
A WASI context where "a provided WASI function will always return the same series of
results for the same series of invocations", offered explicitly so that the results of
invoking a guest function can be cached.
Carry forwardDeterminism is an architectural feature, not a purity concern: it is what lets you memoise, replay and test a third party's logic.
raw.githubusercontent.com/Shopify/deterministic-wasi-ctx/main/README.md
Source
Bytecode Alliance2026-09
Javy, formerly Shopify/javy
A JavaScript to WebAssembly toolchain, now "A Bytecode Alliance project", whose README
publishes the size economics: 1 to 16 KB with dynamic linking against at least 869 KB
when statically linked.
Carry forwardWith one guest module per tenant, module size is a storage and cold-start budget; dynamic linking of the guest runtime is the lever.
raw.githubusercontent.com/Shopify/javy/main/README.md
Source
Shopify2026-09
shopify-function-wasm-api and function-runner
The host side of the guest contract: a provider, a core type crate, an API, and a
trampoline that "augments Wasm modules to interface with the provider" and handles
memory sharing. The runner executes a module against a JSON input file.
Carry forwardGive third parties a local runner with the same contract as production. It is the cheapest support channel you will ever build.
raw.githubusercontent.com/Shopify/function-runner/main/README.md
Source
Shopify2026-09
semian
Bulkheads and circuit breakers inside the application process, with concurrency
"coordinated server-wide with SysV semaphores" because there is no proxy in the path to
count calls.
Carry forwardWithout a network boundary you still need a concurrency limiter; put the counter somewhere every worker on the host can see.
raw.githubusercontent.com/Shopify/semian/main/README.md
Source
Shopify2024-01
liquid-c, unmaintained
A partial C reimplementation of the template language, with a repository benchmark
showing roughly three times faster parsing, now carrying the notice "This project is no
longer maintained", last released January 2024.
Carry forwardA second implementation of your own library is a permanent parity obligation. Prefer making the one implementation faster if you can reach the runtime.
raw.githubusercontent.com/Shopify/liquid-c/main/README.md
Case study
Rails2026-09
bootsnap README, with the platform's boot numbers
Reports the Shopify platform booting "about 75% faster, dropping from around 25s to
6.5s", and attributes about 25% of the gain to compile caches and 75% to path caching.
The Shopify repository path now serves the Rails organisation's copy.
Carry forwardBefore optimising compilation, measure path resolution. In the one published split, most of the boot win was filesystem lookups.
raw.githubusercontent.com/Shopify/bootsnap/main/README.md
Source
Vitess2026-09
Vitess ADOPTERS.md
Lists Shopify among known adopters of Vitess, alongside Slack, Square, GitHub and
others. The partitioning layer was adopted; the tool that moves rows between instances
was built.
Carry forwardSplit the question: adopt the sharding middleware, own the migration tooling, because the migration is where your tenancy model lives.
raw.githubusercontent.com/vitessio/vitess/main/ADOPTERS.md
Source
Go module proxy2026-09
ghostferry module versions
The Go module proxy lists v1.2.0, v1.3.0 and v1.3.1 for the data mover, while the
repository's tag list carries release and canary tags dated September 2026. The public
module line is a subset of what the team actually cuts.
Carry forwardFor a Go dependency, read the module proxy and the tag list together; a quiet proxy with busy tags means the maintainer ships to itself first.
proxy.golang.org/github.com/!shopify/ghostferry/@v/list
Source
PyPI2024-11
ShopifyAPI for Python, release history
Seventy-eight releases from 23 August 2011 to version 12.7.0 on 4 November 2024, while
the repository behind it showed activity in August 2026. The same registry-against-repository
drift appears here as in the patched-Ruby definitions.
Carry forwardJudge an official client's support from its registry, not its commit graph; the two diverge quietly and only one of them is what you install.
pypi.org/pypi/ShopifyAPI/json
Source
Shopify2026-01
krane, formerly kubernetes-deploy
A deploy wrapper whose stated purpose is a verdict: "in a CI/CD environment, we need a
clear, actionable pass/fail result for each deploy". The gem history dates the
Kubernetes move to January 2017 and the rename to November 2019.
Carry forwardDeployment tooling earns its keep by answering "did it work", not by applying manifests. Design the verdict first.
raw.githubusercontent.com/Shopify/krane/main/README.md