Ferronit
Высокопроизводительный Python ASGI-фреймворк с ядром на Rust. Маршрутизация, разбор запроса, JSON, gzip и CORS работают в нативном коде; ваши хендлеры — обычный Python.
Документация: docs/ — быстрый старт, роутинг, запросы,
инъекция, слой данных (три варианта), DDD/DI, Rust-ядро, бенчмарки, ASVS.
Установка
pip install ferronit # ставит сразу Python-слой и нативное ядро (ferronit._core + ferronit.db)
Ferronit — один пакет, собранный maturin-ом как
mixed-проект. Ядро (ferronit._core) собирается с фичей abi3-py312 — один wheel
работает на всех CPython от 3.12 до 3.14+. Внешних runtime-зависимостей нет.
# app.py
from ferronit import Ferronit
app = Ferronit()
@app.route("/hello/{name}")
async def hello(name: str):
return {"hello": name}
ferronit dev # dev-сервер (uvicorn, reload)
ferronit dev --server granian # granian (Rust, ~4× быстрее)
ferronit run --workers 4 # прод: granian, fallback uvicorn
Почему быстро
Маршрутизация — Rust matchit, фактически O(1): Ferronit не деградирует с ростом
числа маршрутов, FastAPI теряет до 4× внутри одной таблицы. Методика — только
ab (C-клиент); полный разбор — docs/benchmarks.md.
| Сценарий | Ferronit | FastAPI | Разрыв |
|---|---|---|---|
| uvicorn, 1000 маршрутов | 20 216 req/s | 2 817 req/s | ×7.2 |
| granian, 1000 маршрутов | 94 873 req/s | 3 416 req/s | ×27.8 |
Слой данных
Три варианта под разные задачи — от «запрос → JSON целиком в Rust» до
полноценного ORM. Какой выбрать: docs/data/overview.md.
Разработка
poetry install --all-extras # окружение в .venv + все зависимости
PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 poetry run maturin develop --release # Rust-ядро
./scripts/check.sh # линт → типы → докстринги → сборка ядра → тесты
poetry run pytest tests/ -q # 263 теста
Окружение ведёт Poetry (poetry.toml — venv внутри проекта), wheel с Rust-ядром собирает
maturin (см. [tool.maturin] в pyproject.toml), поэтому сам проект Poetry не ставит.
- AGENTS.md — инструкция для код-агентов (Claude Code, Codex, Cursor, ...).
examples/— minimal, DI, LLM + SSE, RAG, WebSocket;examples/app.py— DDD-пример.- Пакет помечен
py.typed; для Rust-ядра лежитferronit/_core.pyi. bench/— измерительный стенд (все цифры выше), не входит в пакет.
Релиз
# версия правится в двух файлах: ferronit/__init__.py и ferronit-rs/Cargo.toml
git tag -a v0.8.2 -m "Ferronit 0.8.2" && git push origin v0.8.2
Тег v* запускает .github/workflows/release.yml: проверки и тесты → колёса (Linux glibc/musl,
macOS, Windows) и sdist → GitHub Release с артефактами → публикация на PyPI (Trusted Publishing).
Если версия тега не совпадает с Cargo.toml/__init__.py, workflow падает до публикации.
Docker
docker build -t ferronit:0.9.0 .
docker run --rm -p 8000:8000 ferronit:0.9.0
Лицензия
Apache License 2.0 — см. LICENSE. Использование, изменение и распространение разрешены, включая коммерческое; сохраняются уведомления об авторстве и патентная оговорка.
Metadata
Release files for ferronit 0.9.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ferronit-0.9.0.tar.gz | 81.9 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| ferronit-0.9.0-cp312-abi3-win_amd64.whl | CPython 3.12 | abi3 | Windows x86-64 | Details |
| ferronit-0.9.0-cp312-abi3-musllinux_1_2_x86_64.whl | CPython 3.12 | abi3 | Linux musl 1.2+ x86-64 | Details |
| ferronit-0.9.0-cp312-abi3-manylinux_2_28_x86_64.whl | CPython 3.12 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| ferronit-0.9.0-cp312-abi3-manylinux_2_28_aarch64.whl | CPython 3.12 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| ferronit-0.9.0-cp312-abi3-macosx_11_0_arm64.whl | CPython 3.12 | abi3 | macOS 11.0+ ARM64 | Details |
| ferronit-0.9.0-cp312-abi3-macosx_10_12_x86_64.whl | CPython 3.12 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 11.1 MB
Release files / ferronit-0.9.0.tar.gz
| Download URL | ferronit-0.9.0.tar.gz |
|---|---|
| Size | 81.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a07fc834fcd9164f488ca26474857abc20ed123ba8e5bc62d7cde1a5d20ec2da
|
|
BLAKE2b-256 checksum How to use checksums |
d7e537656554fe40a3987f05ef7c98dfb41483e92e07ec34a910eccf1794a3e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / ferronit-0.9.0-cp312-abi3-win_amd64.whl
| Download URL | ferronit-0.9.0-cp312-abi3-win_amd64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.12 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
6cbf7658eadfb25812d972cb18f0d5751e0e2163cc180d6416021cb9a94b8730
|
|
BLAKE2b-256 checksum How to use checksums |
cc94f43b6557e9737e3bbb411c8efa3eed0cfba0174247c742e33f4a709b0464
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / ferronit-0.9.0-cp312-abi3-musllinux_1_2_x86_64.whl
| Download URL | ferronit-0.9.0-cp312-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
4556102cb621889cecb4d6f741a3513201a65b410a15d2558d40619597b45e2f
|
|
BLAKE2b-256 checksum How to use checksums |
499516a4e259904bca4371c6dd40352dbf41d873c47dc3e3ee2d79364d890054
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / ferronit-0.9.0-cp312-abi3-manylinux_2_28_x86_64.whl
| Download URL | ferronit-0.9.0-cp312-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
7aa971eca60fa0bb6ccd9b35011d7eb012d056e2ffb3bb15a8ab90fd022ca515
|
|
BLAKE2b-256 checksum How to use checksums |
e25ec342d7ab7bf24515cd783b69f468f2fd8143ec4a700561533457eba5a777
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / ferronit-0.9.0-cp312-abi3-manylinux_2_28_aarch64.whl
| Download URL | ferronit-0.9.0-cp312-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
f6442961c6817ec1b142c74e18117f76e1945ae1f7b07fcda00768494e3bd0a0
|
|
BLAKE2b-256 checksum How to use checksums |
a2d8ea31342ec986801a66410e73c20f55687fb482ee421b3de452a3264bb68c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / ferronit-0.9.0-cp312-abi3-macosx_11_0_arm64.whl
| Download URL | ferronit-0.9.0-cp312-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.12 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e748e56caaa53f6c295508a150576029f00081831de6dedb86bcb3235c1ec047
|
|
BLAKE2b-256 checksum How to use checksums |
4d9fd18c768871dbe27aa3c56234b791941f72a500a021e3ac99fcef5c3f15ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / ferronit-0.9.0-cp312-abi3-macosx_10_12_x86_64.whl
| Download URL | ferronit-0.9.0-cp312-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.12 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
4f82e98f28222bec5ca5b787a04ec5db2e34297acb0c307309d4b5ab4fea4c5b
|
|
BLAKE2b-256 checksum How to use checksums |
b79457d9204566e70291898ca7c76e0fd3ede3414ef28a36d64ab7a497ffb51c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|