Remote PlanetScale Developer Jobs

Typical Software Engineering salary: $200k–$292k · 282 listings with salary data

PlanetScale developers build serverless MySQL-compatible database backends on the platform that pioneered database branching — creating schema change branches that mirror developer workflows, deploying migrations without table locks through PlanetScale's online schema change infrastructure, connecting from edge runtimes through the @planetscale/database HTTP driver, and managing database workflows with the PlanetScale CLI and GitHub Actions integration that automates the branch, review, and merge lifecycle for database schema changes. At remote-first technology companies, they serve as the backend and full-stack engineers who own the database layer for high-scale MySQL workloads — delivering the Vitess-backed sharding infrastructure that scaled YouTube and Google's largest MySQL deployments, combined with the developer experience of GitHub-style branching that eliminates the coordination overhead of traditional MySQL schema deployments.

What PlanetScale developers do

PlanetScale developers create and manage database branches — using the PlanetScale CLI (pscale branch create, pscale branch list) or PlanetScale console to create development branches from the main branch, develop schema changes in isolated branch environments, and open deploy requests to merge schema changes through PlanetScale's DDL review system; implement safe schema migrations — using PlanetScale's deploy request system to run ALTER TABLE operations without locking tables, leveraging the underlying Vitess online schema change (OSC) that copies data to the new table structure in the background while writes continue, and using the revert functionality to roll back deployed schema changes; connect from edge runtimes — using @planetscale/database's HTTP-based driver that works in Cloudflare Workers, Vercel Edge Functions, and other V8 isolate environments where native MySQL TCP connections cannot be established; connect from Node.js — using @planetscale/database with the standard mysql2 driver or through ORM adapters for Prisma, Drizzle, and Kysely via the standard MySQL connection string; implement the foreign key constraint trade-off — understanding PlanetScale's default behavior of enforcing referential integrity at the application layer rather than the database layer due to Vitess sharding architecture, and designing schemas that maintain consistency through application logic; configure connection pooling — using PlanetScale's built-in connection pooler that handles thousands of concurrent connections without overwhelming MySQL's connection limit; implement read-only regions — configuring PlanetScale read-only regions in AWS, GCP, or Azure geographic regions to serve read traffic from a location close to users without cross-region database latency; manage the PlanetScale CLI workflow — using pscale connect to proxy a local MySQL connection through PlanetScale's authentication, pscale deploy-request create for schema deployment, and pscale shell for interactive MySQL access; implement branching in CI/CD — using PlanetScale GitHub Actions to create per-PR database branches, run application test suites against the branch, and automatically delete branches after merge; and monitor usage — tracking query performance with PlanetScale Insights, identifying slow queries and missing indexes, and optimizing query plans using EXPLAIN output on the PlanetScale query console.

Key skills for PlanetScale developers

  • Database branching: pscale branch create/delete/merge; deploy requests; branch workflow
  • Safe DDL: deploy request schema changes; online schema change; revert deployments
  • HTTP driver: @planetscale/database; edge runtime connectivity; Cloudflare Workers; Vercel Edge
  • ORM integration: Prisma + PlanetScale; Drizzle + PlanetScale; Kysely + PlanetScale
  • Foreign key design: referential integrity without FK constraints; application-layer consistency
  • Connection pooling: built-in pooler; connection limits; concurrent connection management
  • Read replicas: read-only regions; read traffic routing; geographic replica placement
  • PlanetScale CLI: pscale auth; pscale connect; pscale shell; pscale deploy-request
  • Insights: query performance monitoring; slow query identification; index recommendations
  • CI/CD integration: PlanetScale GitHub Actions; per-PR branches; automated branch cleanup

Salary expectations for remote PlanetScale developers

