Project Services
Project services let you provision managed database and infrastructure services for your projects. Services run as containers alongside your preview containers.
Available Services#
PostgreSQL (Available)#
Managed PostgreSQL databases with:
- Versions: 17 (default), 16, 15
- Size tiers:
| Tier | Memory | CPU | Storage |
|---|---|---|---|
| Dev | 256 MB | 0.5 | 1 GB |
| Standard | 512 MB | 1.0 | 5 GB |
| Performance | 1 GB | 2.0 | 20 GB |
Redis (Available)#
Managed Redis instances for caching and sessions:
- Versions: 8 (default), 6
- Size tiers:
| Tier | Memory | CPU | Storage |
|---|---|---|---|
| Dev | 128 MB | 0.5 | 512 MB |
| Standard | 256 MB | 1.0 | 2 GB |
| Performance | 512 MB | 2.0 | 10 GB |
Coming Soon#
- MySQL
- MongoDB
- Qdrant (vector database)
- MinIO (S3-compatible storage)
- Mailpit (email testing)
Provisioning a Service#
From the Command Center, click the Services button (Blocks icon) in the top toolbar to open the Services panel in the left sidebar:
- Choose a service type (e.g., PostgreSQL)
- Select a size tier and version
- Click Provision — the service starts provisioning asynchronously
The service goes through these states:
Pending → Provisioning → Running → Stopped
→ Error
→ Destroying → Destroyed
→ DestroyFailed (reaper retries automatically)Provisioning during project creation#
The Services step in the project creation wizard lets you provision services before your project is fully set up. It appears between the Source step and the Review step (wizard order: Identity → Stack → Source → Services → Review).
During this step you can:
- Select one or more service types (PostgreSQL, Redis) and choose a size tier for each (the default version is used automatically)
- Skip the step entirely if you don't need any services at creation time — you can always add services later from the Command Center
Services selected in the wizard are provisioned immediately after the project is created. Their credentials are injected into the project's environment automatically, so agents have database access from the first run.
Credentials#
Each service generates credentials automatically. Credentials are encrypted at rest and can be viewed in masked or revealed mode.
Service-provisioned keys (such as DATABASE_URL, PGHOST, REDIS_URL) are read-only — attempting to overwrite or delete them via the API or config-vars UI returns an error. The lock icon in the environment variables UI reflects this server-side enforcement. See Environment Variables for details.
PostgreSQL Credentials#
| Key | Example |
|---|---|
DATABASE_URL | postgres://user:pass@host:5432/db |
PGHOST | Container hostname |
PGPORT | 5432 |
PGUSER | Auto-generated username |
PGPASSWORD | Securely generated password |
PGDATABASE | Auto-generated database name |
Redis Credentials#
| Key | Example |
|---|---|
REDIS_URL | redis://:pass@host:6379/0 |
REDIS_HOST | Container hostname |
REDIS_PORT | 6379 |
REDIS_PASSWORD | Securely generated password |
Managing Services#
| Action | Description |
|---|---|
| Start | Start a stopped service |
| Stop | Stop a running service (data preserved) |
| Restart | Stop and start a service |
| Destroy | Permanently remove the service, container, and volume |
Permission required: project:settings for start/stop/restart, project:delete for destroy.
Automatic restart: Stopped services are automatically restarted when a new agent execution or preview container starts, so credentials remain accessible without manual intervention.
Health Checks#
Services include automatic health checks run during provisioning before the service is marked Running:
- PostgreSQL —
pg_isreadychecks that the database is accepting connections. - Redis —
redis-cli pingchecks that the server responds withPONG.
Billing and Plan Limits#
Your plan controls how many services you can provision at once. If you reach the limit, the Provision action returns an error and you must destroy an existing service before adding another.
Only one active service of each type is allowed per project at a time (enforced by a unique constraint on project + service type).
Troubleshooting#
| Symptom | Likely cause | Fix |
|---|---|---|
| Service stays in Provisioning for > 2 minutes | Health check timed out or container failed to start | The platform automatically transitions the service to Error state on the next page load (no manual refresh required). Check the error message on the service card; destroy and re-provision with a smaller tier |
| Service stuck in DestroyFailed | Kubernetes resource removal could not be verified | The background reaper retries automatically; if it persists after several minutes contact support |
| Credentials not visible in env vars | Provisioning may still be in progress | Wait for the service to reach Running status; credentials are injected when provisioning completes |
| Cannot start/stop/restart | Requires project:settings permission | Ask a project owner to grant you the appropriate role |
Service Catalog#
The service catalog shows all available and coming-soon services. Each catalog entry includes the service type, description, available versions, size tiers, and the environment variable keys that will be generated.