{"id":26600767,"url":"https://github.com/hapticx/happyx","last_synced_at":"2025-05-15T01:09:05.927Z","repository":{"id":149893151,"uuid":"619409381","full_name":"HapticX/happyx","owner":"HapticX","description":"Macro-oriented asynchronous web-framework written in Nim with ♥","archived":false,"fork":false,"pushed_at":"2025-03-22T00:38:55.000Z","size":56441,"stargazers_count":576,"open_issues_count":16,"forks_count":22,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-05-14T08:43:14.899Z","etag":null,"topics":["backend","frontend","full-stack","hacktoberfest","happyx","http-server","javascript","nim","open-source","python","server","spa","ssg","ssr","typescript","web","web-framework"],"latest_commit_sha":null,"homepage":"https://hapticx.github.io/happyx/","language":"Nim","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/HapticX.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/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,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":"Ethosa","issuehunt":"HapticX/happyx","otechie":null,"lfx_crowdfunding":null,"custom":"https://paypal.me/ethosa"}},"created_at":"2023-03-27T04:47:32.000Z","updated_at":"2025-05-11T15:46:23.000Z","dependencies_parsed_at":"2024-03-26T03:32:08.450Z","dependency_job_id":"49fc584d-bf24-4bdd-878a-4b0f09a17048","html_url":"https://github.com/HapticX/happyx","commit_stats":null,"previous_names":[],"tags_count":72,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HapticX%2Fhappyx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HapticX%2Fhappyx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HapticX%2Fhappyx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HapticX%2Fhappyx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HapticX","download_url":"https://codeload.github.com/HapticX/happyx/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254254042,"owners_count":22039792,"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":["backend","frontend","full-stack","hacktoberfest","happyx","http-server","javascript","nim","open-source","python","server","spa","ssg","ssr","typescript","web","web-framework"],"created_at":"2025-03-23T18:34:57.705Z","updated_at":"2025-05-15T01:09:00.918Z","avatar_url":"https://github.com/HapticX.png","language":"Nim","readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg height=\"128px\" width=\"128px\" src=\"https://raw.githubusercontent.com/HapticX/happyx/master/examples/website/src/happyx/public/icon.webp\"\u003e\n\n### Macro-oriented asynchronous full-stack web-framework written in Nim with ♥\n\n![Nim language](https://img.shields.io/badge/\u003e=1.6.14-1b1e2b?style=for-the-badge\u0026logo=nim\u0026logoColor=f1fa8c\u0026label=Nim\u0026labelColor=2b2e3b)\n![Python language](https://img.shields.io/badge/\u003e=3.7.x-1b1e2b?style=for-the-badge\u0026logo=python\u0026logoColor=f1fa8c\u0026label=Python\u0026labelColor=2b2e3b)\n\n![JavaScript language](https://img.shields.io/badge/ES6-1b1e2b?style=for-the-badge\u0026logo=javascript\u0026logoColor=f1fa8c\u0026label=JavaScript\u0026labelColor=2b2e3b)\n![TypeScript language](https://img.shields.io/badge/\u003e=5.2.2-1b1e2b?style=for-the-badge\u0026logo=typescript\u0026logoColor=f1fa8c\u0026label=TypeScript\u0026labelColor=2b2e3b)\n\n[![wakatime](https://wakatime.com/badge/user/eaf11f95-5e2a-4b60-ae6a-38cd01ed317b/project/bbd13748-36e6-4383-ac40-9c4e72c060d1.svg?style=for-the-badge)](https://wakatime.com/badge/user/eaf11f95-5e2a-4b60-ae6a-38cd01ed317b/project/bbd13748-36e6-4383-ac40-9c4e72c060d1)\n[![Testing](https://img.shields.io/github/actions/workflow/status/HapticX/HappyX/tests.yml?label=Testing\u0026logo=github\u0026style=for-the-badge)](https://github.com/HapticX/happyx/actions/workflows/tests.yml)\n\n\n[![Documentation](https://img.shields.io/badge/Documentation-2b2e3b?style=for-the-badge\u0026logo=data:image/svg%2bxml;base64,PHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Im05IDExYy0wLjU1MjI4IDAtMSAwLjQ0NzctMSAxczAuNDQ3NzIgMSAxIDFoNmMwLjU1MjMgMCAxLTAuNDQ3NyAxLTFzLTAuNDQ3Ny0xLTEtMWgtNnptMCAzYy0wLjU1MjI4IDAtMSAwLjQ0NzctMSAxczAuNDQ3NzIgMSAxIDFoNmMwLjU1MjMgMCAxLTAuNDQ3NyAxLTFzLTAuNDQ3Ny0xLTEtMWgtNnptMy40ODItMTJjMC42Nzg4LTAuMDAxMDQgMS4yODEyLTAuMDAxOTYgMS44Mzc2IDAuMjI4NTFzMC45ODE4IDAuNjU3MTEgMS40NjEgMS4xMzc4YzAuOTQ5NiAwLjk1MjUxIDEuOTAwNyAxLjkwMzYgMi44NTMyIDIuODUzMiAwLjQ4MDcgMC40NzkyNSAwLjkwNzQgMC45MDQ1OSAxLjEzNzggMS40NjEgMC4yMzA1IDAuNTU2NDEgMC4yMjk2IDEuMTU4OCAwLjIyODUgMS44Mzc3LTAuMDAzOCAyLjUxNTktMWUtNCA1LjAzMTgtMWUtNCA3LjU0NzggMWUtNCAwLjg4NjUgMWUtNCAxLjY1MDMtMC4wODIxIDIuMjYxOS0wLjA4ODIgMC42NTU1LTAuMjg2OSAxLjI4MzktMC43OTY2IDEuNzkzNi0wLjUwOTYgMC41MDk2LTEuMTM4IDAuNzA4NC0xLjc5MzUgMC43OTY1LTAuNjExNyAwLjA4MjItMS4zNzU1IDAuMDgyMi0yLjI2MiAwLjA4MjFoLTYuMTMxNmMtMC44ODY1IDFlLTQgLTEuNjUwMyAxZS00IC0yLjI2Mi0wLjA4MjEtMC42NTU1MS0wLjA4ODEtMS4yODM5LTAuMjg2OS0xLjc5MzUtMC43OTY1LTAuNTA5NjYtMC41MDk3LTAuNzA4NC0xLjEzODEtMC43OTY1My0xLjc5MzYtMC4wODIyNC0wLjYxMTYtMC4wODIyLTEuMzc1NC0wLjA4MjE1LTIuMjYxOWwxZS01IC0xMC4wNjZjMC0wLjAyMjAyLTFlLTUgLTAuMDQzOTctMWUtNSAtMC4wNjU4My01ZS01IC0wLjg4NjQ5LTllLTUgLTEuNjUwMyAwLjA4MjE1LTIuMjYyIDAuMDg4MTMtMC42NTU1MSAwLjI4Njg3LTEuMjgzOSAwLjc5NjU0LTEuNzkzNSAwLjUwOTY2LTAuNTA5NjcgMS4xMzgtMC43MDg0MSAxLjc5MzUtMC43OTY1NCAwLjYxMTY2LTAuMDgyMjQgMS4zNzU1LTAuMDgyMiAyLjI2Mi0wLjA4MjE1IDEuMTgyNiA3ZS01IDIuMzY1MiAwLjAwMTY4IDMuNTQ3OC0xLjRlLTR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiNmMWZhOGMiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPg0KPC9zdmc+DQo=\u0026label=HappyX\u0026labelColor=3b3e4b)](https://hapticx.github.io/happyx/#/guide/)\n[![Tutorials](https://img.shields.io/badge/Tutorials-2b2e3b?style=for-the-badge\u0026logo=data:image/svg%2bxml;base64,PHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOC4zMTYgMi4wN2EuNzUuNzUgMCAwMC0uNjMyIDBsLTcgMy4yNWEuNzUuNzUgMCAwMDAgMS4zNmwxLjQzNC42NjZBLjc0Ni43NDYgMCAwMDIgNy43NVYxMWEuNzUuNzUgMCAwMC4xNTguNDZMMi43NSAxMWwtLjU5Mi40Ni4wMDEuMDAyLjAwMS4wMDEuMDAzLjAwNC4wMDguMDFhMS44ODIgMS44ODIgMCAwMC4xMDMuMTJjLjA2OC4wNzYuMTY1LjE3OC4yOTIuMjk5LjI1NC4yNC42My41NTUgMS4xMzIuODY2QzQuNzA2IDEzLjM4OCA2LjIxNyAxNCA4LjI1IDE0YzIuMDM3IDAgMy40NC0uNjE1IDQuMzQ1LTEuMjY2YTUuMzIgNS4zMiAwIDAwLjk3Ny0uOTAyIDMuOTE2IDMuOTE2IDAgMDAuMzIyLS40NDhsLjAwNy0uMDEyLjAwMy0uMDA0di0uMDAyaC4wMDFjMC0uMDAxIDAtLjAwMi0uNjU1LS4zNjZsLjY1NS4zNjVBLjc1NC43NTQgMCAwMDE0IDExVjcuNzVhLjc0Ny43NDcgMCAwMC0uMTE4LS40MDRsMS40MzQtLjY2NmEuNzUuNzUgMCAwMDAtMS4zNmwtNy0zLjI1ek0xMi41IDcuOTg4TDguMzE2IDkuOTNhLjc1Ljc1IDAgMDEtLjYzMiAwTDMuNSA3Ljk4OHYyLjcyM2E1LjU4NSA1LjU4NSAwIDAwLjk5Ljc3NmMuODA0LjUgMi4wNDMgMS4wMTMgMy43NiAxLjAxMyAxLjcxMyAwIDIuODEtLjUxIDMuNDY4LS45ODRhMy44MTIgMy44MTIgMCAwMC43ODItLjc0NVY3Ljk4OHpNOCA4LjQyM0wyLjc4MSA2IDggMy41NzcgMTMuMjE5IDYgOCA4LjQyM3oiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI2YxZmE4YyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+\u0026label=HappyX\u0026labelColor=3b3e4b)](https://github.com/HapticX/happyx-tutorial-series)\n\n[![VS Code Plugin](https://img.shields.io/badge/Plugin-1b1e2b?style=for-the-badge\u0026logo=visualstudiocode\u0026logoColor=f1fa8c\u0026label=VS%20Code\u0026labelColor=2b2e3b)](https://github.com/HapticX/hpx-vs-code)\n\n[![Python Bindings](https://img.shields.io/badge/Bindings-1b1e2b?style=for-the-badge\u0026logo=python\u0026logoColor=f1fa8c\u0026label=Python\u0026labelColor=2b2e3b)](https://pypi.org/project/happyx/)\n[![NodeJS Bindings](https://img.shields.io/badge/Bindings-1b1e2b?style=for-the-badge\u0026logo=npm\u0026logoColor=f1fa8c\u0026label=NodeJS\u0026labelColor=2b2e3b)](https://www.npmjs.com/package/happyx)\n\n\u003c/div\u003e\n\n\n# Why HappyX? 💁‍♀️\n\u003e HappyX is a web framework with asynchronous, macro-oriented, full stack support.\n\nIn HappyX you can write `single page`, `static site generation` and `server side rendering` applications 💡\n\nYou can write Rest API with HappyX also 🔌\n\nHappyX is very simple to use. Keep your peace of mind 🙂\n\n## Why Not Jester/Karax? 🤔\nJester and Karax have many features, but Jester is a `backend web framework`, and Karax is a `frontend web framework`. HappyX  is a `full-stack web framework` that combines the features of Jester and Karax and slightly improves them 🛠\n\nWith HappyX you mustn't learn new libraries/frameworks to switch between `frontend` and `backend`. You can switch between them easily using HappyX ✌\n\nHappyX is macro-oriented web framework so you mustn't write a lot of code ✨\n\n## Features ⚡\n- Multiple options for HTTP server! Happyx use `asynchttpserver` as default HTTP server (`httpx` via `-d:happyxHttpx`, `httpbeast` via `-d:happyxBeast` and `microhttpserver` via `-d:happyxMicro` as alternative HTTP servers).\n- Support `SPA` on `JS` backend and `SSR` on other backends.\n- Build HTML, CSS and pure JS with `buildHtml`, `buildStyle` and `buildJs` macros.\n- Request models that supports `JSON`/`XML`/`Form-Data`/`x-www-form-urlencoded` with `model` macro.\n- Routing and powerful path params.\n- Assignment path params with `pathParams` macro.\n- Powerful mounting sub-applications with `mount` macro. \n- Logging with `-d:debug`.\n- Automatic translate with `-d:hpxTranslate` or `-d:translate` flags.\n- CLI tool for `creating`, `serving` and `building` your projects.\n- Hot code reloading (only for `SPA` projects as of now).\n- [Python bindings](https://pypi.org/project/happyx/)\n- [NodeJS bindings](https://www.npmjs.com/package/happyx)\n\n## Minimal Example 👩‍💻\n\n\u003ctable height=\"180px\"\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003eSPA\u003c/td\u003e\n      \u003ctd align=\"center\"\u003eSSR\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\n        \u003cpre lang=\"nim\"\u003e\u003ccode\u003eimport happyx\n\n    appRoutes \"app\":\n      \"/\":\n        \"Hello, world!\"\n\u003c/code\u003e\u003c/pre\u003e\n      \u003c/td\u003e\u003ctd\u003e\n      \u003cpre lang=\"nim\"\u003e\u003ccode\u003eimport happyx\n      \n    serve \"127.0.0.1\", 5000:\n      \"/\":\n        \"Hello, world!\"\n\u003c/code\u003e\u003c/pre\u003e\n      \u003c/td\u003e\n    \u003ctr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n# Get Started 👨‍🔬\n\n## Installing 📥\n### Nimble\n```shell\nnimble install happyx@#head\n```\n\n### Nimble via Git\n```shell\nnimble install https://github.com/HapticX/happyx\n```\n\n### PyPI\n```shell\npip install happyx\n```\n\n## Usage ▶\n### SSR\n```bash\nhpx create --name ssr_project --kind SSR\ncd ssr_project/src\n```\n\nMain script will be able in `/ssr_project/src/main.nim`\n\n#### Run 💻\n\n\n| HTTP Server          | Flag       |\n| -------------------- | ---------- |\n| Default              | no flags   |\n| Httpx                | `-d:httpx` |\n| MicroAsyncHttpServer | `-d:micro` |\n| HttpBeast            | `-d:beast` |\n\n### SPA\n```bash\nhpx create --name spa_project --kind SPA --path-params\ncd spa_project\n```\n\nMain script will be able in `/spa_project/src/main.nim`\n\n#### Run 💻\nJust run this command and see magic ✨\n```bash\nhpx dev --reload\n```\n\n## Have A Question? 👀\n\n[![StackOverflow](https://img.shields.io/badge/Overflow-1b1e2b?style=for-the-badge\u0026logo=stackoverflow\u0026logoColor=f1fa8c\u0026label=Stack\u0026labelColor=2b2e3b)](https://stackoverflow.com/search?q=%5Bnim-lang%5D+HappyX)\n\n## Have A Nice Idea? 🍍\n\n[Open issue](https://github.com/HapticX/happyx/issues/new/choose) or contact us hapticx.company@gmail.com\n\n\n## Contributing 🌀\nSee [Contributing.md](https://github.com/HapticX/happyx/blob/master/.github/CONTRIBUTING.md) for more information\n\n## Donate 💰\n[![Tinkoff](https://img.shields.io/badge/Tinkoff-ffdd2d?style=for-the-badge\u0026logo=tinkoff\u0026logoColor=f1fa8c\u0026label=Сбор%20Средств\u0026labelColor=2b2e3b)](https://www.tinkoff.ru/cf/9HWYxcPF4pS)\n\n\n## Star History ✨\n\n\u003ca href=\"https://star-history.com/#HapticX/happyx\u0026Date\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=HapticX/happyx\u0026type=Date\u0026theme=dark\" /\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=HapticX/happyx\u0026type=Date\" /\u003e\n    \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=HapticX/happyx\u0026type=Date\" /\u003e\n  \u003c/picture\u003e\n\u003c/a\u003e\n\n","funding_links":["https://liberapay.com/Ethosa","https://issuehunt.io/r/HapticX/happyx","https://paypal.me/ethosa"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhapticx%2Fhappyx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhapticx%2Fhappyx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhapticx%2Fhappyx/lists"}