Skip to content

Releases: exogee-technology/graphweaver

v1.0.0

12 Jun 05:11
6ac28f6
Compare
Choose a tag to compare

Graphweaver v1.0.0

This release has been a long time coming!

History / Why

Every system we build now has to integrate with an ever increasing number of SaaS platforms which we don't control. We're constantly bumping into an increasingly clear reality: The dev team doesn't control the data anymore. Businesses aren't just building a single database and shipping it, they're using CRM systems, accounting systems, and all kinds of other SaaS platforms that need to work together to deliver a single cohesive business platform.

Back in 2020, our tooling was not ready for this reality. Do you join it all in the frontend? Now everything has to know how to talk to everything else, and you always need some kind of backend API gateway to hold the secrets for API access. We looked at great solutions like Keystone JS and Hasura, but found them lacking because they still expected to control all the data, but they don't. The dev team doesn't control the data anymore. If it's in a SaaS platform, how do you join it in while being able to filter across data sources? The solutions we found expected to be a black box, and if you wanted to join anything to them, that ends up hanging off to the side, not well integrated.

Solutions for this largely involved copying data everywhere all the time so you have a single database that has everything in it, but after debugging syncing issues for the 9 millionth time we were sick of it. Aren't APIs good enough now that we can just fetch the data exactly when we need it?

This is when the idea for Graphweaver was born. What if we copied data only as an extreme last resort? What if each system mastered the data that it was the source of truth for, and none of the other systems had copies? What if a single GraphQL layer sat in front of all of those systems and made it so that your mobile apps, web apps, and business intelligence systems just didn't care where the data was coming from? This made us look at Apollo Federation and Cosmo, which are great solutions, but they won't let you filter across your data sources, e.g. "Give me tasks assigned to users named 'Luke'" because they don't control the filtering layer for the various backend sources.

You always need to handle security, and you have to be able to enforce your own rules on top of whatever the systems think security looks like. What if we had a pluggable system that could enforce MFA, step up auth on operations, row level security, and column level security, just out of the box?

It's also extremely common to need a back-office admin area. We wanted one that we could extend and override so that whatever custom fields or pages we needed to create we could just drop in. It should just be a static website deployed to Netlify or S3 somewhere, and upon connecting to a backend, it should Just Work™️.

We couldn't find what we needed, so we built it, and we're extremely happy with the result.

What is Graphweaver?

  • Graphweaver is code first. You aren't constrained to just the directives you can put into a schema file, you can start simple, getting default CRUD operations out of the box, but then know that you can override every part of how the system behaves. Need to build a custom resolver? No worries, your code runs alongside ours, all with access to the same tooling, functions, and extension points. Need to host it somewhere weird? No worries! The code that extends Graphweaver applications is a first class citizen in the system, not a bolt on that glues to the outside of a black box.
  • Graphweaver is open source. We built it this way so that you could know that you're not beholden to Exogee, no matter what we decide to do in the future. We believe that together we can build a better product than just what Exogee can bring to the table, so we share Graphweaver in the hopes that you'll find it useful and want to join us on our journey to convince everyone that the dev team doesn't control the data anymore.
  • Graphweaver is productive. We built Graphweaver to help our own work be better. With an integrated auth layer that lets you implement row based and column based permissions, you'll be able to model the rules of your system and leave the rest to Graphweaver. A fully customisable and extensible Admin UI comes along for free!
  • Graphweaver is data source agnostic. We do not care where your data lives. Create your own providers as separate NPM packages. Know that if you need to support a new API you always can without begging us to implement it for you.
  • Graphweaver is extensible. And we're not just talking about the "go and write the code yourself then" type of extensibility. Want the default CRUD behaviour but want to tweak the data on the way in or out or implement requirements like when users do X then also do Y? GraphQL hooks will let you do both of these things easily.
  • Graphweaver is fast. While performance isn't our top goal, we need to be performant enough to not be a concern, and we definitely achieve that. Run the backend in your browser and measure away!

What's New in v1?

To upgrade from v0.x to v1.x, follow this guide.

In short, v1 introduces:

  • Compatibility with Apollo Federation v1 and v2. While we still think the most powerful way to join datasources is directly within Graphweaver, Federation enables governance and cross team collaboration in an environment where you don't control the whole API surface area.
  • Aggregate operations: You can now count rows matching a filter if your backend provider supports it.
  • Removal of TypeGraphQL: While it was useful to get us started, it is not meant to be used the way we were using it, so every minor update would break our integration. In addition it was starting to interfere with our ability to conditionally generate the schema based on your entities. This is now resolved, and we have ultimate flexibility in how we map entities to schema in the new Schema Builder.
  • Better Performance: Version 1 has a set of resolver functions that it uses without needing to generate a bunch of classes up front. Cold boots are now faster, and everything is much easier to debug.

What's on the Roadmap?

  • Support for more deployment mechanisms. While we love Lambda, we don't want to force everyone to use it if they don't want to.
  • Support for more aggregate operations.
  • Open Telemetry integration
  • In-built performance tracing and visualisation, so that you can see exactly how we serviced a request without sifting through logs. Find where your system slowness is coming from without delay.

Want to Chat?

We're very excited to hear how people are using Graphweaver. Join us on Slack!