# 🚲 The Fixi Project
[The Fixi Project](https://fixiproject.org) is a collection of five small web libraries based on other libraries we work
on.
Each library in The Fixi Project is constrained to have an *unminified, uncompressed* source size smaller
than the excellent [Preact](https://preactjs.org) library's [min.gz'd size](https://bundlephobia.com/package/preact)
(~ 4.7kb).
## The Libraries
The five libraries each provide independent bits of functionality, but are designed to compose well. You can mix and
match them as you see fit.
### 🚲 `fixi.js` - supercharged HTML
`fixi.js` is the original and main library in this collection. It is based on [htmx](https://htmx.org) and, like htmx,
makes it possible to issue HTTP requests from elements in response to events.
Here is a fixi-powered button:
```html
```
This button will issue an HTTP POSt to `/like` when it is clicked and will replace itself with whatever HTML content the
server responds with. This simple concept is a surprisingly powerful way to build web applications.
You can read more about how fixi works on its [homepage](https://github.com/bigskysoftware/fixi).
### 🥊 `moxi.js` - inline scripting & simple reactivity
`moxi.js` adds inline scripting and DOM-based reactivity. It is based on [hyperscript](https://hyperscript.org) and lets
you put behavior directly on elements via `on-*` attributes, plus a `live` attribute that re-runs whenever the page
changes.
Here is a moxi-powered button:
```html
```
This button disables itself and updates its text when clicked, without a separate `
```
The entire fixi project comes in at ~4.4kb when brotli-compressed.
## Developing
From a fresh checkout of this repo:
```bash
npm install # installs playwright + terser (dev-only)
npm run clone # clones each sub-project repo into its directory
npm test # runs the full test suite across all libraries (headless)
npm run build # builds the all-in-one bundle into dist/
npm run demo # runs the demo app on http://localhost:8765
npm run serve # serves the docs site on http://localhost:4000
```
`npm test` accepts a subset of project names, so `npm test rexi paxi` runs only those two.
## License
BSD-0 (Zero-Clause BSD) across all libraries.