The modern full-stack web framework for Python.
Full-stack simplicity with modern Python performance.
⚠️ Early Alpha: Astris is currently in active alpha development. APIs and features may undergo breaking changes until production-ready status is confirmed. Feedback, bug reports, and ideas are welcome!
What is Astris?
Astris bridges the gap between the rapid, joyful developer experience of classic full-stack frameworks (like Laravel and Rails) and the raw performance, modern typing, and async concurrency of FastAPI and Python 3.11+.
By combining FastAPI, Inertia.js, Vue 3, Tailwind CSS v4, and SQLModel, Astris lets you build rich, dynamic single-page applications without the overhead of maintaining separate API layers or complex state synchronization.
📖 Explore the full documentation, guides, and tutorials at astris.dev.
🌟 Key Features
- ⚡ Lightning-Fast Core: ASGI performance powered by FastAPI and Uvicorn with auto-generated OpenAPI & Swagger documentation.
- 🧩 Modern Monolith with Inertia.js: Render Vue 3 components directly from FastAPI controllers with full server-side state hydration and zero REST boilerplate.
- 🛡️ Production-Ready Authentication: Cryptographically signed cookie sessions, OWASP-standard Argon2id password hashing (
pwdlib), and full-stack auth starter kit. - 🗄️ SQLModel & Alembic Database Engine: Unified declarative models, DTOs, and automatic schema migrations out-of-the-box.
- ⚙️ Type-Safe Centralized Configuration: Powered by
pydantic-settingsfor.envmanagement, type casting, and fail-fast startup validation. - 🪐 Orbit CLI: An artisan developer CLI for scaffolding modules, generating migrations, and serving full-stack applications with hot-reloading.
- 🎨 Tailwind CSS v4 Pre-configured: Instant zero-config styling powered by
@tailwindcss/vite.
🚀 Quickstart
Create a new full-stack Astris application in seconds using uvx (or pipx):
# 1. Create a new project
uvx --from astris-python astris new my_app
# Or install globally as a CLI tool:
# uv tool install astris-python
# astris new my_app
# 2. Enter directory and install frontend dependencies
cd my_app
npm install
# 3. Start full-stack development server (FastAPI + Vite HMR)
uv run orbit serve
Open http://localhost:8000 in your browser. Your full-stack app with authentication, Inertia.js, and SQLite is live!
💡 How It Feels
1. Controllers & Inertia Rendering
Write clean, expressive controllers that return frontend views or JSON seamlessly:
from astris.auth import AuthUser, auth_required
from astris.inertia import InertiaResponse
from astris.routing import Controller
controller = Controller(prefix="/dashboard", dependencies=[auth_required])
@controller.get("/")
async def dashboard_page(request: Request, user: AuthUser) -> InertiaResponse:
# Props are passed directly to Vue 3 with $page.props
return InertiaResponse(request, "Dashboard", props={"username": user["name"]})
2. Unified SQLModel Models
Define database tables and validation schemas in a single declarative model:
from astris.database import Field, SQLModel
class ArticleBase(SQLModel):
title: str = Field(index=True)
content: str
is_published: bool = Field(default=False)
class Article(ArticleBase, table=True):
id: int | None = Field(default=None, primary_key=True)
class ArticleCreate(ArticleBase):
pass
3. Frontend Views (Vue 3 + Inertia)
Build dynamic reactive pages without configuring client-side routers:
<script setup lang="ts">
import { Head, Link } from '@inertiajs/vue3'
defineProps<{
username: string
}>()
</script>
<template>
<Head title="Dashboard" />
<div class="min-h-screen bg-slate-950 text-slate-100 p-8">
<h1 class="text-3xl font-bold">Welcome back, {{ username }}!</h1>
</div>
</template>
🪐 The Orbit CLI
Astris comes equipped with Orbit, a developer toolkit for rapid development:
# Start FastAPI backend + Vite frontend concurrently
uv run orbit serve
# Scaffold a new domain module (controller, service, model)
uv run orbit make:module billing
# Create and apply database migrations
uv run orbit make:migration "create_billing_table"
uv run orbit migrate
# Generate encryption keys
uv run orbit key:generate
📂 Project Architecture
Astris structures projects with a modular, Domain-Driven Design that grows gracefully:
my_app/
├── app/
│ ├── core/
│ │ └── config.py # Centralized Pydantic settings & .env loading
│ └── modules/
│ ├── auth/ # Authentication domain (controller, service, model)
│ └── welcome/ # Welcome domain
├── database/
│ └── migrations/ # Alembic database migration versions
├── resources/
│ ├── css/
│ │ └── app.css # Tailwind CSS v4 styling
│ ├── js/
│ │ ├── Pages/ # Inertia Vue 3 views & components
│ │ └── app.ts # Vue entrypoint
│ └── views/
│ └── root.html # HTML shell template
├── .env # App configuration & APP_KEY
└── pyproject.toml # Python dependencies
🙏 Acknowledgments
Astris is built upon the work of giants. Huge gratitude to the incredible open-source projects and creators that make Astris possible:
- FastAPI & SQLModel by Tiangolo - for setting the standard in modern Python type safety, speed, and ergonomics.
- Inertia.js by Jonathan Reinink - for the modern monolith architecture that bridges backend controllers and frontend SPAs without API boilerplate.
- Vue.js by Evan You - for the approachable and performant frontend component framework.
- Starlette & Uvicorn by Encode - for the lightning-fast ASGI toolkit and web server engine.
- Pydantic by Samuel Colvin & team - for rock-solid runtime data validation and centralized settings.
- Tailwind CSS by Tailwind Labs - for zero-config utility-first styling.
- Laravel by Taylor Otwell - for inspiring developer-first framework craftsmanship.
📄 License
The Astris framework is open source and licensed under the terms of the MIT license.
Built with ❤️ by Felix Gomez.
Release files for astris-python 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| astris_python-0.1.3.tar.gz | 50.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| astris_python-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 110.7 kB
Release files / astris_python-0.1.3.tar.gz
| Download URL | astris_python-0.1.3.tar.gz |
|---|---|
| Size | 50.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6f0a0c0f32620376629db9bbf40c0e9e9f2440f10b28bcb113fec9c85200d987
|
|
BLAKE2b-256 checksum How to use checksums |
6deb4c70d7915f8fd494f23392c7b5c89a7e254c86c85c0b5717735d3257f41b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / astris_python-0.1.3-py3-none-any.whl
| Download URL | astris_python-0.1.3-py3-none-any.whl |
|---|---|
| Size | 59.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3e339dac93fc761797a7e1d1843dbeb0a32eb1633ae79931e5ad9f90143f27bb
|
|
BLAKE2b-256 checksum How to use checksums |
322e8895b12a612aec0a78888eab11f019bd7d57c04e27e0c7e96d2a13992b52
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|