apprun 3.38.0 → 6.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +12 -1
  2. package/README.md +18 -10
  3. package/apprun.d.ts +67 -23
  4. package/dist/apprun-code.js +1 -1
  5. package/dist/apprun-code.js.map +1 -1
  6. package/dist/apprun-dev-tools.js +1 -1
  7. package/dist/apprun-dev-tools.js.map +1 -1
  8. package/dist/apprun-html.esm.js +7 -7
  9. package/dist/apprun-html.esm.js.map +1 -1
  10. package/dist/apprun-html.js +1 -1
  11. package/dist/apprun-html.js.map +1 -1
  12. package/dist/apprun-play.js +1 -1
  13. package/dist/apprun-play.js.map +1 -1
  14. package/dist/apprun.esm.js +1 -1
  15. package/dist/apprun.esm.js.map +1 -1
  16. package/dist/apprun.js +1 -1
  17. package/dist/apprun.js.map +1 -1
  18. package/esm/add-components.js +7 -7
  19. package/esm/add-components.js.map +1 -1
  20. package/esm/app.js +81 -32
  21. package/esm/app.js.map +1 -1
  22. package/esm/apprun-code.js +8 -2
  23. package/esm/apprun-code.js.map +1 -1
  24. package/esm/apprun-html.js +14 -9
  25. package/esm/apprun-html.js.map +1 -1
  26. package/esm/apprun-play.js +7 -1
  27. package/esm/apprun-play.js.map +1 -1
  28. package/esm/apprun.js +38 -19
  29. package/esm/apprun.js.map +1 -1
  30. package/esm/component.js +90 -37
  31. package/esm/component.js.map +1 -1
  32. package/esm/directive.js +1 -1
  33. package/esm/directive.js.map +1 -1
  34. package/esm/router.js +73 -19
  35. package/esm/router.js.map +1 -1
  36. package/esm/types.js +2 -1
  37. package/esm/types.js.map +1 -1
  38. package/esm/vdom-my.js +52 -52
  39. package/esm/vdom-my.js.map +1 -1
  40. package/esm/vdom-to-html.js +8 -1
  41. package/esm/vdom-to-html.js.map +1 -1
  42. package/esm/vdom.js +3 -3
  43. package/esm/vdom.js.map +1 -1
  44. package/esm/version.js +1 -1
  45. package/esm/version.js.map +1 -1
  46. package/esm/web-component.js +23 -6
  47. package/esm/web-component.js.map +1 -1
  48. package/jsx-runtime.js +1 -1
  49. package/jsx-runtime.js.map +1 -1
  50. package/package.json +62 -2
  51. package/.clinerules +0 -1
  52. package/.travis.yml +0 -10
  53. package/BACKERS.md +0 -8
  54. package/CNAME +0 -1
  55. package/WHATSNEW.md +0 -367
  56. package/ai/apprun-html.prompt.md +0 -290
  57. package/ai/apprun.prompt.md +0 -602
  58. package/apprun-book.jpg +0 -0
  59. package/dist/apprun-dev-tools-tests.js +0 -1
  60. package/dist/apprun-dev-tools.js.LICENSE.txt +0 -1
  61. package/dist/apprun-play-html.esm.js +0 -34
  62. package/dist/apprun-play-html.esm.js.map +0 -1
  63. package/error.log +0 -0
  64. package/esm/apprun-play-html.js +0 -210
  65. package/esm/apprun-play-html.js.map +0 -1
  66. package/esm/shadow.js +0 -8
  67. package/esm/shadow.js.map +0 -1
  68. package/esm/vdom-html.js +0 -22
  69. package/esm/vdom-html.js.map +0 -1
  70. package/esm/vdom-my-new.js +0 -327
  71. package/esm/vdom-my-new.js.map +0 -1
  72. package/esm/vdom-patch.js +0 -103
  73. package/esm/vdom-patch.js.map +0 -1
  74. package/index.html +0 -87
  75. package/jest.config.js +0 -57
  76. package/jest.setup.js +0 -73
  77. package/logo.png +0 -0
  78. package/react.js +0 -13
  79. package/rollup.config.js +0 -62
  80. package/src/add-components.ts +0 -103
  81. package/src/app.ts +0 -173
  82. package/src/apprun-code.tsx +0 -177
  83. package/src/apprun-dev-tools-tests.tsx +0 -101
  84. package/src/apprun-dev-tools.tsx +0 -307
  85. package/src/apprun-html.ts +0 -25
  86. package/src/apprun-play.tsx +0 -249
  87. package/src/apprun.ts +0 -238
  88. package/src/component.ts +0 -388
  89. package/src/createState.ts +0 -11
  90. package/src/decorator.ts +0 -98
  91. package/src/directive.ts +0 -303
  92. package/src/global.d.ts +0 -22
  93. package/src/router.ts +0 -311
  94. package/src/shadow.tsx +0 -8
  95. package/src/tsconfig.json +0 -16
  96. package/src/type-utils.ts +0 -130
  97. package/src/types.ts +0 -151
  98. package/src/vdom-html.ts_ +0 -20
  99. package/src/vdom-lit-html.ts +0 -67
  100. package/src/vdom-my-new.ts +0 -311
  101. package/src/vdom-my-prop-attr.ts +0 -241
  102. package/src/vdom-my.ts +0 -286
  103. package/src/vdom-patch.ts +0 -108
  104. package/src/vdom-to-html.tsx +0 -49
  105. package/src/vdom.ts +0 -28
  106. package/src/version.ts +0 -16
  107. package/src/web-component.ts +0 -154
  108. package/tsconfig.jest.json +0 -49
  109. package/tsconfig.json +0 -16
  110. package/tslint.json +0 -114
  111. package/typescriptreact.json +0 -87
  112. package/viewEngine.js +0 -54
  113. package/webpack.config.cjs +0 -41
