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.10.3.tar.gz (49.3 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.10.3-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for framework_m-0.10.3.tar.gz
Algorithm Hash digest
SHA256 d2ea3c7b22908082ebe1250034ad077a0bbb51a30771a4883c66038ae23a7183
MD5 3eff2093c1026e5e78998cf51fa3c7d9
BLAKE2b-256 8600d05704c6e533eb26c05be221f5e761175b12440630f2c8e268d19fa6b769

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for framework_m-0.10.3-py3-none-any.whl
Algorithm Hash digest
SHA256 929b6d6a02bc1fed59a63561661a798c16343b90cb346cfc7cfbddae80b2f8d6
MD5 e9688d3078ca40540d992580587c2129
BLAKE2b-256 f1c561b82cd3d52b1d0ee8c46016658a6aec6b957f6c93fb26968046d6d085eb

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