Skip to main content

minimal python sse server

Project description

PyPI version

[!WARNING] Under active development — May 2026

py_sse

A minimal SSE web framework for Python 3.13+. Real-time hypermedia over HTTP/1.1 with brotli-compressed Server-Sent Events.

One OS thread per connection. Topic-scoped pub/sub via hierarchical subjects. No async/await. Pure stdlib + brotli + apsw.

Install

uv add py-sse

Hello world

from py_sse import serve, html

def get_root(req):
    return html("<h1>hello, world</h1>")

serve([("GET", "/", get_root)], host="0.0.0.0", port=8000)

Real-time updates

from py_sse import serve, html, Changes, Database, stream_handler

db = Database("app.db", schema="CREATE TABLE IF NOT EXISTS msg (id INTEGER PRIMARY KEY, text TEXT)")

def post_msg(req):
    db.execute("INSERT INTO msg (text) VALUES (?)", (req["body"].decode(),))
    db.changes.notify("msg")
    return ("", [], b"")

@stream_handler(
    resource_id_fn=lambda req: "msgs",
    subscribe_to=lambda req: "msg",
)
def get_msgs(req):
    rows = db.all("SELECT id, text FROM msg ORDER BY id DESC")
    body = "<ul>" + "".join(f"<li>{t}</li>" for _, t in rows) + "</ul>"
    return html(f"<html><body>{body}</body></html>")

serve(
    [("GET", "/", get_msgs), ("POST", "/msg", post_msg)],
    changes=db.changes,
)

Design

  • Pages are database snapshots. Every render is the truth as of query time.
  • Fat morphs. SSE frames send the whole page; idiomorph patches the DOM; brotli compresses across frames.
  • Topic-scoped pub/sub. changes.notify("game.5.score") wakes only viewers waiting on matching patterns.
  • Graceful degradation. Past the live cap, viewers get one-shot HTML with data-on-interval for polling.
  • One thread per connection. The thread IS the subscription. When it dies, the subscription dies. No registry.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_sse-0.6.0.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py_sse-0.6.0-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file py_sse-0.6.0.tar.gz.

File metadata

  • Download URL: py_sse-0.6.0.tar.gz
  • Upload date:
  • Size: 9.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux ARM","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for py_sse-0.6.0.tar.gz
Algorithm Hash digest
SHA256 296d266d56f1d8b8440218088fe011fbd55acfa461180d9f73e0542268241cd0
MD5 60a537c04a6c379d4ffe631a5d45ca82
BLAKE2b-256 b98dd8d085dcfb184797e29dd440aea79920d1829c9ee928b03a628171d3b53e

See more details on using hashes here.

File details

Details for the file py_sse-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: py_sse-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux ARM","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for py_sse-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c8cae4c359074a70fb73f1d3b6454796931a35adfc3053cbed1e1bd12274a48e
MD5 d71ebcff68a988bdeb858810346faebc
BLAKE2b-256 2d22ce4c90d5ceb6fd1a7ec670512b6f69db1baf65b40837faa60818a0654cce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page