Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Tatami Logo

Build Status Docs Status PyPI - Downloads PyPI - Version


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)

Source distribution for tatami 0.0.2rc2
File Size Uploaded
tatami-0.0.2rc2.tar.gz 12.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tatami 0.0.2rc2
File Interpreter ABI Platform
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 log

Release 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
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