Skip to content


Subversion checkout URL

You can clone with
Download ZIP
A screamingly fast Python WSGI server written in C.
C Python Makefile Other
Branch: master

Fix #77: Don't abort running requests on ^C

The graceful shutdown is achieved by stopping the accept and signal
watchers. This way, we're not accepting any more clients and the main
loop ends as soon as all currently processed requests have been worked

This patch also ports the libev API calls from libev v3 to v4.
latest commit 573518bb24
@jonashaag authored


bjoern: Fast And Ultra-Lightweight HTTP/1.1 WSGI Server

A screamingly fast, ultra-lightweight WSGI server for CPython, written in C using Marc Lehmann's high performance libev event loop and Ryan Dahl's http-parser.

Why It's Cool

bjoern is the fastest, smallest and most lightweight WSGI server out there, featuring

  • ~ 1000 lines of C code
  • Memory footprint ~ 600KB
  • Single-threaded and without coroutines or other crap
  • Can bind to TCP host:port addresses and Unix sockets (thanks @k3d3!)
  • Full persistent connection ("keep-alive") support in both HTTP/1.0 and 1.1, including support for HTTP/1.1 chunked responses


pip install bjoern. See wiki for details.


# Bind to TCP host/port pair:, host, port)

# TCP host/port pair, enabling SO_REUSEPORT if available., host, port, reuse_port=True)

# Bind to Unix socket:, 'unix:/path/to/socket')

# Bind to abstract Unix socket: (Linux only), 'unix:@socket_name')

Alternatively, the mainloop can be run separately:

bjoern.listen(wsgi_application, host, port)

You can also simply pass a Python socket(-like) object. Note that you are responsible for initializing and cleaning up the socket in that case.

bjoern.server_run(socket_object, wsgi_application)
bjoern.server_run(filedescriptor_as_integer, wsgi_application)
Something went wrong with that request. Please try again.