nano-jsx
Version:
SSR first, lightweight 1kB JSX library.
139 lines (99 loc) • 5.73 kB
Markdown
<p align="center">
<a href="http://nanojsx.io/">
<!-- https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#specifying-the-theme-an-image-is-shown-to -->
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/nanojsx/nano/master/readme/nano-jsx-logo-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/nanojsx/nano/master/readme/nano-jsx-logo.svg">
<img alt="Nano JSX Logo" src="https://raw.githubusercontent.com/nanojsx/nano/master/readme/nano-jsx-logo.svg">
</picture>
</a>
</p>
<p align="center">
SSR first, lightweight <b>1kB</b> JSX library.
</p>
</div>
<h3 align="center">
Written in TypeScript.<br />
Works on Node and Deno.<br />
Designed to build ultra fast MPAs and SPAs.
</h3>
<br/>
<p align="center">
<a href="https://www.npmjs.com/package/nano-jsx"><img src="https://img.shields.io/badge/available%20on-npmjs.com-lightgrey.svg?logo=node.js&logoColor=339933&labelColor=white&style=flat-square"></a>
<a href="https://deno.land/x/nano_jsx"><img src="https://img.shields.io/badge/available%20on-deno.land/x-lightgrey.svg?logo=deno&labelColor=black&style=flat-square"></a>
<br/><br/>
<img src="https://img.badgesize.io/nanojsx/nano/master/bundles/nano.core.min.js?compression=gzip&style=flat-square" alt="gzip size">
<a href="https://github.com/nanojsx/nano/actions?query=workflow%3ANodeJS"><img src="https://img.shields.io/github/actions/workflow/status/nanojsx/nano/nodejs.yml?branch=master&label=NodeJS&logo=github&style=flat-square"></a>
<a href="https://github.com/nanojsx/nano/actions?query=workflow%3ADeno"><img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/nanojsx/nano/deno.yml?branch=master&label=Deno&logo=github&style=flat-square"></a>
<a href="https://github.com/nanojsx/nano/commits/master"><img src="https://img.shields.io/github/last-commit/nanojsx/nano.svg?style=flat-square" alt="GitHub last commit"></a>
<a href="https://github.com/sponsors/yandeu"><img src="https://img.shields.io/github/sponsors/yandeu?style=flat-square" alt="Sponsors"></a>
<a href="https://github.com/prettier/prettier"><img src="https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square" alt="code style: prettier"></a>
<a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/built%20with-TypeScript-blue?style=flat-square"></a>
<a href="https://codecov.io/gh/nanojsx/nano"><img src="https://img.shields.io/codecov/c/github/nanojsx/nano?logo=codecov&style=flat-square" alt="Codecov"/></a>
<img src="https://img.shields.io/node/v/nano-jsx.svg?style=flat-square" alt="Node version"/>
<a href="https://discord.gg/96PGJeB8xf"> <img src="https://img.shields.io/discord/912874504877912075?color=%237289da&label=discord&logo=discord" alt="Join our discord server!"></a>
</p>
<hr>
## News
nano-jsx is now at v0.2.x 🎉
This means, no breaking changes till v0.3.x
[Tweet about it!](http://twitter.com/share?text=nano-jsx%20has%20reached%20v0.2!&url=https://nanojsx.io/)
## Changes in v0.2.0
- Breaking Change: Fix Shadow DOM DIV wrapping. [#146](https://github.com/nanojsx/nano/pull/146) (@hbroer)
- Breaking Change: Improve Router Listener. [#115](https://github.com/nanojsx/nano/issues/115)
- Added Bun.js support. [#151](https://github.com/nanojsx/nano/pull/151) (@lanten)
- Added renderComponentGetReference function. [cbe51e3](https://github.com/nanojsx/nano/commit/cbe51e3c37cd494a31070244ac20e9bb16121592)
## Getting Started
- Visit the [website](http://nanojsx.io/)
- Download the [template](https://github.com/nanojsx/template)
- Check out the [sandbox](https://codepen.io/yandeu/pen/MWKMmbq)
- Try the [deno example](https://github.com/nanojsx/nano-jsx-deno-example)
## Video Tutorial
<a href="https://www.youtube.com/playlist?list=PLC2Z8IWl1XDJI4Ah7ABolQ79AugF_eH1g"><img width="300" src="https://raw.githubusercontent.com/nanojsx/nano/master/readme/thumbnail.png" /></a>
## Features
The best about Nano JSX is the **small bundle size**. It builds, although is sound crazy, bundles as small as svelte!
### More Features
- **SSR**
Out of the box, very simple to use
- **Pre-Rendering**
Renders your app to static html if you want.
(This is possible, but requires some knowledge.
I plan to make a tutorial soon.)
- **Partial Hydration**
Hydrate and only the parts you really need
- **Isomorphic Router**
Works on Client- and Server-Side
- **CSS in JS**
Use JavaScript objects for styling
- **No JSX build tools required**
Uses Tagged Templates instead of JSX if you prefer
- **Props, Ref, Context and Events**
Use Props, Ref, Context API and Events as you are used to in react
- **Inline SVG**
No problem
- **Prefetch**
Use the built-in Link Component
- **1KB (gzip)**
All of this in only ~1KB
_(Well, the core module is only about ~1KB)_
- **CustomElements mode**
You can define your component written with Nano JSX as web-components with `defineAsCustomElements`. This enables you to develop very light web components. (thanks @Shinyaigeek)
## Documentation
Checkout the [website](http://nanojsx.io/) to find out more!
---
## Development Section
### Run browser tests (visually)
```bash
# install dependencies
npm install
# build
npm run build
# bundle
npm run bundle
# create instrumented bundle
npx webpack -c webpack/webpack.bundle.instrumented.js
# transpile browserTest library
npx tsc -p scripts/browserTest/tsconfig.json
# open browser to run the tests
npx five-server . --open=test/browser
```