Skip to content

appliku.yml Reference

This is the full specification reference for the appliku.yml configuration file. Place this file in the root directory of your application repository to define build settings, processes, databases, volumes, and cron jobs.

For a guide-oriented introduction, see appliku.yml Configuration.

Top-Level Keys

build_settings:   # Build and deployment configuration
services:         # Application processes
databases:        # Database services to provision
volumes:          # Persistent storage volumes
cronjobs:         # Scheduled tasks
commands:         # Saved commands for the Run Command autocomplete

All top-level keys are optional. You can define only the sections you need.


build_settings

Configures how your application is built and prepared for deployment.

Key Type Required Default Description
build_image string Yes -- Build image or dockerfile/custom
build_command string No -- Command to run during the build phase
dockerfile string No -- Inline Dockerfile content (when build_image is dockerfile or custom)
dockerfile_path string No "Dockerfile" Path to Dockerfile in repository
dockerfile_context_path string No -- Build context path for Dockerfile
container_port integer No -- Port your application listens on
release_command string No -- Command to run after build, before deployment (e.g., migrations)
skip_release_command boolean No false Skip the release command
expose_web_port boolean No false Expose container port on all interfaces
is_static_site boolean No false Mark as a static site
output_directory string No -- Directory containing built static files
environment_variables array No -- Environment variable definitions

build_image Values

Python: python-3.14, python-3.13, python-3.12, python-3.11, python-3.10, python-3.9, python-3.8

Python with uv: python-3.14-uv, python-3.13-uv, python-3.12-uv, python-3.11-uv

Python + Node.js: python-3.14-node-25.6, python-3.13-node-20.18, python-3.12-node-20.10, python-3.11-node-20.10, python-3.10-node-20.10

Python (uv) + Node.js: python-3.14-uv-node-25.6, python-3.13-uv-node-25.6, python-3.12-uv-node-25.6, python-3.11-uv-node-25.6

Node.js: node-25-npm, node-24-npm, node-22-npm, node-20-npm, node-20-yarn

Ruby: ruby-3.4.1, ruby-3.3-rails

Alternative: pypy2, pypy3

Custom: dockerfile (from repository), custom (inline in dashboard)

Static Sites: no-build-static (requires is_static_site: true)

environment_variables

Each entry in the environment_variables array supports several formats:

Static value:

environment_variables:
  - name: MY_VAR
    value: my_value

From database (public connection URL):

environment_variables:
  - name: DATABASE_URL
    from_database:
      name: db
      property: connection_url

From database (private/internal connection URL):

environment_variables:
  - name: DATABASE_URL
    from_database:
      name: db
      property: private_connection_url

From domains (comma-separated list of all application domains):

environment_variables:
  - name: ALLOWED_HOSTS
    from_domains: true

Manual (placeholder for user-provided values):

environment_variables:
  - name: SECRET_KEY
    source: manual


services

Defines the processes that run your application. Each key is the service name.

Key Type Required Default Description
command string Yes -- Command to run the service
scale integer No 1 Number of instances
mode string No "replicated" replicated or global
placement_constraints string No -- Docker Swarm placement constraints
resources_limits_memory string No -- Memory limit (e.g., "512M", "2G")
resources_limits_cpus string No -- CPU limit (e.g., "0.5", "2")
resources_reservations_memory string No -- Memory reservation
resources_reservations_cpus string No -- CPU reservation
image string No -- Use an existing Docker image instead of building
volumes array No -- Docker volume mounts
shm_size string No -- Shared memory size
ports array No -- Port mappings
mem_limit string No -- Memory limit (alternative syntax)

Example

services:
  web:
    command: gunicorn project.wsgi --bind 0.0.0.0:8000
    scale: 2
    resources_limits_memory: 512M
    resources_limits_cpus: "1"
  worker:
    command: celery -A project worker -l info
    scale: 1
    resources_limits_memory: 256M
  release:
    command: python manage.py migrate

Note

The release service is special -- it runs once after each deployment (like a release command) rather than as a long-running process.


databases