Remote PlanetScale developers earn $90,000–$152,000 total compensation. Base salaries range from $76,000–$125,000, with equity at technology companies where zero-downtime schema deployments, MySQL horizontal scalability, and developer-friendly database workflows directly affect deployment velocity and database reliability for high-scale production applications. PlanetScale developers with Vitess sharding architecture expertise for applications that require horizontal MySQL scaling beyond single-server capacity, online schema change workflow design for production databases with hundreds of millions of rows, read replica geographic distribution for global low-latency MySQL reads, and demonstrated PlanetScale deployments in CI/CD pipelines with automated branch lifecycle management command the strongest premiums. Those with PlanetScale combined with deep MySQL query optimization and indexing expertise earn toward the top of the range.

Career progression for PlanetScale developers

The path from PlanetScale developer leads to senior backend engineer (broader scope across API architecture, caching, and distributed systems alongside MySQL database expertise), database reliability engineer (specializing in MySQL performance, Vitess operations, and high-scale relational database management), or data platform engineer (designing the complete relational and analytical data architecture for large-scale applications). Some PlanetScale developers specialize into Vitess open-source contributions, working on the database proxy layer that PlanetScale is built upon and that powers large-scale MySQL deployments at GitHub and Twitter. Others transition into database platform engineering at companies self-hosting Vitess, applying their PlanetScale workflow knowledge to on-premises Vitess cluster operations. PlanetScale developers with strong MySQL performance expertise sometimes specialize into database consulting, helping organizations migrate from traditional MySQL hosting to PlanetScale or Vitess for horizontal scalability.

Remote work considerations for PlanetScale developers

Building PlanetScale-backed applications for distributed engineering teams requires branch workflow documentation, deploy request review standards, and foreign key alternative patterns that prevent distributed engineers from running direct DDL against production databases, accumulating unmerged schema branches, or implementing foreign key constraints that Vitess silently ignores at the database level. PlanetScale developers at remote companies enforce the branch-based schema change workflow — documenting that all schema changes must go through PlanetScale deploy requests and that direct MySQL DDL executed against the production database (via pscale shell or direct connection) bypasses PlanetScale's online schema change and can lock tables; establish deploy request review checklists that include verifying the deploy is safe for the current data volume, confirming indexes exist on columns referenced in WHERE clauses after the schema change, and testing the new schema against representative query patterns — so distributed engineers don't deploy schema changes that are structurally valid but degrade query performance; document the foreign key alternative — PlanetScale's disabling of FK constraint enforcement requires that applications maintain referential integrity through explicit check queries before cascading deletes, or through application-level orphan cleanup jobs — because distributed engineers from traditional MySQL backgrounds frequently attempt to define FK constraints and are surprised when they're silently dropped; and configure per-PR branch automation in CI — so distributed engineers don't manually create and delete branches, which leads to branch accumulation and inconsistent test environments.

Top industries hiring remote PlanetScale developers

  • High-scale web application companies where PlanetScale's Vitess foundation provides horizontal MySQL sharding that allows databases to grow beyond single-server capacity without migrating away from MySQL's ecosystem and the decade of team SQL expertise invested in MySQL-specific query patterns
  • Next.js and Vercel deployment companies where PlanetScale is the Vercel partner MySQL solution — with native Vercel integration, automatic environment variable injection, and the @planetscale/database HTTP driver that works in Vercel's serverless and edge function environments
  • Startup and scale-up companies where PlanetScale's branch-per-PR workflow gives small engineering teams the database development experience previously available only to large teams with dedicated DBAs — automating the schema review, safe deployment, and rollback capabilities that prevent production database incidents
  • Companies migrating from Heroku Postgres or RDS MySQL where PlanetScale's managed infrastructure, automatic failover, and zero-maintenance operational model replace the database administration overhead of self-managed MySQL instances with a developer-focused SaaS experience
  • E-commerce and marketplace platforms where MySQL's ACID transactions, foreign key semantics (enforced at application layer), and the PlanetScale read replica regions enable globally distributed read performance for product catalog and inventory queries while writes go to the primary region

Interview preparation for PlanetScale developer roles

