Requirements
Before You Start
1/3 complete
- Python 3.14+ installed (free-threaded build recommended)
- A terminal with TTY support
- A text editor for templates
Install
uv pip install milo
pip install milo
git clone https://github.com/lbliii/milo.git
cd milo
uv sync --group dev --python 3.14t
Verify
milo --version
Command not found?
Ensure Python's bin directory is in your PATH:
# Check where milo was installed
python -m site --user-base
# Add to PATH if needed (add to your shell profile)
export PATH="$HOME/.local/bin:$PATH"
Free-threaded Python
Milo is designed for Python 3.14t with the GIL disabled (PEP 703). For maximum concurrency with sagas, run with:
PYTHON_GIL=0 python your_app.py
Tip
The_Py_mod_gil = 0 marker in Milo's __init__.py signals to CPython that the module is safe to use without the GIL. Saga concurrency via ThreadPoolExecutorbenefits directly from free-threading — no GIL contention on I/O-bound or CPU-bound effect handlers.
What gets installed
| Package | Role | |
|---|---|---|
milo |
Core framework — App, Store, Flow, Form, KeyReader | |
| kida-templates | Template engine for terminal rendering |
Note
Milo has exactly one runtime dependency — Kida. No click, no rich, no curses. The entire input, rendering, and state management stack is built-in.