Data Portability Score
How easy is it to get your data out? Every service rated from 1 (data prison) to 10 (full freedom).
S3-compatible API means any S3 tool works (aws-cli, rclone, mc). Data is just files. Migrate to any S3-compatible storage (AWS S3, Backblaze B2, Cloudflare R2) with a single rclone sync command.
S3-compatible API. rclone or aws-cli sync to AWS S3, Backblaze B2, MinIO, etc. Zero egress fees mean migration is free — only bandwidth time matters.
Drizzle generates standard SQL migrations. Your data is in your own database. No Drizzle-specific data storage. Remove the ORM and all data remains intact in standard SQL.
Self-hosted library. Data lives in YOUR database (Postgres, MySQL, SQLite). Standard SQL export. No vendor holds your data. Remove the library and data stays intact.
Code library — no data hosted by Hono. Your app code is standard TypeScript. Routes map to Express/Fastify patterns. Migration is a code refactor, not a data migration.
Postgres in WASM. Standard pg_dump or direct file export. Data is standard PostgreSQL format. No cloud dependency. Ultimate portability.
CLI tool — no data stored. Config is a JSON file. Rules map to ESLint equivalents. Migration guide available. Zero data portability concern.
Full repo clone via git. Issues, PRs, wikis exportable via API. GitHub Archive program preserves everything.
Project export includes issues, MRs, snippets, wikis. Built-in import from GitHub, Bitbucket, etc.
WXR export covers all content. Direct database access via phpMyAdmin. Thousands of migration plugins.
Standard PostgreSQL — pg_dump works. Auth data, storage files all exportable. Self-host option available.
Standard PostgreSQL — pg_dump just works. Branching metadata is Neon-specific but your actual data is fully portable SQL.
libSQL is SQLite-compatible. .dump command exports everything. Embedded replicas are local SQLite files you already have.
Open source with dump export covering all indexes, settings, and documents. Self-hosted — you already have the data. JSON documents portable to any search engine.
Data lives in your own MongoDB or PostgreSQL. Standard database tools (mongodump, pg_dump) export everything. Content is standard JSON documents. Media files on your own S3 or disk.
Directus wraps your existing SQL database — remove Directus and your data is still there in standard tables. API exposes everything as JSON. Directus system tables are the only proprietary part.
S3-compatible API since 2020. rclone or aws-cli for migration. Free egress to Cloudflare via Bandwidth Alliance. Data is standard files — no proprietary format. Transfer speed is the only migration constraint.
State files downloadable via API in standard Terraform format. Variables exportable. Use with any Terraform/OpenTofu backend (S3, GCS, local). Sentinel policies are proprietary but replaceable with OPA.
Stack state downloadable as JSON. Switch to self-managed backend with one command (pulumi login s3://bucket). Code is standard TypeScript/Python/Go in your repo. Zero data trapped in Pulumi Cloud.
docker pull + docker push to any OCI-compatible registry. Standard container image format (OCI). README/description not transferable. Automated build configs lost. Transfer speed is the only constraint.
Entire database is a single SQLite file — copy it. API exports JSON. Auth users, collections, settings all in one file. The simplest possible data portability story.
wrangler d1 export dumps full SQL. Standard SQLite — restore to Turso, libSQL, or local SQLite. Workers binding code is the only proprietary surface.
Backed by Neon Postgres. pg_dump works directly. Connection string accessible — migrate to any Postgres provider with standard tools.
S3-compatible API. rclone, aws-cli, mc all work. Zero egress fees. Multi-region by default — restore to any S3-compatible target (R2, S3, Wasabi, MinIO).
Standard S3 API. Migration with aws-cli or rclone is trivial. 90-day minimum storage commitment is a billing constraint, not a data portability constraint.
All stats exportable via API as CSV or JSON. Open-source (AGPL) — self-host the same code. Privacy-preserving design means no per-user data exists; aggregated stats are the full dataset.
Prisma is a code library, not a data host. Your data is in your own database. Prisma migrations are standard SQL. Remove Prisma and access the same database with any other ORM or raw SQL.
Open source (MIT/ELv2). Self-host with Docker Compose or Kubernetes. Workspace config exportable as JSON. Connector catalog is all open source. Data lands in your own warehouse — nothing proprietary.
dbt models are SQL files in your Git repository — fully portable to dbt Core (free, open source). Semantic Layer definitions are YAML. Migrate from dbt Cloud to dbt Core CLI in hours.
libSQL is SQLite-compatible. .dump command exports everything. Embedded replicas are local SQLite files you already have. Best-in-class portability.
Data lives in PostgreSQL. pg_dump exports everything. ElectricSQL is a sync layer — remove it and your Postgres data is unchanged. Client-side SQLite data also exportable.
Self-hosted PaaS. Docker containers run anywhere. Databases accessible via standard tools. Config exportable. Moving means redeploying containers on new host.
Events exportable via API or SQL (self-hosted). Feature flag configs exportable as JSON. Session recordings are PostHog-specific format.
Docker-native — containers run anywhere. Database credentials exposed for pg_dump. Environment variables exportable via API.
Standard Docker images run anywhere. Postgres via pg_dump. Volumes are regular ext4 you can tar out. Only fly.toml config is proprietary.
Docker images run anywhere. Managed Postgres accessible via pg_dump. Environment variables exportable. Only render.yaml config is platform-specific.
Standard Redis protocol — RDB dump works. Kafka topics exportable via standard Kafka tools. QStash message history is platform-specific.
PostgreSQL wire-compatible — pg_dump works for most cases. CRDB-specific syntax (multi-region, AS OF SYSTEM TIME) needs manual cleanup. Standard SQL data is fully portable.
YSQL (PostgreSQL-compatible) exports via pg_dump. YCQL (Cassandra-compatible) data needs cqlsh export. Dual API means export path depends on which API you used.
MySQL wire-compatible — mysqldump works. TiFlash columnar data is auto-replicated from TiKV, so row store export captures everything. Dumpling tool for large-scale exports.
PostgreSQL database with well-documented schema. Products, orders, customers all in standard tables. pg_dump captures everything. Commerce-specific concepts (carts, swaps, claims) need schema mapping to other platforms.
PostgreSQL database via Prisma. Booking data, event types, availability all in standard tables. iCal export for calendar data. Self-hosted users have direct database access.
Dashboards export as portable JSON. Data sources are standard (Prometheus, InfluxDB, etc.) — your metrics data lives in those backends, not in Grafana. Alert rules exportable via API.
Snapshot/restore to any Elasticsearch cluster. Kibana dashboards export as NDJSON. Index data exportable via scroll API or reindex to remote. Self-host the same software (AGPL).
clickhouse-client exports in 20+ formats including Parquet, CSV, JSON, Arrow. Native format for fastest ClickHouse-to-ClickHouse transfer. SQL schema fully portable. Materialized views need recreation.
Standard Git repos clone normally. Issues and PRs exportable via REST API. Pipeline configs are YAML files in repo. Built-in import/export to GitHub and GitLab.
Droplet snapshots exportable as raw images. Managed databases use standard engines (pg_dump, mysqldump). Spaces (S3-compatible) data transferable via rclone or aws-cli.
Single JSON file export covers all posts, pages, tags, authors, settings. Images exported separately. Import tools exist for WordPress, Medium, Substack. Themes are Handlebars templates in your repo.
Open source with PostgreSQL backend. pg_dump for full export. Event types, bookings, availability all in standard tables. iCal export for calendar data. Self-hosted users own everything.
Storage zone files downloadable via FTP or API. CDN is a caching layer — origin data is yours. DNS records transferable. Pull zone config is simple CNAME-based — easy to switch CDNs.
qdrant snapshot creates portable archive of full collection. Self-host the same binary or restore to another Qdrant cluster. JSON export for transformation to other vector DBs.
Backup module exports full collections to S3, GCS, or Azure Blob. Open source (BSD-3) — self-host with the same Docker image. Schema and data both portable as JSON.
OpenAI-compatible API — prompts and responses are portable text. Open weights models available for self-hosting. Fine-tuned model export supported. No conversation history stored by default on paid tier.
OpenAI-compatible API. All hosted models are open source — download weights from Hugging Face and self-host. Fine-tuned model checkpoints downloadable.
Built on PostgreSQL. pg_dump exports everything. Xata branching metadata is platform-specific but actual data in standard Postgres tables. Search index can be rebuilt on any Elasticsearch/OpenSearch instance.
OpenAI-compatible API. Prompts are text. No fine-tuned models to export. Switch by changing base URL. No data lock-in.
OpenAI-compatible API. Inference only — no stored data. Change base URL to switch providers. No lock-in.
Self-hosted on PostgreSQL. pg_dump exports everything. REST/GraphQL API for programmatic export. Contact data in standard formats. Custom objects need schema mapping for target CRM.
Self-hosted. PostgreSQL backend — pg_dump for full export. Content stored as Markdown/ProseMirror JSON. Exportable to other wiki/doc platforms with format conversion.
Workspace export to Markdown/CSV. API covers all content. Databases export well, but relation links and embeds lose context.
Full API access, CSV export for issues. Import tools exist for Jira, GitHub Issues. Cycles and views don't transfer.
Full user export via API including password hashes (bcrypt). OAuth connections and sessions don't transfer. Metadata fully exportable.
Contacts/audiences exportable as CSV. Email logs available via API. Domain DNS records (SPF, DKIM) transfer to any provider. React Email templates are just code in your repo.
Functions are your code — fully portable. Event history and run logs exportable via API. Orchestration logic needs rewrite for other queue systems.
Prompts are just text — fully portable. API format is similar to OpenAI. No fine-tuned model export needed (no fine-tuning). Message history available via API.
Flag configurations, segments, and targeting rules all exportable via API as JSON. Experiment results need manual export. Migration to Flagsmith/Unleash requires mapping targeting rules.
Original video files downloadable via static renditions. Asset metadata exportable as JSON. Playback URLs are Mux-specific — all video embeds in your app need URL updates.
Task definitions are TypeScript code in your repo — fully portable. Run history and logs exportable via API. Orchestration logic needs adaptation for other queue systems (BullMQ, SQS).
Scripts are standard Python/TypeScript/Go — copy them anywhere. Flows export as JSON. Resources and schedules exportable via API. Self-hosted users have full database access.
decK tool exports full configuration as YAML (routes, services, plugins, consumers). Config is declarative and version-controllable. Enterprise plugins won't transfer to OSS but routes and core config are portable.
Contact lists exportable as CSV. Email templates downloadable. DNS records (SPF, DKIM) transfer to any provider. Suppression lists exportable. IP reputation is non-transferable.
Services, escalation policies, schedules all exportable via REST API as JSON. Incident history available. Event orchestration rules exportable. Migration to Grafana OnCall documented.
Imgix is a proxy — your original images live on your origin (S3, GCS, web folder). No data to export. Migration means updating imgix URLs to new CDN/processor URLs in your content.
CDN is a caching layer — original content on your origin server. Zone configs exportable. Migration is just updating CNAME records to point to new CDN. No data trapped in KeyCDN.
Database collections exportable via API as JSON. Auth users exportable. Storage files downloadable. Self-hosted users have direct MariaDB access. Open source means you can always self-host.
OpenAI-compatible API. Prompts and responses are portable. No model fine-tuning available, so no fine-tuned model lock-in. Switch to any compatible provider by changing base URL.
Python functions are code in your repo. Container images are standard Docker. Volume data accessible via Python or shell. Migrate function definitions to RunPod, Lambda Labs, or Kubernetes with minimal changes.
Data Sources exportable via Tinybird API in multiple formats including Parquet for warehouse import. SQL Pipes are standard ClickHouse SQL. Migrate to self-hosted ClickHouse or ClickHouse Cloud with minimal rework.
Job code is standard TypeScript in your repo. Run history exportable via API. Orchestration logic needs adaptation for other queue systems (BullMQ, Inngest).
Functions are your code — fully portable. Event history and run logs exportable via API. Step function orchestration needs rewrite for other systems.
Traces, scores, and prompts exportable via API. Self-hosted option means direct database access. Trace format is Langfuse-specific but well-documented JSON.
API keys and usage data exportable via API. Open source — self-host for direct DB access. Key rotation policies need manual recreation on alternative.
Open source. User data exportable via API including password hashes. Self-host for direct DB access. OAuth connections need reconfiguration on new provider.
Open source passkey-first auth. User data exportable. WebAuthn credentials are domain-bound — users need to re-register passkeys on new domain. Self-host for DB access.
XML backup includes everything. CSV for filtered exports. Custom workflows and automations need manual recreation.
Source code lives in git. Environment variables exportable via API. Analytics, logs, and deployment history are Vercel-only.
CSV export per table. API access to all records. Attachments need separate download. Automations, interfaces, and linked record context lost.
Index data exportable as JSON via API. Ranking rules, synonyms, and query rules exportable. But InstantSearch UI widgets are Algolia-specific — frontend needs rework for alternatives.
Raw event export via API or pipeline exports (S3, BigQuery). Saved reports, cohorts, and board definitions need manual recreation. Event schema is portable JSON.
Event export via Snowflake, S3, or API. Behavioral cohorts and experiment configs need manual recreation. Raw events are standard JSON — portable to any analytics tool.
Workflows export as JSON — importable to any n8n instance. Credentials are encrypted and need re-creation. Execution history exportable. No standard automation interchange format exists, so migrating to Zapier/Make requires manual rebuild.
Full project export as XML backup. CSV export for filtered issues. REST API covers all entities. Workflows, automations, and board configs need manual recreation in target tool.
Export to 1PIF (proprietary) or CSV. Most password managers import 1PIF or CSV. File attachments require separate handling. Shared vault items need individual user export. TOTP seeds included in export.
Config is .circleci/config.yml in your repo — fully portable. Build artifacts downloadable via API. Contexts (secrets) must be manually re-created. Build history not exportable.
Videos downloadable as MP4 files. Transcripts available as text. Comments and viewer analytics not exportable. Bulk download available for workspace admins. Standard video files work anywhere.
Files individually downloadable via API. No bulk export tool — must script with @vercel/blob list + fetch. Underlying storage is R2 but URLs are vercel-blob-store.com domains embedded in your content.
Public model weights downloadable from Hugging Face. Prediction outputs downloadable. Cog model format is an open standard — container images portable to Modal, Beam, or self-hosted GPU.
Full dataset exportable via sanity dataset export as NDJSON. Assets (images) included. GROQ queries and Portable Text format are Sanity-specific — schema translation required for target CMS.
Content model and entries exportable via CMA API as JSON. contentful-export CLI tool handles bulk export. Rich text body is Contentful's document format — needs transformer for target CMS.
Stories exportable via Management API as JSON. Assets downloadable separately. Block/component schema exportable. Rich text is Storyblok-specific format — migration script needed.
Open source (Apache 2.0). Metadata (permissions, relationships) exportable as JSON/YAML. Your data is in PostgreSQL — pg_dump works independently. Remove Hasura and access Postgres directly.
Worker code is JS/TS/WASM in your repo. KV and R2 data exportable via API. D1 via wrangler d1 export. Durable Object state requires custom export script. Code portability good; bound storage portability is variable.
Products and orders exportable as CSV. Theme (Liquid), apps, checkout customizations, customer payment methods don't transfer.
Space export as XML or HTML. Macros render as HTML but lose interactivity. Attachments included. Page tree structure preserved in XML.
Fine-tuned models cannot be exported. Prompts are just text — fully portable. Assistants threads have limited export.
User export via Management API includes profiles and metadata. Password hashes exportable (bcrypt). Actions, rules, and social connection configs require manual recreation.
Original assets downloadable via Admin API. Transformation presets exportable as JSON. But transformation URLs embedded in your content all need updating — that's the real migration cost.
Space export as XML or HTML zip. Macros render as HTML but lose interactivity. Attachments included in export. Import tools exist for Notion, BookStack, and Wiki.js but fidelity varies.
Contacts, companies, deals exportable as CSV. Workflow definitions not exportable — must recreate. Custom object data exportable via API. Email templates, landing pages, and forms need manual migration.
Secrets readable via API one-by-one (no bulk dump for security). Policies exportable as HCL. Auth configurations need recreation. Transit encryption keys are non-exportable by design.
Data export via Flux queries or influx CLI. Line protocol format is widely supported by other TSDBs. Dashboards and tasks are InfluxDB-specific. Migration to VictoriaMetrics or TimescaleDB documented.
App export as JSON for Budibase-to-Budibase migration. Internal DB (CouchDB) data exportable. Screen definitions are proprietary format. Self-hosted users have full database access.
Tickets, users, organizations exportable via API. Knowledge base articles exportable as HTML. Triggers, automations, and macros need manual recreation. Marketplace app data is non-portable.
Tickets, contacts, companies exportable via API. Knowledge base as HTML. Automations and SLA policies need manual recreation. Migration tools exist for Zendesk↔Freshdesk.
Products, orders, customers exportable as CSV. Theme (Liquid templates) is Shopify-specific. Apps and checkout customizations non-portable. Shopify Payments data transfers are complex.
Storage exportable via REST API as JSON. Yjs documents accessible. But CRDT model and presence/awareness API are Liveblocks-specific — migration to raw Yjs or Hocuspocus requires rewriting sync layer.
Open source server (Apache 2.0) — self-host as exit. Workflow history exportable via ListWorkflows API but proprietary format. Running instances cannot be migrated live; must drain before switching.
Event data exportable via S3 or BigQuery destination. Profiles API for user trait export. Destination connection configs not exportable in standard format — must reconfigure 400+ destinations at new provider.
Open source (Apache 2.0). Application definitions exportable as JSON for Appsmith-to-Appsmith migration. Self-hosted. No standard internal tools interchange format exists.
Data lands in your own warehouse (Snowflake, BigQuery, Redshift) — fully portable at the data layer. Source connection configs exportable. Migration means reconfiguring sources in new ETL tool (Airbyte, Fivetran).
Order history and subscriber data exportable via API. As Merchant of Record, Polar owns the billing relationship. Customers need to re-subscribe on a new platform.
Export individual frames/components as images. REST API for file data. No bulk .fig export. Figma-to-Sketch converters exist but lose fidelity.
Workspace export (JSON) available for admins. Free plan: only public channels. DMs require Corporate+ plan. Files have separate download.
Firestore export to BigQuery or JSON. Auth users exportable via CLI. Storage files downloadable. Security rules, Cloud Functions triggers don't transfer.
Transaction history, customer data exportable as CSV. Payment methods (cards on file) CANNOT be migrated to another processor. Subscription state is Stripe-only.
Events and issues queryable via API. CSV export for discover queries. Raw event data has limited retention. Alert rules and dashboards need manual recreation.
Snapshot export to JSON includes all tables. Streaming export available for ongoing sync. But proprietary data model means restructuring for any other database.
Custom tilesets exportable as MBTiles. Style JSON is Mapbox-specific but MapLibre can import with modifications. Geocoding results and Navigation API responses are not exportable.
surreal export dumps everything as SurrealQL statements. No standard SQL or JSON bulk export natively. Must write custom scripts to transform SurrealQL to JSON/SQL for other databases.
edgedb dump creates full backup. Built on PostgreSQL but schema is in EdgeQL SDL — not directly importable to standard Postgres. Data accessible via JSON queries but schema translation is manual.
NRQL queries can export data via API. Dashboard JSON exportable but New Relic-specific. Metric data accessible via GraphQL (NerdGraph). Historical data limited by retention period.
Call/SMS logs exportable via API. Phone numbers portable via carrier porting (30-60 days). Studio flows exportable as JSON but proprietary format. Verify, Flex configs need manual recreation.
Conversation history exportable via API. Contact/company data as CSV. Help center articles exportable. Custom bot flows, product tours, and banner configs are proprietary — must recreate.
Conversation history via API. Contact data as CSV. Knowledge base articles exportable. Chatbot scenarios and campaign definitions are proprietary — must rebuild in target tool.
Scheduled events via API. No export of event type configurations, workflows, or routing forms. Booking history as JSON via API. Cal.com has a Calendly import tool.
CDN cache layer — origin data is yours. VCL (Varnish Configuration Language) configs are Fastly-specific. Compute@Edge Wasm apps need adaptation for other edge platforms. Service configs exportable via API.
Vectors fetchable in batches via fetch API. No native dump tool — must script pagination across all IDs. Migration to pgvector/Qdrant requires translating index config and re-deciding metadata schema.
Generated audio files downloadable. Voice clones CANNOT be exported — they are tied to the platform. Switching means re-cloning voices on the new provider with original audio samples.
Order history, customer data, and subscription status exportable via API. As Merchant of Record, Paddle owns the billing relationship with your customers — re-billing under your entity requires customer re-authorization.
Transaction history, customer data, and product catalog exportable as CSV/JSON. Payment methods (saved cards) CANNOT be migrated — customers must re-enter card details on new processor. Subscription state requires careful mapping.
Snapshot export to JSON includes all tables. Streaming export for ongoing sync. But Convex data model is proprietary — restructuring needed for any other database. Functions need full rewrite.
Code uses Encore-specific annotations and compiler. Removing Encore requires rewriting service definitions, pub/sub bindings, and infrastructure declarations. Business logic is portable but infrastructure code is not.
Code export generates static HTML/CSS but it's heavily class-based and hard to maintain. CMS collections exportable as CSV. Interactions and logic don't export.
Dashboard JSON export works but metrics data has limited retention/export. Custom metrics, monitors, and integrations require manual recreation.
Data export via search commands (| outputcsv, | outputlookup). Saved searches and dashboards are SPL-specific. Large data volumes require scheduled exports. No native migration tool to competitors.
HTML/CSS code export is heavily class-based and hard to maintain. CMS collections exportable as CSV. Interactions, animations, and logic don't export. No standard website interchange format exists.
Metrics API exports time series data. Dashboards exportable as JSON but Dynatrace-specific. Davis AI baselines not exportable. Synthetic test configs partially exportable. Most monitoring config needs manual recreation.
No workflow export functionality. Zap configurations cannot be downloaded or transferred. Must manually screenshot/document each Zap and recreate in target tool. Zapier Tables data exportable as CSV.
App definitions exportable as JSON but deeply proprietary format. SQL queries within apps are portable text. Retool Database exportable. No other tool can import Retool app definitions.
No code export at all — pages are Framer-internal format. CMS data exportable as CSV. Design, animations, and layout must be manually recreated in any other tool.
App definitions exportable as JSON but deeply proprietary. SQL queries within apps are portable. Retool Database exportable via standard pg_dump. No other tool can import Retool app JSON.