[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74433":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":16,"starSnapshotCount":16,"syncStatus":35,"lastSyncTime":36,"discoverSource":37},74433,"gea","dashersw\u002Fgea","dashersw","A batteries-included, reactive JavaScript UI framework. No virtual DOM. Compile-time JSX transforms. Proxy-based stores. Surgical DOM patching.","https:\u002F\u002Fgeajs.com",null,"JavaScript",1089,40,10,9,0,4,15,26,12,17.84,"MIT License",false,"main",true,[27,28,29,30,31],"components","javascript-framework","reactivity","ui-framework","web-development","2026-06-12 02:03:25","\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdashersw\u002Fgea\u002Fmaster\u002Fdocs\u002Fpublic\u002Flogo.jpg\" height=\"180\" alt=\"Gea\" \u002F>\n\n[![npm version](https:\u002F\u002Fbadge.fury.io\u002Fjs\u002F%40geajs%2Fcore.svg)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@geajs\u002Fcore)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg)](LICENSE)\n\n# Gea\n\nA compiler-first reactive JavaScript UI framework. No virtual DOM. Compile-time JSX transforms. Proxy-based stores. Surgical DOM patching. A hello-world production build is 121 B brotli; an equivalent interactive todo ships 4.9 kb of brotli JavaScript.\n\nGea compiles your JSX into efficient HTML string templates at build time, tracks state changes through deep proxies, and patches only the DOM nodes that actually depend on the changed data — no diffing, no reconciliation overhead.\n\nSvelte made \"compile the framework away\" famous. Gea takes the phrase literally: in a static hello-world app, the framework runtime disappears from the bundle.\n\n## Compile To Almost Nothing\n\nIn a fresh Vite production hello-world build, Gea ships **121 B** of brotli JavaScript. The equivalent Solid build ships 3.6 kb, Svelte ships 8.5 kb, Vue ships 20.7 kb, and React ships 50.8 kb.\n\n| Framework | Version | Raw minified JS | Brotli JS | Brotli vs Gea |\n| --- | --- | ---: | ---: | ---: |\n| Gea | 1.3.0 | 214 B | **121 B** | 1.0x |\n| Solid | 1.9.12 | 10,196 B | 3,601 B | 29.8x |\n| Svelte | 5.55.5 | 23,461 B | 8,537 B | 70.6x |\n| Vue | 3.5.33 | 58,174 B | 20,711 B | 171.2x |\n| React | 19.2.5 \u002F React DOM 19.2.5 | 189,717 B | 50,816 B | 420.0x |\n\nMeasured from fresh Vite 8.0.10 production apps, summing JavaScript assets only. Gea used the compiled component output; React, Vue, and Svelte used equivalent minimal hello-world components.\n\n## Stays Lean When The App Does Work\n\nHello world proves the compiler can disappear. Todo proves the runtime stays lean when the app actually does something.\n\nIn an equivalent interactive todo app with reactive state, input handling, filtering, item updates, and identical CSS, Gea ships **4.9 kb** of brotli JavaScript. Solid ships 5.7 kb, Svelte ships 13.7 kb, Vue ships 22.6 kb, and React ships 51.5 kb.\n\n| Framework | Version | Minified JS raw | Minified JS brotli | Total raw JS+CSS | Total brotli JS+CSS |\n| --- | --- | ---: | ---: | ---: | ---: |\n| Gea | 1.3.0 | 15,364 B | **4,896 B** | 18,075 B | **5,664 B** |\n| Solid | 1.9.12 | 16,181 B | 5,721 B | 18,892 B | 6,485 B |\n| Svelte | 5.55.5 | 38,812 B | 13,661 B | 41,523 B | 14,429 B |\n| Vue | 3.5.33 | 63,676 B | 22,585 B | 66,387 B | 23,411 B |\n| React | 19.2.5 \u002F React DOM 19.2.5 | 192,330 B | 51,460 B | 195,041 B | 52,287 B |\n\nMeasured from fresh Vite production builds in `\u002Ftmp\u002Fgea-todo-framework-size-compare`. CSS was identical across all builds: 2,711 B raw, 746 B brotli.\n\n```jsx\n\u002F\u002F counter-store.ts\nimport { Store } from '@geajs\u002Fcore'\n\nclass CounterStore extends Store {\n  count = 0\n  increment() { this.count++ }\n  decrement() { this.count-- }\n}\n\nexport default new CounterStore()\n```\n\n```jsx\n\u002F\u002F app.tsx\nimport { Component } from '@geajs\u002Fcore'\nimport counterStore from '.\u002Fcounter-store'\n\nexport default class App extends Component {\n  template() {\n    return (\n      \u003Cdiv>\n        \u003Ch1>{counterStore.count}\u003C\u002Fh1>\n        \u003Cbutton click={counterStore.increment}>+\u003C\u002Fbutton>\n        \u003Cbutton click={counterStore.decrement}>-\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    )\n  }\n}\n```\n\n```ts\n\u002F\u002F main.ts\nimport App from '.\u002Fapp'\n\nnew App().render(document.getElementById('app'))\n```\n\n## Getting Started\n\n```bash\nnpm create gea@latest my-app\ncd my-app\nnpm install\nnpm run dev\n```\n\nThis scaffolds a Vite-powered project with TypeScript, a sample store, class and function components, and hot module replacement — ready to build on.\n\n## Packages\n\n| Package | Description | Version |\n| --- | --- | --- |\n| [`@geajs\u002Fcore`](packages\u002Fgea) | Core framework — stores, components, reactivity, DOM patching | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@geajs\u002Fcore.svg)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@geajs\u002Fcore) |\n| [`@geajs\u002Fui`](packages\u002Fgea-ui) | Headless UI primitives — accessible, composable components built on [Zag.js](https:\u002F\u002Fzagjs.com) | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@geajs\u002Fui.svg)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@geajs\u002Fui) |\n| [`@geajs\u002Fmobile`](packages\u002Fgea-mobile) | Mobile UI primitives — views, navigation, gestures, layout | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@geajs\u002Fmobile.svg)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@geajs\u002Fmobile) |\n| [`@geajs\u002Fssr`](packages\u002Fgea-ssr) | Server-side rendering — streaming HTML, hydration, store isolation | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@geajs\u002Fssr.svg)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@geajs\u002Fssr) |\n| [`@geajs\u002Fvite-plugin`](packages\u002Fvite-plugin-gea) | Vite plugin — JSX transform, reactivity wiring, HMR | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@geajs\u002Fvite-plugin.svg)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@geajs\u002Fvite-plugin) |\n| [`create-gea`](packages\u002Fcreate-gea) | Project scaffolder — `npm create gea@latest` | [![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fcreate-gea.svg)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fcreate-gea) |\n| [`gea-tools`](packages\u002Fgea-tools) | VS Code \u002F Cursor extension — completions, hover, diagnostics | — |\n\n## Philosophy\n\nJavaScript code should be simple and understandable. Gea is built on the belief that a framework should not force you to learn a new programming model. You shouldn't need signals, dependency arrays, compiler directives, or framework-specific primitives to build a reactive UI. You should write regular JavaScript — classes, functions, objects, getters — and it should just work.\n\nGea finds the right mix of object-oriented and functional style. Stores are classes with state and methods. Components are classes with a `template()` that returns JSX. Function components are true plain functions with **no side-effects**. Computed values are getters. There is nothing to learn that isn't already JavaScript.\n\nThe only \"magic\" is under the hood: the Vite plugin analyzes your ordinary code at compile time and wires up the reactivity for you. You write `this.count++` and the DOM updates. You don't call a setter, you don't wrap values in a signal, and you don't declare dependencies. The framework stays invisible.\n\nGea is built on the philosophy of the beautifully simple [erste.js](https:\u002F\u002Fgithub.com\u002Fdashersw\u002Ferste) and [regie](https:\u002F\u002Fgithub.com\u002Fdashersw\u002Fregie) libraries, carrying forward their core ideas — minimal abstraction, class-based components, and direct DOM ownership — while adding compile-time JSX transforms, deep proxy reactivity, and a modern build toolchain.\n\n## Why Gea?\n\n- **Just JavaScript.** No signals, no hooks, no dependency arrays, no new syntax. Classes, functions, objects, and getters — concepts you already know.\n- **No virtual DOM.** The Vite plugin analyzes your JSX at build time and generates targeted DOM patches. Updates touch only the elements that changed.\n- **Proxy-based reactivity.** Mutate state directly — `this.count++` — and the framework handles the rest. The compile-time analysis makes your regular JS fully reactive without you conforming to arbitrary rules.\n- **Near-zero baseline.** A compiled hello-world app is 121 B brotli; an equivalent interactive todo is 4.9 kb brotli JS. Gea starts as your code, not a framework tax.\n- **Pay for routing when you use it.** Router APIs are built in and tree-shakable; a hello-world app with routing is ~7.3 kb gzipped. Zero runtime dependencies.\n- **Familiar JSX.** Write JSX with `class` instead of `className` and lowercase event attributes (`click`, `input`, `change`) instead of `onClick`.\n- **Props that follow JavaScript.** Objects and arrays passed as props are the parent's reactive proxy — the child can mutate them and both update. Primitives are copies, just like function arguments in JS. No `emit`, no `v-model`, no callback wiring.\n- **Class and function components.** Use class components for stateful logic and lifecycle hooks, function components for presentational UI. The Vite plugin converts function components to classes at build time.\n- **Accessible UI primitives.** The `@geajs\u002Fui` package builds on [Zag.js](https:\u002F\u002Fzagjs.com) to provide robust, accessible components — dialogs, menus, tooltips, accordions, and more — ready to style and compose in any Gea app.\n- **Built-in mobile UI.** The `@geajs\u002Fmobile` package provides view management, iOS-style navigation transitions, back gestures, sidebars, tabs, pull-to-refresh, and infinite scroll.\n\n## How It Compares\n\nGea is the fastest compiled UI framework — closer to hand-written vanilla JavaScript than any other framework in the js-framework-benchmark (weighted geometric mean: **1.02**). It gives you reactive state management, a component model, routing, and JSX without making the runtime the center of the story. Simple components can compile down to almost nothing; apps pay for the pieces they actually import.\n\n| | Gea | React | Vue |\n| --- | --- | --- | --- |\n| Bundle size | **121 B brotli hello world \u002F 4.9 kb brotli todo JS** | 50.8 kb brotli hello world \u002F 51.5 kb brotli todo JS | 20.7 kb brotli hello world \u002F 22.6 kb brotli todo JS |\n| What's included | Compiler output + imported Gea features | React + React DOM | Vue runtime |\n| Virtual DOM | No | Yes | Yes |\n| Reactivity | Proxy-based, automatic | Explicit (`setState`, hooks) | Proxy-based (`ref`\u002F`reactive`) |\n| JSX classes | `class` | `className` | `class` (templates) |\n| Event syntax | `click={fn}` | `onClick={fn}` | `@click=\"fn\"` (templates) |\n| Props (objects\u002Farrays) | Two-way (same proxy) | One-way (callbacks up) | One-way (`emit`\u002F`v-model` up) |\n\nSee the full comparisons: [React vs Gea](docs\u002Fcomparison\u002Freact-vs-gea.md) | [Vue vs Gea](docs\u002Fcomparison\u002Fvue-vs-gea.md) | [Full benchmark report](https:\u002F\u002Fgeajs.com\u002Fbenchmark-report.html)\n\n## Examples\n\n| Example | Description |\n| --- | --- |\n| [flight-checkin](examples\u002Fflight-checkin) | Multi-step check-in flow with multiple stores, conditional views, and E2E tests |\n| [todo](examples\u002Ftodo) | Classic todo app demonstrating lists, filtering, and computed values |\n| [router-v2](examples\u002Frouter-v2) | Client-side routing with `RouterView`, `Link`, guards, layouts, and dynamic params |\n| [kanban](examples\u002Fkanban) | Kanban board with drag semantics |\n| [mobile-showcase](examples\u002Fmobile-showcase) | Mobile UI showcase using `@geajs\u002Fmobile` components |\n| [jira_clone](examples\u002Fjira_clone) | Jira-style issue tracker with rich text, tabs, and `@geajs\u002Fui` |\n| [ecommerce](examples\u002Fecommerce) | E-commerce storefront with cart and checkout flow |\n| [sheet-editor](examples\u002Fsheet-editor) | Spreadsheet-style editor with formula-like cells |\n| [showcase](examples\u002Fshowcase) | Component and pattern showcase |\n\n## Documentation\n\nFull documentation is available in the [docs](docs\u002F) directory, covering:\n\n- [Getting Started](docs\u002Fgetting-started.md)\n- [Stores](docs\u002Fcore-concepts\u002Fstores.md) and [Components](docs\u002Fcore-concepts\u002Fcomponents.md)\n- [JSX Syntax](docs\u002Fcore-concepts\u002Fjsx-syntax.md)\n- [Router](docs\u002Fgea-router\u002Foverview.md)\n- [Gea UI](docs\u002Fgea-ui\u002Foverview.md)\n- [Gea Mobile](docs\u002Fgea-mobile\u002Foverview.md)\n- [API Reference](docs\u002Fapi-reference.md)\n\n## AI-Assisted Development\n\nInstall the Gea AI skills with:\n\n```sh\nnpx skills add dashersw\u002Fgea\n```\n\nThis repository includes [agent skills](.cursor\u002Fskills\u002Fgea-framework) that teach AI coding assistants how to work with Gea. In compatible environments, this gives your editor the context it needs to understand Gea's stores, components, JSX conventions, and reactivity model so you can scaffold and iterate on Gea apps with much better AI assistance.\n\n## Contributing\n\nContributions are welcome. The repo is a standard npm workspaces monorepo:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fdashersw\u002Fgea.git\ncd gea\nnpm install\nnpm run build\n```\n\nEach package has its own `build` script. The root `npm run build` builds all packages.\n\n## License\n\n[MIT](LICENSE) — Copyright (c) 2017-present Armagan Amcalar\n\n## Star History\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F?repos=dashersw%2Fgea&type=date&legend=top-left\">\n \u003Cpicture>\n   \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fimage?repos=dashersw\u002Fgea&type=date&theme=dark&legend=top-left\" \u002F>\n   \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fimage?repos=dashersw\u002Fgea&type=date&legend=top-left\" \u002F>\n   \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fimage?repos=dashersw\u002Fgea&type=date&legend=top-left\" \u002F>\n \u003C\u002Fpicture>\n\u003C\u002Fa>\n","Gea 是一个专注于编译时优化的响应式 JavaScript UI 框架，不使用虚拟 DOM，通过编译时 JSX 转换和基于代理的状态管理实现高效的 DOM 更新。其核心功能包括在构建时将 JSX 编译为高效的 HTML 字符串模板，并仅更新依赖于更改数据的实际 DOM 节点，从而避免了差异计算和协调开销。这种设计使得 Gea 在生成静态应用时几乎不包含框架运行时代码，非常适合追求极致性能和体积优化的 Web 开发场景，如需要快速加载的小型项目或对首屏渲染速度有高要求的应用。",2,"2026-06-11 03:50:08","high_star"]