The European hyposcaler
Fast, simple,
secure, sovereign.
Drift is a European cloud for your whole app:
functions, data and sites, deployed with one command.
European, full stop.
Drift is developed, maintained, and hosted in Europe. We comply with European laws and jurisdiction, and nothing else.
Select a topic to explore
Every compute instance, database and blob store runs in data centres in Germany, Austria and the Netherlands, on servers of netcup, a German hosting company. The data centres are certified to ISO 27001. Your data does not leave the EU.
Drift owns no foreign subsidiary and answers to no foreign parent.
Every engineer, operator, and on-call responder is based on European soil. Incident response, change management, and access to production infrastructure never crosses EU borders.
Drift runs in one European region, on purpose. No multi-cloud routing and no US relay layer: your requests go straight to a server in Europe.
A published data processing agreement: who controls what, every sub-processor named, a 48-hour breach notice. Creating an account accepts it.
Your application's data never touches a US-owned server. Our own mail and certificates still do, and the page below lists exactly where.
Drift is a European company, built in the Netherlands and subject to EU law.
The data centres Drift runs in are certified to ISO 27001. Drift itself is working towards it: we are not independently audited yet, and this page says so until we are.
Source code, databases, blobs, secrets, environment variables, and function execution logs are all stored and processed exclusively on EU infrastructure. This is not configurable: it is the only mode.
Our transactional email (signup codes, password resets, login codes, invites) goes through Microsoft 365 in the EU; TLS certificates come from Let's Encrypt; the CLI is published on GitHub; DNS is at GoDaddy. None of them holds your application's data, and each is being replaced.
When one of these is replaced, it comes off this page and the change is dated in our public changelog.
Every data path in the platform is documented and accounted for. If it is not listed on this page, it does not exist. There are no shadow integrations, analytics pipelines, or third-party telemetry endpoints.
In the box
- atomic/ your source, as you wrote it
- atomic-manifest.json routes, triggers, schedules
- backbone/nosql/ JSON documents
- backbone/sql/ an SQL dump
- backbone/blobs/ your files, as files
- backbone/queues/ pending messages, as JSON
- backbone/secrets.json in cleartext, written 0600
- canvas/ your site
Packed. Unpack it anywhere: nothing in it needs Drift to read.
Stay because you want to,
not because leaving is hard.
No lock-in by design: export your project and run it anywhere, or self-host it freely.
tar.gz, not a proprietary container
Priced by the shape,
down to the cent.
Four unit prices turn what you declare into a monthly figure, paid up front. There is no request meter, no egress line, no base fee, and no bill larger than the one you agreed to.
- Function memory per MiB a function books, per month €0.03
- Scheduled job per job, per month €0.30
- Realtime connection per concurrent connection, per month €0.01
- Storage per GiB, per month, for code, data and sites alike €0.25
- A function itself is free: you pay for the memory it books. Everything else a slice holds is capped, not charged.
-
Small business
A bakery's webshop
Menu, orders, payment callbacks and a kitchen screen, for a few hundred orders a month.
- 5 functions, 96 MiBIn Node.js: menu, order status, new order, payment callback and a confirmation queue
- 1 scheduled jobThe nightly close-of-day summary
- 10 realtime connectionsThe kitchen screen
- 0.875 GiB of storage64 MiB of code, 768 MiB of data (orders 256 MiB, photos 512 MiB) and a 64 MiB site
- Function memory96 MiB × €0.03€2.88
- Scheduled jobs1 × €0.30€0.30
- Realtime connections10 × €0.01€0.10
- Storage0.875 GiB × €0.25, to the cent€0.22
Per month€3.50
-
Multi-site business
A salon group's booking system
Six salons taking bookings online, with reminders and a live view of open slots at the front desks.
- 5 functions, 128 MiBIn Python: open slots, book, cancel, the day's agenda and the reminder queue
- 2 scheduled jobsThe morning reminder sweep and the nightly accounting export
- 30 realtime connectionsThe desks' live slot view
- 3.75 GiB of storage128 MiB of code, 3.5 GiB of data (bookings database 1 GiB, audit log 512 MiB, intake files 2 GiB) and a 128 MiB site
- Function memory128 MiB × €0.03€3.84
- Scheduled jobs2 × €0.30€0.60
- Realtime connections30 × €0.01€0.30
- Storage3.75 GiB × €0.25, to the cent€0.94
Per month€5.68
-
Public sector
A municipal service portal
Permit applications with attachments, status for residents, a live case board for officers and a public register, for a municipality of about 50,000 residents.
- 9 functions, 384 MiBIn Go, Python and PHP: submit, status, attachments, decisions, the case list, the register, two queues and a 128 MiB export
- 3 scheduled jobsDeadline reminders, the weekly register publication and the nightly export
- 100 realtime connectionsThe officers' case board
- 45.5 GiB of storage256 MiB of code, 45 GiB of data (submissions 2 GiB, audit log 2 GiB, register database 1 GiB, attachments 40 GiB) and two 128 MiB sites
- Function memory384 MiB × €0.03€11.52
- Scheduled jobs3 × €0.30€0.90
- Realtime connections100 × €0.01€1.00
- Storage45.5 GiB × €0.25, to the cent€11.38
Per month€24.80
-
Large employer
An intranet for 4,000 staff
Pages, comments and approvals, search, report exports and live notices, for a workforce of 4,000.
- 10 functions, 576 MiBIn Go, Python and Node.js: search, pages, edits, comments, approvals, the directory, two queues and a 256 MiB report builder with its status call
- 6 scheduled jobsThe nightly directory sync and search index, a daily report pre-build, a weekly digest, a monthly archive and an hourly housekeeping pass
- 400 realtime connectionsLive notices for the people online at once
- 72 GiB of storage512 MiB of code, 71 GiB of data (pages 3 GiB, comments 2 GiB, audit log 5 GiB, directory database 1 GiB, attachments 60 GiB) and a 512 MiB site
- Function memory576 MiB × €0.03€17.28
- Scheduled jobs6 × €0.30€1.80
- Realtime connections400 × €0.01€4.00
- Storage72 GiB × €0.25€18.00
Per month€41.08
- Prepaid, for the shapeYou pay the figure up front for the period you pick. An idle slice costs what a busy one does, and nothing is metered in the background.
- Examples, not quotesHow much traffic a shape carries depends on what its functions do.
drift file benchmarkmeasures it, anddrift planquotes your own total before anything is applied. - What a price does not buy yetDrift is in closed alpha: one European region, a slice runs as a single process, and there is no uptime commitment. ISO 27001 is something we are working towards, not something we hold.
Build it in your head,
deploy it in one night
Every Drift app is composed from five foundational pillars.
Everything comes set up for you out of the box, so infrastructure disappears in the background and you can focus on your app or platform.
Select a view to explore the architecture
Your code, one file at a time
Write a handler in the language you already know. A Pulse answers a call; a Field keeps running. Drift builds both, runs them, and puts your Pulses behind a URL.
- PulsesAtomic's function: one call, one result, in Go, Python, Node.js, Ruby, PHP or Rust, with sub-second cold-starts.
- FieldsLong-running workers, one supervised process each: started on deploy, restarted after a crash, drained before the next deploy replaces them.
- ElementsA folder of Pulses and Fields that share their environment and secrets, so a backend stays one piece.
- TriggersHTTP endpoints or asynchronous queue consumers declared straight on the Pulse.
- SchedulesBuilt-in cron definitions directly in your Driftfile without separate scheduler servers.
- API keysPer-Pulse API keys, checked inside your slice before your code runs.
Your data, already in the slice
Nothing to provision and nothing to connect to: every store is there the moment the slice is, and only your functions can reach it.
- NoSQLJSON document collections: lookups by key, single-field filters, unique fields and per-document expiry.
- SQLA per-slice SQLite database with transactions; your schema file is applied on every deploy, your seed on the first.
- BlobsEncrypted object storage for assets and user uploads organized by bucket.
- SecretsAES-256-GCM encrypted runtime secrets injected automatically into compute instances.
- QueuesReliable FIFO message queues capable of triggering atomic functions asynchronously.
- RealtimeIn-slice pub/sub distributing live events and messages across WebSocket clients.
Your site, on the same origin as your API
Your page calls /api and reaches your functions directly. There is no second origin, so there is no CORS to set up.
- Static hostingStatic sites and pre-rendered exports from any framework, served with a short revalidating cache; a deploy shows up within seconds.
- Auto TLS and domainsAutomatic Let's Encrypt certificates provisioned on the fly for custom domains.
- EnvironmentsA staging slice per environment, declared in the Driftfile.
Identity you own, not rent
Sign-in, tokens, recovery and encrypted storage, called from your own Pulses. There is no identity provider to sign up with.
- KeyAuthPasswordless sign-in by challenge, with a private key that never leaves the device.
- JWTTokens signed and verified with a key unique to your slice, no external auth service.
- VaultA recovery blob, encrypted before it arrives, that lets a user back in on a new device. The slice cannot read it.
- LinkEnrol a second device by a signed attestation from one the identity already holds.
- PocketPer-identity, end-to-end encrypted data that follows a user to every device. Drift holds only ciphertext.
- Site gate passwordsChecked by your slice's Deed against digests sealed in the slice, never in Drift's control plane.
One way in, and only the ways out you allow
Every slice gets its own URL and certificate. Traffic that leaves goes only where you said it could.
- Custom domainsOne European region, one URL per slice: custom domains verified by a TXT record, certificates issued on the fly.
- Site passwordPut a password in front of a staging site with one command.
- Slice linksLet one of your slices call another directly, inside Drift, without going over the internet.
- Egress allowlistingStrict egress filtering ensuring code only connects to approved external third-party APIs.
slice "permit-intake" {
billing = "monthly"
labels = {
client = "Gemeente Driftwijk"
env = "production"
}
}
element "default" {
pulse "POST /submit" {
handler = "PostSubmit"
memory = "32MiB"
}
pulse "POST /decision" {
handler = "PostDecision"
memory = "32MiB"
auth { api_key = env("DECISION_KEY") }
}
pulse "QUEUE notify" { # background queue consumer
handler = "QueueNotify"
memory = "32MiB"
secrets = ["RESEND_API_KEY"]
}
}
secret "RESEND_API_KEY" { value = env("RESEND_API_KEY") }
nosql "submissions" { size = "64MiB" }
nosql "audit-log" { size = "64MiB" }
blobs "uploads" { size = "256MiB" }
queue "validate" {}
queue "notify" {}
site "/" { dir = "canvas/public" }
site "/reviewer" { dir = "canvas/reviewer" }
Snapshots can be sealed with your own passphrase, so not even Drift can open them.
Pick a developer experience to explore
package main
import drift "github.com/ondrift/cloud/sdk/go"
func GetMenu(req drift.Request) (int, string, any, map[string]string) {
menu, _ := drift.Backbone.Cache.Get("menu")
return 200, "OK", string(menu), nil
}
Local File Run
drift file run runs your whole project on the real Drift runtime on your machine, in Docker, with no account and no mocks.
Pre-Flight Schema Lint
Instant syntax & type validation against cached cloud schema before anything touches the network.
Deploys Skip What Didn't Change
Each function is fingerprinted, and only changed ones are rebuilt and shipped.
Logs and Metrics in Your Terminal
Follow a function's logs as they happen, check its requests, errors and latency, or watch it all live in the drift dashboard.
Stay in the zone from
the first command
Tools that get out of your way, simple commands and programming languages you already know.
Not a trial.
A whole slice, free.
Every primitive on this page is on the free tier: functions, databases, blob storage, queues and a website, on the same runtime as a paid slice. It arrives with placeholder names. Rename them into your app, and it stays free.
- No card. Nothing to fill in before you start.
- No expiry. The free slice has no end date.
- One per account. Five functions, 100 MB of data and a site.
$drift slice create my-app --free
Functions · 5 slots in 80 MB
Data · up to 100 MB
Site · 50 MB
5 secrets1 schedule50 realtime connections24 h of logs3 days of backups
Ship something this weekend.
- FriSketch it
- SatBuild it
- SunDeploy it
- MonUsers arrive