package/package.json CHANGED
@@ -1,15 +1,65 @@
1
1
  {
2
2
  "name": "apprun",
3
- "version": "3.38.0",
3
+ "version": "6.0.0-rc.0",
4
4
  "description": "JavaScript library that has Elm inspired architecture, event pub-sub and components",
5
5
  "main": "dist/apprun.js",
6
6
  "module": "esm/apprun.js",
7
7
  "types": "apprun.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./apprun.d.ts",
11
+ "import": "./esm/apprun.js",
12
+ "require": "./dist/apprun.js"
13
+ },
14
+ "./jsx-runtime": {
15
+ "types": "./apprun.d.ts",
16
+ "import": "./jsx-runtime.js",
17
+ "require": "./jsx-runtime.js"
18
+ },
19
+ "./createState": {
20
+ "types": "./apprun.d.ts",
21
+ "import": "./esm/createState.js",
22
+ "require": "./dist/createState.js"
23
+ },
24
+ "./apprun-html": {
25
+ "types": "./apprun.d.ts",
26
+ "import": "./esm/apprun-html.js",
27
+ "require": "./dist/apprun-html.js"
28
+ },
29
+ "./dist/*": "./dist/*",
30
+ "./package.json": "./package.json"
31
+ },
32
+ "files": [
33
+ "apprun.d.ts",
34
+ "cli/",
35
+ "dist/",
36
+ "esm/",
37
+ "jsx-runtime.js",
38
+ "jsx-runtime.js.map",
39
+ "README.md",
40
+ "CHANGELOG.md",
41
+ "LICENSE"
42
+ ],
43
+ "sideEffects": [
44
+ "./dist/apprun.js",
45
+ "./dist/apprun-html.js",
46
+ "./dist/apprun-code.js",
47
+ "./dist/apprun-play.js",
48
+ "./src/apprun-html.ts",
49
+ "./src/apprun-code.tsx",
50
+ "./esm/apprun.js",
51
+ "./esm/apprun-html.js",
52
+ "./esm/apprun-code.js",
53
+ "./esm/apprun-play.js",
54
+ "./jsx-runtime.js"
55
+ ],
8
56
  "bin": {
9
57
  "apprun": "cli/index.js"
10
58
  },
