π Termweave turns an OpenTUI interface into a native Tauri desktop app.
You build the interface with
Solid β Termweave handles everything else:
π¦ The window, terminal renderer, app lifecycle,
and native packaging.
- Build with OpenTUI and Solid instead of recreating a terminal UI in the browser.
- Run your app in a native, resizable Tauri window.
- Present it inside an immersive CRT monitor with animated effects and native ambient audio.
- Configure the name, colors, window size, and icon in βοΈ one config file.
- See source changes without restarting the native window.
- Create a native bundle with β‘οΈ one command.
You need macOS, Bun 1.3+, a stable Rust toolchain, and the Xcode Command Line Tools.
Create an empty project and run the installer:
mkdir my-termweave-app
cd my-termweave-app
curl -fsSLo install.sh https://raw.githubusercontent.com/nikdelvin/termweave/main/sdk/install.sh
sh install.shThe installer asks for your app name and metadata, creates the starter project, and installs its dependencies.
Start the app:
bun run devThe main places to edit are:
src/routes/β build the starter Home and Demo screens.src/routes.tsandsrc/App.tsxβ configure routing and the application shell.app.config.jsonβ set the app name, colors, window size, CRT effects, and bundle metadata.app.icon.pngβ replace the default app icon.
Changes under src/ reload while the app is running. Restart bun run dev after changing the
configuration or icon.
Give your app the glow, grain, motion, and low ambient hum of a real CRT. Keep the monitor frame for the full retro look, or switch it off and let the terminal fill the window.
"monitorOverlay": true,
"crtEffects": {
"soundVolume": 0.3,
"chromaticAberrationShift": 3,
"processedFrameOpacity": 0.3,
"noiseVisibility": 0.3,
"scanlinesVisibility": 0.3,
"flickerVisibility": 0.3,
"sweepLineVisibility": 0.3
}| Option | Values | What it changes |
|---|---|---|
monitorOverlay |
true/false |
Shows the monitor frame or goes edge-to-edge. |
soundVolume |
0β1 |
Sets the ambient CRT hum. |
chromaticAberrationShift |
0β10 |
Separates the red, green, and blue edges. |
processedFrameOpacity |
0β1 |
Blends the chromatic frame over the terminal. |
noiseVisibility |
0β1 |
Adds animated screen grain. |
scanlinesVisibility |
0β1 |
Adds horizontal scanlines. |
flickerVisibility |
0β1 |
Controls the subtle screen flicker. |
sweepLineVisibility |
0β1 |
Controls the moving sweep line. |
Use 0 to turn the sound or any visual effect off.
A terminal can be more than text. Drop a GIF, PNG, or JPEG into PixelRenderer, turn it into a
living backdrop, then layer your OpenTUI interface right on top.
import { PixelRenderer } from "@termweave/sdk";
import background from "./assets/background.jpg" with { type: "file" };
export function App() {
return (
<PixelRenderer uri={background}>
<box position="absolute" bottom={0} width="100%" height={8}>
<text>Overlay content</text>
</box>
</PixelRenderer>
);
}That is all it takes to turn a terminal screen into your own little world.
Your project stays small:
my-termweave-app/
βββ src/
β βββ App.tsx
β βββ routes.ts
β βββ routes/
β β βββ HomeRoute.tsx
β β βββ DemoRoute.tsx
β βββ components/
β βββ assets/
βββ app.config.json
βββ app.icon.png
βββ package.json
βββ patches/ Router compatibility patch
βββ termweave/ Managed SDK checkout
| Command | What it does |
|---|---|
bun run dev |
Check the project and start the desktop app. |
bun run build |
Build native bundles into build/. |
bun run check |
Run linting, type checks, and formatting checks. |
bun run update |
Update the managed SDK to the latest main. |
bun run terminate |
Terminate every active Bun process across all users. |
Termweave currently supports macOS for installation and development. Native bundles are built for the current machine.
Issues and pull requests are welcome. Read CONTRIBUTING.md to get started.
Termweave is available under the MIT License.
β If Termweave helps you build something, star the repository and share what you made.

