← Back to archive

Repo of the Day

exogee-technology/graphweaver

Published: Feb 26, 2024

Open repository ↗

Turn multiple data sources into a single GraphQL API

Summary

Graphweaver is a code-first, TypeScript-based framework that turns multiple data sources into a single GraphQL API. It generates instant CRUD endpoints from databases like PostgreSQL, MySQL, and SQLite, as well as REST and SaaS platforms, and adds built-in row- and column-level security on top. The project is positioned as a self-hostable alternative to Hasura, with the design goal that every operation is just standard GraphQL server code that can be overridden.

What it is useful for

Graphweaver is useful when an organization has data scattered across several systems — a CRM, an accounting SaaS, separate databases — and wants one GraphQL layer that can query and filter across them without writing a custom sync pipeline. The README describes the typical problem: copying data from every source into one database "always breaks at some point," so a federated query layer is preferable to yet another ETL job.

Concrete capabilities listed in the README include: an instant GraphQL API from any data source, a code generator that introspects a database and produces TypeScript resolvers, cross-source filtering (for example, returning database records filtered by a CRM field), an included admin UI for viewing and editing data, and security features such as role-based access control, access control lists, row-level security, and column-level security. Pre-built identity providers are documented for a local database and Amazon Cognito.

How engineers can use it

The README documents a CLI-driven quick start. Engineers need Node >22.* and PNPM >9.* installed, then run:

pnpx graphweaver@latest init

The prompts ask for a project name, which backends to install (MikroORM with PostgreSQL, MikroORM with MySQL, or REST), and a final confirmation. After the project is generated, the documented commands are to enter the project directory, run pnpm install, then start the server with pnpm start. The server and Admin UI launch at http://localhost:9000.

To populate the API, the README points to two follow-up paths: importing an existing Postgres, MySQL, or SQLite database, or connecting a new empty data source. Detailed configuration beyond the init flow is not in the README itself and lives on the project's documentation site, so engineers should consult that for non-trivial setups.

One documented ambiguity: the license badge states MIT, the License section states Apache 2.0, and the GitHub license field shows NOASSERTION. Engineers should review the LICENSE file directly before depending on a specific license for distribution.