Mac-shaped local software

Small native hosts for tools that already work.

Appify UI turns static folders, terminal tools, and document packages into focused Mac apps without dragging a city-sized runtime behind them.

Appify UI package flow from source .webapp to static .web and native app hosts.
11root app bundles
.webstatic document shape
.webappsource package shape
1shared native host

Root apps

Each host owns a clear document boundary.

Static document hostWeb.app

Web.app

Opens browser-native folders with HTML, CSS, JavaScript, assets, data, and relative links.

.web
  • Static document package
  • Peer .web package routes
  • No install step in the artifact
Bun package hostWebapp.app

Webapp.app

Runs local Bun package folders through install and dev scripts, then opens the loopback app in a native WebKit window.

.webapp
  • Framework dev server boundary
  • Stable localhost origin
  • Package-shaped authoring
Single-file form hostWebFormer.app

WebFormer.app

Serves single-file HTML documents and writes edited native form state back into narrow source spans.

.webform
  • One HTML document
  • Runtime save affordances
  • Source-preserving patches
Canvas document hostTLCanvas.app

TLCanvas.app

Bundles the tldraw SDK runner for canvas-shaped documents with schema, tests, lockfile, and local server code.

.tlcanvas
  • tldraw SDK
  • Document package output
  • App-local runner
JSON Canvas hostJSONCanvas.app

JSONCanvas.app

Opens JSON Canvas files, validates nodes and edges, and writes changes back as plain JSON.

.canvas
  • Plain JSON storage
  • Bun web runner
  • Native document window
TUI hostLazyGit.app

LazyGit.app

Starts lazygit for a repository marker package and shows the terminal UI inside a native app shell.

.lazygit
  • ttyd transport
  • Repo marker package
  • Git-focused local tool

Create an app

AppifyHost turns one local tool into one focused Mac document app.

Runtime contract

Bundle a command, declare a document type, print a ready URL.

The shared host in source/AppifyHost handles the native document window, startup, safe URL loading, save hooks, and sizing.

Guide

Use the current repo launcher and ejection flow.

The guide covers Info.plist, document modes, app-local servers, AppifyHost browser hooks, and validation checks.

Repository posture

The system stays object-first.

01

Object-first repository shape: apps, runners, examples, and fixtures stay near the thing they serve.

02

Static artifacts are ordinary folders whenever possible, with build tools kept on the source side.

03

Native document identity comes from small focused hosts, not from one generic mega-runtime.

04

Bun-powered .webapp packages are the explicit boundary for framework dev servers and export steps.

Framework examples

Webapp source folders can still export static .web packages.

Astro Blog Webapp

Static content routes, React JSX composition, and one hydrated island exported into a sibling .web bundle.

Astro + React islandsexamples/webapp/astro-blog.webapp

Expo Field Kit

React Native Web controls exported into a static .web package for Web.app.

Expo Webexamples/webapp/expo-field-kit.webapp

Next Operations Room

A local operations dashboard with an API route and Webapp.app dev server lifecycle.

Next.js App Routerexamples/webapp/next-operations-room.webapp

Next Scenario Lab

A small scoring lab for comparing bundle decisions and mitigation toggles.

Next.js App Routerexamples/webapp/next-scenario-lab.webapp

Web Native Bundles

Framework-free .web packages proving static, inspectable, browser-native document bundles.

Plain static webexamples/web-native-bundles

Web Compat Fixtures

Small red-case .web fixtures that justify Web.app compatibility behavior.

Compatibility casesexamples/web-compat