11
59
  "scripts": {
12
60
  "build": "tsc -p src && rollup -c && webpack --mode production",
61
+ "prepack": "npm run build",
62
+ "lint": "eslint .",
13
63
  "test": "jest",
14
64
  "jest": "jest --watch",
15
65
  "jest:debug": "node --inspect node_modules/.bin/jest --runInBand",
@@ -41,6 +91,8 @@
41
91
  "@rollup/plugin-node-resolve": "^16.0.0",
42
92
  "@rollup/plugin-terser": "^0.4.4",
43
93
  "@types/jest": "^29.5.14",
94
+ "eslint": "^10.5.0",
95
+ "immer": "^10.1.1",
44
96
  "jest": "^29.7.0",
45
97
  "jest-environment-jsdom": "^29.7.0",
46
98
  "json-loader": "^0.5.7",
@@ -50,13 +102,21 @@
50
102
  "ts-jest": "^29.4.0",
51
103
  "ts-loader": "^9.5.2",
52
104
  "typescript": "^5.8.3",
105
+ "typescript-eslint": "^8.61.1",
53
106
  "webpack": "^5.100.2",
54
107
  "webpack-cli": "^6.0.1",
55
108
  "webpack-dev-server": "^5.2.2"
56
109
  },
57
110
  "dependencies": {
58
111
  "commander": "^14.0.0",
59
- "immer": "^10.1.1",
60
112
  "property-information": "^7.1.0"
113
+ },
114
+ "peerDependencies": {
115
+ "immer": "^10.1.1"
116
+ },
117
+ "peerDependenciesMeta": {
118
+ "immer": {
119
+ "optional": true
120
+ }
61
121
  }
62
122
  }