Expect branching questions: walk through the complete workflow for adding a new column to a production PlanetScale table — creating the branch, making the schema change, opening a deploy request, reviewing the DDL diff, and deploying the change without table locks. Foreign key questions ask how you'd enforce referential integrity between an orders table and a users table when PlanetScale doesn't enforce FK constraints at the database level — what the application-layer check looks like before inserting an order and what the cleanup job looks like for orphaned records. Schema change questions ask how PlanetScale's deploy request differs from running ALTER TABLE directly — what happens under the hood with online schema change, how writes continue during the migration, and what the revert procedure looks like if the deployment causes issues. Edge runtime questions ask how you'd connect to PlanetScale from a Vercel Edge Function using Drizzle ORM — what the @planetscale/database driver configuration and Drizzle adapter look like. Read replica questions ask how you'd configure read-only regions and route read traffic to the nearest replica in a globally distributed application. Performance questions ask how you'd use PlanetScale Insights to identify a slow query affecting production performance — what information the query plan provides and what index changes would reduce query execution time. Be ready to discuss the trade-offs between PlanetScale and traditional MySQL RDS — when the branch workflow and Vitess infrastructure justify the platform dependency.

Tools and technologies for PlanetScale developers

Core: PlanetScale platform; @planetscale/database (HTTP driver, edge-compatible); PlanetScale CLI (pscale). HTTP driver: @planetscale/database; fetch-based SQL execution; edge runtime compatible; WebSocket option. CLI: pscale auth login; pscale branch create/delete/merge; pscale connect (local proxy); pscale shell; pscale deploy-request create/merge. ORM adapters: Prisma with @prisma/adapter-planetscale; Drizzle with drizzle-orm/planetscale-serverless; Kysely with kysely-planetscale; TypeORM MySQL driver. Framework integration: Next.js App Router + PlanetScale; Remix + PlanetScale; SvelteKit + PlanetScale. Schema management: deploy requests (DDL review); online schema change (Vitess OSC); revert deployments; branch schema diff. Monitoring: PlanetScale Insights (query analytics); slow query log; query plan analysis; index advisor. CI/CD: PlanetScale GitHub Actions (create-branch, create-deploy-request, wait-for-deploy-request); automated branch lifecycle. Connection: built-in connection pooler; connection string with pooler suffix; SSL/TLS; regional endpoints. Read regions: read-only regions (AWS/GCP/Azure); geographically distributed reads; replica lag monitoring. Vitess: underlying sharding; VTGate; VTTablet; Keyspaces (advanced usage). Alternatives: Neon (PostgreSQL, branching); PlanetScale (MySQL only); Supabase (PostgreSQL, more features); TiDB Serverless (MySQL-compatible, distributed); AWS Aurora Serverless.

Global remote opportunities for PlanetScale developers

PlanetScale developer expertise is in strong global demand, with PlanetScale's position as the leading developer-experience MySQL platform — backed by Andreessen Horowitz, adopted by companies including Beam, Toss, and Hum Nutrition, and chosen as the Vercel partner MySQL solution — creating demand for engineers who understand both PlanetScale's branch workflow and the MySQL fundamentals that effective PlanetScale usage requires. US-based PlanetScale developers are in demand at Vercel ecosystem companies, Next.js application teams, high-scale consumer application companies that have outgrown traditional MySQL hosting, and startup engineering teams where PlanetScale's branch workflow matches the GitHub-native development culture. EMEA-based PlanetScale developers are well-positioned as PlanetScale's EU region deployment satisfies European data residency requirements, and the European startup ecosystem building on Next.js and Vercel has adopted PlanetScale as the MySQL complement to their deployment infrastructure. Note: PlanetScale announced in early 2024 that it would discontinue its free Hobby plan and restructure pricing, which affected adoption among individual developers while enterprise and team adoption continued growing; understanding this context is relevant for engineers evaluating PlanetScale for new projects.

Frequently asked questions

