absinthe-subscriptions
Use when implementing real-time GraphQL subscriptions with Absinthe. Covers Phoenix channels, PubSub, and subscription patterns.
Best use case
absinthe-subscriptions is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use when implementing real-time GraphQL subscriptions with Absinthe. Covers Phoenix channels, PubSub, and subscription patterns.
Teams using absinthe-subscriptions should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/absinthe-subscriptions/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How absinthe-subscriptions Compares
| Feature / Agent | absinthe-subscriptions | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use when implementing real-time GraphQL subscriptions with Absinthe. Covers Phoenix channels, PubSub, and subscription patterns.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Absinthe - Subscriptions
Guide to implementing real-time GraphQL subscriptions with Absinthe and Phoenix.
## Key Concepts
### Basic Setup
```elixir
# In your Phoenix endpoint
defmodule MyAppWeb.Endpoint do
use Phoenix.Endpoint, otp_app: :my_app
use Absinthe.Phoenix.Endpoint
socket "/socket", MyAppWeb.UserSocket,
websocket: true,
longpoll: false
end
# Socket configuration
defmodule MyAppWeb.UserSocket do
use Phoenix.Socket
use Absinthe.Phoenix.Socket, schema: MyApp.Schema
def connect(params, socket, _connect_info) do
current_user = get_user_from_token(params["token"])
socket = Absinthe.Phoenix.Socket.put_options(socket,
context: %{current_user: current_user}
)
{:ok, socket}
end
def id(socket), do: "user_socket:#{socket.assigns.user_id}"
end
```
### Defining Subscriptions
```elixir
defmodule MyApp.Schema.Subscriptions do
use Absinthe.Schema.Notation
object :post_subscriptions do
field :post_created, :post do
config fn _args, _resolution ->
{:ok, topic: "posts"}
end
trigger :create_post, topic: fn _post ->
"posts"
end
end
field :post_updated, :post do
arg :id, non_null(:id)
config fn %{id: id}, _resolution ->
{:ok, topic: "post:#{id}"}
end
trigger :update_post, topic: fn post ->
"post:#{post.id}"
end
end
end
end
```
### Publishing from Mutations
```elixir
defmodule MyApp.Resolvers.Post do
def create_post(_parent, %{input: input}, _resolution) do
case MyApp.Posts.create_post(input) do
{:ok, post} ->
# Publish to subscription
Absinthe.Subscription.publish(
MyAppWeb.Endpoint,
post,
post_created: "posts"
)
{:ok, post}
{:error, changeset} ->
{:error, changeset}
end
end
end
```
### User-Specific Subscriptions
```elixir
field :user_notification, :notification do
config fn _args, %{context: %{current_user: user}} ->
{:ok, topic: "user:#{user.id}:notifications"}
end
end
# Publishing
Absinthe.Subscription.publish(
MyAppWeb.Endpoint,
notification,
user_notification: "user:#{user_id}:notifications"
)
```
## Best Practices
1. **Scope subscriptions** - Use topics to limit data exposure
2. **Authenticate connections** - Verify users in socket connect
3. **Use triggers** - Automatically publish on mutations
4. **Handle disconnections** - Clean up resources on disconnect
5. **Rate limit subscriptions** - Prevent abuse
## PubSub Configuration
```elixir
# config/config.exs
config :my_app, MyAppWeb.Endpoint,
pubsub_server: MyApp.PubSub
# application.ex
children = [
{Phoenix.PubSub, name: MyApp.PubSub},
MyAppWeb.Endpoint,
{Absinthe.Subscription, MyAppWeb.Endpoint}
]
```
## Authorization in Subscriptions
```elixir
field :private_messages, :message do
config fn _args, %{context: context} ->
case context do
%{current_user: %{id: user_id}} ->
{:ok, topic: "user:#{user_id}:messages"}
_ ->
{:error, "Unauthorized"}
end
end
end
```
## Anti-Patterns
- Don't publish sensitive data to broad topics
- Avoid subscriptions without authentication
- Don't skip connection-level authorization
- Avoid overly granular topics (performance impact)Related Skills
absinthe-resolvers
Use when implementing GraphQL resolvers with Absinthe. Covers resolver patterns, dataloader integration, batching, and error handling.
stripe-checkout-subscriptions
Guide for creating Stripe Checkout Sessions for subscriptions in Flutter/Supabase backend. Covers flows, API preferences, and non-negotiable rules.
bgo
Automates the complete Blender build-go workflow, from building and packaging your extension/add-on to removing old versions, installing, enabling, and launching Blender for quick testing and iteration.
acc-create-bulkhead
Generates Bulkhead pattern for PHP 8.5. Creates resource isolation with semaphore-based concurrency limiting and thread pool isolation. Includes unit tests.
acc-create-anti-corruption-layer
Generates DDD Anti-Corruption Layer for PHP 8.5. Creates translation layer between bounded contexts or external systems. Includes adapters, translators, facades, and unit tests.
acc-create-action
Generates ADR Action classes for PHP 8.5. Creates single-responsibility HTTP endpoint handlers with PSR-7 support. Includes unit tests.
acc-clean-arch-knowledge
Clean Architecture knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Clean Architecture and Hexagonal Architecture audits.
acc-claude-code-knowledge
Knowledge base for Claude Code formats and patterns. Use when creating or improving commands, agents, skills, or hooks.
acc-check-leaky-abstractions
Detects leaky abstractions in PHP code. Identifies implementation details exposed in interfaces, concrete returns from abstract methods, framework leakage into domain, and infrastructure concerns in application layer.
acc-check-encapsulation
Analyzes PHP code for encapsulation violations. Detects public mutable state, exposed internals, Tell Don't Ask violations, getter/setter abuse, and information hiding breaches.
acc-check-bounded-contexts
Analyzes bounded context boundaries in DDD projects. Detects cross-context coupling, shared kernel violations, context mapping issues, and ubiquitous language inconsistencies. Generates context map diagrams and boundary recommendations.
acc-architecture-doc-template
Generates ARCHITECTURE.md files for PHP projects. Creates layer documentation, component descriptions, and architectural diagrams.