Skip to content

HapticX/happyx

Repository files navigation

Macro-oriented asynchronous full-stack web-framework written in Nim with ♥

Nim language Python language

JavaScript language TypeScript language

wakatime Testing

Documentation Tutorials

VS Code Plugin

Python Bindings NodeJS Bindings

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).
  • Built-in UI library (to enable compile with -d:enableUi flag).
  • Python bindings
  • NodeJS bindings

Minimal Example 👩‍💻

SPA SSR
import happyx
appRoutes "app":
  "/":
    "Hello, world!"
import happyx
serve "127.0.0.1", 5000:
  "/":
    "Hello, world!"

Get Started 👨‍🔬

Installing 📥

Nimble

nimble install happyx@#head

Nimble via Git

nimble install https://github.com/HapticX/happyx

PyPI

pip install happyx

Usage ▶

SSR

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

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 ✨

hpx dev --reload

Have A Question? 👀

StackOverflow

Have A Nice Idea? 🍍

Open issue or contact us hapticx.company@gmail.com

Contributing 🌀

See Contributing.md for more information

Donate 💰

Tinkoff

Star History ✨

Star History Chart