How does PlanetScale's deploy request workflow work and how does it enable zero-downtime schema changes? PlanetScale's deploy request is the mechanism for safely deploying schema changes to production — it wraps Vitess's online schema change (pt-online-schema-change equivalent) in a developer-friendly review and approval workflow. Creating a deploy request: after making schema changes on a development branch (ALTER TABLE, CREATE INDEX, DROP COLUMN), pscale deploy-request create database-name branch-name opens a deploy request that shows the DDL diff between the branch schema and the production schema. Review: team members review the DDL diff in the PlanetScale console, checking for potentially dangerous operations (adding NOT NULL without a default, dropping indexes that queries depend on, renaming columns that the application references by name). Deploying: clicking "Deploy changes" starts the online schema change — PlanetScale creates a shadow table with the new schema, copies rows from the original table to the shadow table in batches, applies concurrent writes to both tables via triggers, and then swaps the original and shadow table names atomically. Zero-downtime: because writes continue to the original table (via triggers) during the copy, the database remains fully available during migration — no table locks that would block read and write operations on production tables. Revert: if the deployed schema change causes issues, the "Revert changes" button runs the inverse schema change (re-creating the original table structure) using the same online schema change process — providing a safe rollback that doesn't require restoring from backup.

Why does PlanetScale not enforce foreign key constraints and how do engineers handle referential integrity? PlanetScale is built on Vitess, which doesn't support foreign key constraints with Vitess's sharding architecture — in a sharded database, rows that should be related by a foreign key may live on different shards, and enforcing the constraint would require cross-shard coordination that breaks Vitess's distributed execution model. PlanetScale silently accepts FK constraint definitions in schema migrations but doesn't enforce them — CREATE TABLE orders (user_id INT NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id)) creates the table without an error but the FK is not enforced. Application-layer referential integrity: before inserting an order, the application checks that the user exists: const user = await db.select().from(users).where(eq(users.id, userId)).limit(1); if (!user.length) throw new Error('User not found'). Cascade deletes: when deleting a user, the application explicitly deletes related records first: await db.delete(orders).where(eq(orders.userId, userId)); await db.delete(users).where(eq(users.id, userId)). Soft deletes as an alternative: using a deletedAt timestamp instead of hard deletes eliminates cascade delete complexity — orphaned records never occur because records are never removed. When this matters: for applications requiring strict data integrity across high-concurrency writes (financial transactions, inventory management), the absence of database-level FK enforcement requires careful application design and thorough transaction testing.

How does PlanetScale's HTTP driver work for edge runtimes and how does it compare to traditional MySQL drivers? Traditional MySQL drivers (mysql2, mysqljs) use a binary protocol over TCP sockets — they establish a persistent connection to MySQL's port 3306, authenticate using the MySQL authentication handshake, and send/receive binary-encoded query packets. Edge runtimes (Cloudflare Workers, Vercel Edge Functions) run in V8 isolate environments that don't have access to native TCP sockets, making traditional MySQL drivers non-functional. @planetscale/database HTTP driver: sends SQL queries as HTTP POST requests to PlanetScale's gateway endpoint (https://aws.connect.psdb.cloud) — the gateway authenticates the request, forwards the SQL to Vitess, and returns JSON-encoded results. Usage: const conn = connect({ host: process.env.DATABASE_HOST, username: process.env.DATABASE_USERNAME, password: process.env.DATABASE_PASSWORD }); const results = await conn.execute('SELECT * FROM users WHERE id = ?', [userId]) — the execute() method returns a results object with rows as an array of objects. Transactions over HTTP: await conn.transaction(async (tx) => { await tx.execute('INSERT INTO orders ...'); await tx.execute('UPDATE inventory ...') }) — PlanetScale's gateway maintains transaction state across multiple HTTP requests within the transaction block. Performance comparison: HTTP driver has higher per-query latency than a persistent TCP connection (one HTTP round trip per query versus amortized connection overhead) but eliminates connection pool management complexity in stateless serverless functions.

Related resources

Ready to find your next remote planetscale developer role?

RemNavi aggregates remote jobs from dozens of platforms. Search, filter, and apply at the source.

Browse all remote jobs