Defines database services to provision. Each key is a name you choose (used to reference the database in environment_variables).

Key Type Required Description
type string Yes Database engine and version identifier

Available Types

Type Key Engine
postgresql_18 PostgreSQL 18
postgresql_17 PostgreSQL 17
postgresql_16 PostgreSQL 16
postgresql_15 PostgreSQL 15
postgresql_12 PostgreSQL 12
postgis_16_34 PostGIS 16 + 3.4
postgis PostGIS
postgresql_16_pgvector PostgreSQL 16 + pgvector
timescale_db_17 TimescaleDB 17
timescale_db_17_ha TimescaleDB 17 HA
timescale_db_15 TimescaleDB 15
mysql_8 MySQL 8
redis_8 Redis 8
redis_7 Redis 7
redis_6 Redis 6
rabbitmq RabbitMQ
elasticsearch_8_17 Elasticsearch 8.17

Example

databases:
  db:
    type: postgresql_17
  cache:
    type: redis_7
  broker:
    type: rabbitmq

volumes

Defines persistent storage volumes that survive container restarts and redeployments.

Key Type Required Description
target string Yes Mount path inside the container
url string No URL path for web access (served by Nginx)
environment_variable string No Env var name set to the volume path
source string No Source path on host (for bind mounts)

Example

volumes:
  media:
    target: /app/media/
    url: /media/
    environment_variable: MEDIA_ROOT
  data:
    target: /app/data/
    environment_variable: DATA_PATH

Tip

When you set a url on a volume, Nginx serves files from that volume directly without passing requests to your application. This is efficient for serving user-uploaded media files.


cronjobs

Defines scheduled tasks that run at specified intervals using cron expressions.

Key Type Required Description
schedule string Yes Cron expression (e.g., "0 * * * *")
command string Yes Command to execute

Cron Expression Format

┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-6, Sunday=0)
│ │ │ │ │
* * * * *

Example

cronjobs:
  send_emails:
    schedule: "0 * * * *"
    command: python manage.py send_emails
  daily_backup:
    schedule: "0 2 * * *"
    command: python manage.py backup
  weekly_cleanup:
    schedule: "0 3 * * 0"
    command: python manage.py cleanup_old_records

Note

Cron job logs are stored on the server at /home/app/_cron_logs/<job_id>. You can view them by SSHing into the server.


commands

Defines a list of frequently used commands that appear as autocomplete suggestions in the Run Command tab. The list is a flat array of strings and is fully replaced on every deployment.

Type Required Description
list(string) No Ordered list of command strings

Example

commands:
  - python manage.py show_urls
  - python manage.py validate_templates
  - python manage.py check
  - python manage.py send_queued_mail

Note

Commands are suggestions only — they are never executed automatically. Users select or type a command in the Run Command tab and trigger it manually.


Complete Example

build_settings:
  build_image: python-3.12-node-20.10
  build_command: npm run build
  container_port: 8000
  environment_variables:
    - name: DEBUG
      value: "false"
    - name: DATABASE_URL
      from_database:
        name: db
        property: private_connection_url
    - name: REDIS_URL
      from_database:
        name: cache
        property: connection_url
    - name: ALLOWED_HOSTS
      from_domains: true
    - name: SECRET_KEY
      source: manual

services:
  web:
    command: gunicorn project.wsgi --bind 0.0.0.0:8000 --workers 3
    scale: 2
    resources_limits_memory: 512M
  worker:
    command: celery -A project worker -l info
    scale: 1
    resources_limits_memory: 256M
  release:
    command: python manage.py migrate

databases:
  db:
    type: postgresql_17
  cache:
    type: redis_7

volumes:
  media:
    target: /app/media/
    url: /media/
    environment_variable: MEDIA_ROOT

cronjobs:
  cleanup:
    schedule: "0 3 * * *"
    command: python manage.py cleanup_old_files
  send_reports:
    schedule: "0 8 * * 1"
    command: python manage.py send_weekly_report

commands:
  - python manage.py migrate
  - python manage.py createsuperuser
  - python manage.py shell