Skip to main content

A modular, metadata-driven business application framework

Project description

Framework M

The complete metadata-driven business application framework for Python 3.12+.

Official Website: frameworkm.dev

Python 3.12+ PyPI version GitLab Pipeline Status License Code style: ruff Type checked: mypy TestPyPI

📦 Metapackage: This is the primary Framework M package. Installing it gives you everything required to build applications. For individual components, see the Related Packages section.

Overview

Framework M is inspired by Frappe Framework but built with modern Python practices:

  • Hexagonal Architecture: Clean separation via Ports & Adapters
  • Async-First: Native asyncio with Litestar and SQLAlchemy
  • Type-Safe: 100% type hints, mypy strict compatible
  • Stateless: JWT/Token auth, no server-side sessions
  • Metadata-Driven: Define DocTypes as Pydantic models

Installation

pip install framework-m

Or with uv:

uv add framework-m

Quick Start

1. Define a DocType

from framework_m import DocType, Field

class Todo(DocType):
    """A simple task document."""

    title: str = Field(description="Task title")
    description: str | None = Field(default=None, description="Task details")
    is_completed: bool = Field(default=False, description="Completion status")
    priority: int = Field(default=1, ge=1, le=5, description="Priority (1-5)")

2. Use the CLI

# Show version
m --version

# Show framework info
m info

# Start production server
m prod

# Start development server
m dev

Architecture & Features

Framework M follows a strict Ports & Adapters (Hexagonal) architecture. The core domain logic is isolated from infrastructure concerns.

  • Primary Adapters: HTTP API (Litestar), CLI, WebSockets, Job Workers.
  • Core Domain: DocTypes, Controllers, and Business Logic.
  • Ports (Interfaces): Defined protocols for Repositories, Events, Storage, etc.
  • Secondary Adapters: Implementations for PostgreSQL, Redis, S3, etc.

Key Capabilities:

  • Automatic CRUD operations (RepositoryProtocol)
  • Event-driven architecture (EventBusProtocol)
  • Row-level security & permissions (PermissionProtocol)
  • Background jobs (JobQueueProtocol)
  • File storage abstraction (StorageProtocol)

Technology Stack

Development

# Clone and setup
git clone https://gitlab.com/castlecraft/framework-m.git
cd framework-m

# Install dependencies
uv sync --all-packages --all-extras --all-groups

# Run tests
uv run pytest

# Type checking
uv run mypy src/framework_m --strict

# Linting
uv run ruff check .
uv run ruff format .

Documentation

Related Packages

Framework M is split into modular packages:

Package Description
framework-m This package - Metapackage with CLI, kernel, and re-exports
framework-m-core Core protocols and dependency injection
framework-m-standard Default adapters (SQLAlchemy, Redis, Litestar)
framework-m-studio Visual DocType builder UI

License

Apache 2.0 License - see LICENSE for details.

Acknowledgments

Inspired by Frappe Framework, reimagined with:

  • Modern Python (3.12+, async/await, type hints)
  • Clean architecture (Hexagonal/Ports & Adapters)
  • No global state (Dependency Injection)
  • Code-first schemas (Pydantic, not database JSON)

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

framework_m-0.6.1.tar.gz (41.6 kB view details)

Uploaded Source

Built Distribution

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

framework_m-0.6.1-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file framework_m-0.6.1.tar.gz.

File metadata

  • Download URL: framework_m-0.6.1.tar.gz
  • Upload date:
  • Size: 41.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for framework_m-0.6.1.tar.gz
Algorithm Hash digest
SHA256 0d3b767be0cc52997c6eecce791ac1e56239061263f6f9985d4aae87aca329ae
MD5 d9c80e6105b385658d860daefc2ae1e5
BLAKE2b-256 36b5756a65e17ffcdce43656a89b025f1a581ff7018dbb2a7d869be0d8b5cbff

See more details on using hashes here.

File details

Details for the file framework_m-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: framework_m-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 4.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for framework_m-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 52647036f19707adcaea9348c928c1bc228f6e1a11646667536b104702850a42
MD5 77e5edee746796c396a2c3b3156a0c85
BLAKE2b-256 551d23f74e0a2ff46f834bdc091b3411f15ce0960a651a3030ef964a43170440

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