MonOrm
An async ORM for Python and TypeScript with one Rust core. You write the schema once in Prisma syntax. The Rust core plans the SQL and runs it on PostgreSQL or SQLite. Both languages get the same queries, the same migrations and generated, typed models.
Under active development. It works today, and the author runs it in production. It is version 0.1.1: install it with
pip install monormornpm install monorm@npm:@ufstack/monorm. The npm package is@ufstack/monormfor now; always install it under the aliasmonorm, because the code importsmonorm. Other people should not use it in production yet, or do so at their own risk. Evaluate it against your own app before you rely on it.
About 1.97× faster end to end than Django (async), up to 3.55×. Source: the geometric mean of 20 cases in one run on one machine, with the database round trip included (results). Method, limits and the cases where it is not faster: Benchmarks.
The name is MonOrm.
Example
The schema (the same in both languages):
model User {
id Int @id @default(autoincrement())
name String
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
published Boolean
author_id Int
author User @relation(fields: [author_id], references: [id])
}
Python:
users = await User.objects.filter(User.posts.published).load(User.posts)
TypeScript:
const users = await User.objects.filter(User.posts.published).load(User.posts);
Both examples run as they are: examples/quickstart (in-memory SQLite).
Why
One ORM for every language
You want to move your web server to another language, but you do not want to learn a new data stack. Many libraries already work this way: one Rust core with a package for each language, for example OpenDAL for file storage. MonOrm does the same for the database layer. The schema, the migrations, the query API and the behavior are the same in Python and TypeScript, because one Rust engine does the work for both. A team can keep one schema when it adds a second service in another language, or when it moves from one language to the other.
The Rust core is not tied to Python and TypeScript. Any language that can call native code can get a MonOrm package with the same schema, migrations and query API. Contributors can add a language: see language-bindings.md.
| Language | Status | Bridge |
|---|---|---|
| Python | Shipped (PyPI monorm) |
PyO3 (languages/python/native) |
| TypeScript (Node, Bun) | Shipped (npm @ufstack/monorm) |
napi (languages/js/native) |
| Rust | In the repo, not published (monorm-client has publish = false) |
Direct use of monorm-engine, no bridge |
| Go | Open for contributors | A C ABI library |
| PHP | Open for contributors | A PHP extension (for example with the ext-php-rs crate) |
| Java | Open for contributors | JNI (for example with the jni crate) |
All of SQL, in the ORM
An ORM should not stop you from doing what SQL can do. With MonOrm you write less raw SQL and install fewer separate packages. These come with the ORM:
- Queries: window functions, CTEs (also recursive), subqueries and
EXISTS, aggregates over relations, full-text search, JSON and array columns, cursor pagination. - Writes: upsert (
ON CONFLICT), bulk insert, bulk update, update and delete withRETURNING. - Schema: check and exclusion constraints, partial and non-btree indexes, triggers and SQL functions, declarative partitions, all with migrations.
- Operations: row and advisory locks, read replicas, tenants with row-level security, N+1 detection, query hooks and OpenTelemetry.
- Raw SQL is still there when you need it.
Some features are PostgreSQL only; schema.md lists the SQLite limits.
Django packages, built in
In Django, many of these features come from separate packages. In MonOrm they are part of the ORM or a built-in extension:
| In Django | In MonOrm |
|---|---|
| django-pgtrigger | @@trigger and function blocks in the schema (docs) |
| django-safedelete | the soft-delete extension (docs) |
| django-cte | WITH and recursive CTEs (docs) |
| django-postgres-extra (partitions, upsert) | @@partition and on_conflict (partitions) |
| django-concurrency | the optimistic-locking extension (docs) |
django-model-utils (TimeStampedModel) |
the updated_at extension (docs) |
| django-storages | the file-storage extension, on OpenDAL (docs) |
| nplusone | monorm.debug (docs) |
Familiar design
- The schema language is Prisma's. One
schema.prismafile, with the editor tooling that already exists (docs). - The model API is Django-style.
Model.objects,filter(),load()and migrations that come from the schema. - Typed expressions in the style of SQLAlchemy, and generated typed models (docs).
Inspired by
Thank you to the projects below. We claim only what we took from each.
- Robyn: a Python surface with the hot path in Rust through PyO3. We use the same split for the database layer.
- Prisma: the schema-first idea and the
schema.prismalanguage. MonOrm is independent of Prisma (details). It is not a drop-in replacement for Prisma Client, and its query API is its own. - Django: the model API (
Model.objects, querysets) and migrations from the schema (monorm makemigrations,monorm migrate, see schema.md).
Quickstart
There is one package for each registry:
pip install monorm # the engine, every built-in extension and the auth app; `python -m monorm generate`
npm install monorm@npm:@ufstack/monorm # the same for Node and Bun (the alias is required); `npx monorm generate`
The monorm command line comes with the Python and npm packages.
Both packages hold PostgreSQL and SQLite. They build for 4 platforms: Linux x86-64, Linux arm64, macOS arm64 and Windows x86-64.
An extension that is not built in is a separate package that you install next to monorm (optional-packaging.md).
To build from source:
uv venv .venv && . .venv/bin/activate
uv pip install maturin
python languages/python/packaging/stage.py # the extension libraries of this platform
maturin develop # the one monorm package
python examples/quickstart/quickstart.py # Python 3.11 or later
cd languages/js && npm install && npm run assemble
cd ../../examples/quickstart && npm install && node quickstart.ts # Node 23.6 or later
Upgrade from the split packages
Before v0.1.0 the project had a thin monorm package, a native package for each profile and one package for each extension.
Remove them, then install monorm:
pip uninstall monorm-native-postgres monorm-native-sqlite monorm-native-combined monorm-native-tooling \
monorm-timestamps monorm-soft-delete monorm-locking monorm-inherit monorm-query-defaults \
monorm-generic monorm-proxy monorm-composition monorm-file-storage monorm-auth
pip install monorm
npm uninstall @ufstack/monorm @ufstack/monorm-native-postgres @ufstack/monorm-native-sqlite @ufstack/monorm-native-combined @ufstack/monorm-native-tooling @ufstack/monorm-auth \
@ufstack/monorm-timestamps @ufstack/monorm-soft-delete @ufstack/monorm-locking @ufstack/monorm-inherit @ufstack/monorm-query-defaults \
@ufstack/monorm-generic @ufstack/monorm-proxy @ufstack/monorm-composition @ufstack/monorm-file-storage
npm install monorm@npm:@ufstack/monorm
The monorm[postgres] and monorm[sqlite] extras are gone: the wheel has both drivers.
Two copies of one extension id stop the load with the error "installed twice", which names the package to uninstall.
In a schema, import "app:monorm-auth" is the Python name of the auth app and import "app:auth" is the Node name.
Change the imports in your code from @ufstack/monorm to monorm and from @ufstack/monorm-<name> to monorm/extensions/<name>.
You need uv, Rust (cargo), and Node 20.19+ or 22.12+ (or Bun) for the TypeScript package.
Features
| Feature | Read |
|---|---|
| Schema language, SQLite and PostgreSQL types, client defaults, code generation | schema.md |
| Python API: queries, pagination, subqueries, windows, CTEs, writes, transactions, locks, hooks | python-api.md |
| TypeScript API with the same sections | typescript-api.md |
| Migrations from the schema | schema.md |
Protected writes, cursor pagination, the N+1 finder (monorm.debug) |
python-api.md |
| Packaging: one package for each registry, outside extension packages | optional-packaging.md |
Auth app (in the monorm package) |
auth.md |
Build-time extensions are Rust crates. The monorm package has these built in:
proxy models, query defaults, model composition, file storage, generic relations, timestamps, soft delete, locking and inheritance.
See the extension index.
Databases and platforms
| Databases | PostgreSQL and SQLite |
| Python | 3.11 to 3.14 |
| TypeScript | Node 20.19+ or 22.12+, and Bun |
| Rust | Coming soon. A typed read client is in languages/rust/ and is not published. |
| CI | Linux, macOS and Windows (package builds); Linux with PostgreSQL 18 (feature check) |
Benchmarks
Measured in one run (d428e01, 2026-10-28) on a shared cloud VM (vm, Linux 6.18.44 x86_64) with PostgreSQL 16.15.
Contenders: Django 6.1.2 (sync and async), SQLAlchemy 2.1.6 (sync and async, asyncpg), Prisma 7.10.1, Drizzle 0.45.4 and pg 8.23.1.
"N× faster" is the contender median time divided by the monorm median time.
Every number is measured and end to end: it includes the database round trip.
| Case | Python vs Django async | Python vs SQLAlchemy async | Node vs Prisma | Node vs Drizzle |
|---|---|---|---|---|
read-pk |
2.31× faster | 2.72× faster | 2.30× faster | 1.56× faster |
read-1000 |
3.26× faster | 2.77× faster | 1.96× faster | 1.43× faster |
prefetch-to-many |
3.20× faster | 2.64× faster | 1.87× faster | 3.63× faster |
m2m |
3.55× faster | 2.62× faster | 2.40× faster | 3.95× faster |
bulk-insert-1000 |
1.87× faster | 13.23× faster | 4.47× faster | 2.11× faster |
concurrent |
3.32× faster | 2.77× faster | 1.59× faster | 1.78× faster |
tx-5 |
1.10× faster (level) | 1.19× faster | 1.40× faster | 0.97× (slower, level) |
| Geometric mean of 20 cases | 1.97× faster | 2.56× faster | 1.90× faster | 1.50× faster |
- The Python work alone (build the query and make the SQL, no database) is 4.39× faster than Django async (geometric mean of 10 cases). This number is approximate.
- Level or slower cases: a case is level when the interval of its speed-up includes 1.00.
- Python vs Django async:
tx-5(1.10×, level). - Python vs Django sync:
insert-1(1.07×),bulk-update-100(1.10×) andtx-5(1.03×) are level. - Python vs SQLAlchemy sync:
tx-5is 0.92× (slower, level). Against SQLAlchemy async, no case is level. - Node vs Prisma:
bulk-update-100(1.08×) anddelete-100(1.03×) are level. - Node vs Drizzle:
projection-1000(1.01×),filter(1.11×),update-1(1.08×),bulk-update-100(0.99×, slower),delete-100(1.05×) andtx-5(0.97×, slower) are level.
- Python vs Django async:
- Bun has only 3 cases (
read-pk,read-1000,bulk-insert-1000): 2.48× faster than Prisma and 1.46× faster than Drizzle (geometric means), none level. - Against Django sync the Python geometric mean is 1.59× faster, against SQLAlchemy sync 2.25×.
- It is one run on a shared VM. Treat a difference whose interval overlaps 1.00 as no difference. Django async has no async
atomic(), which affectstx-5.
Full tables, the method and the raw data: bench/RESULTS.md and bench/compare/README.md.
Run the comparison yourself before you decide.
Status and limits
Both API docs list what is not done yet: Python and schema. The API is async only. There is no MySQL driver. The crate on crates.io comes later.
Docs
- docs/README.md: the documentation index (core, extensions, performance).
- examples/blog: a schema, its generated models and migrations, and runnable demos.
- CHANGELOG.md: what changed.
Contributing
Read CONTRIBUTING.md for the setup, the checks and the pull request rules. Report a security problem as described in SECURITY.md.
License
MIT. See LICENSE.
Metadata
Release files for monorm 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 217.2 MB
Release files / monorm-0.1.2-cp314-cp314-win_amd64.whl
| Download URL | monorm-0.1.2-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 14.0 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d343512edf2a7d2a5d995f8a400296cc8231ae59bf6b4a6bb635bfdade9a5bc8
|
|
BLAKE2b-256 checksum How to use checksums |
7d3c1d699e5d5c2e7870b35ef9dc68ea16ae04a263d810f2818435ec719285cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp314-cp314-manylinux_2_28_x86_64.whl
| Download URL | monorm-0.1.2-cp314-cp314-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 14.0 MB |
| Tags | CPython 3.14 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
e844d7038652fc23ffc1ca6dab9b58b8e1992ac5e43fbf11853918edacb5850e
|
|
BLAKE2b-256 checksum How to use checksums |
14fff0983303bb63f761dc35ef7eb46273e7c1d25634801c7f402cfdf69ce5eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp314-cp314-manylinux_2_28_aarch64.whl
| Download URL | monorm-0.1.2-cp314-cp314-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 13.0 MB |
| Tags | CPython 3.14 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
9aa991bebf907c04c9c3677e07ff75276eba7c45a4433c0dd9f09a9adbdfba0c
|
|
BLAKE2b-256 checksum How to use checksums |
31037b82385d7d6980744962c851675f78e69ba742b22cfd5daf9266863622a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | monorm-0.1.2-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 13.3 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
cad3427eac884c2b147607cdb8908e4c18cdc25c513e21df7b133c1f777f7510
|
|
BLAKE2b-256 checksum How to use checksums |
169f182db1662569b7bd0a07a8cffe75220c4c6f745f064de758003f37dc43f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp313-cp313-win_amd64.whl
| Download URL | monorm-0.1.2-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 14.0 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
4e889232f6e3c316d7410175a683caac1eb80ccb8eed895a2b7c8ec61e6da375
|
|
BLAKE2b-256 checksum How to use checksums |
63f0b30e50cc0a20221d797c0b42492160f555ef59eed737792a64dcb255ae12
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | monorm-0.1.2-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 14.0 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
303d675ef3cccc1080b03123a51855949b2228b410a16f101918a9e33a2f7508
|
|
BLAKE2b-256 checksum How to use checksums |
f734e5e6d0e294cc715b6d7062e8bf885c41a3148f6f6be024fcc2cc2e191614
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp313-cp313-manylinux_2_28_aarch64.whl
| Download URL | monorm-0.1.2-cp313-cp313-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 13.0 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
78d3ad094f5322a526ea4303c306ba4b0048c94c650351965ce02fb84ba2389d
|
|
BLAKE2b-256 checksum How to use checksums |
846e1661142f100b59eaa026ed381b1cbcb009af4e782b7c5e3ecf14cd5acf29
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | monorm-0.1.2-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 13.3 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
c7c1bf45e7cf33e41473816faac7e1b12c8bd612720c2e441c0aa10c280fd97a
|
|
BLAKE2b-256 checksum How to use checksums |
9a8b0cf4c50b1344d34a3ab427520488c25fcd4202935aa16b8072850781b01f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp312-cp312-win_amd64.whl
| Download URL | monorm-0.1.2-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 14.0 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8ad60667fa1af25220c25573664ae1b0d1332339831652d4276f4b5ab4477688
|
|
BLAKE2b-256 checksum How to use checksums |
1c531295de26f9af6467a3ea87b257b9628bb8b0bd8fd0b80a9d38c26e969e43
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | monorm-0.1.2-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 14.0 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
0343a017d686487f41e664b6bc4028e5266e811b05960811d97afe0f9cd77d8a
|
|
BLAKE2b-256 checksum How to use checksums |
934f629446a40572ba5d0055b522564902b6ad6f61b0640179dc0babef7be9b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp312-cp312-manylinux_2_28_aarch64.whl
| Download URL | monorm-0.1.2-cp312-cp312-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 13.0 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
19bd90d708b3a9986d8c4180b92ff15461c72f602dc39cdb7b963a52eb906f0c
|
|
BLAKE2b-256 checksum How to use checksums |
61fe983d5aa914cbe0faeb6488e04eeda7d1357deacc037423eaec12f2b9449b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | monorm-0.1.2-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 13.3 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4911e42caa888436a2f0fd456a622c700a680c1565394b12f555a074812cdea9
|
|
BLAKE2b-256 checksum How to use checksums |
df88da0169dd9d30b187f9a60d1268f285d92331343eb7771ffe717243a2b881
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp311-cp311-win_amd64.whl
| Download URL | monorm-0.1.2-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 14.0 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2e15ec42eae2064eb6ca0d95fad1b644c72c65be23ff556761b2caf7e38c8324
|
|
BLAKE2b-256 checksum How to use checksums |
cee791a4b678e2e98227a55bce73b56d0eb26cbe734c6b75b58ec9d188d80e66
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | monorm-0.1.2-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 14.0 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
e4d1e1fad60c86325f949a6d15db4d0dcdc387d8435938a274d70431313e25e3
|
|
BLAKE2b-256 checksum How to use checksums |
03e22ad571ae76b15fe6ae315b9b7ed6593db7a6ce95afd851cf28841edb4704
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp311-cp311-manylinux_2_28_aarch64.whl
| Download URL | monorm-0.1.2-cp311-cp311-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 13.0 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
09cb17756307a045e8a2fb94d5b078874021f082fc9a470bf5d2fa086c1aaf62
|
|
BLAKE2b-256 checksum How to use checksums |
dcef09a918d07e50be69f91c5700b82a6b838dddd348e594a29a1a53f5897a13
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logRelease files / monorm-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | monorm-0.1.2-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 13.3 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8a7da17c06626ed83351997f5a47e58b8ac62e24c27ca51fd8913e4abfaab421
|
|
BLAKE2b-256 checksum How to use checksums |
b146b71931ba653e265a56bc1a72936970733d758b4985200a65e51e15767998
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 30, 2026.
Transparency logSecurity for monorm 0.1.2
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.
Full provenance
All 16 files in this release have been uploaded with provenance metadata.
Attestation for monorm-0.1.2-cp314-cp314-win_amd64.whl
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 30, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.