01HEROTitleGeneral ArrangementSheet01 / 08
HudsonKit / open-source app shell + workspace

Build the tool.
Hudson provides the workspace.

Canvas, side rails, commands, persistence, logging, and agent-ready infrastructure — already working together. Your team owns the model, renderer, and interactions that make the product yours.

View source · GitHub
Surfaces
0
iOS · macOS · Web
Primitives
0
Frame · Nav · Panel · Status · Canvas · Palette · Drawer · Assistant
Apps live
0
Talkie · Scout · Linea · Lattices · Vox
License
MINE
ask me nicely
200pt LEAD
FIG. 01-A · LIVE EMBEDworkspace = self · installs 2,847 ·  stars 1,217
① capability map② command dock③ status bar④ canvas · pan/zoom
02LIVE WORKSPACETitlePossession Mode — Live EmbedSheet02 / 08
02 / Live Embed · spec ↔ live

The component below is a Hudson embed.

This is the real workspace shell, rendered from the SDK. Same chrome, canvas, app windows, command surface, and live decoration layer any Hudson app inherits.

FIG. 02-A · LIVE · the spec, running
① CAPABILITY MAP② COMMAND DOCK③ STATUS BAR④ CANVAS · pan/zoom
Param
Value
NAV.HEIGHT
48 px
PANEL.WIDTH
280 px
STATUS.HEIGHT
28 px
ACCENT
var(--accent)
INTENTS
16 indexed
COMMANDS
45 live
LATENCY
< 80 ms (vox→cmd)
SURFACES
iOS · macOS · Web
THEME
hudson · dark
VERSION
v0.4.2

Note. Every parameter on this sheet is read from the same manifest.ts the embedded workspace consumes.

Parts list · build sequence
01
DECLARE

A typed object names your app.

id, mode, intents, ports — Hudson reads it like a blueprint.

02
WIRE

Intents become voice + ⌘K.

Each entry is indexed for fuzzy match, hotkeys, and the assistant.

03
COMPOSE

Drop in primitives.

Frame, Nav, Panel, Canvas, Status — same chrome every app inherits.

04
ADAPT

Carry the workspace language forward.

Use platform-native Hudson primitives wherever the product needs another surface.

02½BUILD THE WORKSPACETitleApps Own The Work · Hudson Owns The WorkspaceSheet02½ / 08
02½ / Story diagram · workspace grammar

Apps own the work. Hudson owns the workspace.

Select a thing once; watch the canvas object, layer definition, and shell UX light up together. The deck is the map between what you touch and what Hudson knows.

FIG. 02-B · INTERACTIVE CONTRACT · OWN
Describe something. It appears on the canvas.
03THE PLOTTERTitleDrafting Plotter — HP-7475A EMUSheet03 / 08
03 / Interactive plotter

Describe something. It appears on the canvas.

A virtual pen plotter renders your words in single-stroke drafting type, then dimensions the result like an engineering specimen. Download the SVG and use it however.

PLOT · LIVE · 0%PEN DOWN · DRAWING
HUDSONKIT · DRAFTING PLOTTER · HP-7475A EMUSCALE 1:1 PEN 0.70MM N=16860 mm122 mmSTROKE: 0.30 mm · ISO 3098PLOT · PHRASE SPECIMENDRAWNHUDSONSHEETP-001 / 01
TRAVEL
000 / 100
04VOICE LOOPTitleVoice → Intent → CommandSheet04 / 08
04 / Voice loop · sub-80ms

Speak. The chrome understands.

Every intent you declare is searchable — by keystroke, by ⌘K, and by voice. Hudson handles the loop: capture, transcribe, match, dispatch. Your app gets a typed call.

EMBED · app = hudson/voice · status: live
Stage
Primitive
CAPTURE
useVoiceInput
TRANSCRIBE
voxProbe · stt
MATCH
IntentIndex
CONFIRM
Assistant
DISPATCH
command.run
REPLY
voiceReply
What it gives you
⌘K
Command palette

