Skip to main content

Tiferet – Domain-Driven Design, beautifully balanced

PyPI Python License

Tiferet is a Python framework that brings Domain-Driven Design into focus with elegance and clarity.

Inspired by the Kabbalistic principle of harmony and beauty in balance, Tiferet helps you turn complex business logic into maintainable, configuration-driven applications — where purpose, structure, and execution feel naturally aligned.

At a glance

  • Blueprints-first app entry point via build_app (exported as App)
  • Domain events as the core unit of behavior
  • YAML for features, workflows, dependency injection, errors, CLI commands
  • Clean layering: domain objects • aggregates • transfer objects • services
  • Structured, multilingual errors built-in
  • Easy to extend to CLI, web, scripts, TUI, … Current status: 2.0.0b3 (pre-release – actively evolving toward stable v2)

Quick Start – Add two numbers in ~3 minutes

# 1. Set up environment
python3 -m venv tiferet-demo && source tiferet-demo/bin/activate
pip install tiferet

Create these files in your project folder:

demo.py

from tiferet import App
app = App(
    'basic_calc',
    app_yaml_file='config.yml',
)                               # App is the build_app alias

result = app.run(
    feature_id='calc.add',
    data={'a': 19, 'b': 23},
)

print(f"19 + 23 = {result}")    # → 42

config.yml

interfaces:
  basic_calc:
    name: Basic Calculator
    description: Basic calculator interface

services:
  add_number_event:
    module_path: app.events.calc
    class_name: AddNumber

features:
  calc:
    add:
      name: Add Numbers
      commands:
        - service_id: add_number_event

app/events/calc.py
(the domain event itself – very minimal)

from tiferet.events import DomainEvent

class AddNumber(DomainEvent):
    def execute(self, a: int, b: int, **kwargs) -> int:
        return a + b

Run:

python demo.py

You should see:

19 + 23 = 42

→ Want a full calculator (add, subtract, multiply, divide, sqrt, …) with CLI, validation and proper error handling?
→ See the working example → or follow the step-by-step Tutorial →

Why Tiferet?

  • Configuration as code — features, DI, errors, CLI all live in YAML
  • Domain logic stays pure — focused events & aggregates
  • Infrastructure is injectable — file/db/utils behind clean service contracts
  • Built for evolution — today CLI, tomorrow FastAPI or TUI
  • Strong testability — events are easy to invoke in isolation

Documentation & Guides

Core architecture

Practical Guides

Domain Guides

Event Guides

Utility Guides

Other Component Guides

Tutorial
Build a complete Calculator (events + CLI + configs)

Contributing

We welcome bug reports, documentation improvements, feature ideas, and early adopters.

See CONTRIBUTING.md for the workflow (issues → TRD → feature branch → PR).

Questions, feedback, or just want to say hi?
Open an issue or reach out via email: andrew@greatstrength.me

Let's build software that feels as good as it works.

Download files

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

Source Distribution

tiferet-2.0.1.tar.gz (120.8 kB view details)

Uploaded Source

Built Distribution

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

tiferet-2.0.1-py3-none-any.whl (164.1 kB view details)

Uploaded Python 3

File details

Details for the file tiferet-2.0.1.tar.gz.

File metadata

  • Download URL: tiferet-2.0.1.tar.gz
  • Upload date:
  • Size: 120.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for tiferet-2.0.1.tar.gz
Algorithm Hash digest
SHA256 59e02155cb834a098591875dd8a40dcd800adfec4541a1df83b40d9563ec1615
MD5 a8fc92d445ce6bbe9f0f5bfb7f533888
BLAKE2b-256 07a6fd087b620a6de5a5042f6fe8c867c266f88619d3ee666869553820a3beef

See more details on using hashes here.

Provenance

The following attestation bundles were made for tiferet-2.0.1.tar.gz:

Publisher: python-publish.yml on greatstrength/tiferet

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

File details

Details for the file tiferet-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: tiferet-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 164.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for tiferet-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 872163e00916c6179d3b6a267931853ff451471125a3e9b158bfa6405a0b2a4b
MD5 c074063a9f8e9249c54d314932870347
BLAKE2b-256 5a01240a333d306bdc981800043e309556b9993ff9efd2868703c65fd05fff33

See more details on using hashes here.

Provenance

The following attestation bundles were made for tiferet-2.0.1-py3-none-any.whl:

Publisher: python-publish.yml on greatstrength/tiferet

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

Release history Release notifications | RSS feed

2.0.3

2 files

2.0.2

2 files

This release

2.0.1 This release

2 files

2.0.0

2 files

1.9.5

2 files

1.9.4

2 files

1.9.3

2 files

1.9.2

2 files

1.9.1

2 files

1.9.0

2 files

1.8.6

2 files

1.8.5

2 files

1.8.4

2 files

1.8.3

2 files

1.8.2

2 files

1.8.1

2 files

1.8.0

2 files

1.7.6

2 files

1.7.5

2 files

1.7.4

2 files

1.7.3

2 files

1.7.2

2 files

1.7.1

2 files

1.7.0

2 files

1.6.0

2 files

1.5.0

2 files

1.4.0

2 files

1.3.0

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.1.13

2 files

1.1.12

2 files

1.1.11

2 files

1.1.10

2 files

1.1.9

2 files

1.1.8

2 files

1.1.7

2 files

1.1.6

2 files

1.1.5

2 files

1.1.4

2 files

1.1.3

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 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