返回资讯中心
外部精选
软件工程
#开发者实时流

One TypeScript codebase, compiled native–from microcontrollers to consoles

One TypeScript codebase, compiled native—from microcontrollers to consoles.

Hacker News 最新arbayi2026/11/5 · 今天17 分钟阅读

以下正文同步自 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 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →