On this page

Persistent Storage

By default, data inside a container is ephemeral — it is lost when the service restarts or a new deployment is made. Persistent volumes solve this problem by preserving data across restarts and deployments.

What are persistent volumes?

Persistent volumes are disk storage spaces attached to your service. Unlike the container’s file system, data in a persistent volume survives:

  • Service restarts
  • New deployments
  • Image updates

Use persistent volumes to store data such as uploaded files, embedded databases (SQLite), disk caches, or any data that needs to persist.

Creating and attaching a volume

  1. Go to the service page in the dashboard
  2. Navigate to the Storage tab
  3. Click New Volume
  4. Set the size of the volume (in GB)
  5. Set the mount path — the directory inside the container where the volume will be accessible (for example, /data or /app/uploads)
  6. Click Create

The volume will be created and attached to the service. A new deployment will be triggered automatically to mount the volume.

Mount path

The mount path defines where the volume appears inside the container. Your application accesses the volume’s data as regular files in that directory.

Common examples:

Use caseSuggested path
SQLite database/data
Uploaded files/app/uploads
Disk cache/app/cache
Persistent logs/var/log/app

Limits by plan

ResourceHobbyProBusinessEnterprise
Volumes per project 1 3 5 50
Max size per volume 1 GB 5 GB 10 GB 50 GB
Total storage 1 GB 8 GB 25 GB 500 GB

Important considerations

  • One volume per service. Each volume is attached to a single service.
  • Resizing. You can increase a volume’s size, but you cannot reduce it.
  • Deletion. When you delete a service, its associated volumes are also permanently removed.
  • Replicas. Persistent volumes are shared across replicas of the same service. Make sure your application handles concurrent access correctly.