Platform.sh is now Upsun. Click here to learn more
Upsun User Documentation

Choose an image type

Try Upsun for 15 days
After that, enjoy the same game-changing Upsun features for less with the First Project Incentive!¹ A monthly $19 perk!
Activate your 15-day trial
¹Terms and conditions apply

An image represents the configuration of the container that contains the application (or service) that you want to deploy.

Choosing the image type for the container that best suits your application is the first and most important decision in configuring how your application is deployed.

You can choose either Upsun’s single-runtime image or its composable image. The key difference between them is the type of flexibility that they offer.

For both image types, the image is defined in the .upsun/config.yaml file.

Which image type should you choose? Anchor to this heading

Criteria / Use‑case Single‑runtime image Composable image
When it’s best used (typical use case) Good for simple applications that need only one runtime. Best for applications needing custom secondary runtimes, static assets, or custom binaries/tools.
# of runtimes per container One — a single runtime per container. Zero or more — you can define multiple runtimes (or none) per container.
Packages permitted / how dependencies are managed Only the base runtime and its extensions are permitted directly. To add non-runtime packages, you must use build-phase installation via hooks or dependencies. See Keys used below. Supports multiple runtimes, extensions, packages and services. You define everything in the stack key (runtimes + Nix packages). See Keys used below.
Manual configuration / setup burden Lower: using a supported runtime means less manual setup; adding downloads, dependencies, and packages might require use of build hooks, which might complicate configuration. Higher: you manually define the composition of the container or stack (runtimes + packages) of Nix packages. More flexible but requires more setup.
Maintenance & updates (patches, upgrades) Upsun handles image updates (minor and patch updates; security patches) automatically on deployment You need to redeploy often to apply Nix package updates; update cadence depends on package maintainers.
Your team must be comfortable with upgrading, testing, and refactoring images promptly when Nix a channel becomes deprecated (every six months).
Flexibility (versions, custom binaries, tools) Limited to supported runtimes + permitted extensions. If you require combinations not supported by Upsun, you may hit limits (e.g. certain PHP + Node.js/Python combos). High — you can mix runtimes, pick specific package versions, and include custom binaries/tools via Nix.
When to reconsider / migrate If you need many packages (beyond runtime extensions), complex dependencies, multiple runtimes, or custom tools, consider migrating to composable. If you don’t need the complexity (just a simple runtime and minimal packages), composable may be unnecessary overhead.

Keys used in each image type Anchor to this heading

Both image types use many of the same keys. Differences in syntax or meaning are noted as needed - see the Image properties section for the topics that describe each key.

Defining your app’s tech stack depends on the image type you choose:

Multi-app projects Anchor to this heading

In a multiple application context, you can use a mix of single-runtime images and composable images. See the examples in the single-runtime image topic and composable image topic.