Today we're sharing Constellation, a new open-source GraphQL engine written in Go.
Constellation turns a relational database into a role-based GraphQL API, and it's designed to be a near drop-in replacement for Hasura Community Edition. It reads the same metadata, generates a Hasura-compatible schema, and serves the same query, mutation, and subscription surface, including remote schemas and cross-source relationships.
It's already serving production traffic here at Nhost, using a tiny fraction of the memory our Hasura workloads required. It is also early. This post is also an invitation to try it next to Hasura, compare the two engines, and help us find the edges.
Constellation is available today in the Nhost monorepo on GitHub.
If you've used Hasura CE, you already know how to use Constellation. Point it at the same metadata and the same database and it produces the same GraphQL API:
hdb_catalog.hdb_metadata table./v1/graphql endpoint, plus remote schemas and cross-source remote relationships.Under the hood, Constellation is a fresh Go codebase. PostgreSQL and SQLite are first-class backends today, with small interfaces, and a connector design that lets other databases plug in without touching the query planner.
Hasura v2 has been the backbone of Nhost's GraphQL layer for years, and it's a genuinely great piece of engineering. But things have changed:
Continuing to depend on a deprecated open-source engine, or moving our GraphQL and permissions layer to a closed one, wasn't the right path for us. So we built our own while keeping Hasura compatibility on the GraphQL request path. Where Hasura's behavior is surprising or incorrect, we occasionally and deliberately diverge; every such case is documented in KNOWN_DIFFERENCES.md.
We've been running Constellation against real production workloads, side by side with Hasura, on the same database and the same traffic. The short version: slightly faster, at a fraction of the resources, even before the performance-focused work still on the roadmap.
Serving the same traffic, Constellation's memory usage sits ~90% below Hasura's.
Memory usage, same workload: Hasura (yellow) holds steady around 180 MiB, while Constellation (green) sits near ~15 MiB. CPU (left) is shown for the same period.
Footnote on the left-hand CPU panel: Constellation's CPU (green) looks dramatically lower than Hasura's (yellow), but we're talking millicpus here. In absolute terms both engines are cheap on CPU; the gap is real but small in the grand scheme. Memory is where the meaningful difference is.
Across the same window, Constellation also serves requests a little faster.
Request latency over the same period: Hasura (blue) regularly spikes toward 60–80 ms, while Constellation (purple) mostly stays under 40 ms.
To make the comparison concrete, here's the per-period delta of Constellation minus Hasura for the same traffic. Anything in the green region (below zero) means Constellation was faster; the occasional red spike above the line marks the moments it wasn't.
Latency delta (Constellation minus Hasura). Most of the line sits in the green, below-zero region, meaning Constellation was faster, with a handful of red spikes where it briefly wasn't.
These are raw production dashboards, not a curated benchmark. That's rather the point. We didn't tune anything special to get here.
Constellation is alpha. The label reflects feature coverage versus Hasura, not the stability of what's there. The core query/mutation/subscription pipeline is battle-tested and in production, but you should go in with eyes open:
POST /v1/metadata). So the deployment model right now is: Hasura owns metadata authoring, Constellation owns request serving, both pointed at the same database. Once Constellation can manage metadata on its own, the Hasura half can be dropped.If your app lives mostly in the query/mutation/subscription world, there's a good chance Constellation already does what you need. If you lean heavily on Actions or event triggers, keep those on Hasura for now.
Because Constellation and Hasura can share the same database and metadata, the lowest-risk way to try it is to flip it on next to your existing Hasura instance and run real traffic through it. On any Nhost project, local or cloud, add this to nhost/nhost.toml:
_10 [experimental.constellation] _10 version = "0.4.0"
(Pick the latest tag from Constellation's CHANGELOG.md; we recommend always running the latest.)
With that in place, your project runs both engines side by side:
https://<subdomain>.hasura.<region>.nhost.run → Hasura (metadata authoring, plus anything Constellation doesn't serve yet)https://<subdomain>.graphql.<region>.nhost.run → ConstellationRemove the block and you fall straight back to Hasura. That's the whole appeal: try it, run production traffic against it, compare, and back out at any time with zero migration.
Because both endpoints are live at once, you can introspect each and diff the SDL per role. The Nhost CLI does exactly this:
_10 nhost schema dump --role user --subdomain <subdomain> \ _10 -o schema.hasura.user.graphqls -u "https://<subdomain>.hasura.<region>.nhost.run/v1/graphql" _10 _10 nhost schema dump --role user --subdomain <subdomain> \ _10 -o schema.constellation.user.graphqls -u "https://<subdomain>.graphql.<region>.nhost.run/v1/graphql" _10 _10 nhost schema diff -a schema.hasura.user.graphqls -b schema.constellation.user.graphqls
An empty diff means Constellation produced a byte-equivalent schema for that role. A non-empty diff should map to one of the documented entries in KNOWN_DIFFERENCES.md.
(Prefer to run it standalone, with no Nhost project? You can. The repository has full build-and-run instructions.)
This is a call for help, and every path below is useful:
nhost schema diff turns up a divergence that isn't covered in KNOWN_DIFFERENCES.md, open an issue with the diff hunk and a minimal metadata snippet. That's how new issues get documented or fixed.Constellation is early, but it's already doing real work for us, and the resource numbers above are why we're betting on it. If you run Hasura today, Constellation is ready for the most useful kind of feedback: real metadata, real schemas, real traffic, and real differences. Try it next to your existing Hasura instance, diff the schema, send traffic through it, and tell us what breaks.
Find Constellation, its README, and the issue tracker in the Nhost monorepo on GitHub.