Skip to main content

matrx-orm

Async-first PostgreSQL ORM for Python: typed models, an expressive query builder, bidirectional migrations with dependency-ordered history, schema introspection + code generation, and a mountable FastAPI admin router. Designed for applications that want ORM ergonomics without giving up raw-SQL control.

Install

pip install matrx-orm

Python 3.13+ required. Needs a PostgreSQL server (or Supabase / any Postgres-compatible backend). The only Matrx sibling it depends on is matrx-utils.

What's in the box

  • Core model layer: Model, BaseManager, BaseDTO, ModelView, model_registry, and 50+ field types (CharField, IntegerField, UUIDField, JSONField, ForeignKey, ManyToManyField, …).
  • Query layer: QueryBuilder, expressions (F, Q), window functions, CTEs, subqueries.
  • Migrations: MigrationDB, MigrationLoader, MigrationExecutor, makemigrations, migrate — migrations declare explicit dependencies and are applied in topological order. (Note: there is no multiple-head detection or merge primitive yet; parallel branches that both create the next sequence number must be reconciled by hand.)
  • Admin router (FastAPI): admin_router exposes a ready-to-mount set of read/write endpoints for every registered model.
  • API layer (optional [api] extra): APIServer, APIConfig, TokenAuth.
  • Adapters: AsyncPostgreSQLAdapter, SupabaseAdapter, PostgRESTClientAdapter.
  • Local artifact reads: read_local_sqlite_rows provides a validated, read-only projection boundary for SQLite files owned by external tools such as Chromium.
  • Signals: pre_create, post_create, pre_save, post_save, pre_delete, post_delete.
  • Schema builder (matrx_orm.schema_builder): code generation for Python + TypeScript type definitions from the live DB schema — useful for keeping a frontend's row types in sync.

Usage

Register a database project

matrx-orm supports multiple named database projects in a single process. Register each at startup, either with an explicit config or by reading env vars:

from matrx_orm import DatabaseProjectConfig, register_database, register_database_from_env

# Explicit config
register_database(DatabaseProjectConfig(
    name="main",
    host="localhost", port=5432,
    database="myapp", user="postgres", password="…",
    default_schema="public",
))

# Or env-driven with a custom prefix
register_database_from_env(name="analytics", env_prefix="ANALYTICS_DB_")

Declare a model and query

from matrx_orm import Model, CharField, UUIDField, TimestampField, DateTimeField

class User(Model):
    class Meta:
        table = "users"
        database = "main"

    id = UUIDField(primary_key=True)
    email = CharField(max_length=320, unique=True)
    display_name = CharField(max_length=120)
    created_at = DateTimeField(auto_now_add=True)

# Querying
user = await User.objects.get(email="alice@example.com")
active = await User.objects.filter(display_name__startswith="A").order_by("-created_at").all()

Migrations

# Generate migrations from the current model definitions
python -m matrx_orm.migrations.cli makemigrations

# Apply pending migrations
python -m matrx_orm.migrations.cli migrate

The migration system tracks which branch a migration originated on and refuses to let two branches create a conflicting sequence.

Mount the admin router

Rows with composite primary keys expose an opaque __matrx_row_id in list responses and a matching virtual primary-key column descriptor. Pass that value unchanged to row-detail, update, delete, and cache-eviction routes; the router decodes it into the complete composite key. This also gives generated read-only views collision-safe row navigation.

Generated views default to id only when they project it. Every other view must declare bounded, unique columns in generate[].output.view_primary_keys; generation fails instead of guessing a first column or embedding an unbounded projected row in an identifier.

from fastapi import FastAPI
from matrx_orm import admin_router

app = FastAPI()
app.include_router(admin_router, prefix="/admin")

Instantly exposes list/get/create/update/delete endpoints for every registered model. Wrap it in your app's auth middleware.

Standalone-friendliness

No hidden env-var reads outside config.py and the schema-builder CLI. All env-var access goes through register_database_from_env, which accepts a env_prefix and an env_var_overrides map. You can run matrx-orm with zero environment variables — just build a DatabaseProjectConfig yourself and call register_database.

Contributing

See CLAUDE.md for package-specific rules. MODEL_API.md documents the full Model/QueryBuilder API. This package lives in the aidream monorepo at github.com/AI-Matrix-Engine/aidream-current.

License

MIT.

Metadata

Release files for matrx-orm 3.1.207

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for matrx-orm 3.1.207
File Size Uploaded
matrx_orm-3.1.207.tar.gz 1.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for matrx-orm 3.1.207
File Interpreter ABI Platform
matrx_orm-3.1.207-py3-none-any.whl Python 3 none any Details

Total release size: 2.0 MB

Release files / matrx_orm-3.1.207.tar.gz

