One TypeScript codebase, compiled native–from microcontrollers to consoles
One TypeScript codebase, compiled native—from microcontrollers to consoles.
以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。
One TypeScript codebase, compiled native—from microcontrollers to consoles.
TypeScript. JSX. Real CSS. Native binaries for every screen you ship on.
GeaStack is a native device UI stack for building product interfaces with TypeScript, JSX, and real CSS, then compiling them ahead of time to native binaries for microcontrollers, Linux and Windows desktops, macOS, iOS, Android, and Xbox—and to native servers, where the same compiler turns node:http applications into binaries.
The device runs no browser and no JavaScript VM. The compiled binary is the app.
Real CSS transforms, perspective, and keyframes running natively on an ESP32-S3 AMOLED board.
This is the shape of a Gea app: a small TypeScript store, a component class that reads it, and normal CSS classes compiled into the native target.
import { Store } from '@geastack/core'
class CounterStore extends Store { count = 0
decrement() { this.count = this.count - 1 } increment() { this.count = this.count + 1 } reset() { this.count = 0 } }
export const counter = new CounterStore()
src/App.tsx
import { ReactiveComponent } from '@geastack/core' import { counter } from './counter-store' import './styles.css'
export class App extends ReactiveComponent { template() { return (
<div class="screen"> <span class="eyebrow">GEASTACK</span> <span class="title">Shared store</span> <span class="count">{counter.count}</span> <div class="controls"> <button class="button secondary" onClick={() => counter.decrement()}>−</button> <button class="button primary" onClick={() => counter.increment()}>+</button> </div> <button class="reset" onClick={() => counter.reset()}>Reset</button> </div> ) } }src/index.tsx
import { mount } from '@geastack/core' import { App } from './App'
mount(App)
src/styles.css
.screen { display: flex; flex-direction: column; width: 100vw; height: 100vh; gap: 16px; align-items: center; justify-content: center; background-color: #080b12; color: #f8fafc; }
.count { font-size: 76px; line-height: 1; }
.controls { display: flex; flex-direction: row; gap: 16px; }
.button { width: 92px; height: 58px; border-radius: 14px; border-width: 2px; font-size: 30px; }
Create, set up, and flash an app with:
npx @geastack/create-geastack my-app cd my-app npx gea setup npx gea flash --board <your-board> --monitor
gea setup walks you through your board, names it, and prints the exact gea flash line to run—<your-board> is the alias you pick there.
Packages are published under the @geastack scope: @geastack/create-geastack for project creation and @geastack/cli for the project-local CLI. Both keep the product-facing commands as create-geastack and gea.
Modern hardware products usually become several UI products at once: one stack for firmware, another for desktop tooling, another for mobile, and another for web previews. GeaStack keeps the productive app model developers already know—components, state, JSX, CSS, and Canvas-style drawing—and lowers it to native targets.
Target Use it for
Web simulator Fast local iteration and screenshots
ESP32 / ESP32-S3 / ESP32-P4 Watches, panels, knobs, dashboards, and product UI bring-up
GeaOS Linux-backed devices and shellable hardware targets
Linux desktop Desktop apps and Raspberry Pi OS panels
macOS Native desktop apps and companion tools
iOS Native mobile apps and device companion experiences
Windows Win32 desktop apps driven by real child-window controls
Android Native Android apps: compiled with the NDK, rendered with real Android views
Node services node:http servers compiled to native binaries
Xbox Games and 3D scenes on a retail Series X/S in Dev Mode, through ANGLE on D3D11
Start Here
For a new app:
npx @geastack/create-geastack my-app cd my-app npx gea setup npx gea dev
For a Waveshare ESP32-S3 AMOLED board:
npx @geastack/create-geastack my-panel cd my-panel npx gea setup npx gea flash --board <your-board> --monitor
For a richer example:
npx @geastack/create-geastack watch-demo --starter example --example watch cd watch-demo npx gea setup npx gea flash --board <your-board> --monitor
Repository Map
Repository Purpose
cli gea and create-geastack: project creation, setup, build, flash, monitor, examples, and diagnostics
core App-facing API, runtime sources, UI engine scaffolding, host abstractions, and Gea compiler plugin
compiler geatsc, the TypeScript-to-native compiler path
examples Example apps for web, ESP32, GeaOS, Windows, macOS, and iOS
tutorials Step-by-step learning paths for node and embedded targets
targets ESP32, RP2350, board metadata, device helpers, flash, monitor, OTA, and screenshots
apple macOS and iOS native targets
windows Native Windows (Win32) build target and Windows SDK bindings
android Native Android target
linux Native Linux desktop build targets
simulator Web simulator and browser-based development loop
node-compat node:http applications compiled to native binaries
native-webgl-angle Native WebGL compatibility layer for the Three.js path
skills Agent skills for building GeaStack apps and targets
What Makes It Different
Ahead-of-time native output. TypeScript, JSX, and CSS compile before the app reaches the device.
No browser dependency. The target runs a native binary, not a webview.
One app model across product surfaces. MCU displays, Linux panels, Windows and macOS desktops, mobile apps, console games, and native servers can share architecture and source patterns.
Real CSS where it matters. Layout, transforms, animations, media queries, custom properties, gradients, shadows, and font rasterization are part of the native UI path.
Hardware-aware tooling. Board selection, serial discovery, ESP-IDF setup, flashing, monitoring, OTA, screenshots, and target metadata are built into the CLI.
Contributing
Contributing does not require memorizing the whole stack. Good first contributions usually live at one boundary:
If you are bringing up a new board, start with:
npx gea setup
Choose Custom board profile, pick the closest base target, and save the generated .gea/boards/<alias>.json profile with links to the schematic, display controller, touch controller, storage, wireless, audio, GPS, and sensor details.
Part License
Framework, compiler, CLI, simulator, and the desktop, mobile, and Node targets Apache-2.0
Embedded board support—the targets repository and @geastack/chips GPL-3.0-only
Examples, tutorials, and skills MIT
The embedded board support is the only part under copyleft. Building a product on the framework, the compiler, or the desktop, mobile, and Node targets carries no obligation to publish your source.
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。