Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/HapticX/happyx
Macro-oriented asynchronous web-framework written in Nim with β₯
https://github.com/HapticX/happyx
backend frontend full-stack hacktoberfest happyx http-server javascript nim open-source python server spa ssg ssr typescript web web-framework
Last synced: 3 months ago
JSON representation
Macro-oriented asynchronous web-framework written in Nim with β₯
- Host: GitHub
- URL: https://github.com/HapticX/happyx
- Owner: HapticX
- License: mit
- Created: 2023-03-27T04:47:32.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-10-30T00:36:21.000Z (3 months ago)
- Last Synced: 2024-10-30T02:50:39.682Z (3 months ago)
- Topics: backend, frontend, full-stack, hacktoberfest, happyx, http-server, javascript, nim, open-source, python, server, spa, ssg, ssr, typescript, web, web-framework
- Language: Nim
- Homepage: https://hapticx.github.io/happyx/
- Size: 53.2 MB
- Stars: 536
- Watchers: 13
- Forks: 18
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: .github/CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-nim - happyx - A macro-oriented full stack asynchronous web framework written in Nim. (Web / Frameworks)
README
### Macro-oriented asynchronous full-stack web-framework written in Nim with β₯
![Nim language](https://img.shields.io/badge/>=1.6.14-1b1e2b?style=for-the-badge&logo=nim&logoColor=f1fa8c&label=Nim&labelColor=2b2e3b)
![Python language](https://img.shields.io/badge/>=3.7.x-1b1e2b?style=for-the-badge&logo=python&logoColor=f1fa8c&label=Python&labelColor=2b2e3b)![JavaScript language](https://img.shields.io/badge/ES6-1b1e2b?style=for-the-badge&logo=javascript&logoColor=f1fa8c&label=JavaScript&labelColor=2b2e3b)
![TypeScript language](https://img.shields.io/badge/>=5.2.2-1b1e2b?style=for-the-badge&logo=typescript&logoColor=f1fa8c&label=TypeScript&labelColor=2b2e3b)[![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)
[![Testing](https://img.shields.io/github/actions/workflow/status/HapticX/HappyX/tests.yml?label=Testing&logo=github&style=for-the-badge)](https://github.com/HapticX/happyx/actions/workflows/tests.yml)[![Documentation](https://img.shields.io/badge/Documentation-2b2e3b?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Im05IDExYy0wLjU1MjI4IDAtMSAwLjQ0NzctMSAxczAuNDQ3NzIgMSAxIDFoNmMwLjU1MjMgMCAxLTAuNDQ3NyAxLTFzLTAuNDQ3Ny0xLTEtMWgtNnptMCAzYy0wLjU1MjI4IDAtMSAwLjQ0NzctMSAxczAuNDQ3NzIgMSAxIDFoNmMwLjU1MjMgMCAxLTAuNDQ3NyAxLTFzLTAuNDQ3Ny0xLTEtMWgtNnptMy40ODItMTJjMC42Nzg4LTAuMDAxMDQgMS4yODEyLTAuMDAxOTYgMS44Mzc2IDAuMjI4NTFzMC45ODE4IDAuNjU3MTEgMS40NjEgMS4xMzc4YzAuOTQ5NiAwLjk1MjUxIDEuOTAwNyAxLjkwMzYgMi44NTMyIDIuODUzMiAwLjQ4MDcgMC40NzkyNSAwLjkwNzQgMC45MDQ1OSAxLjEzNzggMS40NjEgMC4yMzA1IDAuNTU2NDEgMC4yMjk2IDEuMTU4OCAwLjIyODUgMS44Mzc3LTAuMDAzOCAyLjUxNTktMWUtNCA1LjAzMTgtMWUtNCA3LjU0NzggMWUtNCAwLjg4NjUgMWUtNCAxLjY1MDMtMC4wODIxIDIuMjYxOS0wLjA4ODIgMC42NTU1LTAuMjg2OSAxLjI4MzktMC43OTY2IDEuNzkzNi0wLjUwOTYgMC41MDk2LTEuMTM4IDAuNzA4NC0xLjc5MzUgMC43OTY1LTAuNjExNyAwLjA4MjItMS4zNzU1IDAuMDgyMi0yLjI2MiAwLjA4MjFoLTYuMTMxNmMtMC44ODY1IDFlLTQgLTEuNjUwMyAxZS00IC0yLjI2Mi0wLjA4MjEtMC42NTU1MS0wLjA4ODEtMS4yODM5LTAuMjg2OS0xLjc5MzUtMC43OTY1LTAuNTA5NjYtMC41MDk3LTAuNzA4NC0xLjEzODEtMC43OTY1My0xLjc5MzYtMC4wODIyNC0wLjYxMTYtMC4wODIyLTEuMzc1NC0wLjA4MjE1LTIuMjYxOWwxZS01IC0xMC4wNjZjMC0wLjAyMjAyLTFlLTUgLTAuMDQzOTctMWUtNSAtMC4wNjU4My01ZS01IC0wLjg4NjQ5LTllLTUgLTEuNjUwMyAwLjA4MjE1LTIuMjYyIDAuMDg4MTMtMC42NTU1MSAwLjI4Njg3LTEuMjgzOSAwLjc5NjU0LTEuNzkzNSAwLjUwOTY2LTAuNTA5NjcgMS4xMzgtMC43MDg0MSAxLjc5MzUtMC43OTY1NCAwLjYxMTY2LTAuMDgyMjQgMS4zNzU1LTAuMDgyMiAyLjI2Mi0wLjA4MjE1IDEuMTgyNiA3ZS01IDIuMzY1MiAwLjAwMTY4IDMuNTQ3OC0xLjRlLTR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiNmMWZhOGMiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPg0KPC9zdmc+DQo=&label=HappyX&labelColor=3b3e4b)](https://hapticx.github.io/happyx/#/guide/)
[![Tutorials](https://img.shields.io/badge/Tutorials-2b2e3b?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOC4zMTYgMi4wN2EuNzUuNzUgMCAwMC0uNjMyIDBsLTcgMy4yNWEuNzUuNzUgMCAwMDAgMS4zNmwxLjQzNC42NjZBLjc0Ni43NDYgMCAwMDIgNy43NVYxMWEuNzUuNzUgMCAwMC4xNTguNDZMMi43NSAxMWwtLjU5Mi40Ni4wMDEuMDAyLjAwMS4wMDEuMDAzLjAwNC4wMDguMDFhMS44ODIgMS44ODIgMCAwMC4xMDMuMTJjLjA2OC4wNzYuMTY1LjE3OC4yOTIuMjk5LjI1NC4yNC42My41NTUgMS4xMzIuODY2QzQuNzA2IDEzLjM4OCA2LjIxNyAxNCA4LjI1IDE0YzIuMDM3IDAgMy40NC0uNjE1IDQuMzQ1LTEuMjY2YTUuMzIgNS4zMiAwIDAwLjk3Ny0uOTAyIDMuOTE2IDMuOTE2IDAgMDAuMzIyLS40NDhsLjAwNy0uMDEyLjAwMy0uMDA0di0uMDAyaC4wMDFjMC0uMDAxIDAtLjAwMi0uNjU1LS4zNjZsLjY1NS4zNjVBLjc1NC43NTQgMCAwMDE0IDExVjcuNzVhLjc0Ny43NDcgMCAwMC0uMTE4LS40MDRsMS40MzQtLjY2NmEuNzUuNzUgMCAwMDAtMS4zNmwtNy0zLjI1ek0xMi41IDcuOTg4TDguMzE2IDkuOTNhLjc1Ljc1IDAgMDEtLjYzMiAwTDMuNSA3Ljk4OHYyLjcyM2E1LjU4NSA1LjU4NSAwIDAwLjk5Ljc3NmMuODA0LjUgMi4wNDMgMS4wMTMgMy43NiAxLjAxMyAxLjcxMyAwIDIuODEtLjUxIDMuNDY4LS45ODRhMy44MTIgMy44MTIgMCAwMC43ODItLjc0NVY3Ljk4OHpNOCA4LjQyM0wyLjc4MSA2IDggMy41NzcgMTMuMjE5IDYgOCA4LjQyM3oiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI2YxZmE4YyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+&label=HappyX&labelColor=3b3e4b)](https://github.com/HapticX/happyx-tutorial-series)[![VS Code Plugin](https://img.shields.io/badge/Plugin-1b1e2b?style=for-the-badge&logo=visualstudiocode&logoColor=f1fa8c&label=VS%20Code&labelColor=2b2e3b)](https://github.com/HapticX/hpx-vs-code)
[![Python Bindings](https://img.shields.io/badge/Bindings-1b1e2b?style=for-the-badge&logo=python&logoColor=f1fa8c&label=Python&labelColor=2b2e3b)](https://pypi.org/project/happyx/)
[![NodeJS Bindings](https://img.shields.io/badge/Bindings-1b1e2b?style=for-the-badge&logo=npm&logoColor=f1fa8c&label=NodeJS&labelColor=2b2e3b)](https://www.npmjs.com/package/happyx)# Why HappyX? πββοΈ
> HappyX is a web framework with asynchronous, macro-oriented, full stack support.In HappyX you can write `single page`, `static site generation` and `server side rendering` applications π‘
You can write Rest API with HappyX also π
HappyX is very simple to use. Keep your peace of mind π
## Why Not Jester/Karax? π€
Jester 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 πWith HappyX you mustn't learn new libraries/frameworks to switch between `frontend` and `backend`. You can switch between them easily using HappyX β
HappyX is macro-oriented web framework so you mustn't write a lot of code β¨
## Features β‘
- 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).
- Support `SPA` on `JS` backend and `SSR` on other backends.
- Build HTML, CSS and pure JS with `buildHtml`, `buildStyle` and `buildJs` macros.
- Request models that supports `JSON`/`XML`/`Form-Data`/`x-www-form-urlencoded` with `model` macro.
- Routing and powerful path params.
- Assignment path params with `pathParams` macro.
- Powerful mounting sub-applications with `mount` macro.
- Logging with `-d:debug`.
- Automatic translate with `-d:hpxTranslate` or `-d:translate` flags.
- CLI tool for `creating`, `serving` and `building` your projects.
- Hot code reloading (only for `SPA` projects as of now).
- [Python bindings](https://pypi.org/project/happyx/)
- [NodeJS bindings](https://www.npmjs.com/package/happyx)## Minimal Example π©βπ»
SPA
SSR
import happyx
appRoutes "app":
"/":
"Hello, world!"
import happyx
serve "127.0.0.1", 5000:
"/":
"Hello, world!"
# Get Started π¨βπ¬
## Installing π₯
### Nimble
```shell
nimble install happyx@#head
```### Nimble via Git
```shell
nimble install https://github.com/HapticX/happyx
```### PyPI
```shell
pip install happyx
```## Usage βΆ
### SSR
```bash
hpx create --name ssr_project --kind SSR
cd ssr_project/src
```Main script will be able in `/ssr_project/src/main.nim`
#### Run π»
| HTTP Server | Flag |
| -------------------- | ---------- |
| Default | no flags |
| Httpx | `-d:httpx` |
| MicroAsyncHttpServer | `-d:micro` |
| HttpBeast | `-d:beast` |### SPA
```bash
hpx create --name spa_project --kind SPA --path-params
cd spa_project
```Main script will be able in `/spa_project/src/main.nim`
#### Run π»
Just run this command and see magic β¨
```bash
hpx dev --reload
```## Have A Question? π
[![StackOverflow](https://img.shields.io/badge/Overflow-1b1e2b?style=for-the-badge&logo=stackoverflow&logoColor=f1fa8c&label=Stack&labelColor=2b2e3b)](https://stackoverflow.com/search?q=%5Bnim-lang%5D+HappyX)
## Have A Nice Idea? π
[Open issue](https://github.com/HapticX/happyx/issues/new/choose) or contact us [email protected]
## Contributing π
See [Contributing.md](https://github.com/HapticX/happyx/blob/master/.github/CONTRIBUTING.md) for more information## Donate π°
[![Tinkoff](https://img.shields.io/badge/Tinkoff-ffdd2d?style=for-the-badge&logo=tinkoff&logoColor=f1fa8c&label=Π‘Π±ΠΎΡ%20Π‘ΡΠ΅Π΄ΡΡΠ²&labelColor=2b2e3b)](https://www.tinkoff.ru/cf/9HWYxcPF4pS)## Star History β¨