I have shipped production indexers on both, and the question I get most is some version of Subsquid vs The Graph, which one should I use. The honest answer is that they solve the same problem with different priorities, and the right pick depends on what you value when things get uncomfortable: sync speed, query freedom, hosting, or how much control you want over the moving parts. Here is how I actually decide, with the marketing stripped out.
The fundamental difference in shape
The Graph is opinionated. You write mappings in AssemblyScript, you define a schema, you get a GraphQL API, and a lot of the hard parts (reorg handling, the query layer, the store) are handled for you inside a fairly fixed pipeline. Subsquid is more of a toolkit. You write processor code in TypeScript with the full Node ecosystem available, you control your own database, and you decide what API sits on top. One hands you a paved road. The other hands you the materials and a good map.
That single difference drives most of the others. If you want to stand something up fast and standard, the paved road wins. If your indexing logic is unusual or you need to do things the paved road did not anticipate, the toolkit wins because nothing is hidden from you.
Sync speed and the AssemblyScript tax
Subsquid's archive model, where historical chain data is pre-fetched and served in batches rather than pulled block by block over RPC, makes initial syncs noticeably fast in my experience. For a contract with a long history that matters a lot, because a slow first sync is genuinely painful when you are iterating. The Graph has improved here, but the batch-oriented approach has a real edge on a cold start.
There is also the language factor. Writing mappings in AssemblyScript is fine once you adjust, but it is a constrained subset and the tooling is thinner than full TypeScript. With Subsquid I get normal TypeScript, normal libraries, normal debugging. For a team that lives in TypeScript already, that lowers the friction considerably and makes the unusual cases easier to write.
- Pick The Graph when you want a standard GraphQL API with minimal setup
- Pick Subsquid when sync speed on long histories or custom logic is the priority
- If your team is fluent in TypeScript, Subsquid's mappings will feel more natural
Query flexibility and who owns the database
With The Graph you get GraphQL, and it is good GraphQL for the kinds of queries entity-relationship data invites. Where it pinches is when a consumer wants something the schema was not shaped for, like a heavy aggregation or a join the entity model does not express cleanly. You can work around it, but you are working within the system's grain.
With Subsquid you own the database, usually Postgres, so you can do whatever SQL can do, expose GraphQL if you want it, and add custom endpoints for the awkward queries. That freedom is real and I have leaned on it. The cost is that you now own a database, with the operational weight that implies: migrations, indexes, backups, scaling. The Graph hides that weight. Subsquid hands it to you along with the control.
Hosting, decentralization, and operational reality
The Graph has the decentralized network angle, where independent indexers serve your subgraph and you pay query fees. For some projects that alignment with the ethos matters and it is a genuine differentiator. For others it is overhead they do not need yet, and the hosted or self-hosted paths are what they actually run on day to day. Be honest with yourself about which camp you are in before the decentralization story sways the decision.
Subsquid leans toward you running the infrastructure, with their cloud offering as the managed option. If your team already operates services and databases, that fits naturally into how you work. If you would rather not run anything, the managed paths on either side are what you should be comparing, not the raw self-hosted versions.
How I actually pick
For a straightforward project that needs an entity-shaped GraphQL API and a quick start, and where the team is happy on a paved road, I reach for The Graph. For a project with a long chain history to sync, custom indexing logic, a need for query shapes beyond what an entity model gives you cleanly, and a team comfortable owning a database, I reach for Subsquid. Neither is a wrong default. They are different bets about where you want your effort to go.
The mistake I see is treating this as a tribal loyalty rather than a fit question. I keep both in my toolkit and choose per project. The technology under each is solid enough that the deciding factor is almost never quality. It is whether the shape of the tool matches the shape of your problem and your team, and that is a question only you can answer about your own work.
Building something where this matters?
I am open to senior full-stack, Web3, or AI engineering roles, fully remote and any timezone. If the hard part of your product is fighting you, that is the work I like.
Get in touch →