|
1 | 1 | # [Aberdeen](https://aberdeenjs.org/) [](https://github.com/vanviegen/aberdeen/blob/master/LICENSE.txt) [](https://badge.fury.io/js/aberdeen)  [](https://github.com/vanviegen/aberdeen) |
2 | 2 |
|
3 | | -Build fast reactive UIs in pure TypeScript/JavaScript without a virtual DOM. |
| 3 | +Reactive UIs in plain TypeScript. Simple to learn, fast to ship. |
4 | 4 |
|
5 | | -Aberdeen's approach is refreshingly simple: |
6 | | - |
7 | | -> Use many small anonymous functions for emitting DOM elements, and automatically rerun them when their underlying data changes. JavaScript `Proxy` is used to track reads and updates to this data, which can consist of anything, from simple values to complex, typed, and deeply nested data structures. |
| 5 | +Aberdeen wraps your state in ES6 `Proxy` objects for fine-grained property access tracking, then automatically re-executes only the DOM-building closures that depend on changed data. So we get precise DOM updates with neither virtual DOM diffing nor compiler magic. |
8 | 6 |
|
9 | 7 | ## Why use Aberdeen? |
10 | 8 |
|
11 | | -- 🎩 **Simple:** Express UIs naturally in JavaScript/TypeScript, without build steps or JSX, and with a minimal amount of concepts you need to learn. |
12 | | -- ⏩ **Fast:** No virtual DOM. Aberdeen intelligently updates only the minimal, necessary parts of your UI when proxied data changes. |
13 | | -- 👥 **Awesome lists**: It's very easy and performant to reactively display data sorted by whatever you like. |
14 | | -- 🔬 **Tiny:** Around 6KB (minimized and gzipped) for the core system. Zero runtime dependencies. |
15 | | -- 🔋 **Batteries included**: Comes with browser history management, routing, revertible patches for optimistic user-interface updates, component-local CSS, SVG support, helper functions for transforming reactive data (mapping, partitioning, filtering, etc) and hide/unhide transition effects. No bikeshedding required! |
| 9 | +- **Simple:** Express UIs naturally in JavaScript/TypeScript, without requiring build steps or JSX, and with a minimal amount of concepts you need to learn. |
| 10 | +- **Type-safe:** Your reactive state can be regular TypeScript objects and arrays, with full type safety and autocompletion. |
| 11 | +- **Fast:** No virtual DOM. Aberdeen intelligently updates only the minimal, necessary parts of your UI when proxied data changes. |
| 12 | +- **Awesome lists**: It's very easy and performant to reactively display data sorted by whatever you like. |
| 13 | +- **Tiny:** Around 7KB (minimized and gzipped) for the core system. Zero runtime dependencies. |
| 14 | +- **Batteries included**: Comes with... |
| 15 | + - Browser history management |
| 16 | + - Routing |
| 17 | + - Revertible patches for optimistic user-interface updates |
| 18 | + - Component-local CSS with Tailwind-like shorthands |
| 19 | + - SVG support |
| 20 | + - Helper functions for transforming reactive data (mapping, partitioning, filtering, etc) |
| 21 | + - Hide/unhide transition effects |
16 | 22 |
|
17 | 23 | ## Why *not* use Aberdeen? |
18 | 24 |
|
19 | | -- 🤷 **Lack of community:** There are not many of us -Aberdeen developers- yet, so don't expect terribly helpful Stack Overflow/AI answers. |
20 | | -- 📚 **Lack of ecosystem:** You'd have to code things yourself, instead of duct-taping together a gazillion React ecosystem libraries. |
| 25 | +- **Lack of community:** There are not many of us -Aberdeen developers- yet, so don't expect terribly helpful Stack Overflow/AI answers. |
| 26 | +- **Lack of ecosystem:** You'd have to code things yourself, instead of duct-taping together a gazillion React ecosystem libraries. |
21 | 27 |
|
22 | 28 | ## Examples |
23 | 29 |
|
|
0 commit comments