Skip to main content

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. indah is not usable yet. This repository currently holds the plan and a 0.0.x placeholder that reserves the name on PyPI. If you want to follow along, start with docs/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

Apache License 2.0.

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)

Source distribution for indah 0.0.1
File Size Uploaded
indah-0.0.1.tar.gz 37.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for indah 0.0.1
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

This release

0.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page