Service Marketplace
Drift provides 19 managed services you can provision and bind to your apps with a single command. Credentials are delivered via VCAP_SERVICES.
How service binding works
VCAP_SERVICES. This is the same format used by Cloud Foundry, making migration seamless.Databases#
PostgreSQL 16#
Production-ready relational database. Image: postgres:16-alpine.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 256MB RAM, 1GB disk | ✓ |
| medium | 512MB RAM, 5GB disk | — |
| large | 1GB RAM, 20GB disk | — |
Create & Bind
drift create-service postgres small my-postgres
drift bind-service myapp my-postgres
drift restart myappCredentials (VCAP_SERVICES)
{
"postgres": [{
"credentials": {
"host": "drift-pg-abc12345",
"port": 5432,
"database": "db_1a2b3c4d",
"username": "u_5e6f7g8h",
"password": "...",
"uri": "postgres://u_5e6f7g8h:...@drift-pg-abc12345:5432/db_1a2b3c4d"
},
"name": "mydb",
"plan": "small"
}]
}Example Usage
# Node.js
const vcap = JSON.parse(process.env.VCAP_SERVICES);
const pg = vcap.postgres[0].credentials;
const pool = new Pool({ connectionString: pg.uri });MySQL 8#
MySQL relational database. Image: mysql:8-oracle.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 256MB RAM | ✓ |
| medium | 512MB RAM | — |
| large | 1GB RAM | — |
Create & Bind
drift create-service mysql small my-mysql
drift bind-service myapp my-mysql
drift restart myappCredentials (VCAP_SERVICES)
{
"mysql": [{
"credentials": {
"host": "drift-mysql-abc12345",
"port": 3306,
"database": "db_1a2b3c4d",
"username": "u_5e6f7g8h",
"password": "...",
"uri": "mysql://u_5e6f7g8h:...@drift-mysql-abc12345:3306/db_1a2b3c4d"
},
"name": "mydb",
"plan": "small"
}]
}MongoDB 7#
Document database. Image: mongo:7.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 256MB RAM | ✓ |
| medium | 512MB RAM | — |
| large | 2GB RAM | — |
Create & Bind
drift create-service mongodb small my-mongodb
drift bind-service myapp my-mongodb
drift restart myappCredentials (VCAP_SERVICES)
{
"mongodb": [{
"credentials": {
"host": "drift-mongo-abc12345",
"port": 27017,
"database": "db_1a2b3c4d",
"username": "u_5e6f7g8h",
"password": "...",
"uri": "mongodb://u_5e6f7g8h:...@drift-mongo-abc12345:27017/db_1a2b3c4d"
},
"name": "mydb",
"plan": "small"
}]
}Caching & Messaging#
Redis 7#
In-memory data store for caching, sessions, and pub/sub. Image: redis:7-alpine.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 64MB RAM | ✓ |
| medium | 256MB RAM | — |
| large | 1GB RAM | — |
Create & Bind
drift create-service redis small my-redis
drift bind-service myapp my-redis
drift restart myappCredentials (VCAP_SERVICES)
{
"redis": [{
"credentials": {
"host": "drift-redis-abc12345",
"port": 6379,
"password": "...",
"uri": "redis://:...@drift-redis-abc12345:6379"
},
"name": "mycache",
"plan": "small"
}]
}RabbitMQ 3#
Message broker with management UI. Image: rabbitmq:3-management-alpine.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 128MB RAM | ✓ |
| medium | 512MB RAM | — |
| large | 2GB RAM | — |
Create & Bind
drift create-service rabbitmq small my-rabbitmq
drift bind-service myapp my-rabbitmq
drift restart myappCredentials (VCAP_SERVICES)
{
"rabbitmq": [{
"credentials": {
"host": "drift-rmq-abc12345",
"port": 5672,
"management_port": 15672,
"username": "u_5e6f7g8h",
"password": "...",
"vhost": "v_1a2b3c4d",
"uri": "amqp://u_5e6f7g8h:...@drift-rmq-abc12345:5672/v_1a2b3c4d",
"dashboard_url": "http://drift-rmq-abc12345:15672"
},
"name": "myqueue",
"plan": "small"
}]
}Apache Kafka 3.7#
Event streaming platform running in KRaft mode (no Zookeeper). Image: apache/kafka:3.7.0.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 512MB RAM | ✓ |
| medium | 1GB RAM | — |
| large | 2GB RAM | — |
Create & Bind
drift create-service kafka small my-kafka
drift bind-service myapp my-kafka
drift restart myappCredentials (VCAP_SERVICES)
{
"kafka": [{
"credentials": {
"host": "drift-kafka-abc12345",
"port": 9092,
"bootstrap_servers": "drift-kafka-abc12345:9092",
"cluster_id": "..."
},
"name": "mystream",
"plan": "small"
}]
}Identity & Security#
Keycloak SSO (Identity)#
Keycloak identity provider with OAuth2/OIDC support. Each binding creates a new client in the realm.
Plans
| Plan | Specs | Free |
|---|---|---|
| basic | Up to 100 users | ✓ |
| standard | Up to 500 users | — |
| enterprise | Unlimited users | — |
Create & Bind
drift create-service identity small my-identity
drift bind-service myapp my-identity
drift restart myappCredentials (VCAP_SERVICES)
{
"identity": [{
"credentials": {
"realm": "drift-abc12345",
"client_id": "drift-1a2b",
"client_secret": "...",
"auth_url": "https://.../realms/drift-abc12345/protocol/openid-connect/auth",
"token_url": "https://.../realms/drift-abc12345/protocol/openid-connect/token",
"issuer": "https://.../realms/drift-abc12345",
"dashboard_url": "https://.../admin/drift-abc12345/console"
},
"name": "mysso",
"plan": "basic"
}]
}HashiCorp Vault#
Secrets management and PKI certificates. Dev plan runs in-memory (unsealed).
Plans
| Plan | Specs | Free |
|---|---|---|
| dev | 128MB RAM, dev mode (in-memory, unsealed) | ✓ |
| standard | 256MB RAM, file storage | — |
| ha | 512MB RAM, HA-ready | — |
Create & Bind
drift create-service vault small my-vault
drift bind-service myapp my-vault
drift restart myappCredentials (VCAP_SERVICES)
{
"vault": [{
"credentials": {
"host": "drift-vault-abc12345",
"port": 8200,
"root_token": "...",
"uri": "http://drift-vault-abc12345:8200",
"dashboard_url": "http://drift-vault-abc12345:8200/ui"
},
"name": "mysecrets",
"plan": "dev"
}]
}Storage#
S3 Storage (MinIO)#
S3-compatible object storage powered by MinIO. Credentials include a dedicated bucket and access key.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 1GB storage | ✓ |
| medium | 10GB storage | — |
| large | 100GB storage | — |
Create & Bind
drift create-service s3-storage small my-s3-storage
drift bind-service myapp my-s3-storage
drift restart myappCredentials (VCAP_SERVICES)
{
"s3-storage": [{
"credentials": {
"endpoint": "https://s3.drift.velozengineering.ch",
"bucket": "drift-abc12345",
"access_key": "ak-1a2b3c4d",
"secret_key": "...",
"region": "us-east-1",
"uri": "s3://ak-1a2b3c4d:...@.../drift-abc12345"
},
"name": "mybucket",
"plan": "small"
}]
}Example Usage
# Using AWS SDK (any language)
import boto3
s3 = boto3.client('s3',
endpoint_url=creds['endpoint'],
aws_access_key_id=creds['access_key'],
aws_secret_access_key=creds['secret_key']
)
s3.put_object(Bucket=creds['bucket'], Key='file.txt', Body=b'hello')Private Docker Registry#
Private Docker registry for storing container images. Image: registry:2.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 256MB RAM, filesystem storage | ✓ |
| medium | 512MB RAM | — |
| large | 1GB RAM | — |
Create & Bind
drift create-service registry small my-registry
drift bind-service myapp my-registry
drift restart myappCredentials (VCAP_SERVICES)
{
"registry": [{
"credentials": {
"host": "drift-reg-abc12345",
"port": 5000,
"uri": "drift-reg-abc12345:5000"
},
"name": "myregistry",
"plan": "small"
}]
}Monitoring & Logging#
Prometheus#
Metrics collection and monitoring. Image: prom/prometheus:v2.50.0.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 256MB RAM, 15d retention | ✓ |
| medium | 512MB RAM, 30d retention | — |
| large | 1GB RAM, 90d retention | — |
Create & Bind
drift create-service prometheus small my-prometheus
drift bind-service myapp my-prometheus
drift restart myappCredentials (VCAP_SERVICES)
{
"prometheus": [{
"credentials": {
"host": "drift-prom-abc12345",
"port": 9090,
"uri": "http://drift-prom-abc12345:9090",
"remote_write_url": "http://drift-prom-abc12345:9090/api/v1/write"
},
"name": "mymetrics",
"plan": "small"
}]
}Grafana#
Dashboards and visualization. Image: grafana/grafana:10.3.1.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 128MB RAM | ✓ |
| medium | 256MB RAM | — |
| large | 512MB RAM | — |
Create & Bind
drift create-service grafana small my-grafana
drift bind-service myapp my-grafana
drift restart myappCredentials (VCAP_SERVICES)
{
"grafana": [{
"credentials": {
"host": "drift-grafana-abc12345",
"port": 3000,
"admin_user": "admin",
"admin_password": "...",
"dashboard_url": "http://drift-grafana-abc12345:3000"
},
"name": "mydash",
"plan": "small"
}]
}Grafana Loki#
Log aggregation system. Image: grafana/loki:2.9.4.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 256MB RAM, 72h retention | ✓ |
| medium | 512MB RAM, 7d retention | — |
| large | 1GB RAM, 30d retention | — |
Create & Bind
drift create-service loki small my-loki
drift bind-service myapp my-loki
drift restart myappCredentials (VCAP_SERVICES)
{
"loki": [{
"credentials": {
"host": "drift-loki-abc12345",
"port": 3100,
"push_url": "http://drift-loki-abc12345:3100/loki/api/v1/push",
"query_url": "http://drift-loki-abc12345:3100"
},
"name": "mylogs",
"plan": "small"
}]
}Search#
Meilisearch#
Lightning fast full-text search engine. Image: getmeili/meilisearch:v1.6.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 256MB RAM | ✓ |
| medium | 512MB RAM | — |
| large | 1GB RAM | — |
Create & Bind
drift create-service meilisearch small my-meilisearch
drift bind-service myapp my-meilisearch
drift restart myappCredentials (VCAP_SERVICES)
{
"meilisearch": [{
"credentials": {
"host": "drift-meili-abc12345",
"port": 7700,
"master_key": "...",
"uri": "http://drift-meili-abc12345:7700"
},
"name": "mysearch",
"plan": "small"
}]
}Email#
SMTP Email#
SMTP email service using Mailhog. Dev plan catches all email; relay plan forwards to external SMTP.
Plans
| Plan | Specs | Free |
|---|---|---|
| dev | Mailhog catch-all, 128MB RAM | ✓ |
| relay | Mailhog with SMTP relay, 128MB RAM | — |
Create & Bind
drift create-service smtp small my-smtp
drift bind-service myapp my-smtp
drift restart myappCredentials (VCAP_SERVICES)
{
"smtp": [{
"credentials": {
"host": "drift-smtp-abc12345",
"port": 1025,
"web_port": 8025,
"dashboard_url": "http://drift-smtp-abc12345:8025"
},
"name": "mymail",
"plan": "dev"
}]
}Virtual Machines#
VM — Ubuntu#
Ubuntu-style virtual machine with SSH access.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 256MB RAM | ✓ |
| medium | 1GB RAM | — |
| large | 4GB RAM | — |
Create & Bind
drift create-service vm-ubuntu small my-vm-ubuntu
drift bind-service myapp my-vm-ubuntu
drift restart myappCredentials (VCAP_SERVICES)
{
"vm-ubuntu": [{
"credentials": {
"host": "drift-vm-abc12345",
"port": 22,
"username": "user",
"password": "..."
},
"name": "myvm",
"plan": "small"
}]
}VM — Debian#
Debian-style virtual machine with SSH access.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 256MB RAM | ✓ |
| medium | 1GB RAM | — |
| large | 4GB RAM | — |
Create & Bind
drift create-service vm-debian small my-vm-debian
drift bind-service myapp my-vm-debian
drift restart myappCredentials (VCAP_SERVICES)
{
"vm-debian": [{
"credentials": {
"host": "drift-vm-abc12345",
"port": 22,
"username": "user",
"password": "..."
},
"name": "myvm",
"plan": "small"
}]
}VM — Alpine#
Alpine lightweight virtual machine with SSH access.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 64MB RAM | ✓ |
| medium | 256MB RAM | — |
| large | 1GB RAM | — |
Create & Bind
drift create-service vm-alpine small my-vm-alpine
drift bind-service myapp my-vm-alpine
drift restart myappCredentials (VCAP_SERVICES)
{
"vm-alpine": [{
"credentials": {
"host": "drift-vm-abc12345",
"port": 22,
"username": "user",
"password": "..."
},
"name": "myvm",
"plan": "small"
}]
}Devbox#
Development environment with SSH and common tools pre-installed.
Plans
| Plan | Specs | Free |
|---|---|---|
| small | 512MB RAM | ✓ |
| medium | 2GB RAM | — |
| large | 8GB RAM | — |
Create & Bind
drift create-service devbox small my-devbox
drift bind-service myapp my-devbox
drift restart myappCredentials (VCAP_SERVICES)
{
"devbox": [{
"credentials": {
"host": "drift-vm-abc12345",
"port": 22,
"username": "user",
"password": "..."
},
"name": "mydev",
"plan": "small"
}]
}