0Pricing
Node.js Backend Development Bootcamp · Lesson

GraphQL Subscriptions for Real-Time Data

Add real-time capabilities to your GraphQL API using subscriptions, so clients receive live updates over WebSockets the moment data changes.

GraphQL Subscriptions for Real-Time Data is a free Node.js Backend Development Bootcamp lesson on CoddyKit — lesson 4 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Node.js Backend Development Bootcamp learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.

The Three GraphQL Operations

GraphQL defines three root operation types:

  • Query: read data
  • Mutation: change data
  • Subscription: receive a stream of live updates

Queries and mutations are request/response; subscriptions keep a connection open for ongoing events.

When to Use Subscriptions

Subscriptions shine when clients need real-time data:

  • Chat messages
  • Live notifications
  • Collaborative editing
  • Live dashboards and scores

For data that rarely changes, polling a query is simpler.

WebSockets Under the Hood

Queries and mutations travel over HTTP, but subscriptions need a persistent two-way channel — a WebSocket. The server pushes events to subscribed clients without them asking again.

Defining a Subscription in the Schema

Add a Subscription type to your schema with fields clients can subscribe to. Each field is an event stream returning some type.

type Subscription {
  messageAdded(channelId: ID!): Message!
}

The PubSub Engine

Subscriptions rely on a publish/subscribe system. A PubSub instance lets your resolvers publish events and your subscriptions listen for them.

const { PubSub } = require('graphql-subscriptions');
const pubsub = new PubSub();

Publishing an Event

Inside a mutation, after saving data, publish an event on a named topic. Anyone subscribed to that topic receives the payload.

const message = await Message.create(input);
pubsub.publish('MESSAGE_ADDED', { messageAdded: message });
return message;

The Subscription Resolver

A subscription resolver returns an async iterator via asyncIterator, telling the server which topic to forward to the client.

const resolvers = {
  Subscription: {
    messageAdded: {
      subscribe: () => pubsub.asyncIterator('MESSAGE_ADDED')
    }
  }
};

Filtering Events

Often a client only cares about events for one channel. withFilter wraps the iterator and forwards only events that match the subscription's arguments.

const { withFilter } = require('graphql-subscriptions');
subscribe: withFilter(
  () => pubsub.asyncIterator('MESSAGE_ADDED'),
  (payload, vars) => payload.messageAdded.channelId === vars.channelId
)

Client Subscription Query

The client writes a subscription operation just like a query, but with the subscription keyword. The server streams results as they happen.

subscription OnMessage($id: ID!) {
  messageAdded(channelId: $id) {
    id
    text
  }
}

Scaling Across Servers

The in-memory PubSub only works on a single instance. To broadcast across many servers, swap in a backend like graphql-redis-subscriptions so events reach all connected clients.

const { RedisPubSub } = require('graphql-redis-subscriptions');
const pubsub = new RedisPubSub();

Cleaning Up Connections

Open WebSockets consume resources. The server should detect disconnects and stop streaming. Apollo Server handles much of this, but watch for orphaned subscriptions and authenticate the connection on setup.

Quick Check

Test your GraphQL subscription knowledge.

Recap

You added real-time data with GraphQL subscriptions:

  • Subscriptions stream live events over WebSockets
  • Declare a Subscription type and resolve it with asyncIterator
  • Mutations publish events; withFilter targets the right clients
  • Scale across servers with a Redis-backed PubSub and clean up connections

Now your API can power chat, notifications, and live dashboards.

Frequently asked questions

Is the “GraphQL Subscriptions for Real-Time Data” lesson free?

Yes — the full text of “GraphQL Subscriptions for Real-Time Data” is free to read here on the web, and the Node.js Backend Development Bootcamp course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Node.js Backend Development Bootcamp course, upgrade to CoddyKit PRO.

What will I learn in “GraphQL Subscriptions for Real-Time Data”?

Add real-time capabilities to your GraphQL API using subscriptions, so clients receive live updates over WebSockets the moment data changes. You practise Node.js Backend Development Bootcamp with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.

Do I need any experience to start Node.js Backend Development Bootcamp?

No prior experience is required. Node.js Backend Development Bootcamp on CoddyKit is structured for beginners through advanced learners; this is — lesson 4 of 4, so you can start here or from the beginning and move at your own pace.

How long does the “GraphQL Subscriptions for Real-Time Data” lesson take?

Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.

Can I write and run code in this Node.js Backend Development Bootcamp lesson?

Yes. Every Node.js Backend Development Bootcamp lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.

All lessons in this course

  1. Introduction to Serverless with Node.js
  2. GraphQL API Design Principles
  3. Building a GraphQL Server with Apollo
  4. GraphQL Subscriptions for Real-Time Data
← Back to Node.js Backend Development Bootcamp