Skip to main content

Ferro: The Pydantic x Rust ORM

PyTest Ruff Zensical UV Rust Python PyPI License Downloads Codecov Issues

Ferro is a high-performance, asynchronous ORM for Python, powered by a core engine written in Rust. Designed for simplicity and it only has one dependency: Pydantic. Delivering ergonomics familiar to the modern Pythonista and the speed and safety of Rust's SQLx and Sea-Query.

Key Features

  • High-Performance Core: All SQL generation and row hydration are handled by a dedicated Rust engine, minimizing "Python Tax" on data-heavy operations.
  • Async First: Built from the ground up for asynchronous applications, utilizing pyo3-async-runtimes for non-blocking I/O.
  • Pydantic Integration: Leverages Pydantic V2 for schema definition and data validation, providing full IDE support and type safety.
  • Zero-Copy Intent: Designed with zero-copy principles to maximize throughput during large-scale data retrieval.
  • Identity Map: Ensures object consistency across your application by tracking active model instances in a thread-safe registry.

Architecture

Ferro operates through a dual-layer architecture connected via a high-performance FFI (Foreign Function Interface) bridge:

  1. Python Layer: Developers define models using standard Python classes; a metaclass registers them with the backend.
  2. Rust Engine: Built on SQLx and Sea-Query for GIL-free row parsing and object instantiation.

Installation

Ferro is distributed as pre-compiled wheels for macOS, Linux, and Windows.

pip install ferro-orm
# Or with migration support
pip install "ferro-orm[alembic]"

Ferro currently supports SQLite and PostgreSQL. Register multiple named connections with connect(..., name="...") when a process needs more than one database — see the connections guide.

Quick Start

import asyncio
from ferro import Field, Model, connect

class User(Model):
    id: int | None = Field(default=None, primary_key=True)
    username: str
    is_active: bool = True

async def main():
    await connect("sqlite:example.db?mode=rwc", auto_migrate=True)

    # Create
    alice = await User.create(username="alice")

    # Query (lambda predicates — name the parameter after the model, e.g. user for User)
    active_users = await User.where(lambda user: user.is_active == True).all()
    print(f"Found {len(active_users)} active users.")

if __name__ == "__main__":
    asyncio.run(main())

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ferro_orm-0.16.3.tar.gz (1.2 MB view details)

Uploaded Source

Built Distributions

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

ferro_orm-0.16.3-cp39-abi3-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.9+Windows x86-64

ferro_orm-0.16.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

ferro_orm-0.16.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

ferro_orm-0.16.3-cp39-abi3-macosx_11_0_arm64.whl (5.1 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

Details for the file ferro_orm-0.16.3.tar.gz.

File metadata

  • Download URL: ferro_orm-0.16.3.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ferro_orm-0.16.3.tar.gz
Algorithm Hash digest
SHA256 0a7c30c6f50d9f6085350ab656ec97c06ded3c990a932cab6ef0e0bfbff9ada9
MD5 1741fec2f2c42914f633c9d527e49cb7
BLAKE2b-256 41db69d9cb316e4daad1b50e75be3b4d74acb0042b7d855c85b9ccd8e10ba16e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ferro_orm-0.16.3.tar.gz:

Publisher: release.yml on syn54x/ferro-orm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ferro_orm-0.16.3-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: ferro_orm-0.16.3-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 5.0 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ferro_orm-0.16.3-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 bb173384f6d4d541f677283811e6767636246fdc20d8acb47c5cf2619639a77b
MD5 db59eb2ed5bb59f91915a1f2a012409e
BLAKE2b-256 4db5ff310c7cea047074a2a8aea5e1512f5104b0afaf817a5a323efad226c01e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ferro_orm-0.16.3-cp39-abi3-win_amd64.whl:

Publisher: release.yml on syn54x/ferro-orm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ferro_orm-0.16.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ferro_orm-0.16.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3703846c7e86c44448d9d011d157cac65e87437cbe13e3aeb027c7144ac7ebcf
MD5 9a84e8a43b79208b30dcf4e1bcb16820
BLAKE2b-256 bf5c5bd79daa85929779f43ebd59a0bdb240c03088c06f6e4e1a54260cc972fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for ferro_orm-0.16.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on syn54x/ferro-orm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ferro_orm-0.16.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ferro_orm-0.16.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f12f9893fbed4bd1614c73aba777acd1ff3e8ea5c8f29fcb796ea6b1b5a4fbae
MD5 3f34fdb0563254f9cf96bce74fe481c2
BLAKE2b-256 c1551f3e281fa460f5a78d2f95f28c35898d9feaea2147ebd8874ccfc950fa78

See more details on using hashes here.

Provenance

The following attestation bundles were made for ferro_orm-0.16.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on syn54x/ferro-orm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ferro_orm-0.16.3-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ferro_orm-0.16.3-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e3f5c234b655f11afcab9cc83bcd2ab43876fe771c64051bbf2a7839d004d3a0
MD5 28d527468d8255c051858cf99b079fec
BLAKE2b-256 df6c228add2f92d49c19bc96a19e52e593bbf10c3f5977b9dc0b073ff354d5b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for ferro_orm-0.16.3-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on syn54x/ferro-orm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.19.0

5 files

0.18.0

5 files

0.17.1

5 files

0.17.0

5 files

This release

0.16.3 This release

5 files

0.16.2

5 files

0.16.1

5 files

0.16.0

5 files

0.15.0

5 files

0.14.0

5 files

0.13.0

5 files

0.12.3

5 files

0.12.2

5 files

0.12.1

5 files

0.12.0

5 files

0.11.0

5 files

0.10.5

5 files

0.10.4

5 files

0.10.3

5 files

0.10.2

5 files

0.10.1

5 files

0.10.0

5 files

0.9.2

5 files

0.9.1

5 files

0.9.0

5 files

0.8.0

5 files

0.7.0

5 files

0.6.1

5 files

0.6.0

5 files

0.5.0

5 files

0.4.0

5 files

0.3.4

5 files

0.3.3

5 files

0.3.2

5 files

0.3.1

5 files

0.3.0

5 files

0.2.1

5 files

0.2.0

5 files

0.1.1

5 files

0.1.0

5 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page