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
  • FastAPI & 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 fastapi   # Create with FastAPI
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          # FastAPI (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 FastAPI 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/                  # FastAPI 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 FastAPI, 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)

# ✅ FastAPI 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.1.31.tar.gz (70.8 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.1.31-py3-none-any.whl (102.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: vega_framework-0.1.31.tar.gz
  • Upload date:
  • Size: 70.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.13 Linux/6.11.0-1018-azure

File hashes

Hashes for vega_framework-0.1.31.tar.gz
Algorithm Hash digest
SHA256 3565b21c50122a6d06f3cc9bea3557340fcb8d0bf91129ad3ae3cc3397efc299
MD5 a257869cc051a4818f58bfe5961b9ff4
BLAKE2b-256 369a566524b0466f2fc9d733791dc09c29c78d0957a4e7ffd5a0c0327ce033b2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: vega_framework-0.1.31-py3-none-any.whl
  • Upload date:
  • Size: 102.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.13 Linux/6.11.0-1018-azure

File hashes

Hashes for vega_framework-0.1.31-py3-none-any.whl
Algorithm Hash digest
SHA256 217a4682dc26a7a871d14ab2ade2cedaca87e019a5490784a59477c149774b67
MD5 5a14d85dc14d6d4d81266740add37b85
BLAKE2b-256 28615e3bf667a3cadeb0d952c4417143f21f56ed951d008e0a0317d25a99edeb

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