{"id":35232553,"url":"https://github.com/greatstrength/tiferet","last_synced_at":"2026-04-01T21:00:03.617Z","repository":{"id":235603561,"uuid":"790996522","full_name":"greatstrength/tiferet","owner":"greatstrength","description":"Build an app, the beautiful way.","archived":false,"fork":false,"pushed_at":"2026-03-27T01:53:12.000Z","size":2019,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-27T07:19:43.134Z","etag":null,"topics":["design-patterns","domain-driven-design","esoteric","software","software-development","software-engineering"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/greatstrength.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2024-04-23T22:53:38.000Z","updated_at":"2026-03-27T01:53:03.000Z","dependencies_parsed_at":"2025-12-13T07:05:55.138Z","dependency_job_id":null,"html_url":"https://github.com/greatstrength/tiferet","commit_stats":null,"previous_names":["great-strength-studios/aikicore","greatstrength/aikicore","greatstrength/tiferet"],"tags_count":56,"template":false,"template_full_name":null,"purl":"pkg:github/greatstrength/tiferet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greatstrength%2Ftiferet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greatstrength%2Ftiferet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greatstrength%2Ftiferet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greatstrength%2Ftiferet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/greatstrength","download_url":"https://codeload.github.com/greatstrength/tiferet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greatstrength%2Ftiferet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291936,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["design-patterns","domain-driven-design","esoteric","software","software-development","software-engineering"],"created_at":"2025-12-30T03:02:56.311Z","updated_at":"2026-04-01T21:00:03.606Z","avatar_url":"https://github.com/greatstrength.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tiferet – Domain-Driven Design, beautifully balanced\n\n[![PyPI](https://img.shields.io/pypi/v/tiferet?style=flat-square\u0026logo=python\u0026logoColor=white\u0026color=3775A9)](https://pypi.org/project/tiferet/)\n[![Python](https://img.shields.io/pypi/pyversions/tiferet?style=flat-square\u0026logo=python\u0026logoColor=white\u0026color=3775A9)](https://pypi.org/project/tiferet/)\n[![License](https://img.shields.io/github/license/greatstrength/tiferet?style=flat-square)](LICENSE)\n\n**Tiferet** is a Python framework that brings **Domain-Driven Design** into focus with elegance and clarity.\n\nInspired 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.\n\n### At a glance\n\n- Domain events as the core unit of behavior  \n- YAML for features, workflows, dependency injection, errors, CLI commands  \n- Clean layering: domain objects • aggregates • transfer objects • services  \n- Structured, multilingual errors built-in  \n- Easy to extend to CLI, web, scripts, TUI, …\n\nCurrent status: **2.0.0a8** (pre-release – actively evolving toward stable v2)\n\n## Quick Start – Add two numbers in ~3 minutes\n\n```bash\n# 1. Set up environment\npython3 -m venv tiferet-demo \u0026\u0026 source tiferet-demo/bin/activate\npip install tiferet\n```\n\nCreate these files in your project folder:\n\n**demo.py**\n```python\nfrom tiferet import App\n\napp = App()                     # loads configs from app/configs/ by default\n\nresult = app.run(\n    interface_id=\"basic_calc\",\n    feature_id=\"calc.add\",\n    data={\"a\": 19, \"b\": 23}\n)\n\nprint(f\"19 + 23 = {result}\")    # → 42\n```\n\n**app/configs/app.yml**\n```yaml\ninterfaces:\n  basic_calc:\n    name: Basic Calculator\n```\n\n**app/configs/feature.yml**\n```yaml\nfeatures:\n  calc:\n    add:\n      name: Add Numbers\n      commands:\n        - service_id: add_number_event\n```\n\n**app/configs/di.yml**\n```yaml\nservices:\n  add_number_event:\n    module_path: app.events.calc\n    class_name: AddNumber\n```\n\n**app/events/calc.py**  \n(the domain event itself – very minimal)\n\n```python\nfrom tiferet.events import DomainEvent\n\nclass AddNumber(DomainEvent):\n    def execute(self, a: int, b: int, **kwargs) -\u003e int:\n        return a + b\n```\n\nRun:\n\n```bash\npython demo.py\n```\n\nYou should see:\n\n```\n19 + 23 = 42\n```\n\n→ Want a full calculator (add, subtract, multiply, divide, sqrt, …) with CLI, validation and proper error handling?  \n→ Continue with the **[step-by-step Calculator Tutorial →](docs/tutorial/basic_calculator/index.md)**\n\n## Why Tiferet?\n\n- **Configuration as code** — features, DI, errors, CLI all live in YAML  \n- **Domain logic stays pure** — focused events \u0026 aggregates  \n- **Infrastructure is injectable** — file/db/utils behind clean service contracts  \n- **Built for evolution** — today CLI, tomorrow FastAPI or TUI  \n- **Strong testability** — events are easy to invoke in isolation\n\n## Documentation \u0026 Guides\n\n**Core architecture**  \n- [Code Style \u0026 Artifact Comments](docs/core/code_style.md)  \n- [Domain Objects](docs/core/domain.md)  \n- [Domain Events](docs/core/events.md)  \n- [Aggregates \u0026 Transfer Objects (Mappers)](docs/core/mappers.md)  \n- [Service Interfaces](docs/core/interfaces.md)  \n- [Contexts](docs/core/contexts.md)  \n- [Repositories](docs/core/repos.md)  \n- [Utilities (File/Yaml/Json/Csv/Sqlite)](docs/core/utils.md)\n\n### Practical Guides \n**Domain Guides**  \n- [Application Management](docs/guides/domain/app.md)  \n- [Dependency Injection](docs/guides/domain/di.md)  \n- [Feature Workflows](docs/guides/domain/feature.md)  \n- [Error Handling](docs/guides/domain/error.md)  \n- [CLI Integration](docs/guides/domain/cli.md)  \n- [Logging](docs/guides/domain/logging.md)\n\n**Event Guides**  \n- [Application Events](docs/guides/events/app.md)  \n- [Dependency Injection Events](docs/guides/events/di.md)  \n- [Feature Events](docs/guides/events/feature.md)  \n- [Error Events](docs/guides/events/error.md)  \n- [CLI Integration Events](docs/guides/events/cli.md)  \n- [Logging Events](docs/guides/events/logging.md)  \n- [SQLite Events](docs/guides/events/sqlite.md)\n\n**Utility Guides**  \n- [File Loader](docs/guides/utils/file.md)  \n- [YAML Loader](docs/guides/utils/yaml.md)  \n- [JSON Loader](docs/guides/utils/json.md)  \n- [CSV Loader](docs/guides/utils/csv.md)  \n- [Sqlite Connector](docs/guides/utils/sqlite.md)\n\n**Other Component Guides**  \n- [Interfaces](docs/guides/interfaces.md)  \n- [Mappers (Aggregates \u0026 Transfer Objects)](docs/guides/mappers.md)  \n- [Repositories](docs/guides/repos.md)\n\n**Tutorial**  \n→ [Build a complete Calculator (events + CLI + configs)](docs/tutorial/basic_calculator/index.md)\n\n## Contributing\n\nWe welcome bug reports, documentation improvements, feature ideas, and early adopters.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the workflow (issues → TRD → feature branch → PR).\n\nQuestions, feedback, or just want to say hi?  \nOpen an issue or reach out via email: andrew@greatstrength.me\n\nLet's build software that feels as good as it works.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreatstrength%2Ftiferet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgreatstrength%2Ftiferet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreatstrength%2Ftiferet/lists"}