---
title: "ZudoJS advanced systems — ZudoJS Academy"
description: "Events, messages and CQRS, queues and schedulers, serialization, RPC and API operations, adapters, plugins, feature flags and tenancy, then testing, logging, observability and documentation infrastructure."
source: https://zudojs.oyinlola.site/learn/zudo-advanced
---

LEVEL 14 · ZUDOJS

Course Advanced

# ZudoJS advanced systems

Events, messages and CQRS, queues and schedulers, serialization, RPC and API operations, adapters, plugins, feature flags and tenancy, then testing, logging, observability and documentation infrastructure.

- **15 lessons**
- **10 h** to read and try
- **Before this:** [ZudoJS application development](https://zudojs.oyinlola.site/learn/zudo-applications)

0 of 15 lessons done

[Start lesson 1 →](https://zudojs.oyinlola.site/learn/zudo-events)

## When you finish, you can

- Decouple features with events and messages
- Separate commands from queries
- Move slow work to queues and run work on a schedule
- Serialize values across services and call them with RPC
- Hide external systems behind adapters and extend an app with plugins
- Roll out features gradually and isolate tenants
- Test, log, trace and measure a ZudoJS application

**You build:** An event-driven, observable Task API with background jobs and feature flags

MODULE 1

## Events, messages and CQRS

1. [1**Events**Announce that something happened and let other parts of the Task API react, without the code that announces it knowing who listens. Handlers, wildcards, priorities, dispatch modes, middleware and handler errors with @zudojs/events.40 min](https://zudojs.oyinlola.site/learn/zudo-events)
2. [2**Messaging**Ask another part of the Task API to do something and get an answer back, without importing it. Messages, handlers, middleware, correlation and causation ids, timeouts and cancellation with @zudojs/messaging.35 min](https://zudojs.oyinlola.site/learn/zudo-messaging)
3. [3**Commands and queries (CQRS)**Split the Task API's operations into commands that change data and queries that only read it. Command and query buses, handlers, middleware, execution context, results, and when CQRS is worth it, with @zudojs/cqrs.40 min](https://zudojs.oyinlola.site/learn/zudo-cqrs)

MODULE 2

## Background work

1. [4**Background jobs**Move slow and unreliable work out of the request and into a job queue. Queues, jobs, processors, workers, concurrency, retries with exponential backoff, delayed jobs, dead letters and graceful shutdown with @zudojs/queue.45 min](https://zudojs.oyinlola.site/learn/zudo-queue)
2. [5**Scheduled tasks**Run work on the clock, not on a request. Intervals, one-off runs and cron expressions, time zones, retries and failed runs, overlapping runs, restarts, and running a schedule on one instance only, with @zudojs/scheduler.40 min](https://zudojs.oyinlola.site/learn/zudo-scheduler)

MODULE 3

## Services and contracts

1. [6**Serialization**Turn values into text and back without losing what they were. See exactly what plain JSON loses, keep Dates, BigInts, Maps, Sets, bytes and Errors with @zudojs/serialization, add your own types, read untrusted input safely, and version your payloads with envelopes.35 min](https://zudojs.oyinlola.site/learn/zudo-serialization)
2. [7**Calling services with RPC**Call a function that runs in another service as if it were local. Define procedures with @zudojs/rpc, call them through a client and a transport, and handle validation, errors, identity, timeouts and retries.45 min](https://zudojs.oyinlola.site/learn/zudo-rpc)
3. [8**One operation, many transports**Write your business logic once as an operation with @zudojs/api, then run it from HTTP, RPC and a queue with the same validation, errors, interceptors and timeouts.45 min](https://zudojs.oyinlola.site/learn/zudo-api)
4. [9**OpenAPI documents**Describe the Task API in an OpenAPI document with @zudojs/openapi. Turn your schemas into components, choose between OpenAPI 3.0 and 3.1, validate the document, save it as JSON or YAML, and serve a documentation page.40 min](https://zudojs.oyinlola.site/learn/zudo-openapi)

MODULE 4

## Quality and insight

1. [10**Testing a ZudoJS app**Test the Task API with Vitest and @zudojs/testing. Control time with a test clock, replace services with mocks and recording buses, wire fakes through a test container, clean up in the right order, and run integration tests against a real HTTP server.Core45 min](https://zudojs.oyinlola.site/learn/zudo-testing)
2. [11**Structured logging**Replace console.log with structured log entries that a program can search. Levels, child loggers, request ids, request and error logging, secret redaction and JSON logs for production with @zudojs/logger.40 min](https://zudojs.oyinlola.site/learn/zudo-logging)
3. [12**Observability**See inside a running Task API. Metrics count what happens, traces show where the time goes, and logs, metrics and traces share one trace id across requests and services, with @zudojs/observability.Production45 min](https://zudojs.oyinlola.site/learn/zudo-observability)

MODULE 5

## Platform

1. [13**Feature flags**Turn features on and off without deploying. Rules, evaluation context, percentage rollouts, A/B variants, kill switches and browser snapshots with @zudojs/feature-flags.40 min](https://zudojs.oyinlola.site/learn/zudo-feature-flags)
2. [14**Multi-tenancy**Serve many companies from one Task API without ever mixing their data. Tenant ids, resolvers and trust levels, resolver chains, AsyncLocalStorage context and tenant-scoped queries with @zudojs/tenancy.45 min](https://zudojs.oyinlola.site/learn/zudo-tenancy)
3. [15**Plugins**Let other code extend the Task API without editing it. Write plugins, declare dependencies, run their lifecycle, give each one a scoped context, roll back failed starts, read diagnostics and publish a plugin to npm with @zudojs/plugins.45 min](https://zudojs.oyinlola.site/learn/zudo-plugins)

## Course checkpoint

Prove you can move on. The checkpoint picks 20 questions at random from every lesson in this course. Get 16 right to pass. Your result is saved in this browser only.
