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.1.tar.gz (11.9 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.1-py3-none-any.whl (13.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: py_sse-0.6.1.tar.gz
  • Upload date:
  • Size: 11.9 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.1.tar.gz
Algorithm Hash digest
SHA256 9689fc6d1a3402075a8f0bd5189332c1226920bc0ea895a76ff7079f17c97839
MD5 be9e6637c8f295a465e1478108fa628e
BLAKE2b-256 0e6c4a3778d82d8c77096b6b855a0511a870757bfc3f492e2fe5070dfa683126

See more details on using hashes here.

File details

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

File metadata

  • Download URL: py_sse-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 13.5 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 947b451c65861a990df2e49435104b0db63c60ec8bcfcd7015030319e266cd5f
MD5 9eca53e52dadba9aace79992f6ceb558
BLAKE2b-256 dc127c4ed2c714b5787d6e7066f3c29731d495189febdd16efe22cf18e927f4b

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