{"id":17851683,"url":"https://github.com/aprilahijriyan/allin","last_synced_at":"2025-03-20T09:30:30.209Z","repository":{"id":65538698,"uuid":"594276878","full_name":"aprilahijriyan/allin","owner":"aprilahijriyan","description":"Allin is an experimental asynchronous web framework.","archived":false,"fork":false,"pushed_at":"2023-03-02T12:56:16.000Z","size":104,"stargazers_count":6,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-14T01:18:02.191Z","etag":null,"topics":["asgi","framework","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aprilahijriyan.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2023-01-28T03:02:51.000Z","updated_at":"2025-01-07T01:11:18.000Z","dependencies_parsed_at":"2024-10-27T23:45:43.995Z","dependency_job_id":"ddee15a2-848e-4e33-bb21-14aaf2d3d45f","html_url":"https://github.com/aprilahijriyan/allin","commit_stats":{"total_commits":18,"total_committers":2,"mean_commits":9.0,"dds":"0.11111111111111116","last_synced_commit":"c92b03f58d6ede223519636e4f18caaa91531f73"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aprilahijriyan%2Fallin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aprilahijriyan%2Fallin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aprilahijriyan%2Fallin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aprilahijriyan%2Fallin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aprilahijriyan","download_url":"https://codeload.github.com/aprilahijriyan/allin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244585579,"owners_count":20476760,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["asgi","framework","python"],"created_at":"2024-10-27T23:22:18.492Z","updated_at":"2025-03-20T09:30:29.930Z","avatar_url":"https://github.com/aprilahijriyan.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# allin\n\n\u003cp align=\"center\"\u003e\nAllin is an experimental asynchronous web framework.\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003cimg alt=\"PyPI - Downloads\" src=\"https://img.shields.io/pypi/dm/allin?color=yellow\u0026logo=python\u0026style=for-the-badge\"\u003e\n\u003cimg alt=\"PyPI\" src=\"https://img.shields.io/pypi/v/allin?logo=python\u0026style=for-the-badge\"\u003e\n\u003cimg alt=\"PyPI - Status\" src=\"https://img.shields.io/pypi/status/allin?color=red\u0026logo=python\u0026style=for-the-badge\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003cstrong\u003eI didn't expect this framework to be used in a production environment, as it's still in the early stages of development.\u003c/strong\u003e\nNot sure when this framework can be used in production 😬\n\u003c/p\u003e\n\n\u003e You can help this project get better by creating an [issue](https://github.com/aprilahijriyan/allin/issues) or PR. Thank you for your time!\n\nTable of Contents:\n\n* [:raised_eyebrow: Why ?](#🤨-why)\n* [:books: Roadmap](#📚-roadmap)\n* [:star_struck: Features](#🤩-features)\n* [:love_you_gesture: Quick Start](#🤟-quick-start)\n* [:sunglasses: Installation](#😎-installation)\n\n    * [From source](#install-from-source)\n    * [With `pip`](#install-with-pip)\n\n`Allin` is heavily inspired by [Flask](https://flask.palletsprojects.com/en/2.2.x/), [Starlette](https://www.starlette.io/) \u0026 [Falcon](https://falconframework.org/).\n\n## :raised_eyebrow: Why ?\n\n\u003e I'm just curious :monocle_face:\n\n[ASGI]: https://asgi.readthedocs.io/en/latest\n\nYup, I'm curious about how a web application based on [ASGI] works.\n\nIt may not yet fully comply with the [ASGI] application specifications as documented. But, for the main features like route mapping, HTTP responses, error handling, parsing the request body it's there.\n\n...and I want to build my own framework from scratch so I know how the application works.\n\nLiterally, the \"framework parts\" weren't built from scratch as I also used third party modules and some \"parts from other sources\" were used as references.\n\n\u003e _This is part of the journey_\n\n## :books: Roadmap\n\n- [x] Lifespan Protocol\n- [x] HTTP Protocol\n\n    - [x] HTTP Headers\n    - [x] HTTP Request\n        - [x] JSON Body Support\n        - [x] MessagePack Body Support\n        - [x] Form Data Support\n        - [x] Cookies\n        - [x] Query Parameters\n\n    - [x] HTTP Responses\n        - [x] JSONResponse\n        - [x] MessagePackResponse\n\n    - [ ] HTTP Middleware\n        - [ ] Before HTTP Request\n        - [ ] After HTTP Request\n\n    - [x] Routing\n\n        - [x] Decorator shortcuts such as `@get`, `@post`, `@put`, etc. are available.\n        - [x] Nesting routers\n\n- [ ] Extension\n- [ ] Websocket Support\n\n## :star_struck: Features\n\n- [x] Global variables. (It means, you can access the `app` and `request` object instances globally)\n- [x] Error handling\n- [x] `JSON` and `MessagePack` requests are supported out of the box (thanks to [msgspec](https://github.com/jcrist/msgspec))\n- [x] Form Data Support (`application/x-www-form-urlencoded` or `multipart/form-data`)\n- [x] Decorator shortcuts such as `@get`, `@post`, `@put`, etc. are available.\n- [x] Nesting routers\n\n## :love_you_gesture: Quick Start\n\nHere is an example application based on the `Allin` framework and I'm sure you are familiar with it.\n\n```python\nfrom allin import Allin, JSONResponse\n\napp = Allin()\n\n@app.route(\"/\")\nasync def index():\n    return JSONResponse({\"message\": \"Hello World!\"})\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e:point_down: Explanation\u003c/summary\u003e\n\n* The `app` variable is the ASGI application instance.\n* And we create an endpoint with the route `/` on the line `app.route(...)`\n* Then we add the `index()` function to handle the `/` route.\n* And the handler function will return a JSON response with the content `{\"message\": \"Hello World!\"}`\n\n\u003c/details\u003e\n\nThat's it! looks familiar right?\n\nWant more? check out other [sample projects here](https://github.com/aprilahijriyan/allin/tree/main/examples)\n\n## :sunglasses: Installation\n\n### Install from source\n\n```\ngit clone --depth 1 https://github.com/aprilahijriyan/allin.git\ncd allin\n```\n\nNeed https://python-poetry.org/ installed on your device\n\n```\npoetry build\npip install ./dist/*.whl\n```\n\n### Install with `pip`\n\nCurrently I just published the pre-release version `v0.1.1a0`. So, maybe you need to install it with the `--pre` option. Example:\n\n```\npip install --pre allin\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faprilahijriyan%2Fallin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faprilahijriyan%2Fallin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faprilahijriyan%2Fallin/lists"}