Leave Azure.
Keep your code.

One command reads your Azure resource group, prices the equivalent Drift slice, and pulls your code and data into a portable folder you own. Free. Read-only. Honest about the 20% it can't move.

From 12 January 2027, the EU Data Act makes leaving your cloud a legal right. This is how you exercise it.

Three commands. Nothing hidden.

Every Azure call is your own az login, printed before it runs. Drift never holds your credentials and never receives your data — it flows Azure → your laptop, full stop. The whole migration is free; only hosting on Drift costs, like any Drift slice.

# 1. read-only: what does this cost on Azure vs. Drift?
$ drift migrate azure estimate -g my-resource-group

# 2. read-only: pull code + data into a vendor-neutral folder
$ drift migrate azure snapshot -g my-resource-group -o ./azure_export

# 3. offline: rewrite it into a deployable Drift project
$ drift migrate azure transform -i ./azure_export -o ./drift_workspace

# then it's just a normal Drift deploy — or run it on your own metal
$ cd drift_workspace && drift project deploy

Prerequisites. The Azure CLI (az), logged in — plus mongoexport if your group has a Cosmos account, and squashfs-tools to unpack Linux Consumption source. snapshot checks these against your resource group before it does any work and fails with the exact install command if one is missing. No silent half-exports.

What it pulls out — your data, in formats you own

A plain folder of JSONL, JSON and source — no Drift-specific binary anywhere. You can read it, diff it, hand it to a lawyer, or take it elsewhere. Verified end-to-end against a live Azure tenant.

Functions · Atomic

Your handler source

Python & Node Function Apps — including the Linux Consumption case where the code is a SquashFS package in storage, not a downloadable zip.

Cosmos · Backbone

Documents → JSONL

Cosmos DB (Mongo API) collections exported document-for-document, ids preserved.

Storage · Backbone

Blobs & queues

Blob containers downloaded byte-for-byte (nested paths intact). Queue messages peeked, never dequeued — your live queue is untouched.

$web · Canvas

Static websites

A Storage static website ($web) becomes a Canvas site, content and all.

Config · Backbone

App settings → secrets

Captured as secret names by default; values only with an explicit flag, written 0600 with a loud warning.

Offline · deterministic

A deployable Driftfile

transform emits a Drift project + scaffolds and validates the Driftfile against the real parser before writing it. Same input → identical output.

What it will not move

Each of these is a line in REFUSED.md with a stable code and a reason — on the record, never faked. The first refusal is the tool working, not failing.

  • .NET, Java, PowerShell function appsNo Drift SDK for these runtimes — they stay on Azure (or a Studio rewrite).
  • Durable Functions, Service Bus topics/sessions, Event Grid / Event Hub, blob & cosmos triggersNo Drift equivalent — Drift's primitives are small and honest, never invented.
  • AAD / Easy Auth identityDrift auth is none/apikey only; per-tenant identity is a security-semantics change, not a flatten.
  • Cosmos SQL / Gremlin / Cassandra, Table Storage, Azure SQLMongo-API Cosmos moves today; the rest are refused or on the roadmap.
  • Static Web App (managed) contentIts build-pipeline output isn't retrievable from Azure — rebuild from your repo into canvas/. ($web storage sites are captured.)

Where you stay in the loop

We automate most of the lift. These are the steps that are yours — stated up front, never papered over.

  • If source retrieval is blocked (hardened SCM, private endpoints), pass --source <app>=<dir> — you already have your code.Works on any plan type.
  • Two prerequisite tools, checked up front: mongoexport for a Cosmos account, squashfs-tools for Linux Consumption source. The CLI fails loudly with the exact install command if either is missing — they're as required as az itself, never a silent half-export.
  • Queues with a live consumer drain themselves. Pause the consumer before you snapshot, or you'll capture an empty queue.
  • A snapshot is "approximately now," not a frozen instant. Great for an estimate or a dry run; don't cut a live system over on one until point-in-time replay lands.
  • Timer triggers are captured and mapped, but Drift scheduling needs a one-line source annotation today — so they're refused-with-guidance, never silently mis-billed.
  • Read REFUSED.md and REPORT.md before you deploy. The hard 20% — AAD, .NET rewrites, query translation — is where Drift Studio helps.

Built for the Data Act

From 12 January 2027, EU Regulation 2023/2854 makes switching cloud providers a right: your provider must hand your data over in structured, machine-readable formats — and can no longer charge you to leave. This tool is the front door to that right. And because "your data is yours" has to work both ways, a Drift-native app runs on your own metal with one command — drift project run. We'll help you off Azure for free, and we can't trap you either.

Get started Read the source