A multi-purpose application framework embodying beauty in form.
Project description
Tiferet – Domain-Driven Design, beautifully balanced
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 asApp) - 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
- Code Style & Artifact Comments
- Blueprints (build_app)
- Domain Objects
- Domain Events
- Aggregates & Transfer Objects (Mappers)
- Service Interfaces
- Dependency Injection (ServiceProvider)
- Repositories
- Utilities (File/Yaml/Json/Csv/Sqlite)
Practical Guides
Domain Guides
- Application Management
- Dependency Injection
- Feature Workflows
- Error Handling
- CLI Integration
- Logging
Event Guides
- Application Events
- Dependency Injection Events
- Feature Events
- Error Events
- CLI Integration Events
- Logging Events
- SQLite Events
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tiferet-2.0.0b5.tar.gz.
File metadata
- Download URL: tiferet-2.0.0b5.tar.gz
- Upload date:
- Size: 79.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b485b2698b8421fd05a3abd3a4df3959d75a3edcc9ac5d9b35a358689df48ca
|
|
| MD5 |
581b53e778d8a206245cb993ea8e0b40
|
|
| BLAKE2b-256 |
937b1cff64144afb4557ca2a2f4fd40045dcaa415cc50130bade53d354948d0e
|
Provenance
The following attestation bundles were made for tiferet-2.0.0b5.tar.gz:
Publisher:
python-publish.yml on greatstrength/tiferet
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tiferet-2.0.0b5.tar.gz -
Subject digest:
7b485b2698b8421fd05a3abd3a4df3959d75a3edcc9ac5d9b35a358689df48ca - Sigstore transparency entry: 1571856685
- Sigstore integration time:
-
Permalink:
greatstrength/tiferet@36eeae33950ba3da222a921f950265569809c670 -
Branch / Tag:
refs/tags/v2.0.0b5 - Owner: https://github.com/greatstrength
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@36eeae33950ba3da222a921f950265569809c670 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tiferet-2.0.0b5-py3-none-any.whl.
File metadata
- Download URL: tiferet-2.0.0b5-py3-none-any.whl
- Upload date:
- Size: 114.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bec0c7e1ad6679011b655efa8b5ab1fb3bbbf5d56e36bafa6179a5d004789c8a
|
|
| MD5 |
262a1de645072edb5c05a9699fa8ec92
|
|
| BLAKE2b-256 |
d14b79b8c53d543f35db5aae6e0ee6a7b75adf76154d49bcbd6d245b569da5fc
|
Provenance
The following attestation bundles were made for tiferet-2.0.0b5-py3-none-any.whl:
Publisher:
python-publish.yml on greatstrength/tiferet
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tiferet-2.0.0b5-py3-none-any.whl -
Subject digest:
bec0c7e1ad6679011b655efa8b5ab1fb3bbbf5d56e36bafa6179a5d004789c8a - Sigstore transparency entry: 1571856811
- Sigstore integration time:
-
Permalink:
greatstrength/tiferet@36eeae33950ba3da222a921f950265569809c670 -
Branch / Tag:
refs/tags/v2.0.0b5 - Owner: https://github.com/greatstrength
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@36eeae33950ba3da222a921f950265569809c670 -
Trigger Event:
push
-
Statement type: