Changelog
v0.39.0
Section titled “v0.39.0”September 3, 2026 · GitHub release
What’s Changed
Section titled “What’s Changed”- chore: mise update 2026.8.14 by @github-actions[bot] in #726
- chore: mise update 2026.8.15 by @github-actions[bot] in #729
- chore: mise update 2026.8.16 by @github-actions[bot] in #731
- fix(node): don’t crash TanStack Start apps that use Nitro without a start script by @codyde in #734
- feat(node): tell users when @tanstack/react-start is in the wrong dependency section by @codyde in #735
New Contributors
Section titled “New Contributors”- @codyde made their first contribution in #734
Full Changelog: v0.38.0…v0.39.0
v0.38.0
Section titled “v0.38.0”August 26, 2026 · GitHub release
Breaking Changes
Section titled “Breaking Changes”- pnpm provisioning and devEngines precedence: pnpm is now installed directly via Mise instead of Corepack, and
devEnginesdeclarations inpackage.jsonnow take precedence overengines,.nvmrc, and lockfiles for Node.js and pnpm resolution. (#678)
Providers
Section titled “Providers”- Node: Railpack now supports pnpm idiomatic version files and
devEngines.packageManagerinpackage.json, provisioning pnpm directly via Mise instead of Corepack. Specify your pnpm version using"devEngines": { "packageManager": { "name": "pnpm", "version": "9.1.0" } }(or the array syntax[{ "name": "pnpm", "version": "9.1.0" }]), and Railpack will automatically resolve and install it. by @iloveitaly in #678
Mise Upgrades
Section titled “Mise Upgrades”Updated mise from v2026.8.11 to v2026.8.13.
- GitHub install rate limits: Lockfile-pinned tools with checksums no longer query the GitHub API at install time, avoiding rate-limit failures during builds. (v2026.8.13)
- UTF-8 BOM in version files: Idiomatic version files such as
.tool-versions,.node-version, andpackage.jsonthat begin with a UTF-8 byte-order mark now parse correctly instead of corrupting version strings. (v2026.8.12) - Monorepo lockfiles: Tool versions across monorepo directories are now tracked in their respective lockfiles rather than merged into a single file. (v2026.8.13)
- Go GOROOT isolation:
go installno longer inherits aGOROOTexported for a different Go installation, preventing tool version mismatch errors. (v2026.8.12)
Full Changelog: v0.37.1…v0.38.0
v0.37.1
Section titled “v0.37.1”August 24, 2026 · GitHub release
Breaking Changes
Section titled “Breaking Changes”- Cache disabling:
RAILPACK_DISABLE_CACHESis no longer read from the host process environment and must be passed explicitly via--env. (#696)
- Cache disabling:
RAILPACK_DISABLE_CACHESis now configured via--envand applied during build plan generation, ensuring cache mounts are deterministically stripped matching other build environment variables. by @iloveitaly in #696 - Image environment: Deduplicate inherited
PATHentries when merging build and deploy environments, preventing duplicate paths in the final image while preserving precedence. by @iloveitaly in #697
Mise Upgrades
Section titled “Mise Upgrades”Updated mise from v2026.8.6 to v2026.8.11.
- Ruby on musl: glibc precompiled Ruby binaries are now skipped on musl Linux environments, falling back to ruby-build. (v2026.8.11)
- npm version resolution: Deprecated versions are now filtered out during tool version resolution. (v2026.8.11)
- Aqua Linux assets: glibc Linux targets now prefer glibc release assets over musl binaries when resolving tools. (v2026.8.9)
- Erlang checksums: Precompiled Erlang installations now verify checksums. (v2026.8.7)
Full Changelog: v0.37.0…v0.37.1
v0.37.0
Section titled “v0.37.0”August 18, 2026 · GitHub release
Breaking Changes
Section titled “Breaking Changes”- Debian 13 base images: New builds now use Debian 13 (Trixie), requiring custom Apt package lists and pinned base images to be compatible with Debian 13. (#698)
- GCC 14 native builds: Native gem and extension compilation now uses GCC 14, treating incompatible pointer types as errors and potentially requiring dependency updates or compiler flags. (#705)
- Debian 13: Builder and runtime base images are now upgraded to Debian 13 (Trixie). Configure custom Apt packages with Debian 13 package names using
RAILPACK_DEPLOY_APT_PACKAGESordeploy.aptPackages. by @iloveitaly in #698
- Debian 13: Builder images now include
libicu-devto ensure .NET restore and native gem compilation succeed on Debian 13, and Railpack warns during build planning when custom Apt packages are detected. by @iloveitaly in #705
Mise Upgrades
Section titled “Mise Upgrades”Updated mise from v2026.8.4 to v2026.8.6.
- Resumable downloads: Interrupted artifact downloads now resume via HTTP Range requests, and transient network errors such as HTTP/2 stream refusals are automatically retried. (v2026.8.6)
- Precompiled PyPy: PyPy can now be installed via precompiled binaries when compilation is disabled. (v2026.8.5)
- Node source patching: Node source builds can now apply local or remote patches before configuration using
node.apply_patches. (v2026.8.5) - Rust nightly toolchains: The rolling
nightlychannel resolves to concrete date-based toolchains for reproducible lockfiles and caching. (v2026.8.6)
Full Changelog: v0.36.4…v0.37.0
v0.36.4
Section titled “v0.36.4”August 12, 2026 · GitHub release
What’s Changed
Section titled “What’s Changed”- chore: mise update 2026.8.4 by @github-actions[bot] in #689
- fix: exit 75 for transient failures by @edganiukov in #690
New Contributors
Section titled “New Contributors”- @edganiukov made their first contribution in #690
Full Changelog: v0.36.3…v0.36.4
v0.36.3
Section titled “v0.36.3”August 11, 2026 · GitHub release
What’s Changed
Section titled “What’s Changed”- Revert “fix: support multiline environment values and inheritance” by @coffee-cup in #687
- fix: drop empty env entries instead of keeping explicit empty values by @coffee-cup in #688
Full Changelog: v0.36.1…v0.36.3
v0.36.2
Section titled “v0.36.2”August 11, 2026 · GitHub release
Full Changelog: v0.36.1…v0.36.2
v0.36.1
Section titled “v0.36.1”August 11, 2026 · GitHub release
What’s Changed
Section titled “What’s Changed”- feat(build): add RAILPACK_BUILT_AT runtime variable by @iloveitaly in #669
- feat(cli): add show-plan flag to info command by @iloveitaly in #684
- fix: support multiline environment values and inheritance by @iloveitaly in #685
- fix(mise): enable safe mode when reading app config by @coffee-cup in #686
Full Changelog: v0.36.0…v0.36.1
v0.36.0
Section titled “v0.36.0”August 10, 2026 · GitHub release
Providers
Section titled “Providers”- Node: TanStack Start apps are detected via
@tanstack/react-startand are no longer treated as static Vite SPAs. If nostartscript is defined, Railpack installssrvxand starts withsrvx --prod -s ../client dist/server/server.js; for production Node deploys, configure Nitro per TanStack’s hosting guidance. by @iloveitaly in #672 - Node: the default Node version is now
ltsinstead of a fixed major, and non-semver aliases such asltsresolve correctly through mise. Pin a version withRAILPACK_NODE_VERSION,engines.node, or a version file as described in the Node versions docs. by @iloveitaly in #650 - Node: projects with a
package-lock.jsonare detected as npm when no other package manager is configured. Prefer pinning Node and package manager versions for reproducible builds; see the dependency recommendations. by @iloveitaly in #677 - Rust: rust-toolchain.toml is honored as an idiomatic version file (including channel, profile, components, and targets). Add a root
rust-toolchain.tomlsuch aschannel = "1.85.0"and Railpack will install that toolchain via mise. by @iloveitaly in #676 - .NET: global.json is honored as an idiomatic version file so
sdk.versionselects the .NET SDK. Add a rootglobal.jsonsuch as{ "sdk": { "version": "8.0.100" } }to pin the SDK. by @iloveitaly in #675
- Build context:
.dockerignorepatterns (and top-levelexcludeinrailpack.json) are applied when the local source is first loaded into BuildKit, so large ignored directories likenode_modulesare no longer transferred during local builds. Configure exclusions in.dockerignoreor via top-levelexcludein railpack.json. by @iloveitaly in #373
- Config: explicit
deploy.inputswith include filters are no longer overridden by an implicit full-step deploy output, preserving selections such as Next.js standalone output. by @radiantjade in #562 - Secrets: CLI
--envsecrets are preserved when a config file also defines secrets, instead of being dropped. by @cadeljones in #460
Mise Upgrades
Section titled “Mise Upgrades”Updated mise from v2026.7.15 to v2026.8.3.
- Precompiled Ruby: when
ruby.compileis unset, mise installs precompiled Ruby binaries by default and falls back to source builds only when no binary is available. (v2026.8.0) - Release-age filters:
minimum_release_ageand related filters use GitHub’spublished_attimestamp so newly published releases of older commits no longer bypass age gates across Aqua, GitHub, Ubi, and related backends. (v2026.8.3) - npm lockfile installs: packages pinned in
mise.lockare trusted through the low-download popularity gate, so locked npm tool installs no longer requireallow_low_downloads. (v2026.7.16) - Idiomatic version files: disable individual idiomatic files per tool with
idiomatic_version_file_disable_files(for examplenode:package.json) while keeping others active. (v2026.7.17)
Full Changelog: v0.35.0…v0.36.0
v0.35.0
Section titled “v0.35.0”July 28, 2026 · GitHub release
Providers
Section titled “Providers”- Node & Python: Playwright browser installation is now opt-in, preventing unexpected image-size increases. Set
RAILPACK_NODE_PLAYWRIGHT_INSTALL=1orRAILPACK_PYTHON_PLAYWRIGHT_INSTALL=1when Playwright is a production dependency; see the Node and Python documentation. by @iloveitaly in #653
- Mise: Updated mise version from v2026.7.14 to v2026.7.15.
Full Changelog: v0.34.0…v0.35.0
v0.34.0
Section titled “v0.34.0”July 27, 2026 · GitHub release
Providers
Section titled “Providers”- Node.js: npm projects now use
npm installby default, preventing builds from failing whenpackage-lock.jsonis missing or out of sync. SetRAILPACK_NODE_NPM_INSTALL="npm ci"to opt into deterministic installs; Railpack also suggests committing missing npm and pnpm lockfiles, as described in the dependency recommendations. by @iloveitaly in #643
- Mise: Updated mise version from v2026.7.11 to v2026.7.14.
Full Changelog: v0.33.0…v0.34.0
v0.33.0
Section titled “v0.33.0”July 23, 2026 · GitHub release
Providers
Section titled “Providers”- SvelteKit: Projects using
@sveltejs/adapter-autonow automatically produce and run a Node server without manual adapter configuration. Keep@sveltejs/adapter-autoin your dependencies, and Railpack will selectadapter-nodeduring the build and start it withnode build. by @iloveitaly in #641
- React Router: React Router SPA projects with
ssr: falseare now correctly detected and served as static sites, even when the defaultreact-router-serve ./build/server/index.jsstart script is present. by @iloveitaly in #604
- Apt Packages: Custom Apt package lists can now use the
...spread operator to retain packages generated by Railpack. Follow the package installation guide and configure"buildAptPackages": ["...", "build-essential"]or"deploy": { "aptPackages": ["...", "ffmpeg"] }; omit...when you intentionally want to replace the generated list. by @iloveitaly in #645
- Mise: Railpack now uses musl-compatible mise binaries on Linux, fixing execution on Alpine and other musl-based hosts. by @iloveitaly in #642
Full Changelog: v0.32.0…v0.33.0
v0.32.0
Section titled “v0.32.0”July 22, 2026 · GitHub release
Providers
Section titled “Providers”- Node: Railpack now supports Next.js applications in Nx workspaces, including projects that use inferred tasks instead of root build and start scripts. Single-app workspaces are selected automatically; for multi-app workspaces, select an app with
RAILPACK_NX_APP=web railpack build .. by @iloveitaly in #606
- Node: Railpack now displays a build-plan warning when no package manager is detected and npm is selected by default. by @iloveitaly in #638
- Mise: Updated mise version from v2026.7.7 to v2026.7.11.
- Build Cache: The build command now supports
--no-cachefor rebuilding without cached layers while preserving package-manager cache mounts. Runrailpack build --no-cache .to perform a fresh build. by @iloveitaly in #516 - Build Output: Build progress and completion output is now easier to scan, with a distinct start header and a formatted summary containing the build duration and next command. by @iloveitaly in #640
- Runtime Images: Runtime images now expose
RAILPACK_VERSION, allowing applications and diagnostics to identify the Railpack version that produced the image. Access it through theRAILPACK_VERSIONenvironment variable inside the running container. by @iloveitaly in #633
Full Changelog: v0.31.2…v0.32.0
v0.31.2
Section titled “v0.31.2”July 20, 2026 · GitHub release
Providers
Section titled “Providers”- PHP: PHP applications using a single Mise-managed runtime package now include it in the deploy image. by @jordyvandomselaar in #635
- Mise: Updated mise version from v2026.7.6 to v2026.7.7.
Full Changelog: v0.31.1…v0.31.2
v0.31.1
Section titled “v0.31.1”July 15, 2026 · GitHub release
Providers
Section titled “Providers”- Python: Poetry is now installed via mise’s native poetry package instead of pipx, improving environment integration. by @iloveitaly in #625
- Mise: Updated mise version from v2026.7.5 to v2026.7.6.
Full Changelog: v0.31.0…v0.31.1
v0.31.0
Section titled “v0.31.0”July 13, 2026 · GitHub release
- Build: The
buildcommand now supports BuildKit cache import and export via--cache-fromand--cache-to, using the same syntax as docker buildx. For example:railpack build --cache-from type=registry,ref=my.registry/cache --cache-to type=registry,ref=my.registry/cache,mode=max .by @mvanhorn in #595 - Build:
railpack buildnow uses credentials from your Docker CLI config ($DOCKER_CONFIG, default~/.docker/config.json) so BuildKit can pull from and push to private registries. Log in withdocker loginfirst if needed. by @iloveitaly in #623 - Mise: Updated mise version from v2026.7.2 to v2026.7.5.
Full Changelog: v0.30.1…v0.31.0
v0.30.1
Section titled “v0.30.1”July 9, 2026 · GitHub release
- Mise: Updated mise version from v2026.6.12 to v2026.7.2.
Full Changelog: v0.30.0…v0.30.1
v0.30.0
Section titled “v0.30.0”June 22, 2026 · GitHub release
Providers
Section titled “Providers”- Deno: Railpack now reads Deno versions from
.deno-versionfiles using mise idiomatic version file support. Add a.deno-versionfile to your project root (for example,2.2.2) to pin the Deno runtime for your deployment — see version detection for the full precedence order. by @iloveitaly in #608
- Python, Ruby, Deno:
RAILPACK_PYTHON_VERSION,RAILPACK_RUBY_VERSION, andRAILPACK_DENO_VERSIONenvironment variables now correctly override local version files and mise configuration during builds, matching the documented precedence order. Set these in your deployment environment when you need to pin a runtime version independently of repository config. by @Vunas in #610
- Mise: Updated mise version from v2026.6.11 to v2026.6.12.
Full Changelog: v0.29.0…v0.30.0
v0.29.0
Section titled “v0.29.0”June 18, 2026 · GitHub release
Providers
Section titled “Providers”-
Node: Railpack now detects and deploys Next.js apps configured for static export as SPAs, serving the built site with Caddy. Set
output: 'export'in yournext.config.ts(or.js/.mjs) and Railpack will build and serve the static output fromout(or your configureddistDir). See the Node.js SPA documentation for details. by @iloveitaly in #602 -
Node: Node SPA deployments now honor the
index_fallbackkey in aStaticfileat your project root. SPA routing is unchanged by default, but you can setindex_fallback: falseto disableindex.htmlfallback on unknown routes—useful for multi-page static sites that need custom 404 pages. See the Node.js SPA documentation for details. by @iloveitaly in #582 -
Node: Bun-only apps with no dependencies no longer install Node.js in the final image when it isn’t needed. by @iloveitaly in #601
-
Node: Expo projects using the default
expo startcommand are no longer incorrectly treated as having a custom start command, so SPA detection works as expected. by @iloveitaly in #582 -
Node:
RAILPACK_NODE_VERSIONnow correctly takes precedence overengines.nodeinpackage.json, matching the documented version resolution order. by @iloveitaly in #601
Full Changelog: v0.28.0…v0.29.0
v0.28.0
Section titled “v0.28.0”June 17, 2026 · GitHub release
Providers
Section titled “Providers”- Expo Web: Railpack now detects Expo Web projects configured for static export as SPAs and serves the built output from
distwith the static file server. Configureexpo.web.outputtostaticorsingleinapp.json, ensureexpoandreact-native-webare in your dependencies, and add abuildscript such asexpo export --platform webto yourpackage.json. by @iloveitaly in #585
- Node: Increased the default npm fetch retry count to 5 (
NPM_CONFIG_FETCH_RETRIES=5) to improve build reliability against transient registry network errors during dependency installation. by @iloveitaly in #598
- Mise: Updated mise version from v2026.6.10 to v2026.6.11.
Full Changelog: v0.27.2…v0.28.0
v0.27.2
Section titled “v0.27.2”June 16, 2026 · GitHub release
- Mise: Updated mise version from v2026.6.5 to v2026.6.10.
Full Changelog: v0.27.1…v0.27.2
v0.27.1
Section titled “v0.27.1”June 13, 2026 · GitHub release
update mise to 2026.6.5
v0.27.0
Section titled “v0.27.0”June 9, 2026 · GitHub release
Providers
Section titled “Providers”- Elixir: Elixir 1.20 now maps to Erlang 29, so projects on Elixir 1.20 build with the correct OTP version. by @iloveitaly in #583
- Mise: Updated mise version from v2026.6.0 to v2026.6.1.
Runtime
Section titled “Runtime”- Locale: Builder and runtime images now include the
en_US.UTF-8locale, fixing warnings and breakage for apps that depend on locale-aware behavior (such as Python or Ruby). Railpack does not setLANGorLC_ALLby default — enable UTF-8 by adding them todeploy.variablesin yourrailpack.json(for example,"LANG": "en_US.UTF-8"). by @iloveitaly in #576 - Timezone: Builder and runtime images now include
tzdataby default, so named timezones work out of the box when you setTZor use libraries that read the zoneinfo database. by @iloveitaly in #580
Full Changelog: v0.26.1…v0.27.0
v0.26.1
Section titled “v0.26.1”June 4, 2026 · GitHub release
Providers
Section titled “Providers”- Node: pnpm 11+ projects now build correctly by adding
PNPM_HOME/binto thePATHso the pre-installnode-gypstep can be found, including whenengines.pnpmuses x-range notation like"11.5.x". by @iloveitaly in #581
- Mise: Updated mise version from v2026.5.18 to v2026.6.0.
Full Changelog: v0.26.0…v0.26.1
v0.26.0
Section titled “v0.26.0”June 2, 2026 · GitHub release
Providers
Section titled “Providers”- Node (pnpm): Railpack now sets
PNPM_HOMEto/opt/pnpmandPNPM_STORE_DIRto/opt/pnpm/storeduring every pnpm install so BuildKit caches the store path pnpm actually uses. This fixes missed install cache hits when newer pnpm versions write outside the old hardcoded store location. by @iloveitaly in #569
-
Config: Custom runtime images set via
deploy.baseinrailpack.jsonare now applied to the generated deploy step. Previously Railpack parseddeploy.basebut did not use it when building the final image; configured bases are used as the deploy filesystem and as the input for runtime apt package layers when those are enabled. by @radiantjade in #561 -
Mise: Builds no longer fail when
mise.lockpins a tool version newer than the default 14-day minimum release age while your config requestslatest. Host-side version resolution applies the age filter first, then falls back when a pinned lockfile version would otherwise be excluded. by @iloveitaly in #575
Full Changelog: v0.25.0…v0.26.0
v0.25.0
Section titled “v0.25.0”June 1, 2026 · GitHub release
Providers
Section titled “Providers”-
Node: Railpack now detects and builds projects that use
package.json5manifests (in addition topackage.json), including workspace and dependency parsing. If both files exist,package.jsontakes precedence. by @iloveitaly in #566 -
Node: Node 25+ apps that use Corepack (for example
packageManager: "pnpm@...") now include the mise install and shim directories in the runtime image, so package managers likepnpmremain available when your start command runs after the build. by @iloveitaly in #568
- Node:
engines.pnpmin your manifest now takes precedence over pnpm version inferred frompnpm-lock.yaml, avoiding ambiguous lockfile version mapping across major pnpm releases. See package and version resolution for how Railpack resolves tool versions. by @iloveitaly in #566
-
Config: The
providerfield inrailpack.jsonis now listed in the generated JSON schema (railpack schema), with the same values documented in the config file guide. Provider names are matched case-insensitively, so lowercase values likeelixiranddotnetwork as documented. by @radiantjade in #558 -
Mise: Updated mise version from v2026.5.16 to v2026.5.18.
Full Changelog: v0.24.0…v0.25.0
v0.24.0
Section titled “v0.24.0”May 29, 2026 · GitHub release
Providers
Section titled “Providers”- Node: Package manager versions for pnpm, bun, and yarn defined in mise config (
mise.toml,.tool-versions, etc.) now take priority over versions inferred from lockfiles or project metadata. Pin a version in your config—for examplepnpm = "10.4.1"inmise.toml—and Railpack will use it consistently across the build. See Node.js versions and Mise configuration. by @iloveitaly in #564
-
Node: Builds using pnpm 11+ now add
PNPM_HOME/bintoPATH, matching pnpm’s new layout so global tools likenode-gypinstall and run correctly. by @iloveitaly in #564 -
Ruby: Ruby source builds no longer install rdoc, avoiding locale-related compile failures during
mise install. by @iloveitaly in #564 -
Elixir: Elixir provider environment variables (locale,
MIX_ENV,MIX_HOME, etc.) are now applied to the mise install step so Erlang and Elixir install with the same settings as the rest of the build. by @iloveitaly in #564 -
Python: Projects using Poetry, PDM, or Pipenv via pipx now also install
uv, which newer mise requires whenpipx.uvxis enabled. by @iloveitaly in #564
- Mise: Updated mise version from v2026.3.17 to v2026.5.16.
- Mise: Generated
/etc/mise/config.tomlnow setsminimum_release_ageinstead of the renamedinstall_beforesetting, matching current mise behavior. Override it in your own mise configuration if needed. by @iloveitaly in #564
Full Changelog: v0.23.0…v0.24.0
v0.23.0
Section titled “v0.23.0”March 30, 2026 · GitHub release
Providers
Section titled “Providers”- Staticfile: Added a configurable index fallback to the Staticfile provider, allowing users to toggle SPA-style routing for their applications. by @iloveitaly in #534
To enable SPA routing, add
index_fallback: trueto yourStaticfileconfiguration to have non-existent paths served byindex.html.
- Mise: Updated mise version from v2026.3.15 to v2026.3.17. in #539
- Mise: Introduced a new installation policy that defaults to tool versions released at least 14 days ago to avoid broken or incomplete tool versions. by @iloveitaly in #540 This setting improves stability for runtime environments like Python and Ruby by allowing upstream releases time to stabilize before they are used in production builds.
- Verbose Mode: Added support for the
RAILPACK_VERBOSEenvironment variable to enable verbose logging and improved debug logs for mise execution. by @iloveitaly in #536 SetRAILPACK_VERBOSE=1to enable detailed debug output, including the full command string and captured output from mise during execution.
- Configuration: Improved root directory detection by trimming whitespace from environment variables and configuration values. by @iloveitaly in #534
Full Changelog: v0.22.2…v0.23.0
v0.22.2
Section titled “v0.22.2”March 26, 2026 · GitHub release
- Mise: Updated mise version from v2026.3.13 to v2026.3.15. in #532
Full Changelog: v0.22.1…v0.22.2
v0.22.1
Section titled “v0.22.1”March 24, 2026 · GitHub release
- Mise: Updated mise version from v2026.3.12 to v2026.3.13.
Full Changelog: v0.22.0…v0.22.1
v0.22.0
Section titled “v0.22.0”March 23, 2026 · GitHub release
- Configuration: Railpack now uses a global
mise.tomlto store default tool configurations instead of environment variables, allowing users to naturally override defaults via their project’s localmise.tomlfile. This change makes it easier to customize tool versions and settings without needing to manage complex environment variables. For example, you can now add a[settings]section to your project’smise.tomlto specify exact settings that Railpack should use. by @iloveitaly in #504 - Mise: Updated mise version from v2026.3.10 to v2026.3.12.
Full Changelog: v0.21.0…v0.22.0
v0.21.0
Section titled “v0.21.0”March 21, 2026 · GitHub release
What’s Changed
Section titled “What’s Changed”- fix: expose shell completion subcommand by @iloveitaly in #520
- test: add arm builds by @iloveitaly in #509
- feat: additional mise config and idiomatic version files enabling precompiled ruby support by @iloveitaly in #487
- chore: mise update 2026.3.10 by @github-actions[bot] in #522
Full Changelog: v0.20.0…v0.21.0
v0.20.0
Section titled “v0.20.0”March 18, 2026 · GitHub release
Providers
Section titled “Providers”- BuildKit: Images and build cache are now exported in parallel, significantly reducing the time spent in the final stages of the build process. This feature utilizes the latest BuildKit v0.28.0 capabilities and is enabled automatically for all
railpack buildoperations. by @iloveitaly in #515 - Shell: Added native support for Fish shell completion. You can generate the completion script for your shell by running
railpack completion fishand adding it to your fish configuration. by @iloveitaly in #515 - toml 1.1 features are supported. This could have caused errors in the past if railpack read a toml file with previously unsupported features
- Mise: Updated the internal environment variable to
MISE_SYSTEM_CONFIG_DIRto ensure better compatibility and isolation from host configurations when runningrailpack. by @iloveitaly in #517
Full Changelog: v0.19.0…v0.20.0
v0.19.0
Section titled “v0.19.0”March 16, 2026 · GitHub release
Providers
Section titled “Providers”- Mise Updated mise version from v2026.2.14 to v2026.3.9.
- Node.js: Node.js projects using Bun now support bunfig.toml during the installation step. This ensures custom registries and install behaviors are correctly applied when running
bun install. by @iloveitaly in #477 - Ruby: Upgraded to jemalloc2 for Ruby projects to resolve errors on ARM architecture and improve memory performance. This is enabled by default. by @iloveitaly in #338
- Python: Added documentation and an example for using compiled Python as an escape hatch when pre-built binaries are not available for specific versions. This allows developers to use specific Python builds by opting into compilation during the build process. by @iloveitaly in #503
- Ruby: Default Ruby versions are now pinned to the minor version instead of a specific patch to allow for automatic security updates and better compatibility with pre-built binaries. by @iloveitaly in #488
- Staticfile: Switched to a binary installer for Caddy to achieve smaller image sizes for static site deployments. by @iloveitaly in #478
- CLI: The CLI now issues a warning if no start command is detected during the build process, providing clearer feedback on potentially missing configuration. by @iloveitaly in #490
Full Changelog: v0.18.0…v0.19.0
v0.18.0
Section titled “v0.18.0”March 9, 2026 · GitHub release
This is mostly an internal release to ensure that the mise version used in the planning, building, and runtime images are all in sync.
The only user-facing change in this release in bumping the build and runtime mise version to 2026.2.22.
Full Changelog: v0.17.2…v0.18.0
v0.17.2
Section titled “v0.17.2”February 12, 2026 · GitHub release
What’s Changed
Section titled “What’s Changed”- chore: mise update 2026.1.12 by @iloveitaly in #451
- fix: eliminate additional logs when using –dump-llb by @iloveitaly in #452
- feat(python): Scan nested dependency files in usesDep by @half0wl in #457
New Contributors
Section titled “New Contributors”- @half0wl made their first contribution in #457
Full Changelog: v0.17.1…v0.17.2
v0.17.1
Section titled “v0.17.1”January 19, 2026 · GitHub release
What’s Changed
Section titled “What’s Changed”- fix: revert playwright support by @iloveitaly in #447
Full Changelog: v0.17.0…v0.17.1
v0.17.0
Section titled “v0.17.0”January 19, 2026 · GitHub release
Providers
Section titled “Providers”- Node & Python: We’ve added automatic Playwright support for Node.js and Python projects. Railpack now detects Playwright dependencies and automatically installs the required system packages and browsers. by @iloveitaly in #348
- Shell: The shell provider now supports a
miseinstall phase, allowing you to define tools to install before your script runs. by @iloveitaly in #433
- Node: Consistent Node version resolution is now used when Bun is the package manager. by @iloveitaly in #359
- Node: Trailing whitespace in the
packageManagerfield ofpackage.jsonis now handled correctly. by @iloveitaly in #432 - Node: Improved detection of version files (like
.nvmrc) using Mise’s idiomatic parsing. by @iloveitaly in #431 - Python: Builds are now faster for projects using
psycopg-binaryas unnecessary system dependencies (libpq-dev) are skipped. by @iloveitaly in #379 - Python:
.python-versionfiles are now reliably detected in all environments. by @iloveitaly in #378
- Dockerignore: Negation rules (e.g.,
!file) in.dockerignorenow work correctly even if the referenced file does not exist locally. by @iloveitaly in #437 - Config: The
providerfield is no longer required inrailpack.json. by @iloveitaly in #436
Full Changelog: v0.16.0…v0.17.0
v0.16.0
Section titled “v0.16.0”January 14, 2026 · GitHub release
Providers
Section titled “Providers”- Python: Projects with
start.pyorbot.pyare now automatically detected as Python apps. This simplifies configuration for simple scripts and bots (e.g. Discord bot that don’t have manifest files. by @coffee-cup in #416
- Dotnet: The web server now correctly listens on the port defined by the
PORTenvironment variable. See the updated documentation. by @iloveitaly in #401
- Build: Generated Docker image names are now forced to lowercase to prevent build errors with registries that require lowercase repositories. by @iloveitaly in #410
Full Changelog: v0.15.3…v0.15.4
v0.15.4
Section titled “v0.15.4”December 20, 2025 · GitHub release
Providers
Section titled “Providers”- Dotnet: set aspnet content root to properly find configuration files by @iloveitaly and @Mohs9n in #396
- Erlang: There is an underlying bug in mise that causes the version selection to break. This has been fixed within Railpack and an upstream change has been submitted to mise.
Full Changelog: v0.15.2…v0.15.3
v0.15.3
Section titled “v0.15.3”December 19, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- sync mise version between Go code and Dockerfile by @coffee-cup in #394
Full Changelog: v0.15.2…v0.15.3
v0.15.2
Section titled “v0.15.2”December 19, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- update mise veresions by @coffee-cup in #389
- build mise image faster by @coffee-cup in #390
- release build mise for now by @coffee-cup in #391
- install mise from script by @coffee-cup in #392
- fix builder mise location by @coffee-cup in #393
Full Changelog: v0.15.1…v0.15.2
v0.15.1
Section titled “v0.15.1”December 1, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- perf: optimize plan command for large monorepos by @coffee-cup in #382
- fix: deduplicate deploy inputs when using –build-cmd by @coffee-cup in #381
Full Changelog: v0.15.0…v0.15.1
v0.15.0
Section titled “v0.15.0”November 29, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- chore: mise update 2025.11.8 by @iloveitaly in #377
- fix: consider exclude patterns when determining LLB merge eligibility by @coffee-cup in #380
Full Changelog: v0.14.0…v0.15.0
v0.14.0
Section titled “v0.14.0”November 24, 2025 · GitHub release
Providers
Section titled “Providers”- C/C++: We’ve added a C/C++ provider supporting CMake and Meson build systems. by @aleksrutins in #319
- Python: We’ve added automatic start command detection for FastAPI applications using
uvicorn. by @iloveitaly in #353
- Python: We’ve fixed detection of
psycopg(v3) to ensure required system dependencies (libpq) are installed. by @iloveitaly in #350 - General: We’ve replaced fuzzy file matching with exact checks to prevent false positives when detecting providers. by @iloveitaly in #347
- General:
miseconfiguration files in the application directory are now automatically trusted, suppressing “untrusted config” warnings. by @iloveitaly in #352
Full Changelog: v0.13.0…v0.14.0
v0.13.0
Section titled “v0.13.0”November 18, 2025 · GitHub release
Providers
Section titled “Providers”- Node: Added support for Node.js v25 by ensuring
libatomic1is explicitly installed. by @iloveitaly in #259 - Node: Railpack now ensures Node.js is available during the build phase via mise even when not required for the runtime (e.g. when using Bun), ensuring packages requiring
node-gypbuild correctly. by @iloveitaly in #259
- Node: We’ve improved how
node_modulescaching works during the build phase, specifically fixing issues where commands likenpm ci(which removenode_modules) caused build failures. See the Node documentation for more details. by @iloveitaly in #259
- Mise: Updated the internal
miseversion to 2025.11.6. by @iloveitaly in https://github.com/railwayapp/railpack/commit/d249231615dda1f2b4d7ade419f07890e2896079
- Mise: Added backoff retries for
miseregistry downloads to help prevent build failures during intermittent network issues. by @iloveitaly in #360
Full Changelog: v0.12.0…v0.13.0
v0.12.0
Section titled “v0.12.0”November 17, 2025 · GitHub release
Providers
Section titled “Providers”- Go: The Go provider now respects the Go version specified in your
miseconfiguration files (e.g.,mise.toml,.tool-versions). by @iloveitaly in #300 - Ruby: The Ruby provider now respects the Ruby version specified in your
miseconfiguration files (e.g.,mise.toml,.tool-versions). by @iloveitaly in #339 - Node: For Bun projects that require Node.js for build tooling (like
node-gyp), Railpack now installs Node.js usingmise, respecting versions from.nvmrc,.node-version, and othermiseconfigurations. by @iloveitaly in #341 - Gleam: You can now include your project’s source code in the final image by setting the
RAILPACK_GLEAM_INCLUDE_SOURCE=trueenvironment variable. by @iloveitaly in #318
- Python: The Python provider now configures
pipxto useuvfor installing packages, resulting in faster dependency installation. by @iloveitaly in #324 - All: Railpack now parses
miseconfiguration files (likemise.tomland.tool-versions) more idiomatically, improving compatibility and correctness. by @iloveitaly in #344
- Caching: You can now disable specific caches during the build process by setting the
RAILPACK_DISABLE_CACHEenvironment variable. For example, to disable theaptandpipcaches, setRAILPACK_DISABLE_CACHE="apt,pip". To disable all caches, set it to*. by @aleksrutins in #316
- Security: Railpack now enables
mise’s “paranoid mode” by default, a security feature that requires explicit user consent before installing new tools or running code from project-specific configurations. by @iloveitaly in #336
Full Changelog: v0.11.0…v0.12.0
v0.11.0
Section titled “v0.11.0”November 11, 2025 · GitHub release
Providers
Section titled “Providers”- Dotnet: Railpack now supports building .NET applications. The provider defaults to the latest LTS version of .NET, and the version can be customized using
miseconfiguration files (e.g.,.tool-versions,mise.toml). by @jaredLunde and @iloveitaly in #126 and #323 - Shell: The Shell provider now supports
zshas an interpreter and automatically detects the required shell (bash or zsh) from your start script’s shebang (e.g.,#!/bin/zsh). by @iloveitaly in #328 and #327 - Deno: You can now specify the Deno version for your project using
miseconfiguration files like.tool-versionsormise.tomlwith the Deno provider. by @iloveitaly in #325
Full Changelog: v0.10.0…v0.11.0
v0.10.0
Section titled “v0.10.0”November 6, 2025 · GitHub release
Providers
Section titled “Providers”- Gleam: Railpack now has first-class support for Gleam projects. by @aleksrutins in #313
- Elixir: Erlang and Elixir versions defined in
miseconfig files (e.g.,mise.toml,.tool-versions) will now be used instead of Railpack’s defaults. by @iloveitaly in #306 - Node.js: The
enginesfield inpackage.jsonis now used to determine the versions of Node.js and the package manager (npm, yarn, pnpm), but only if a version is not specified in a lockfile or other config. by @iloveitaly in #251 For example, to use Node.js v20 and pnpm v9, you can add the following to yourpackage.json:{"engines": {"node": "20.x","pnpm": "9.x"}}
- Python:
misePython compilation is disabled by default to avoid package compilation issues on newly released python versions. by @coffee-cup in #301
Full Changelog: v0.9.2…v0.10.0
v0.9.2
Section titled “v0.9.2”October 22, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- chore: mise update 2025.10.11 by @iloveitaly in #297
- docs: fix env var display on docs by @iloveitaly in #298
- docs: update python with mise-compatible version files by @crisog in #290
- fix: use default mise backend for uv by @iloveitaly in #260
- test: http checks on example projects by @iloveitaly in #250
- chore: mise update 2025.10.13 by @iloveitaly in #302
- build: add mise upgrade task by @iloveitaly in #303
- test: assert against specific rust version defined by rust-toolchain.toml by @iloveitaly in #299
- fix: use channel key not version from rust-toolchain.toml by @iloveitaly in #304
- refactor: cleanup rust provider by @iloveitaly in #305
- docs: minor docs and comments by @iloveitaly in #309
New Contributors
Section titled “New Contributors”- @crisog made their first contribution in #290
Full Changelog: v0.9.1…v0.9.2
v0.9.1
Section titled “v0.9.1”October 16, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- fix: support + character in environment variable names by @coffee-cup in #294
Full Changelog: v0.9.0…v0.9.1
v0.9.0
Section titled “v0.9.0”October 7, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- fix: use containerd platform parsing to fix platform parsing by @iloveitaly in #277
- test: php snapshot update by @iloveitaly in #280
- chore: mise update 2025.9.19 by @iloveitaly in #281
- feat: add –hide-pretty-plan and –show-plan to prepare by @iloveitaly in #284
- feat: use py package versions from any mise-supported version specification file by @iloveitaly in #261
- chore: mise update 2025.9.25 by @iloveitaly in #288
- chore: mise update 2025.10.4 by @iloveitaly in #289
Full Changelog: v0.8.0…v0.9.0
v0.8.0
Section titled “v0.8.0”September 25, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- chore: mise update 2025.9.17 by @iloveitaly in #274
- feat: dockerignore support by @iloveitaly in #263
- fix: missing local layer usage by @iloveitaly in #276
- chore: mise update 2025.9.18 by @iloveitaly in #275
Full Changelog: v0.7.2…v0.8.0
v0.7.2
Section titled “v0.7.2”September 19, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- fix: gracefully handle resolution failures for packages with SkipMiseInstall=true by @coffee-cup in #273
Full Changelog: v0.7.1…v0.7.2
v0.7.1
Section titled “v0.7.1”September 17, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- Add configurable skippable commands list to pretty print output by @coffee-cup in #271
Full Changelog: v0.7.0…v0.7.1
v0.7.0
Section titled “v0.7.0”September 16, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- Update Rust examples by @coffee-cup in #268
- Update default versions for Go, Python, Ruby, and Rust providers by @coffee-cup in #267
Full Changelog: v0.6.1…v0.7.0
v0.6.1
Section titled “v0.6.1”September 16, 2025 · GitHub release
What’s Changed
Section titled “What’s Changed”- test: use poetry cli to run python by @iloveitaly in #257
- chore: mise update 2025.9.9 by @iloveitaly in #262
- fix: remove python3-dev apt package by @iloveitaly in #256
- Update node examples by @railway-bot in #266
New Contributors
Section titled “New Contributors”- @railway-bot made their first contribution in #266
Full Changelog: v0.6.0…v0.6.1
Older releases
Section titled “Older releases”This page covers the last year. See all releases on GitHub.