{"id":13395371,"url":"https://github.com/graphile/crystal","last_synced_at":"2026-04-15T16:09:52.072Z","repository":{"id":37382029,"uuid":"56271158","full_name":"graphile/crystal","owner":"graphile","description":"🔮 Graphile's Crystal Monorepo; home to Grafast, PostGraphile, pg-introspection, pg-sql2 and much more!","archived":false,"fork":false,"pushed_at":"2025-08-31T15:51:23.000Z","size":112358,"stargazers_count":12789,"open_issues_count":155,"forks_count":599,"subscribers_count":118,"default_branch":"main","last_synced_at":"2025-08-31T16:05:53.581Z","etag":null,"topics":["api","automatic-api","express","graphile","graphql","graphql-api","graphql-js","http","instant","koa","koa2","node","nodejs","pg","pgsql","postgraphql","postgres","postgresql","schema","typescript"],"latest_commit_sha":null,"homepage":"https://graphile.org/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/graphile.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"Benjie"}},"created_at":"2016-04-14T21:29:19.000Z","updated_at":"2025-08-31T15:51:26.000Z","dependencies_parsed_at":"2023-10-11T11:58:10.850Z","dependency_job_id":"dd309411-25b4-4cd5-9051-bc2c30085a19","html_url":"https://github.com/graphile/crystal","commit_stats":{"total_commits":10813,"total_committers":168,"mean_commits":64.36309523809524,"dds":"0.11560159067788778","last_synced_commit":"36c41e80bfe312f584af42545688fb78d3adaf3f"},"previous_names":["calebmer/postgraphql","graphile/postgraphile","postgraphql/postgraphql"],"tags_count":295,"template":false,"template_full_name":null,"purl":"pkg:github/graphile/crystal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphile%2Fcrystal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphile%2Fcrystal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphile%2Fcrystal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphile%2Fcrystal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/graphile","download_url":"https://codeload.github.com/graphile/crystal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphile%2Fcrystal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273864049,"owners_count":25181734,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","automatic-api","express","graphile","graphql","graphql-api","graphql-js","http","instant","koa","koa2","node","nodejs","pg","pgsql","postgraphql","postgres","postgresql","schema","typescript"],"created_at":"2024-07-30T17:01:54.490Z","updated_at":"2026-04-15T16:09:52.037Z","avatar_url":"https://github.com/graphile.png","language":"TypeScript","readme":"# 🔮 Graphile's Crystal Monorepo\n\n[![GitHub Sponsors](https://img.shields.io/github/sponsors/benjie?color=ff69b4\u0026label=github%20sponsors)](https://github.com/sponsors/benjie)\n[![Discord chat room](https://img.shields.io/discord/489127045289476126.svg)](http://discord.gg/graphile)\n[![Follow](https://img.shields.io/badge/BSky-@Graphile.org-006aff.svg)](https://bsky.app/profile/graphile.org)\n[![Follow](https://img.shields.io/badge/Mastodon-@Graphile.fosstodon.org-6364ff.svg)](https://fosstodon.org/@graphile)\n\nAt Graphile we love GraphQL so much we named ourself for our love of it! This\nrepository houses many of the Graphile packages that relate to GraphQL (or\nrelate to the packages that relate to GraphQL, or relate to those package...);\nthe two headline projects are **Gra*fast*** and **PostGraphile** but there's\nmany other packages, a fair few of which can be used independently - see below\nfor more details.\n\n**[Grafast][grafast]**: A cutting-edge planning and execution engine for\nGraphQL.js ─ use this as a drop-in replacement for the `execute` method from\nGraphQL.js and by moving from traditional resolvers to Gra*fast* \"plan\nresolvers\" you'll be able to leverage the declarative nature of GraphQL requests\nto execute your business logic in the most efficient way, leading to reduced\nserver load and happier customers. Use this if you're building your own GraphQL\nschemas and want the best performance and efficiency without having to put much\nextra effort in.\n\n**[PostGraphile][postgraphile]**: An incredibly low-effort way to build a well\nstructured and high-performance GraphQL API backed primarily by a PostgreSQL\ndatabase. Our main focusses are performance, automatic best-practices and\ncustomisability/extensibility. Use this if you have a PostgreSQL database and\nyou want to use it as the \"source of truth\" for an auto-generated GraphQL API\n(which you can still make significant changes to). **NOTE**: thanks to\n[graphile-export][] you can also use this as a starting point for an API that\nyou then manage yourself.\n\n| ➡️ For **PostGraphile V4** see [the `legacy` branch](https://github.com/graphile/crystal/tree/legacy) |\n| ----------------------------------------------------------------------------------------------------- |\n\n## Project summaries\n\nHere's a rough breakdown of the main packages:\n\n- **[grafast][]** - standalone cutting-edge planning and execution engine for\n  GraphQL; see above for full description.\n  - **[@dataplan/pg][]** - plan classes for interacting with PostgreSQL\n  - **[@dataplan/json][]** - plan classes for encoding/decoding JSON\n- **[graphile-export][]** - a package that can (under the right circumstances)\n  export an in-memory dynamically-constructed GraphQL schema to raw JavaScript\n  source code that can be imported and executed\n  - **[eslint-plugin-graphile-export][]** - an ESLint plugin that helps you\n    write code compatible with graphile-export\n- **[jest-serializer-graphql-schema][]** - a simple Jest serializer that\n  understands GraphQL schemas and thus does not fill snapshots with `\\\"\\\"\\\"`\n  etc.\n- **[graphile-config][]** - a module that handles the plugins, presets and\n  configuration files for Graphile software - a universal configuration layer.\n- **[graphile-build][]** - a system for building a GraphQL.js schema from\n  \"plugins\", particularly useful for auto-generated GraphQL APIs (e.g.\n  PostGraphile uses this) but also useful for hand-rolled schemas that have a\n  lot of modular but widely-used concerns such as connections, naming, etc.\n  - **[graphile-build-pg][]** - plugins for `graphile-build` that understand\n    `@dataplan/pg` (i.e. PostgreSQL) services and can generate types, relations,\n    mutations, etc for these database resources.\n- **[@graphile/lru][]** - an _obsessively_ performant least-recently-used cache\n  (possibly the fastest general purpose LRU cache in Node.js) with a\n  ridiculously tiny feature set; you almost certainly want @isaacs' `lru-cache`\n  instead of this.\n- **[pg-sql2][]** - a library for building highly dynamic SQL-injection-proof\n  PostgreSQL queries using tagged template literals.\n- **[pg-introspection][]** - a strongly typed introspection library for\n  PostgreSQL, generated from the PostgreSQL documentation to provide up-to-date\n  details of each introspection field.\n- **[postgraphile][]** - pulls most of the above technologies together; see\n  above for full description.\n\n\u003c!-- SPONSORS_BEGIN --\u003e\n\n## Crowd-funded open-source software\n\nTo help us develop this software sustainably, we ask all individuals and\nbusinesses that use it to help support its ongoing maintenance and development\nvia sponsorship.\n\n### [Click here to find out more about sponsors and sponsorship.](https://www.graphile.org/sponsor/)\n\nAnd please give some love to our featured sponsors 🤩:\n\n\u003ctable\u003e\u003ctr\u003e\n\u003ctd align=\"center\"\u003e\u003ca href=\"https://gosteelhead.com/\"\u003e\u003cimg src=\"https://graphile.org/images/sponsors/steelhead.svg\" width=\"90\" height=\"90\" alt=\"Steelhead\" /\u003e\u003cbr /\u003eSteelhead\u003c/a\u003e *\u003c/td\u003e\n\u003c/tr\u003e\u003c/table\u003e\n\n\u003cem\u003e\\* Sponsors the entire Graphile suite\u003c/em\u003e\n\n\u003c!-- SPONSORS_END --\u003e\n\n## Why the \"crystal\" monorepo?\n\nOriginally what is now Gra*fast* (and was previously DataPlanner) was known by\nthe codename \"Graphile Crystal.\" This lead us to use the 🔮 emoji to represent\nthe project in secret before we announced it publicly, as a codeword for those\nin the know. Now that Gra*fast* is the name for our planning and execution\nengine and we needed a name for the monorepo that wasn't too GraphQL specific\n(since there are things in here that aren't strictly related to GraphQL) and we\nfigured that calling it the Crystal monorepo would honour our original nickname\nfor the project. Rumours that the name was inspired by the maintainers'\n[crystal wedding anniversary](https://en.wikipedia.org/wiki/Wedding_anniversary#Traditional_anniversary_gifts)\nare greatly exaggerated.\n\n[grafast]: grafast/grafast/\n[@dataplan/pg]: grafast/dataplan-pg/\n[@dataplan/json]: grafast/dataplan-json/\n[graphile-export]: utils/graphile-export/\n[eslint-plugin-graphile-export]: utils/eslint-plugin-graphile-export/\n[jest-serializer-graphql-schema]: utils/jest-serializer-graphql-schema/\n[graphile-config]: utils/graphile-config/\n[postgraphile]: postgraphile/postgraphile/\n[graphile-build]: graphile-build/graphile-build/\n[graphile-build-pg]: graphile-build/graphile-build-pg/\n[@graphile/lru]: utils/lru/\n[pg-sql2]: utils/pg-sql2/\n[pg-introspection]: utils/pg-introspection/\n","funding_links":["https://github.com/sponsors/Benjie","https://github.com/sponsors/benjie"],"categories":["TypeScript","api","\u003ca name=\"TypeScript\"\u003e\u003c/a\u003eTypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphile%2Fcrystal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgraphile%2Fcrystal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphile%2Fcrystal/lists"}