Customize presets and images
Override the framework presets and Docker images used for building and deploying your apps.

File format
Presets
The presets file (/opt/devpush/app/settings/presets.json) is a list of objects, each one describing a possible preset that you can select in your project settings.
Example:
[
{
"slug": "python",
"name": "Python",
"category": "Python",
"image": "python-3.12",
"build_command": "pip install -r requirements.txt",
"pre_deploy_command": "",
"start_command": "gunicorn -w 3 -b 0.0.0.0:8000 main:app",
"logo": "<svg>...</svg>"
},
(...)
]
Each preset has the following fields:
| Field | Type | Required | Description |
|---|---|---|---|
slug |
string |
Yes | Unique identifier used in URLs and config overrides. |
name |
string |
Yes | Display name shown in the UI. |
category |
string |
No | UI grouping for the preset list. |
image |
string |
No | Default runner image slug (must exist in images list). |
root_directory |
string |
No | Working directory for commands (e.g. ./ or apps/api). |
build_command |
string |
Yes | Install/build step run during deployment. |
pre_deploy_command |
string |
Yes | Optional step run before starting the app. |
start_command |
string |
Yes | Command used to start the app. |
beta |
boolean |
No | Marks the preset as beta in the UI. |
logo |
string |
Yes | SVG markup used as the preset icon. |
Images
The images file (/opt/devpush/app/settings/images.json) is a list of runner images. Each entry describes what the user can select in the project settings.
Example:
[
{
"slug": "python-3.12",
"name": "Python 3.12",
"category": "Python"
}
]
Fields:
| Field | Type | Required | Description |
|---|---|---|---|
slug |
string | Yes | Image identifier (maps to a Dockerfile name). |
name |
string | Yes | Display name shown in the UI. |
category |
string | Yes | UI grouping for the image list. |
Dockerfiles
Runner Dockerfiles live in docker/runner/ inside the DevPush app source. Each file is named Dockerfile.<slug> and is used to build the runner image for that slug (for example, Dockerfile.python-3.12).
Overriding
To override presets and/or images, place JSON files in the data directory with the correct ownership and permissions. You can override only one file or both.
sudo install -m 0644 -o devpush -g devpush ./presets.json /var/lib/devpush/presets.json
sudo install -m 0644 -o devpush -g devpush ./images.json /var/lib/devpush/images.json
Runner images are built from Dockerfiles based on the slug provided in the images.json file. This means you can override a runner without changing images.json.
sudo install -d -m 0755 -o devpush -g devpush /var/lib/devpush/runner
sudo install -m 0644 -o devpush -g devpush ./Dockerfile.python-3.12 \
/var/lib/devpush/runner/Dockerfile.python-3.12