Overview

Absinthe is the GraphQL toolkit for Elixir, an implementation of the GraphQL specification built to suit the language's capabilities and idiomatic style.

The Absinthe project consists of several complementary packages. You can find the full listing on the absinthe-graphql GitHub organization page.

GraphQL Basics

If you're new to GraphQL, we suggest you read up a bit on GraphQL's foundational principles before you dive into Absinthe.

Here are a few resources that might be helpful:

Absinthe

Absinthe's functionality generally falls into two broad areas. You can read more about the details in the guides provided as part of this documentation and in the related packages/projects:

  • Defining Schemas. A schema:
    • defines the structure of data entities and the relationships between, as well as the available queries, mutations, and subscriptions, using an elegant collection of declarative macros
    • defines custom scalar types
    • declares any deprecated definitions
    • defines resolution functions to access data, using a flexible and extensible middleware/plugin system
  • Executing Documents. A GraphQL document:
    • can be any standard GraphQL query, mutation, or subscription
    • may include reusable variable definitions
    • can be analyzed for its complexity and be rejected if it's unsafe/too expensive
    • has a context that you can integrate with authentication and authorization strategies
    • can contain standard GraphQL introspection fields
    • can include multipart file uploads as GraphQL arguments (as part of the absinthe_plug package)

Integrations

Absinthe integrates with a number of other important projects, both on the backend and frontend, to provide a better experience for developers.

Guides

To contribute to the guides, please submit a pull request to the absinthe project on GitHub.

You'll find the content under guides/.