indah
A Python UI framework for ephemeral cloud notebooks (Colab, Runpod). Reactive, single-port, no Node required.
Build an interactive UI from a single Python file and launch it straight from a Colab or Runpod cell. It keeps Streamlit's zero-config, single-port startup, adds the async performance of a real full-stack app, and ships its frontend pre-built so there is no Node, npm, or bun anywhere at install or runtime.
Status: early planning.
indahis not usable yet. This repository currently holds the plan and a0.0.xplaceholder that reserves the name on PyPI. If you want to follow along, start withdocs/PLAN.md.
Why another one
| Pain | indah's answer |
|---|---|
| Streamlit reruns the whole script on every interaction | Reactive signals: only the affected components update (ADR-0003) |
| Gradio's layout and state model get awkward past a demo | Plain Python components bound to state, custom layouts |
| Reflex needs a Node build step that breaks in transient containers | Frontend ships pre-built in the wheel; zero runtime Node (ADR-0004) |
| Colab's proxy does not support WebSockets | SSE + HTTP POST transport that passes the proxy (ADR-0002) |
How it will work
flowchart LR
subgraph Cell["Colab / Runpod cell"]
PY["Your Python app<br/>(reactive signals)"]
end
subgraph ASGI["Single ASGI app, one port"]
CORE["Reactive core<br/>signals to JSON patches"]
API["/api: SSE + POST"]
STATIC["Pre-built Svelte shell<br/>(static assets in the wheel)"]
end
Browser["Browser via platform proxy"]
PY --> CORE --> API
STATIC -- served over HTTP --> Browser
API -- SSE patches --> Browser
Browser -- POST events --> API
One port, standard HTTP plus Server-Sent Events, so it works through the network proxies of Colab and Runpod without a tunnel or a local JavaScript toolchain.
Try the placeholder
pip install indah # reserves the name; no framework yet
python -c "import indah; print(indah.__version__)"
There is no public API yet. The first working slice ("a live pixel through the
proxy") is described in docs/SLICES.md.
Planning and design
| Doc | What |
|---|---|
docs/PLAN.md |
Problem, solution, scope, requirements, architecture |
docs/SLICES.md |
Vertical build increments with test plans |
docs/QUESTIONS.md |
Decision register |
docs/adr/ |
Architecture Decision Records |
Development
uv sync --extra dev
make check # lint + fast tests (the pre-push gate)
make help # list all targets
See AGENTS.md for repo conventions and docs/RELEASING.md
for the release process.
License
Release files for indah 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| indah-0.0.1.tar.gz | 37.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| indah-0.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 45.0 kB
Release files / indah-0.0.1.tar.gz
| Download URL | indah-0.0.1.tar.gz |
|---|---|
| Size | 37.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9c50b4e9ebeba2891900431d5b51c6a664aed17a2c5fba2d00fd1c0859774653
|
|
BLAKE2b-256 checksum How to use checksums |
fc56a3bf0b67629b18ac170333abf291961dd982edc0c2332f7ff2f7f8ca7d8a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / indah-0.0.1-py3-none-any.whl
| Download URL | indah-0.0.1-py3-none-any.whl |
|---|---|
| Size | 7.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bb5a5905133762f543f8904397156f7ad912306dd25095ce72227eec7425a633
|
|
BLAKE2b-256 checksum How to use checksums |
371367b8ebfe6f44c9b4b2753a733e9c8c64bc35fbd18c5196c5ff3c294b8ed8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|