Skip to main content

The Laravel of Python — FastAPI + Pydantic + SQLAlchemy, end-to-end type-safe.

Project description

arvel

PyPI MIT License

The Laravel of Python — built natively on FastAPI + Pydantic + SQLAlchemy, end-to-end type-safe.

Status: Pre-alpha. The public API can still change before 1.0.

Arvel is a batteries-included application framework for async Python. It layers a service container, typed configuration, an Eloquent-style ORM (Arvent), an HTTP stack (routing, form requests, API resources, middleware), cache, sessions, storage, queues, events, broadcasting, mail, notifications, scheduling, and auth on top of the standard async stack — without replacing FastAPI, Pydantic, or SQLAlchemy.

Full documentation lives at arvel.dev.

Install

pip install arvel
# with extras:
pip install 'arvel[postgres,redis,queue]'

Arvel requires Python 3.14+.

Hello, Arvel

The framework boots through an Application. You register configuration and service providers, then resolve services from the container:

from pathlib import Path

from arvel import Application, ServiceProvider
from arvel.config import ArvelSettings


class AppSettings(ArvelSettings):
    name: str = "MyApp"
    debug: bool = False


class Greeter:
    def __init__(self, settings: AppSettings) -> None:
        self.settings = settings

    def greet(self, who: str) -> str:
        prefix = "DEBUG: " if self.settings.debug else ""
        return f"{prefix}Hello from {self.settings.name}, {who}!"


class GreeterProvider(ServiceProvider):
    def register(self) -> None:
        self.app.container.singleton(Greeter)


async def main() -> None:
    app = (
        Application.configure(Path("."))
        .with_environment("production")
        .with_config_files([AppSettings])
        .with_providers([GreeterProvider])
        .create()
    )
    await app.boot()

    greeter = app.container.make(Greeter)
    print(greeter.greet("Arvel"))

    await app.shutdown()

In a generated project you don't write this by hand — arvel new scaffolds bootstrap/app.py and bootstrap/providers.py, and arvel serve runs the ASGI app for you.

What's inside

Area Highlights
Container & providers Constructor injection, singletons, contextual bindings, dep() for FastAPI Depends
Config ArvelSettings (pydantic-settings), @register, Config.of(...), the config() helper
HTTP Route decorators, FormRequest validation, JsonResource/ResourceCollection, middleware
Arvent ORM Model, typed relations, soft deletes, scopes, attribute casts, a schema DSL → Alembic
Auth JWT / session / token guards, Gate and policies, password resets, email verification
Queues Job, the Bus facade, retries with backoff, dead-letter queue, graceful workers
Events Typed Event models, inline and ShouldQueue listeners, the Event facade
Mail & notifications Mailables (envelope/content), SMTP/log/array drivers, multi-channel notifications
Cache / session / storage Pluggable drivers behind Cache, Session, and Storage facades
Scheduling & broadcasting Cron-style scheduler, Reverb-compatible WebSocket server

CLI

Installing the package puts the arvel binary on your PATH. A few common commands:

arvel new my-app           # scaffold a project
arvel serve --reload       # run the ASGI dev server
arvel make:model Post -m   # generate a model + migration
arvel migrate              # run pending migrations
arvel queue:work           # process queued jobs
arvel schedule:work        # run the scheduler
arvel route:list           # inspect registered routes
arvel about                # show framework + environment info

Run arvel --help for the full list.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

arvel-0.8.0.tar.gz (851.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

arvel-0.8.0-py3-none-any.whl (622.7 kB view details)

Uploaded Python 3

File details

Details for the file arvel-0.8.0.tar.gz.

File metadata

  • Download URL: arvel-0.8.0.tar.gz
  • Upload date:
  • Size: 851.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for arvel-0.8.0.tar.gz
Algorithm Hash digest
SHA256 f5a5ca8b7df6021751ccf6adf22d4b149dde211d0adcda138f150de147e1b272
MD5 accfa01c2c8a3a9084705f0266d9b81e
BLAKE2b-256 9c63761ff0970c6951d4621e2f4eeb08881ee5524b464e74a4c061d10df02623

See more details on using hashes here.

Provenance

The following attestation bundles were made for arvel-0.8.0.tar.gz:

Publisher: publish.yml on mohamed-rekiba/arvel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arvel-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: arvel-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 622.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for arvel-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 36a99360b97f06f74c203f0b16c0db57becc809b34590864e049ef414e9b0c49
MD5 d09e048e62808316e6a8accf1fc63f52
BLAKE2b-256 5fdd8fa5f7c1020706e9d7c09d6dfe3e525ce6b412b8efbb41fffdd25c4ada0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for arvel-0.8.0-py3-none-any.whl:

Publisher: publish.yml on mohamed-rekiba/arvel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page