Skip to main content

pyvel

Batteries-included Laravel-shaped DX for Python API backends on FastAPI.

Pyvel gives you an Artisan-like CLI (pyvel / artisan), convention-based project layout, and small runtime bases (AppError, register, events). It is backend/API only — no Blade, Vite, or frontend stack.

Long-term plans: see the workspace roadmap/.


Install

uv add pyvel-fastapi
# or
pip install pyvel-fastapi

The import and CLI stay pyvel:

from pyvel import AppError, register

Quick start

uvx --from pyvel-fastapi pyvel init myapp
cd myapp
uv sync
uv run dev

Scaffold into the current directory:

mkdir myapp && cd myapp
uvx --from pyvel-fastapi pyvel init

Monorepo / unpublished local checkout:

uv run pyvel init myapp --pyvel-path /path/to/packages/pyvel

Stable CLI (0.1)

Entry points: pyvel, artisan (alias), and dev.

Command Purpose
pyvel init [name] Scaffold a new API app (--force, --pyvel-path)
pyvel make:exc Exception + HTTP handler
pyvel make:req / make:res Request / response models
pyvel make:middleware Middleware class
pyvel make:router APIRouter module
pyvel make:service Service class
pyvel make:dependency FastAPI dependency
pyvel make:schema / make:enum / make:config Schema, enum, settings
pyvel make:event / make:listener / make:job Events, listeners, jobs
pyvel make:test Pytest stub
pyvel make:resource Router + requests + response + service
pyvel list:routes List registered FastAPI routes
dev Run uvicorn using pyvel.toml [dev]

Stable public API (0.1)

Supported imports for application code:

from pyvel import AppError, EventDispatcher, dispatcher, register

# optional
import pyvel
print(pyvel.__version__)
Symbol Role
AppError Base application error (override via [bases].error)
register(app) Auto-register handlers, middleware, routers, listeners
dispatcher / EventDispatcher In-process events

Everything else under pyvel.* (templates, generate, make, config internals, …) is private and may change without notice.

See also API.md.


Config (pyvel.toml, optional)

All keys optional. Defaults:

app = "myapp"       # required in practice — set by `init`
src = "src"

[dev]
module = "myapp.main:app"   # default: "{app}.main:app"
host = "0.0.0.0"
port = 8000
reload = true

[paths]
errors = "http/exception/errors"
handlers = "http/exception/handlers"
requests = "http/requests"
responses = "http/responses"
middleware = "http/middleware"
routers = "http/routers"
dependencies = "http/dependencies"
services = "services"
schemas = "schemas"
enums = "domain/enums"
config = "config"
events = "events"
listeners = "listeners"
jobs = "jobs"
tests = "tests"             # relative to project root

[bases]
error = "pyvel.errors:AppError"

Fallback: [tool.pyvel] app = "..." in pyproject.toml.


Out of scope (for now)

  • Laravel-like routes.py + Route DSL / controllers — Phase 1
  • Database / migrations — Phase 2 (pyvel-db)
  • Auth / policies — Phase 3 (pyvel-auth)
  • Queues, cache, mail — Phase 4+
  • Frontend scaffolding — never (API-only)

Publish (maintainers)

From the package directory, build into a local dist/ then publish (workspace root builds go to the repo dist/ by default):

cd packages/pyvel
uv build --out-dir dist
uv publish
# Uploads as distribution name: pyvel-fastapi
# or TestPyPI:
# uv publish --publish-url https://test.pypi.org/legacy/

From the workspace root (if artifacts are already in ./dist):

uv publish dist/pyvel_fastapi-* dist/pyvel-fastapi-*

Until published, verify locally from a wheel:

uvx --from ./dist/pyvel_fastapi-0.1.0-py3-none-any.whl pyvel init /tmp/demoapp
# (wheel filename uses underscores; project name uses hyphens)

Roadmap

Workspace plans: roadmap/README.md. Phase 0 complete; next is Phase 1 (Artisan routing).

Release files for pyvel-fastapi 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyvel-fastapi 0.1.0
File Size Uploaded
pyvel_fastapi-0.1.0.tar.gz 13.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyvel-fastapi 0.1.0
File Interpreter ABI Platform
pyvel_fastapi-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 31.5 kB

Release files / pyvel_fastapi-0.1.0.tar.gz

Download URL pyvel_fastapi-0.1.0.tar.gz
Size 13.3 kB
Tags Source
SHA-256 checksum
How to use checksums
f8d72f332572f08bc4582fd2b1b7e3531363539ead032f8201e2d3f35be9d62e
BLAKE2b-256 checksum
How to use checksums
a4b84411b0cf5949c4014158295bbfd44bab4f9c3a84f6c6899bb55900444a8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / pyvel_fastapi-0.1.0-py3-none-any.whl

Download URL pyvel_fastapi-0.1.0-py3-none-any.whl
Size 18.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9b831b258231484209da8bffe578c1d3fb3e07852bec1ecae73c39f760cd4f07
BLAKE2b-256 checksum
How to use checksums
e06c31050bbacfbea00a4dab049f9c6f6ff42931b94f23196642ba0f12c8a744
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

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