This release is a pre-release and may not be stable for production use.
The clean, modular Python web floorplan.
Tatami is a minimal, convention-powered web framework that builds your application from the ground up — guided by your directory structure, not boilerplate or ceremony.
Like traditional tatami mats that structure a Japanese room, Tatami lets you define the shape and flow of your web app naturally, simply by laying things out.
✨ Features
- 🔁 Automatic routing from file and folder structure
- 📦 Service injection via convention
- 🧩 Auto-loaded middleware, templates, and static assets
- 📖 Live OpenAPI docs (ReDoc, Swagger, RapiDoc)
- 🧠 Auto-generated endpoint documentation from docstrings and README
- ⚡ Zero-config startup — just run your app directory
🚀 Quick Start
pip install tatami
Create a new project:
tatami create myproject
Run your project:
tatami run myproject
Your API will be available at http://localhost:8000 with automatic docs at /docs/swagger.
🧠 Philosophy
Tatami is designed for:
- Structure-first design: Routes and services emerge from file layout.
- Simplicity: Eliminate configuration and glue code.
- Alignment: Your docs, code, and architecture reflect each other.
It's like FastAPI and Flask had a minimalist, Spring Boot-inspired child.
📚 Documentation
You can access the whole documentation for Tatami here
By the way, Tatami automatically generates your application’s documentation at the following endpoints:
/openapi.json- OpenAPI specification/docs/swagger- Swagger UI/docs/redoc- ReDoc/docs/rapidoc- RapiDoc
🔌 Example
Using decorators (recommended):
from tatami import get, post, router
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
class Users(router('/users')):
@get('/')
def list_users(self):
"""Returns all users in the system."""
return [{"id": 1, "name": "Alice", "age": 30}]
@post('/')
def create_user(self, user: User):
"""Creates a new user."""
return {"message": f"Created user {user.name}"}
@get('/{user_id}')
def get_user(self, user_id: int):
"""Get a specific user by ID."""
return {"id": user_id, "name": "Alice", "age": 30}
Using convention-based routing:
# In routers/users.py
class Users:
def get_users(self):
"""List all users"""
return [{"id": 1, "name": "Alice"}]
def post_user(self, user: User):
"""Create a new user"""
return {"created": user.name}
This automatically creates:
- GET /users/
- POST /users/
- GET /users/{user_id}
...with full OpenAPI schemas generated automatically.
🌱 Still Early
Tatami is experimental. Expect breaking changes, rapid iteration, and exciting ideas.
Contributions, feedback, and issue reports are more than welcome.
Metadata
Release files for tatami 0.0.2rc2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tatami-0.0.2rc2.tar.gz | 12.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tatami-0.0.2rc2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.9 kB
Release files / tatami-0.0.2rc2.tar.gz
| Download URL | tatami-0.0.2rc2.tar.gz |
|---|---|
| Size | 12.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
02447d69e99f7b4fc1a65d591685d3b2fd272b67125346ef5a636d3e0b780dcf
|
|
BLAKE2b-256 checksum How to use checksums |
ac9e8ae1a3297a213e395a325e4f23d24fa923a9827d04d1d0e085b056c10826
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 1, 2025.
Transparency logRelease files / tatami-0.0.2rc2-py3-none-any.whl
| Download URL | tatami-0.0.2rc2-py3-none-any.whl |
|---|---|
| Size | 12.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9c49d677c6606fdaf496563bc0eee05bd82bcc683a319ef11e1210061f6de2da
|
|
BLAKE2b-256 checksum How to use checksums |
1a68a9809bad4a4db0d3b85a885b02f5e66c66e4268a8dab75e65c8221501a96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 1, 2025.
Transparency log