Download URL matrx_orm-3.1.207.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
a26f55417e9b922bb02b7a455c682534bb28801d2748eeb6e8fe48999d157343
BLAKE2b-256 checksum
How to use checksums
4dd9d5543bbff7d900ef1971c69b2d22fee0f21a923b67f6a4513acd0eaa730a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release files / matrx_orm-3.1.207-py3-none-any.whl

Download URL matrx_orm-3.1.207-py3-none-any.whl
Size 866.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
44ba83f1ac5f36731903c87fb2b99874e7f0a900b7d669cad96eacb2ecc1a47e
BLAKE2b-256 checksum
How to use checksums
51c97db67136841de6421bf5f10b7b38fe60382fdcc811ed595da5897d5d1dfe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.1.207 This release

2 release files

3.1.99

2 release files

3.1.98

2 release files

3.1.97

2 release files

3.1.96

2 release files

3.1.95

2 release files

3.1.94

2 release files

3.1.93

2 release files

3.1.92

2 release files

3.1.91

2 release files

3.1.90

2 release files

3.1.89

2 release files

3.1.88

2 release files

3.1.87

2 release files

3.1.86

2 release files

3.1.85

2 release files

3.1.84

2 release files

3.1.83

2 release files

3.1.82

2 release files

3.1.81

2 release files

3.1.80

2 release files

3.1.79

2 release files

3.1.78

2 release files

3.1.77

2 release files

3.1.76

2 release files

3.1.75

2 release files

3.1.74

2 release files

3.1.73

2 release files

3.1.72

2 release files

3.1.71

2 release files

3.1.70

2 release files

3.1.69

2 release files

3.1.68

2 release files

3.1.67

2 release files

3.1.66

2 release files

3.1.65

2 release files

3.1.64

2 release files

3.1.63

2 release files

3.1.62

2 release files

3.1.61

2 release files

3.1.60

2 release files

3.1.59

2 release files

3.1.58

2 release files

3.1.57

2 release files

3.1.56

2 release files

3.1.55

2 release files

3.1.54

2 release files

3.1.53

2 release files

3.1.52

2 release files

3.1.51

2 release files

3.1.45

2 release files

3.1.44

2 release files

3.1.43

2 release files

3.1.42

2 release files

3.1.41

2 release files

3.1.40

2 release files

3.1.39

2 release files

3.1.38

2 release files

3.1.37

2 release files

3.1.36

2 release files

3.1.35

2 release files

3.1.34

2 release files

3.1.33

2 release files

3.1.32

2 release files

3.1.31

2 release files

3.1.30

2 release files

3.1.29

2 release files

3.1.28

2 release files

3.1.27

2 release files

3.1.26

2 release files

3.1.25

2 release files

3.1.24

2 release files

3.1.23

2 release files

3.1.22

2 release files

3.1.21

2 release files

3.1.20

2 release files

3.1.19

2 release files

3.1.18

2 release files

3.1.17

2 release files

3.1.16

2 release files

3.1.15

2 release files

3.1.14

2 release files

3.1.13

2 release files

3.1.12

2 release files

3.1.11

2 release files

3.1.10

2 release files

3.1.9

2 release files

3.1.8

2 release files

3.1.7

2 release files

3.1.6

2 release files

3.1.5

2 release files

3.1.4

2 release files

3.1.3

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

3.0.32

2 release files

3.0.31

2 release files

3.0.30

2 release files

3.0.29

2 release files

3.0.28

2 release files

3.0.27

2 release files

3.0.26

2 release files

3.0.25

2 release files

3.0.24

2 release files

3.0.23

2 release files

3.0.22

2 release files

3.0.21

2 release files

3.0.20

2 release files

3.0.19

2 release files

3.0.17

2 release files

3.0.16

2 release files

3.0.15

2 release files

3.0.9

2 release files

3.0.7

2 release files

3.0.5

2 release files

3.0.3

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.0.35

2 release files

2.0.34

2 release files

2.0.33

2 release files

2.0.32

2 release files

2.0.31

2 release files

2.0.30

2 release files

2.0.29

2 release files

2.0.28

2 release files

2.0.27

2 release files

2.0.26

2 release files

2.0.25

2 release files

2.0.24

2 release files

2.0.23

2 release files

2.0.22

2 release files

2.0.21

2 release files

2.0.20

2 release files

2.0.19

2 release files

2.0.18

2 release files

2.0.17

2 release files

2.0.16

2 release files

2.0.15

2 release files

2.0.14

2 release files

2.0.13

2 release files

2.0.12

2 release files

2.0.11

2 release files

2.0.10

2 release files

2.0.9

2 release files

2.0.8

2 release files

2.0.7

2 release files

2.0.6

2 release files

2.0.5

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.9.0

2 release files

1.8.0

2 release files

1.7.0

2 release files

1.6.4

2 release files

1.6.3

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.4

2 release files

1.5.3

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.7

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.5

2 release files

1.0.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page