Skip to main content

Enterprise-ready Python framework that enforces Clean Architecture for building maintainable and scalable applications.

Project description

Vega Framework

An enterprise-ready Python framework that enforces Clean Architecture for building maintainable and scalable applications.

Why Vega?

Traditional Python frameworks show you how to build but don't enforce how to architect. Vega provides:

  • Clean Architecture - Enforced separation of concerns
  • Dependency Injection - Zero boilerplate, type-safe DI
  • Business Logic First - Pure, testable, framework-independent
  • CLI Scaffolding - Generate entire projects and components
  • Async Support - Full async/await for CLI and web
  • Vega Web (Starlette) & SQLAlchemy - Built-in integrations when needed

Read the Philosophy → to understand why architecture matters.

Quick Start

Installation

pip install vega-framework

Create Your First Project

# Create project
vega init my-app
cd my-app

# Install dependencies
poetry install

# Generate components
vega generate entity User
vega generate repository UserRepository --impl memory
vega generate interactor CreateUser

# Run your app
poetry run python main.py

Your First Use Case

# domain/interactors/create_user.py
from vega.patterns import Interactor
from vega.di import bind

class CreateUser(Interactor[User]):
    def __init__(self, name: str, email: str):
        self.name = name
        self.email = email

    @bind
    async def call(self, repository: UserRepository) -> User:
        # Pure business logic - no framework code!
        user = User(name=self.name, email=self.email)
        return await repository.save(user)

# Usage - clean and simple
user = await CreateUser(name="John", email="john@example.com")

See Full Quick Start →

Key Concepts

Clean Architecture Layers

┌─────────────────────────────────────┐
│      Presentation (CLI, Web)        │  User interfaces
├─────────────────────────────────────┤
│      Application (Workflows)        │  Multi-step operations
├─────────────────────────────────────┤
│      Domain (Business Logic)        │  Core business rules
├─────────────────────────────────────┤
│      Infrastructure (Technical)     │  Databases, APIs
└─────────────────────────────────────┘

Learn Clean Architecture →

Core Patterns

Dependency Injection

# Define what you need (domain)
class UserRepository(Repository[User]):
    async def save(self, user: User) -> User:
        pass

# Implement how it works (infrastructure)
@injectable(scope=Scope.SINGLETON)
class PostgresUserRepository(UserRepository):
    async def save(self, user: User) -> User:
        # PostgreSQL implementation
        pass

# Wire it together (config)
container = Container({
    UserRepository: PostgresUserRepository
})

Learn Dependency Injection →

CLI Commands

Project Management

vega init my-app                      # Create new project
vega init my-api --template web       # Create with Vega Web
vega doctor                           # Validate architecture
vega update                           # Update framework

Code Generation

# Domain layer
vega generate entity Product
vega generate repository ProductRepository --impl sql
vega generate interactor CreateProduct

# Application layer
vega generate mediator CheckoutWorkflow

# Presentation layer
vega generate router Product          # Vega Web (requires: vega add web)
vega generate command create-product  # CLI

# Infrastructure
vega generate model Product           # SQLAlchemy (requires: vega add db)

Add Features

vega add web         # Add Vega Web support
vega add sqlalchemy  # Add database support

Database Migrations

vega migrate init                    # Initialize database
vega migrate create -m "add users"   # Create migration
vega migrate upgrade                 # Apply migrations
vega migrate downgrade              # Rollback

See All CLI Commands →

Event System

Built-in event-driven architecture support:

from vega.events import Event, subscribe

# Define event
@dataclass(frozen=True)
class UserCreated(Event):
    user_id: str
    email: str

# Subscribe to event
@subscribe(UserCreated)
async def send_welcome_email(event: UserCreated):
    await email_service.send(event.email, "Welcome!")

# Publish event
await UserCreated(user_id="123", email="test@test.com").publish()

Learn Event System →

Documentation

Getting Started

Core Concepts

Guides

Reference

Browse All Documentation →

