Skip to main content

@atproto/xrpc-server

TypeScript library for implementing atproto HTTP API services with Lexicon schema validation. Provides a robust framework for building XRPC servers with authentication, rate limiting, streaming, and error handling.

Installation

Overview

The @atproto/xrpc-server package provides:
  • XRPC method handlers (queries and procedures)
  • WebSocket subscription support
  • Lexicon schema validation
  • Authentication middleware
  • Rate limiting (memory and Redis)
  • Request/response streaming
  • Error handling and XRPC error types
  • Express.js integration

Quick Start

Main Exports

createServer

Creates a new XRPC server instance.

Options

validateResponse: Enable response validation (default: true) catchall: Custom catchall handler for unimplemented methods payload: Default payload size limits
rateLimits: Rate limiting configuration
errorParser: Custom error conversion to XRPCError

Server Class

The main server class.

Method Handlers

Handler Context

All handlers receive a context object:

Query Handler

Handle GET requests:

Procedure Handler

Handle POST requests with input:

Handler Response Types

Success Response

Stream Response

Buffer Response

Authentication

Auth Verifier

Add authentication to methods:

Auth Context Types

Rate Limiting

Memory Rate Limiter

In-memory rate limiting:

Redis Rate Limiter

Distributed rate limiting:

Route-Specific Rate Limits

Shared Rate Limiters

Share rate limits across multiple routes:

Rate Limit Bypass

Custom Rate Limit Keys

WebSocket Subscriptions

Handle real-time subscriptions:

Stream Context

Frame Types

Error Handling

XRPC Errors

Built-in error types:

XRPCError Class

Error Response Format

Custom Error Parser

Lexicon Schema Integration

Type-Safe Handlers with @atproto/lex

Use the @atproto/lex schema types:

Validation

Automatic validation of:
  • Query parameters
  • Request body (input)
  • Response body (output)
  • Content types and encodings

Advanced Features

Server Timing

Track performance metrics:

Request Encoding

NSID Parsing

Complete Example

Resources