AppRun
AppRun is a JavaScript library for building reliable, high-performance web applications using the Elm-inspired architecture, events, and components.
// define the application state
const state = 0;
// view is a pure function to display the state
const view = state => `<div>
<h1>${state}</h1>
<button onclick="app.run('-1')">-1</button>
<button onclick="app.run('+1')">+1</button>
</div>`;
// update is a collection of event handlers
const update = {
'+1': state => state + 1,
'-1': state => state - 1
};
app.start(document.body, state, view, update);
AppRun Benefits
- Clean architecure that needs less code
- State management and routing included
- No proprietary syntax to learn (no hooks)
- Use directly in the browser or with a compiler/bundler
- Advanced features: JSX, Web Components, Dev Tools, SSR, etc.
Getting Started
AppRun is distributed on npm. To get it, run:
npm install apprun
You can also load AppRun directly from the unpkg.com CDN:
<script src="https://unpkg.com/apprun/dist/apprun-html.js"></script>
<script>
const view = state => `<div>${state}</div>`;
app.start(document.body, 'hello AppRun', view);
</script>
Or, use the ESM version:
<script type="module">
import { app } from 'https://unpkg.com/apprun/dist/apprun-html.esm.js';
const view = state => `<div>${state}</div>`;
app.start(document.body, 'hello ESM', view);
</script>
Or, you can create an AppRun app by using the npm create apprun-app
command.
npm create apprun-app [my-app]
Component and Web Component
An AppRun component is a mini-application with elm architecture, which means inside a component, there are state, view, and update. In addition, components provide a local scope.
class Counter extends Component {
state = 0;
view = state => {
const add = (state, num) => state + num;
return <>
<h1>{state}</h1>
<button $onclick={[add, -1]}>-1</button>
<button $onclick={[add, +1]}>+1</button>
</>;
}
}
app.render(document.body, <Counter/>);
You can convert AppRun components into web components/custom elements. AppRun components become the custom elements that also can handle AppRun events.
class Counter extends Component {
state = 0;
view = state => {
const add = (state, num) => state + num;
return <>
<h1>{state}</h1>
<button $onclick={[add, -1]}>-1</button>
<button $onclick={[add, +1]}>+1</button>
</>;
}
}
app.webComponent('my-app', Counter);
app.render(document.body, <my-app />);
All the Ways to Make a Web Component - May 2021 Update compares the coding style, bundle size, and performance of 55 different ways to make a Web Component. It put AppRun on the top 1/3 of the list of bundle size and performance.
Learn More
You can get started with AppRun Docs and the AppRun Playground.
AppRun Book from Apress
Contribute
You can launch the webpack dev-server and the demo app from the demo folder with the following npm commands:
npm install
npm start
You can run the unit tests from the tests folder.
npm test
Unit tests can serve as functional specifications.
Finally, to build optimized js files to the dist folder, just run:
npm run build
Have fun and send pull requests.
Contributors
Support
AppRun is an MIT-licensed open source project. Please consider supporting the project on Patreon.
Thank you for your support
- Athkahden Asura
- Alfred Nerstu
- Gyuri Lajos
- Lorenz Gliรmann
- Kevin Shi
- Chancy Kennedy
License
MIT
Copyright (c) 2015-2022 Yiyi Sun