Gel joins Vercel Read the announcement
December 02, 2025

Gel joins Vercel

Today I have some bittersweet news to share. Gel Data Inc. is shutting down, and our amazing team is joining Vercel to help build the best Python cloud in the world.

We have been shipping foundational Python infrastructure for many years: the async/await design and implementation in CPython, lots of early asyncio work, uvloop, asyncpg, and, of course, Gel itself, which motivated many Python improvements. Python is in our DNA; many on our team, including Elvis and I, owe our careers to this wonderful community. I'm excited for the opportunity to keep doing what we love and to give back.

Effective today, Gel Cloud will no longer accept new registrations or creation of new database instances and will be fully shut down on Jan 31 of next year. Gel will remain fully open source and available on GitHub. We have published detailed guides on how to migrate to a managed Postgres setup on a variety of cloud providers and configurations. You can also self-host Gel on bare metal. Our support team will do their best to help make the transition as smooth as possible. Reach out to support@geldata.com or via our Discord with any questions.

We are incredibly grateful to our community of early adopters and users, investors and advisors. You are amazing, and we thank you for believing in and building with Gel!

And while this chapter is closing, we couldn't be more excited about what's next. Vercel has built what is arguably the best JavaScript platform in the world, and now we get to help them do the same for Python. The investment they're making in the ecosystem is rooted in a genuine commitment to the community. We’re grateful to Vercel for giving us the resources and reach to keep doing what we love at a much larger scale.

We'll be building in public, shipping improvements to Python itself and to Python support on Vercel, and continuing to contribute to the open source projects we've always cared about. If you want to follow along, keep an eye on the Vercel blog.

And in the spirit of closing chapters (and giving back), I wanted to take a moment to reflect on what we got right and what we got less-than-right. Perhaps this will be helpful to future aspiring database founders.

Gel had a fair share of those. In fact, I think it’s only a matter of time until all of these will find their way into Postgres and other databases.

Why do we think it’s acceptable for your database schema to be managed by one ORM library of your backend, which may be multi-language?

  • High-level: DDL is nice but let’s be honest: it’s unergonomic and hard to maintain. SQL could totally have a declarative schema, e.g.:

    Copy
    table accounts {
      manager: text;
      company: text;
      contact_email: text;
    
      -- allow only members of the "managers" role to
      -- access rows, and only rows of their accounts
      policy account_managers to managers
          using manager = current_user;
    }
  • Migrations: declarative schema requires the database to come with native tooling for schema migrations.

  • Language-agnostic: with a declarative schema the database becomes a proper source of truth, the data layout is always defined the same way no matter what programming language you use to interact with it.

Gel’s protocol is a superset of Postgres protocol, but it’s an entirely different beast:

  • Stateless: every request is self-contained (packs the current config and security context) and can be routed to any Postgres server behind the scene.

  • Faster: optimized for fewer round trips, data layout is designed to allow clients to cache the coding/decoding pipelines.

  • Recoverable: the server communicates extended information about every query to the client. Clients then can make an informed decision about what to do when the network connection breaks or if a transaction needs to be repeated; e.g. if the query is read-only it’s safe to re-establish the connection and re-run the query automatically.

  • Babelfish: a single network endpoint can speak HTTP, Postgres’ native protocol, Gel’s native protocol. This removes Postgres’ long connection time problem.

  • TLS by default.

npx gel init is all you need to install and run a full Gel database instance locally, including Postgres. No sudo needed. Multiple versions of Gel can co-exist and support socket activation to save resources when not in use.

We took a big step back and analyzed why the relational model and high level programming languages have a well-known gap between them.

Our insight was that with just one simple adjustment we can elevate the relational model and remove the gap: introduce a notion of "link". Without link tables and explicit joins we renamed "tables" to "object types" and the gap disappeared.

While this adjustment seems small, diverging from the classic relational model instantly put us on an orthogonal path to it. We added multiple inheritance, global unique object identity, polymorphism, and many other concepts. And while we strived to keep our design ergonomic and developer friendly it steepened the learning curve.

EdgeQL, the query language of Gel, is like a child of SQL and GraphQL. It’s extremely composable (unlike SQL), set-based (no NULL), and hierarchical (fetch graphs).

The catch? Well, it's a new query language and it's not the ubiquitous SQL.

I will never regret building on top of Postgres. It’s wonderful and powerful. It saved us decades of engineering time building a reliable database backend and allowed us to focus on what we thought matters: general ergonomics of relational databases.

But it also put us in a weird category of "how is this different from an ORM". People fixated on looking for similarities between Gel and their favorite ORM without zooming out and realizing the potential of Gel.

Gel’s weird architecture of enveloping Postgres deep within itself didn’t make things easier to explain. Perhaps if we built Gel around our own database engine, or, alternatively, we made Gel an extension to Postgres, things would go differently. But both of these approaches come with their own significant downsides, and even now with hindsight I still can’t tell if they would work any better.

Even though we built Gel on top of Postgres, we had to deal with building an entire new database front-end: new data model, advanced migration engine, IO server, CLI tooling, complex and polished client libraries for major languages, UI, EdgeQL and SQL compilers, and many many other things. Adding a full-blown Gel+Postgres cloud did not help with focus either.

When I was raising our seed round, a VC, whom I greatly respect, said to me “you will be boiling the ocean”. This has stuck with me for all these 6 years; there hasn’t been a week of me not thinking about it.

At times we were feeling great: the ocean wasn’t boiling yet, but we could feel the water becoming warmer. But not fast enough. And shipping as much as we did prevented us from focusing on just a few key areas of the product and polish them to perfection.

The hope I have is that Gel’s story is educational and that some of the ideas will find their way into the mainstream. To increase the likelihood of this, we have written a formal paper on Gel’s data model and the query language.

ShareTweet