whatisgithub

What is responder?

kennethreitz/responder — explained in plain English

Analysis updated 2026-05-18

3,619PythonAudience · developerComplexity · 2/5Setup · easy

In one sentence

Responder is a Python framework for building HTTP APIs, similar to Flask but built on Starlette with async support, GraphQL, and WebSockets built in.

Mindmap

mindmap
  root((Responder))
    What it does
      HTTP API framework
      Flask like syntax
      Built on Starlette
    Tech stack
      Python
      Starlette
      Uvicorn
    Use cases
      REST APIs
      GraphQL endpoints
      WebSocket routes
    Audience
      Python developers
      API builders

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

What do people build with it?

USE CASE 1

Build a REST API backend for a web or mobile app.

USE CASE 2

Serve a small internal tool with an authentication hook.

USE CASE 3

Add a GraphQL endpoint to an existing Python project.

USE CASE 4

Prototype a WebSocket chat or real-time feature.

What is it built with?

PythonStarletteUvicornJinja2GraphQLWebSockets

How does it compare?

kennethreitz/responderderv82/wifitelanqian528/chat2api
Stars3,6193,6193,619
LanguagePythonPythonPython
Setup difficultyeasyhardmoderate
Complexity2/54/53/5
Audiencedeveloperops devopsdeveloper

Figures from each repo's GitHub metadata at analysis time.

How do you get it running?

Difficulty · easy Time to first run · 5min

So what is it?

Responder is a Python library for building web services and APIs. If you have written Python web code with Flask, the style will feel familiar: you define URL routes using decorators, and each route points to a function that handles the incoming request and builds the response. Responder runs on top of Starlette, a modern async web foundation, but keeps the surface simple enough that a minimal working server fits in about ten lines of code. Installing it is a single pip command, and it requires Python 3.10 or newer. Sending back different types of responses is straightforward: you set resp.text for plain text, resp.html for HTML markup, resp.media for JSON data, or resp.file to stream a file. Reading incoming data is equally direct, with req.headers, req.params, and an awaitable req.media() for request bodies. Beyond the basics, the library includes quite a few built-in capabilities. You can define before-request hooks to check authentication or enforce rate limits, write custom error handlers for specific exception types, accept WebSocket connections, and run background tasks without blocking the response. It also supports GraphQL out of the box through an optional integration, and you can mount existing Flask or other WSGI applications inside a Responder app if you need to mix old and new code. Other included features are OpenAPI documentation generation, cookie-based sessions, gzip response compression, static file serving, and Jinja2 HTML templates. The production server is uvicorn, which is a fast async server. Route parameters can be typed so that a segment declared as int is automatically converted before reaching your function. The full documentation is at responder.kennethreitz.org.

Copy-paste prompts

Prompt 1
Write a Responder API with a route that accepts a POST request and validates JSON input.
Prompt 2
Show me how to add a before_request authentication hook in Responder.
Prompt 3
Convert this Flask route to a Responder route using resp.media.
Prompt 4
Set up a Responder WebSocket route that echoes messages back to the client.

Frequently asked questions

What is responder?

Responder is a Python framework for building HTTP APIs, similar to Flask but built on Starlette with async support, GraphQL, and WebSockets built in.

What language is responder written in?

Mainly Python. The stack also includes Python, Starlette, Uvicorn.

How hard is responder to set up?

Setup difficulty is rated easy, with roughly 5min to a first successful run.

Who is responder for?

Mainly developer.

Open on GitHub → Ask about another repo

This repo across BitVibe Labs

Verify against the repo before relying on details.