Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
4 changes: 2 additions & 2 deletions .github/workflows/check_dependents.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ jobs:
otp-version: "27"

- name: Checkout absinthe
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Checkout ${{ matrix.dependent }}
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
repository: "absinthe-graphql/${{ matrix.dependent }}"
path: "${{ matrix.dependent }}"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Set up Elixir
uses: erlef/setup-beam@v1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ jobs:
permissions:
pull-requests: read
steps:
- uses: amannn/action-semantic-pull-request@v5
- uses: amannn/action-semantic-pull-request@v6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out
uses: actions/checkout@v3
uses: actions/checkout@v6
with:
ref: ${{ inputs.tag || github.ref }}

Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.claude
.vscode
/bench
/_build
/cover
Expand All @@ -7,7 +9,6 @@
erl_crash.dump
*.ez
src/*.erl
.tool-versions*
missing_rules.rb
.DS_Store
/priv/plts/*.plt
Expand Down
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,38 @@
# Changelog

## Unreleased

### Features

* **draft-spec:** Add `@defer` and `@stream` directives for incremental delivery ([#1377](https://github.com/absinthe-graphql/absinthe/pull/1377))
- **Note:** These directives are still in draft/RFC stage and not yet part of the finalized GraphQL specification
- **Opt-in required:** `import_directives Absinthe.Type.BuiltIns.IncrementalDirectives` in your schema
- Split GraphQL responses into initial + incremental payloads
- Configure via `Absinthe.Pipeline.Incremental.enable/2`
- Resource limits (max concurrent streams, memory, duration)
- Dataloader integration for batched loading
- SSE and WebSocket transport support
* **subscriptions:** Support `@defer` and `@stream` in subscriptions
- Subscriptions with deferred content deliver multiple payloads automatically
- Existing PubSub implementations work unchanged (calls `publish_subscription/2` multiple times)
- Uses standard GraphQL incremental delivery format that clients already understand
* **streaming:** Unified streaming architecture for queries and subscriptions
- New `Absinthe.Streaming` module consolidates shared abstractions
- `Absinthe.Streaming.Executor` behaviour for pluggable task execution backends
- `Absinthe.Streaming.TaskExecutor` default executor using `Task.async_stream`
- `Absinthe.Streaming.Delivery` handles pubsub delivery for subscriptions
- Both query and subscription incremental delivery share the same execution path
* **executors:** Pluggable task execution backends
- Implement `Absinthe.Streaming.Executor` to use custom backends (Oban, RabbitMQ, etc.)
- Configure via `@streaming_executor` schema attribute, context, or application config
- Default executor uses `Task.async_stream` with configurable concurrency and timeouts
* **telemetry:** Add telemetry events for incremental delivery
- `[:absinthe, :incremental, :delivery, :initial]` - initial response
- `[:absinthe, :incremental, :delivery, :payload]` - each deferred/streamed payload
- `[:absinthe, :incremental, :delivery, :complete]` - stream completed
- `[:absinthe, :incremental, :delivery, :error]` - error during streaming
* **monitoring:** Add `on_event` callback for custom monitoring integrations (Sentry, DataDog)

## [1.9.0](https://github.com/absinthe-graphql/absinthe/compare/v1.8.0...v1.9.0) (2025-11-21)


Expand Down
Loading
Loading