Perfect For

  • E-commerce platforms
  • Financial systems
  • Enterprise SaaS applications
  • AI/RAG applications
  • Complex workflow systems
  • Multi-tenant applications
  • Any project requiring clean architecture

Example Project

my-app/
├── domain/                    # Business logic
│   ├── entities/             # Business objects
│   ├── repositories/         # Data interfaces
│   ├── services/             # External service interfaces
│   └── interactors/          # Use cases
├── application/              # Workflows
│   └── mediators/            # Complex orchestrations
├── infrastructure/           # Implementations
│   ├── repositories/         # Database code
│   └── services/             # API integrations
├── presentation/             # User interfaces
│   ├── cli/                  # CLI commands
│   └── web/                  # Vega Web routes
├── config.py                 # Dependency injection
├── settings.py               # Configuration
└── main.py                   # Entry point

Why Clean Architecture?

Without Vega:

# ❌ Business logic mixed with framework code
@app.post("/orders")
async def create_order(request: Request):
    data = await request.json()
    order = OrderModel(**data)  # SQLAlchemy
    session.add(order)
    stripe.Charge.create(...)   # Stripe
    return {"id": order.id}

Problems:

  • Can't test without the web framework, database, and Stripe
  • Can't reuse for CLI or other interfaces
  • Business rules are unclear
  • Tightly coupled to specific technologies

With Vega:

# ✅ Pure business logic (Domain)
class PlaceOrder(Interactor[Order]):
    @bind
    async def call(
        self,
        order_repo: OrderRepository,
        payment_service: PaymentService
    ) -> Order:
        # Pure business logic - testable, reusable
        order = Order(...)
        await payment_service.charge(...)
        return await order_repo.save(order)

# ✅ Vega Web route (Presentation) - just wiring
@router.post("/orders")
async def create_order_api(request: CreateOrderRequest):
    return await PlaceOrder(...)

# ✅ CLI command (Presentation) - same logic
@click.command()
async def create_order_cli(...):
    return await PlaceOrder(...)

Benefits:

  • ✅ Test business logic without any infrastructure
  • ✅ Same logic works for Web, CLI, GraphQL, etc.
  • ✅ Swap databases without changing business code
  • ✅ Clear business rules and operations

Community & Support

Contributing

Contributions are welcome! This framework is extracted from production code and battle-tested in real-world applications.

License

MIT License - see LICENSE for details.


Built with ❤️ for developers who care about architecture.

Get Started → | Read Philosophy → | View Documentation →

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

vega_framework-0.2.12.tar.gz (92.2 kB view details)

Uploaded Source

Built Distribution

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

vega_framework-0.2.12-py3-none-any.whl (131.3 kB view details)

Uploaded Python 3

File details

Details for the file vega_framework-0.2.12.tar.gz.

File metadata

  • Download URL: vega_framework-0.2.12.tar.gz
  • Upload date:
  • Size: 92.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.14 Linux/6.14.0-1012-azure

File hashes

Hashes for vega_framework-0.2.12.tar.gz
Algorithm Hash digest
SHA256 bdb79ef3476d65a538d7d8d7afd1f1df474ebc0f7d7c1012b8414f04d28ea359
MD5 dcf92d360a4da19827931440ef709f64
BLAKE2b-256 218bcac823b389e1d177d0bdc73ab5951b11df43607a452ba9e404cf4a0b0b53

See more details on using hashes here.

File details

Details for the file vega_framework-0.2.12-py3-none-any.whl.

File metadata

  • Download URL: vega_framework-0.2.12-py3-none-any.whl
  • Upload date:
  • Size: 131.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.14 Linux/6.14.0-1012-azure

File hashes

Hashes for vega_framework-0.2.12-py3-none-any.whl
Algorithm Hash digest
SHA256 aaa77a79b6e700b900092c0eacb1d1eff1215ad82c563d8c86146a79a937ec28
MD5 ed0adfff523ae7a6948c30fb162c668d
BLAKE2b-256 3dd198610aafd1fc6da8b0c8ccba98939b5b3da2c10de2e5c677269c2484f53d

See more details on using hashes here.

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