{"id":13726848,"url":"https://github.com/typelevel/grackle","last_synced_at":"2026-01-11T17:01:29.289Z","repository":{"id":37887129,"uuid":"207353895","full_name":"typelevel/grackle","owner":"typelevel","description":"Grackle: Functional GraphQL for the Typelevel stack","archived":false,"fork":false,"pushed_at":"2025-12-13T23:49:24.000Z","size":3789,"stargazers_count":184,"open_issues_count":25,"forks_count":30,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-12-15T00:16:09.292Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://typelevel.org/grackle/","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/typelevel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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}},"created_at":"2019-09-09T16:26:29.000Z","updated_at":"2025-12-13T23:49:28.000Z","dependencies_parsed_at":"2023-02-14T08:45:45.298Z","dependency_job_id":"215c2ff7-c18f-4b17-91ec-c3ff072d2cc9","html_url":"https://github.com/typelevel/grackle","commit_stats":{"total_commits":801,"total_committers":29,"mean_commits":"27.620689655172413","dds":0.533083645443196,"last_synced_commit":"ba83b2456c1f8823128afffa9830eb15a607c407"},"previous_names":["typelevel/grackle","gemini-hlsw/gsp-graphql"],"tags_count":109,"template":false,"template_full_name":null,"purl":"pkg:github/typelevel/grackle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelevel%2Fgrackle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelevel%2Fgrackle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelevel%2Fgrackle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelevel%2Fgrackle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typelevel","download_url":"https://codeload.github.com/typelevel/grackle/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelevel%2Fgrackle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28314259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T14:58:17.114Z","status":"ssl_error","status_checked_at":"2026-01-11T14:55:53.580Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-08-03T01:03:27.189Z","updated_at":"2026-01-11T17:01:29.270Z","avatar_url":"https://github.com/typelevel.png","language":"Scala","funding_links":[],"categories":["Scala"],"sub_categories":[],"readme":"# Grackle - GraphQL for the Typelevel stack \u003ca href=\"https://typelevel.org/cats/\"\u003e\u003cimg src=\"https://typelevel.org/cats/img/cats-badge.svg\" height=\"40px\" align=\"right\" alt=\"Cats friendly\" /\u003e\u003c/a\u003e\n\n[![Build Status](https://github.com/typelevel/grackle/workflows/Continuous%20Integration/badge.svg?branch=main)](https://github.com/typelevel/grackle/actions?query=branch%3Amain+workflow%3A%22Continuous+Integration%22)\n[![Maven Central](https://img.shields.io/maven-central/v/org.typelevel/grackle-core_2.13?versionPrefix=0)](https://img.shields.io/maven-central/v/org.typelevel/grackle-core_2.13?versionPrefix=0)\n[![javadoc](https://javadoc.io/badge2/org.typelevel/grackle-core_2.13/javadoc.svg)](https://javadoc.io/doc/org.typelevel/grackle-core_2.13)\n[![Typelevel library](https://img.shields.io/badge/typelevel-library-green.svg)](https://typelevel.org/projects/#grackle)\n[![codecov](https://codecov.io/gh/typelevel/grackle/branch/main/graph/badge.svg)](https://codecov.io/gh/typelevel/grackle)\n[![Discord](https://img.shields.io/discord/632277896739946517.svg?label=\u0026logo=discord\u0026logoColor=ffffff\u0026color=404244\u0026labelColor=6A7EC2)][grackle-dev]\n\n\n## Overview\n\nGrackle is a [GraphQL](https://graphql.org) server written in functional [Scala](https://www.scala-lang.org), built on\nthe [Typelevel](https://typelevel.org) stack.\n\nIt's powered by [cats](https://typelevel.org/cats), [cats-effect](https://typelevel.org/cats-effect/),\n[fs2](https://github.com/typelevel/fs2) and [http4s](https://http4s.org/), and supports GraphQL queries, mutations and\nsubscriptions.\n\nIt has an abstract model of data sources implemented in terms of declarative mappings between GraphQL schemas and\nbacking data, and cursors into that data. It supports in-memory, DB-backed, and effectful data sources.\n\nGrackle is structured as a compiler/interpreter. Queries are type-checked against a GraphQL schema and compiled into\nan internal query algebra. The query algebra may be further compiled in a backend-specific way to materialize data. In\nparticular it can be compiled to efficient SQL and in that regard currently supports Postgres via\n[Doobie](https://tpolecat.github.io/doobie/) or [Skunk](https://typelevel.org/skunk/) and Oracle and SQL Server via\nDoobie.\n\nGrackle is an [Apache 2.0 licensed](https://www.apache.org/licenses/LICENSE-2.0) Typelevel project and is available\nfor Scala 2/3 and for [Scala.js](https://www.scala-js.org/) and [Scala Native](https://scala-native.org/en/stable/).\n\nWork has been generously sponsored by\n[Aura/Gemini](https://www.aura-astronomy.org/centers/nsfs-oir-lab/gemini-observatory/), [ITV](https://www.itv.com)\nand [imbus AG](https://www.imbus.de/) over the last five years.\n\n## Getting Started\n\n- See the [tutorial](https://typelevel.org/grackle) and accompanying [demo](https://github.com/typelevel/grackle/tree/main/demo/src/main).\n- Online Scaladoc is available [here](https://javadoc.io/doc/org.typelevel/grackle-core_2.13).\n- Ask us anything the in **#grackle** channel on the Typelevel [discord server][grackle-dev].\n\nTo add Grackle to your project you should add the following to your `build.sbt`,\n\n```scala\n// Required: Scala 2.13/3.3+\nlibraryDependencies += \"org.typelevel\" %% \"grackle-core\" % \"0.26.0\"\n\n// Optional: support for in-memory Json backend using circe\nlibraryDependencies += \"org.typelevel\" %% \"grackle-circe\" % \"0.26.0\"\n\n// Optional: support for in-memory generic Scala backend using shapeless\nlibraryDependencies += \"org.typelevel\" %% \"grackle-generic\" % \"0.26.0\"\n\n// Optional: support for Postgres backend via Doobie (JVM only)\nlibraryDependencies += \"org.typelevel\" %% \"grackle-doobie-pg\" % \"0.26.0\"\n\n// Optional: support for Postgres backend via Skunk\nlibraryDependencies += \"org.typelevel\" %% \"grackle-skunk\" % \"0.26.0\"\n\n// Optional: support for Oracle backend via Doobie (JVM only)\nlibraryDependencies += \"org.typelevel\" %% \"grackle-doobie-oracle\" % \"0.26.0\"\n\n// Optional: support for SQL Server backend via Doobie (JVM only)\nlibraryDependencies += \"org.typelevel\" %% \"grackle-doobie-mssql\" % \"0.26.0\"\n```\n\n## Running tests for database backed mappings\n\nDatabase backed mappings are tested against dockerized instances of Postgres, Oracle and SQL Server. This requires\nDocker 2.20.2 or later to be installed and running on the test machine.\n\nRunning tests (eg. `rootJVM/test`) will automatically spin up the relevant containers, which will stay up and can be\nreused across multiple tests runs, significantly speeding up the test cycle. I recommend running `allUp` initially, to\npull images and initialise databases, before running tests the first time. Note that Oracle in particular takes quite\na long time to initialise, so expect `allUp` to take several minutes to complete the first time around.\n\n## Community\n\nGrackle is proud to be a [Typelevel](https://typelevel.org/) project. We are committed to providing a friendly, safe\nand welcoming environment for all, and ask that the community adhere to the [Typelevel Code of\nConduct](https://typelevel.org/code-of-conduct.html) in all venues.\n\nConversations around Grackle are currently happening on [GitHub issues][grackle-issues], [PR\ndiscussions][grackle-pulls], and [discord][grackle-dev].\n\nThe Typelevel [discord][grackle-dev] has a **#grackle** channel, as well as channels for related\nprojects such as **#cats**, **#cats-effect**, **#fs2**, **#doobie** and **#skunk**. If you're new to the Typelevel\necosystem the **#beginners** channel might also be useful. Please join us!\n\n## Talks\n\n- [Grackle GraphQL server - Rafał Piotrowski \u0026 Miles Sabin (ScalaCon 2022)](https://www.youtube.com/watch?v=BXTkvwZ-7Xg)\n- [Functional GraphQL for the Typelevel Stack (NEScala 2023)](https://www.youtube.com/watch?v=c1_WHBs9M5U)\n\n## Contributing\n\nThis project exists thanks to [all the people who\ncontribute](https://github.com/typelevel/grackle/graphs/contributors).\n\nWe welcome all kinds of contribution, including but not limited to,\n\n- documentation improvements, explanatory images/diagrams, fixes in typos, useful links\n- refactorings of messy code, build structure, increasing test coverage or quality\n- new features and bugfixes (including [bug reports and feature requests][grackle-issues]).\n\nWriting documentation is valuable for learning, so if you find some explanation insufficient, overly complicated or\nincorrect, it's a perfect opportunity to make a change to it!\n\nIf at any point you run into problems, you can always ask a question on the **#grackle** channel on the Typelevel\n[discord server][grackle-dev].\n\nMore information, including on how to build locally and submit pull requests, can be found\n[here](https://typelevel.org/grackle/CONTRIBUTING.html).\n\n[grackle-issues]: https://github.com/typelevel/grackle/issues\n[grackle-pulls]: https://github.com/typelevel/grackle/pulls\n[grackle-dev]: https://discord.gg/GYD4J9w8EK\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypelevel%2Fgrackle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftypelevel%2Fgrackle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypelevel%2Fgrackle/lists"}