[](https://codecov.io/gh/invokermain/engin)
# Engin 🏎️
Engin is a zero-dependency application framework for modern Python.
**Documentation**: https://engin.readthedocs.io/
## Features ✨
- **Dependency Injection** - Engin includes a fully-featured Dependency Injection system,
powered by type hints.
- **Lifecycle Management** - Engin provides a simple & portable approach for attaching
startup and shutdown tasks to the application's lifecycle.
- **Code Reuse** - Engin's modular components, called Blocks, work great as distributed
packages allowing zero boiler-plate code reuse across multiple applications. Perfect for
maintaining many services across your organisation.
- **Ecosystem Compatability** - Engin ships with integrations for popular frameworks that
provide their own Dependency Injection, for example FastAPI, allowing you to integrate
Engin into existing code bases incrementally.
- **Async Native**: Engin is an async framework, meaning first class support for async
dependencies. However Engin will happily run synchronous code as well.
## Installation
Engin is available on PyPI, install using your favourite dependency manager:
- **pip**:`pip install engin`
- **poetry**: `poetry add engin`
- **uv**: `uv add engin`
## Getting Started
A minimal example:
```python
import asyncio
from httpx import AsyncClient
from engin import Engin, Invoke, Provide
def httpx_client() -> AsyncClient:
return AsyncClient()
async def main(http_client: AsyncClient) -> None:
print(await http_client.get("https://httpbin.org/get"))
engin = Engin(Provide(httpx_client), Invoke(main))
asyncio.run(engin.run())
```
Raw data
{
"_id": null,
"home_page": null,
"name": "engin",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "Application Framework, Dependency Injection",
"author": null,
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/e4/3d/f94d7f4e7c8b39d686651bfbaed2d4779e0d2cb746f53169353da7fe94f7/engin-0.0.20.tar.gz",
"platform": null,
"description": "[](https://codecov.io/gh/invokermain/engin)\n\n# Engin \ud83c\udfce\ufe0f\n\nEngin is a zero-dependency application framework for modern Python.\n\n**Documentation**: https://engin.readthedocs.io/\n\n## Features \u2728\n\n- **Dependency Injection** - Engin includes a fully-featured Dependency Injection system,\n powered by type hints.\n- **Lifecycle Management** - Engin provides a simple & portable approach for attaching\n startup and shutdown tasks to the application's lifecycle.\n- **Code Reuse** - Engin's modular components, called Blocks, work great as distributed\n packages allowing zero boiler-plate code reuse across multiple applications. Perfect for\n maintaining many services across your organisation.\n- **Ecosystem Compatability** - Engin ships with integrations for popular frameworks that\n provide their own Dependency Injection, for example FastAPI, allowing you to integrate\n Engin into existing code bases incrementally.\n- **Async Native**: Engin is an async framework, meaning first class support for async\n dependencies. However Engin will happily run synchronous code as well.\n\n## Installation\n\nEngin is available on PyPI, install using your favourite dependency manager:\n\n- **pip**:`pip install engin`\n- **poetry**: `poetry add engin`\n- **uv**: `uv add engin`\n\n## Getting Started\n\nA minimal example:\n\n```python\nimport asyncio\n\nfrom httpx import AsyncClient\n\nfrom engin import Engin, Invoke, Provide\n\n\ndef httpx_client() -> AsyncClient:\n return AsyncClient()\n\n\nasync def main(http_client: AsyncClient) -> None:\n print(await http_client.get(\"https://httpbin.org/get\"))\n\nengin = Engin(Provide(httpx_client), Invoke(main))\n\nasyncio.run(engin.run())\n```\n\n",
"bugtrack_url": null,
"license": null,
"summary": "An async-first modular application framework",
"version": "0.0.20",
"project_urls": {
"Changelog": "https://github.com/invokermain/engin/blob/main/CHANGELOG.md",
"Documentation": "https://engin.readthedocs.io/en/latest/",
"Homepage": "https://github.com/invokermain/engin",
"Repository": "https://github.com/invokermain/engin.git"
},
"split_keywords": [
"application framework",
" dependency injection"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "a689a90968ec4ddce973467e4eefe2b36a21a2a3f5d481ab5c0e67e3ccfb95f3",
"md5": "5b51fbd090c5730035ace996a885f738",
"sha256": "796d26e6b57463f20d705c762dcd5f5612a7b5b652eba943b0644a5724063e39"
},
"downloads": -1,
"filename": "engin-0.0.20-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5b51fbd090c5730035ace996a885f738",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 26810,
"upload_time": "2025-06-18T08:23:29",
"upload_time_iso_8601": "2025-06-18T08:23:29.050111Z",
"url": "https://files.pythonhosted.org/packages/a6/89/a90968ec4ddce973467e4eefe2b36a21a2a3f5d481ab5c0e67e3ccfb95f3/engin-0.0.20-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e43df94d7f4e7c8b39d686651bfbaed2d4779e0d2cb746f53169353da7fe94f7",
"md5": "526f06cba27c11d5d7076f7296bdf3e3",
"sha256": "14196da42afb9ccd739d22a1d3281a2aa86ccb83db8c3f9d467256cac9f2e3b0"
},
"downloads": -1,
"filename": "engin-0.0.20.tar.gz",
"has_sig": false,
"md5_digest": "526f06cba27c11d5d7076f7296bdf3e3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 134576,
"upload_time": "2025-06-18T08:23:30",
"upload_time_iso_8601": "2025-06-18T08:23:30.063337Z",
"url": "https://files.pythonhosted.org/packages/e4/3d/f94d7f4e7c8b39d686651bfbaed2d4779e0d2cb746f53169353da7fe94f7/engin-0.0.20.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-06-18 08:23:30",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "invokermain",
"github_project": "engin",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "engin"
}