gridland

An open-source TUI framework that runs in the terminal and the browser, so non-technical users can use terminal apps too.

gridland hero background

Overview.

gridland is a React-based TUI framework I co-designed and co-built with Chris Roth. The same component tree renders to a browser canvas, a real terminal, and plain text for AI agents: one codebase, three audiences. The project has 300+ stars on GitHub, hit the front page of Hacker News with 111 upvotes on launch, and ships UI components through a shadcn-style registry, so developers own the source instead of pulling in an opaque dependency.

My role
Co-creator: framework design, component API, design system, docs site
Team
Me and Chris Roth, co-builders
Status
Public on npm and GitHub. 300+ stars. 111 upvotes on Hacker News. Used to build gridland.io itself.

Live demo: Focus with Multi-Select.

Below is the same FocusApp demo that appears on gridland.io/docs/interaction/focus, running here on an HTML <canvas> via @gridland/web. Click the canvas to focus it, then Tab moves between columns, ↑/↓ navigates options, Space/Enter toggles. Selected items show in cyan; the focused panel gets a dashed pink border.

Scroll to load demo

The same JSX, run with bunx, renders to your real terminal.

Highlighted features.

Same React tree, terminal + browser

Write components once. They render to a real terminal via @gridland/bun and to an HTML5 canvas via @gridland/web. No separate web port. A non-technical user opens a browser tab; a power user runs the same app in their shell.

gridland landing page rendered side-by-side in a terminal window and a browser tab

Share your terminal app through a web link

Demo your app in the browser without forcing users to install it before they’re invested. Send a link, they see the running app, TUI included. The install pitch only happens after they want it.

A gridland TUI app (component reference docs) running in a browser tab at localhost:5175

Shadcn-style terminal components

gridland ships a library of terminal-native UI components (chat, prompt input, multi-select, table, spinner, status bar, side nav and more) distributed through a shadcn registry. Run bunx create-gridland add chat and the source lands in your repo as plain .tsx files. The web ecosystem already has shadcn for the browser; gridland brings the same ergonomics to the terminal.

bunx create-gridland add spinner installs the spinner component as plain .tsx source in the user's project

Try it.

Spin up a new gridland project in seconds, or run a demo without cloning anything.

Create a new project
bunx create-gridland my-app
Run a demo
bunx @gridland/demo landing
Contact 1
Contact 2
Contact 6
Contact 7

Let's make something users will love!

If you're looking for a product designer who can bridge the gap between design and code, I'm here to help!