Every intent fuzzy-searched. Open with ⌘K, type three letters, hit return.

🎤
Voice

Tap-and-hold or hotword. Same intents, no extra wiring per surface.

Replies

Assistant reads the result back if the intent declares a voice reply.

05CONSISTENT PRIMITIVESTitleA Shared Workspace VocabularySheet05 / 08
05 / Consistent primitives

Consistent primitives. Native implementations.

FIG. 05-A · WORKSPACE VOCABULARY
PRODUCT SPEC · WORKSPACE NEEDS
const workspace = {
chrome: ["nav", "rails",
"status"],
actions: ["commands",
"intents"],
canvas: true,
};
iOS
SwiftUI · HudsonKit
macOS
SwiftUI · HudsonKit
Web
React · hudsonkit
390 × 844
@3x
1024 × 768
window
fluid
@1x → ∞

Navigation, side rails, commands, status, canvas, and observability follow the same product vocabulary. Each surface implements those primitives in its native stack — SwiftUI on Apple platforms and React on the web. Hudson provides the workspace model; your team still owns each product implementation.

IMPLEMENTATION MAP
workspace vocabulary
  implemented per surface

web     → React / hudsonkit
macOS   → SwiftUI / HudsonKit
iOS     → SwiftUI / HudsonKit

shared model · platform-native code
06APPS GALLERYTitleApps Built on HudsonSheet06 / 08
06 / Apps gallery · in production

Four apps,
one kit.

Each ships independently — its own brand, its own scope, its own audience. They share Hudson the way print designers share a type system: identical bones, distinct identities.

T
ios · macos
01

Talkie

Voice notes, transcribed.

A canvas of audio clips. Long-press to record, drag to arrange, ⌘K to find anything you said three weeks ago.

view source▸ open
S
macos · web
02

Scout

Field notes that file themselves.

TODO — replace with the real Scout pitch.

view source▸ open
L
macos · web
03

Linea

A line, finely drawn.

TODO — replace with the real Linea pitch.

view source▸ open
L
macos
04

Lattices

Structure, made visible.

TODO — replace with the real Lattices pitch.

view source▸ open
07PRIMITIVESTitlePrimitives — Reference SheetSheet07 / 08
07 / Primitives · the kit

The workspace around your tool, already handled.

Eight foundational components establish the workspace vocabulary. They compose and nest into the shell patterns Hudson apps share. If you've used one Hudson workspace, the interaction model is already familiar.

<Frame/>
100% × 100%

Chrome root. Hosts nav, panels, canvas, status.

<NavigationBar/>
h: 48 px

Crumbs, ⌘K, install. Always pinned to top.

<SidePanel/>
w: 280 px

Manifest, inspector, file tree. Either side.

<Canvas/>
fluid

Pan/zoom workspace. Floating windows live here.

<StatusBar/>
h: 28 px

Live runtime: uptime, intents, logs, version.

<CommandPalette/>
⌘K · 480 px

Fuzzy-searches every intent. Voice + keys.

$
<TerminalDrawer/>
h: 0 / 240px

Slide-up shell. Natural-language → bash.

<Assistant/>
overlay

AI primitive. Reads capability map, dispatches commands.

08IMPLEMENTTitleProduct Implementation SpecSheet08 / 08
08 / Implementation · from spec to product

From product spec to working workspace.

The boundary is straightforward: your team owns the domain model, renderer, and interactions. Hudson provides the canvas, rails, commands, persistence, logging, and agent context around them. Three commands get that contract running.

01INSTALL
$ bun add hudsonkit

Add the workspace layer without replacing the product code your team owns.

02DEFINE
$ hudson new my-app

Generate the app contract: provider, slots, hooks, commands, and intents.

03BUILD
$ bun dev

Implement your model, renderer, and interactions inside the normal dev loop.

EMBED · app = hudson/docs · status: live
PRODUCT BOUNDARY · READY TO IMPLEMENT

Build what makes the product distinct. Keep the workspace solved.