1. Multiple runtimes in the same application container
This is the most common and most transformative use case. Apps today routinely combine a primary runtime with secondary ones. A PHP application with a Node build toolchain. A Node backend enriched with a Python script for ML preprocessing. A Python API that relies on Ruby or Go utilities for legacy workflows. Composable Image makes these multi-runtime setups declarative, predictable, and frictionless:No multi-stage build arcana.
No risk of environment drift between development, CI, and production. The first declared runtime is the primary one; all are available inside your container. Each runtime is built in isolation, ensuring there are no hidden system dependencies and no side effects. This solves one of the biggest pains of modern app development: your environment finally reflects the actual complexity of your app, without compromising clarity.
2. Zero runtimes for pure static applications
Not every project needs PHP, Node, Python, or any interpreter. Some applications are simply static sites, a collection of HTML, CSS, JS, and assets that don’t require a runtime to execute. Composable Image supports these projects cleanly: you can deploy a fully static site with no runtime declared at all.html-tidyfor HTML cleanupjpegoptimorpngquantfor image compressioncurlorjqfor fetching and massaging external data
No language runtime.
Just the utilities your static project requires, nothing more. Behind the scenes, Nix provides each tool in isolation, with no hidden dependencies and no risk of drift across environments. This gives static projects the same benefits as complex apps: reproducibility, clarity, and control, with an absolute minimum footprint.
3. Local env setup
Below is a beginner-friendly, step-by-step tutorial (no flakes) to install Nix locally and reproduce your Upsun toolchain (curl, jq, tidy, pngquant, jpegoptim, html-tidy).3.1 Install Nix
The most reliable installer is Determinate Systems is to run:3.2 Create a project folder (or go to your repo)
Go to the repository where you want the tools available:3.3 Create a shell.nix file (no flakes)
Create a file named shell.nix at the root of your repo:
Note: you can add in this packages list any useful package you want to install from https://search.nixos.org/packages
3.4 Enter the Nix environment
From the repo directory, run:3.5 Verify the tools
Still insidenix-shell, run:
3.6 Use the tools (example commands)
Insidenix-shell, you can use:
HTML tidy:
3.7 Exit the environment
When you’re done:4. Embedding specific or niche packages and binaries
Every app eventually hits the need for “that one CLI tool”:wkhtmltopdffor invoicesffmpegfor videosghostscriptfor documentsimagemagickfor media processing- a low-level CLI for LDAP, or cryptographic utilities
- even niche or experimental packages from the Nix ecosystem
Why This Matters: Clarity, Control, Confidence
Composable Image is not just a feature. It’s a shift in how developers think about application environments: Clarity: Your entire environment is visible in a singleconfig.yaml. No more guessing what’s inside your container.
Control: You decide which runtimes, versions, binaries, and extensions your app needs. Upsun simply builds it for you.
Confidence: Thanks to Upsun’s reproducible build model, what you declare runs exactly as you expect, in dev and in production.