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

When you bind a service, Drift injects credentials into your app's environment as a JSON object in 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

PlanSpecsFree
small256MB RAM, 1GB disk✓
medium512MB RAM, 5GB disk—
large1GB RAM, 20GB disk—

Create & Bind

drift create-service postgres small my-postgres
drift bind-service myapp my-postgres
drift restart myapp

Credentials (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

PlanSpecsFree
small256MB RAM✓
medium512MB RAM—
large1GB RAM—

Create & Bind

drift create-service mysql small my-mysql
drift bind-service myapp my-mysql
drift restart myapp

Credentials (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

PlanSpecsFree
small256MB RAM✓
medium512MB RAM—
large2GB RAM—

Create & Bind

drift create-service mongodb small my-mongodb
drift bind-service myapp my-mongodb
drift restart myapp

Credentials (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

PlanSpecsFree
small64MB RAM✓
medium256MB RAM—
large1GB RAM—

Create & Bind

drift create-service redis small my-redis
drift bind-service myapp my-redis
drift restart myapp

Credentials (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

PlanSpecsFree
small128MB RAM✓
medium512MB RAM—
large2GB RAM—

Create & Bind

drift create-service rabbitmq small my-rabbitmq
drift bind-service myapp my-rabbitmq
drift restart myapp

Credentials (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

PlanSpecsFree
small512MB RAM✓
medium1GB RAM—
large2GB RAM—

Create & Bind

drift create-service kafka small my-kafka
drift bind-service myapp my-kafka
drift restart myapp

Credentials (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

PlanSpecsFree
basicUp to 100 users✓
standardUp to 500 users—
enterpriseUnlimited users—

Create & Bind

drift create-service identity small my-identity
drift bind-service myapp my-identity
drift restart myapp

Credentials (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

PlanSpecsFree
dev128MB RAM, dev mode (in-memory, unsealed)✓
standard256MB RAM, file storage—
ha512MB RAM, HA-ready—

Create & Bind

drift create-service vault small my-vault
drift bind-service myapp my-vault
drift restart myapp

Credentials (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

PlanSpecsFree
small1GB storage✓
medium10GB storage—
large100GB storage—

Create & Bind

drift create-service s3-storage small my-s3-storage
drift bind-service myapp my-s3-storage
drift restart myapp

Credentials (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

PlanSpecsFree
small256MB RAM, filesystem storage✓
medium512MB RAM—
large1GB RAM—

Create & Bind

drift create-service registry small my-registry
drift bind-service myapp my-registry
drift restart myapp

Credentials (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

PlanSpecsFree
small256MB RAM, 15d retention✓
medium512MB RAM, 30d retention—
large1GB RAM, 90d retention—

Create & Bind

drift create-service prometheus small my-prometheus
drift bind-service myapp my-prometheus
drift restart myapp

Credentials (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

PlanSpecsFree
small128MB RAM✓
medium256MB RAM—
large512MB RAM—

Create & Bind

drift create-service grafana small my-grafana
drift bind-service myapp my-grafana
drift restart myapp

Credentials (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

PlanSpecsFree
small256MB RAM, 72h retention✓
medium512MB RAM, 7d retention—
large1GB RAM, 30d retention—

Create & Bind

drift create-service loki small my-loki
drift bind-service myapp my-loki
drift restart myapp

Credentials (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"
  }]
}

Meilisearch#

Lightning fast full-text search engine. Image: getmeili/meilisearch:v1.6.

Plans

PlanSpecsFree
small256MB RAM✓
medium512MB RAM—
large1GB RAM—

Create & Bind

drift create-service meilisearch small my-meilisearch
drift bind-service myapp my-meilisearch
drift restart myapp

Credentials (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

PlanSpecsFree
devMailhog catch-all, 128MB RAM✓
relayMailhog with SMTP relay, 128MB RAM—

Create & Bind

drift create-service smtp small my-smtp
drift bind-service myapp my-smtp
drift restart myapp

Credentials (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

PlanSpecsFree
small256MB RAM✓
medium1GB RAM—
large4GB RAM—

Create & Bind

drift create-service vm-ubuntu small my-vm-ubuntu
drift bind-service myapp my-vm-ubuntu
drift restart myapp

Credentials (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

PlanSpecsFree
small256MB RAM✓
medium1GB RAM—
large4GB RAM—

Create & Bind

drift create-service vm-debian small my-vm-debian
drift bind-service myapp my-vm-debian
drift restart myapp

Credentials (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

PlanSpecsFree
small64MB RAM✓
medium256MB RAM—
large1GB RAM—

Create & Bind

drift create-service vm-alpine small my-vm-alpine
drift bind-service myapp my-vm-alpine
drift restart myapp

Credentials (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

PlanSpecsFree
small512MB RAM✓
medium2GB RAM—
large8GB RAM—

Create & Bind

drift create-service devbox small my-devbox
drift bind-service myapp my-devbox
drift restart myapp

Credentials (VCAP_SERVICES)

{
  "devbox": [{
    "credentials": {
      "host": "drift-vm-abc12345",
      "port": 22,
      "username": "user",
      "password": "..."
    },
    "name": "mydev",
    "plan": "small"
  }]
}