package/.clinerules DELETED
@@ -1 +0,0 @@
1
- Update or create the file’s top comment block to briefly describe the file’s purpose, structure, and usage, matching its original style. Focus on clarity and maintainability for YOU to understand in the future.
package/.travis.yml DELETED
@@ -1,10 +0,0 @@
1
- language: node_js
2
- node_js:
3
- - '12'
4
- services:
5
- - xvfb
6
- before_install:
7
- - export CHROME_BIN=chromium-browser
8
- - export DISPLAY=:99.0
9
-
10
- script: npm run jest -ci
package/BACKERS.md DELETED
@@ -1,8 +0,0 @@
1
- ## Thank you for your support
2
-
3
- * Athkahden Asura
4
- * Alfred Nerstu
5
- * Gyuri Lajos
6
- * Lorenz Glißmann
7
- * Kevin Shi
8
- * Chancy Kennedy
package/CNAME DELETED
@@ -1 +0,0 @@
1
- apprun.js.org
package/WHATSNEW.md DELETED
@@ -1,367 +0,0 @@
1
- ## What's New
2
-
3
- > July 26, 2025, V3.38.0
4
-
5
- - Improved `$bind` directive to support nested objects and arrays: [Effortless Two-Way Data Binding in Apprun with $bind](#docs/done/blog-bind-directive.md)
6
- - Support for type safe props and children in components: [Typed Props and Children](#docs/done/blog-typed-props-and-children.md)
7
- - Use `unknown` instead of `any` for generic defaults to enhance type safety: [Why `unknown` is better than `any`](#docs/done/blog-why-unknown-better-than-any.md)
8
-
9
- > July 22, 2025, V3.37.0
10
-
11
- - Introduced `createState` helper for simplified immutable state updates using Immer [create-state-immer](#docs/done/blog-create-state-immer.md)
12
- - Added `addComponents` function for adding components to routes [add-components](#docs/done/blog-addcomponents-feature.md)
13
- - Improved type definitions for better TypeScript support
14
- - Moved the component to dev-tools
15
- - Fixed routing basePath initialization issue
16
-
17
-
18
- > July 15, 2025, V3.36.1
19
-
20
- - Continue code review with AI
21
- - Use property-information to improve property and attribute handling
22
- - Performance improvements in virtual DOM handling, see [analysis reports](#docs/done/framework-reordering-comparison.md)
23
- - New hierarchical matching behavior, see [hierarchical routing document](#docs/requirements/req-hierarchical-routing.md)
24
-
25
-
26
- > July 12, 2025, V3.36.0
27
-
28
- Code review by using Copilot and Claude Sonnet 4, see [plan-apprun-bugfixes.md](#docs/plan/plan-apprun-bugfixes.md) for details.
29
- - Enhanced type definitions (apprun.d.ts) for better TypeScript support
30
- - Fixed minor bugs and edge cases in virtual DOM handling
31
- - Fixed bugs in router initialization logic
32
-
33
- > July 11, 2025, V3.35.0
34
-
35
-
36
- ### Support auto use router for pretty links
37
-
38
- AppRun now supports pretty links.
39
-
40
- ```html
41
- <a href="/about">About</a>
42
- ```
43
-
44
- You can subscribe components to events like `'/about'`.
45
-
46
- ```js
47
- // Routing (component event)
48
- class Home extends Component {
49
- view = () => <div>Home</div>;
50
- update = {'/, /home': state => state };
51
- }
52
-
53
- class Contact extends Component {
54
- view = () => <div>Contact</div>;
55
- update = {'/contact': state => state };
56
- }
57
-
58
- class About extends Component {
59
- view = () => <div>About</div>;
60
- update = {'/about': state => state };
61
- }
62
-
63
- const App = () => <>
64
- <div id="menus">
65
- <a href="/home">Home</a>{' | '}
66
- <a href="/contact">Contact</a>{' | '}
67
- <a href="/about">About</a></div>
68
- <div id="pages"></div>
69
- </>
70
-
71
- app.render(document.body, <App />);
72
- [About, Contact, Home].map(C => new C().start('pages'));
73
- ```
74
- <apprun-code></apprun-code>
75
-
76
-
77
-
78
- AppRun will catch the `'/about'` route as event and render the component that is subscribed to it.
79
-
80
- If you have components subscribe to '#', or '#/', Apprun will fallback to the hash-based routing.
81
-
82
- > July 6, 2025, V3.33.10
83
-
84
- ### Support async generator for event handlers
85
-
86
- You can now use async generator functions for event handlers. The async generator function can return multiple values. AppRun will render each value in the order they are generated.
87
-
88
- ```js
89
- const state = {};
90
- const view = state => html`
91
- <div><button @click=${run(getComic)}>fetch ...</button></div>
92
- ${state.loading && html`<div>loading ... </div>`}
93
- ${state.comic && html`<img src=${state.comic.img} />`}
94
- `;
95
- async function* getComic() { // async generator function returns loading flag and then the comic object
96
- yield { loading: true };
97
- const response = await fetch('https://xkcd-api.netlify.app');
98
- const comic = await response.json();
99
- yield { comic };
100
- }
101
-
102
- app.start(document.body, state, view);
103
- ```
104
- <apprun-code></apprun-code>
105
-
106
-
107
- ### use lit-html V3 for apprun-html.js
108
-
109
- The `apprun-html.js` now uses `lit-html` V3 for rendering the view. The `apprun-html.js` is a standalone version of AppRun that uses `lit-html` for rendering the view without JSX.
110
-
111
- ```html
112
- <html lang="en">
113
- <head>
114
- <meta charset="utf-8">
115
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
116
- <title>Counter</title>
117
- </head>
118
- <body>
119
- <script src="https://unpkg.com/apprun/dist/apprun-html"></script>
120
- <script>
121
- const add = (state, delta) => state + delta;
122
- const view = state => {
123
- return html`<div>
124
- <h1>${state}</h1>
125
- <button @click=${run(add, -1)}>-1</button>
126
- <button @click=${run(add, +1)}>+1</button>
127
- </div>`;
128
- };
129
- app.start(document.body, 0, view);
130
- </script>
131
- </body>
132
-
133
- </html>
134
- ```
135
- <apprun-code></apprun-code>
136
-
137
-
138
-
139
-
140
- > Aug 12, 2024, V3.33.4
141
-
142
- ### Add app.use_render and app.use_react function
143
-
144
- The `app.use_render` function allows you to use a custom render function for rendering the view. The `app.use_react` function allows you to use React for rendering the view.
145
-
146
- ```js
147
- import ReactDOM from 'react-dom/client'
148
- import { flushSync } from 'react-dom';
149
- import app from 'apprun';
150
- use_react(React, ReactDOM);
151
- ```
152
-
153
- See https://github.com/yysun/apprun-antd-demo-js for an example.
154
-
155
- ### Support the _mounted_ function when starting a component manually
156
-
157
- > Dec, 8, 2023
158
-
159
- When using a component in JSX, AppRun always invokes the the _mounted_ lifecycle function each time the component is loaded.
160
-
161
- ```js
162
- class ComponentClass extends Component {
163
- mounted = () => console.log('mounted is called');
164
- }
165
- app.render(document.body, <ComponentClass />);
166
- ```
167
-
168
- However, the _mounted_ function is not called when you start the component manully in the previous versions.
169
-
170
- ```js
171
- class ComponentClass extends Component {
172
- mounted = () => console.log('mounted is called'); // not called in previous versions
173
- }
174
- new ComponentClass().start(document.body);
175
- ```
176
-
177
- Now, the _mounted_ function is called when the component is started.
178
-
179
- ```js
180
- class ComponentClass extends Component {
181
- mounted = () => console.log('mounted is called'); // called in this version
182
- }
183
- new ComponentClass().start(document.body);
184
- ```
185
-
186
- This change make the _mounted_ funciton compatible in JSX and in manual start.
187
-
188
-
189
- ### Support View Transition API
190
-
191
- > September, 27, 2023
192
-
193
- AppRun now supports the [View Transition API](https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent) at the event level, component level and app level.
194
-
195
- Event level example:
196
-
197
- ```js
198
- const update = {
199
- '+1': [state => state + 1, {transition: true}],
200
- '-1': [state => state - 1, {transition: true}]
201
- };
202
- ```
203
-
204
- Component level example:
205
-
206
- ```js
207
- class C extends Component {
208
-
209
- }
210
- new C().mount(document.body, {transition: true});
211
- ```
212
-
213
-
214
- App level example:
215
-
216
- ```js
217
- app.start(document.body, {transition: true});
218
- ```
219
-
220
- ### Vite Support
221
-
222
- > December 11, 2022
223
-
224
- The command `npm create apprun-app` supports [Vite](https://vitejs.dev/) in addition to esbuild and webpack.
225
-
226
- ### Use React for Rendering View
227
-
228
- You can use React for rendering view. See [apprun-use-react](https://github.com/yysun/apprun-use-react) for details.
229
-
230
- > React 18 has breaking changes. Please use React 17 for now.
231
-
232
- ### Create-AppRun-App CLI
233
-
234
- > April 5 , 2022
235
-
236
- You can create an AppRun app by running command `npm create apprun-app`.
237
-
238
- ```sh
239
- npm create apprun-app [my-app]
240
- ```
241
-
242
- > Note: AppRun CLI `npx apprun init` is deprecated. Please use `npm create apprun-app` instead.
243
-
244
-
245
- ## Recent Posts and Publications
246
-
247
- ### [All the Ways to Make a Web Component - May 2021 Update](https://webcomponents.dev/blog/all-the-ways-to-make-a-web-component/)
248
-
249
- This post 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.
250
-
251
-
252
- ### [A Dev Server Supports ESM](https://dev.to/yysun/a-dev-server-supports-esm-3cea)
253
-
254
- This post introduces [apprun-dev-server](https://dev.to/yysun/a-dev-server-supports-esm-3cea), a dev server that provides fast and productive experiences to AppRun application development, so-called unbundled development.
255
-
256
- ### [Observerble HQ Notebooks](https://observablehq.com/@yysun)
257
-
258
- * [Introducing AppRun](https://observablehq.com/@yysun/introducing-apprun)
259
-
260
- ### [Rust WebAssembly and AppRun](https://dev.to/yysun/rust-webassembly-and-apprun-3bei)
261
-
262
- ### [Serverless App Using Firebase and AppRun](https://dev.to/yysun/serverless-app-on-firebase-using-apprun-1k46)
263
-
264
- ### [Avoid Spaghetti Code using AppRun](https://dev.to/yysun/apprun-helps-to-avoid-spaghetti-code-1835)
265
-
266
- ### [Create a Phoenix LiveView Like App in JS with AppRun](https://dev.to/yysun/create-a-phoenix-liveview-like-app-in-js-with-apprun-dc8)
267
-
268
- ### [Reactivity in AppRun](https://dev.to/yysun/reactivity-in-apprun-31po)
269
-
270
- ### [AppRun Event Directives](https://dev.to/yysun/apprun-events-directives-4jph)
271
-
272
- ### [Ceremony vs. Essence Revisited](https://dev.to/yysun/ceremony-vs-essence-revisited-5e77)
273
-
274
- ### [Database-Driven Applications Using WebSockets](https://dev.to/yysun/database-driven-applications-using-websockets-2b9o)
275
-
276
- This post introduces a new application architecture that allows event handling between the frontend apps and the backend business logic modules without REST API.
277
-
278
- ![](https://res.cloudinary.com/practicaldev/image/fetch/s--ydBm2YgN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/yysun/apprun-websockets-sqlite/raw/master/architecture-new.png)
279
-
280
- Published on Mar 9, 2020 6 min read
281
-
282
- ### [Use State Machine in AppRun Applications](https://dev.to/yysun/use-state-machine-in-apprun-applications-odo)
283
-
284
- This post describes how to create a state machine in AppRun applications to help event handling using a calculator as an example.
285
-
286
- ![](https://dev-to-uploads.s3.amazonaws.com/i/fp4aodv0sdnbkosvuxgt.png)
287
-
288
- Published on Mar 3, 2020 ・ 6 min read
289
-
290
- ### [Advanced View Features in AppRun](https://dev.to/yysun/advanced-view-features-in-apprun-17g5)
291
-
292
- This post describes the advanced usage of the AppRun _ref_, _element embedding_, and _directive_ in the JSX view.
293
-
294
- Published on Feb 28, 2020 ・ 4 min read
295
-
296
- ### [Strong Typing in AppRun](https://medium.com/@yiyisun/strong-typing-in-apprun-78520be329c1)
297
-
298
- This post is a complete guide for those want to opted-in TypeScript and strong typing for AppRun application development.
299
-
300
- ![](https://cdn-images-1.medium.com/max/1600/1*RY-DEfVgOjj_clIEW4HeTA.png)
301
-
302
- Published on May 17, 2019 · 8 min read
303
-
304
- ### [Announcing AppRun Directives](https://medium.com/@yiyisun/announcing-apprun-directives-6a063f88379c)
305
-
306
- This post introduces the two built-in directives and then describes how to create custom directives.
307
-
308
- Published on May 12, 2019 · 3 min read
309
-
310
- ### [AppRun Book from Apress](https://www.amazon.com/Practical-Application-Development-AppRun-High-Performance/dp/1484240685/)
311
-
312
- [![Order from Amazon](https://camo.githubusercontent.com/99fad1f024c274a3d752a1583cf125037583811c/68747470733a2f2f696d616765732e737072696e6765722e636f6d2f7367772f626f6f6b732f6d656469756d2f393738313438343234303638372e6a7067)](https://www.amazon.com/Practical-Application-Development-AppRun-High-Performance/dp/1484240685/)
313
-
314
- Published on Jan 9, 2019
315
-
316
- ### [Make CLI Run in the Console](https://dev.to/yysun/make-cli-run-in-the-console-42ho)
317
-
318
- We have been using the command-line interface (CLI) in the terminal window and the command prompt. Have you thought of a CLI in the console of the browser's developer tool?
319
-
320
- ![](https://res.cloudinary.com/practicaldev/image/fetch/s--5p8ESaes--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/khumq8np94i5uwo9bwn1.png)
321
-
322
- Published on Aug 10, 2018 · 1 min read
323
-
324
- ### [Making ASP.NET Core MVC Apps into Single Page Apps using AppRun](https://medium.com/@yiyisun/making-asp-net-core-mvc-apps-into-single-page-apps-using-apprun-e1ae4dbc60da)
325
-
326
- A single-page application (SPA) is a web application or web site that interacts with the user by dynamically rewriting the current page…
327
-
328
- ![](https://cdn-images-1.medium.com/max/1600/1*1ZtgK-R4YDb8P4ahLq60Hg.png)
329
-
330
- Published on Aug 7, 2018 · 3 min read
331
-
332
- ### [I Also Created the Exact Same App Using AppRun](https://medium.com/@yiyisun/i-also-created-the-exact-same-app-using-apprun-dd1860cb8112)
333
-
334
- I felt it was quite fun to compare AppRun with Redux and React Context API last time. Today, I found another great post titled “I created…
335
-
336
- ![](https://cdn-images-1.medium.com/max/1600/1*DWsG3B2utcEmD1rKSbIVpA.png)
337
-
338
- Published on Aug 5, 2018 · 7 min read
339
-
340
- ### [Redux vs. The React Context API vs. AppRun](https://medium.com/@yiyisun/redux-vs-the-react-context-api-vs-apprun-f324bee8cbbf)
341
- Recently, I have read a great post titled ‘Redux vs. The React Context API’ (https://daveceddia.com/context-api-vs-redux). It is the type…
342
-
343
- ![](https://cdn-images-1.medium.com/max/1600/1*_bvkERxKewur67C5zowOBQ.png)
344
-
345
- Published on Jul 31, 2018 · 3 min read
346
-
347
- ### [Deep Dive into AppRun Events](https://medium.com/@yiyisun/deep-dive-into-apprun-events-1650dc7811ea)
348
- Published on Sep 10, 2017 · 8 min read
349
-
350
- ### [Deep Dive into AppRun State](https://medium.com/@yiyisun/deep-dive-into-apprun-state-3d6fb58b1521)
351
- Published on Sep 9, 2017 · 6 min read
352
-
353
- ### [Building Applications with AppRun](https://medium.com/@yiyisun/building-applications-with-apprun-d103cd461bae)
354
-
355
- AppRun is a Javascript library for building reliable, high-performance web applications using the Elm inspired Architecture, events and components.
356
-
357
- ![](logo.png)
358
-
359
- Published on Jul 2, 2017 · 5 min read
360
-
361
-
362
- ## Video Tutorials
363
-
364
- * [Building Applications with AppRun, Part 1 - Getting Started](https://www.youtube.com/watch?v=RuRmXEN2-xI)
365
- * [Building Applications with AppRun, Part 2 - Components](https://www.youtube.com/watch?v=qkP6HvZmhtY)
366
-
367
-