Native Shell (NSH) v0.4.0 · tried on Teleprompter, 4 November 2026

Impressive, but not ready to depend on yet

Teleprompter was rebuilt with Native Shell (nsh.dev) as a native Mac app and a web app, from one TypeScript codebase. The core ideas held up. But two silent flaws would have shipped broken apps, and three of the web app's features needed workarounds.

Recommendation Keep the web app and Fanlight for now. Look at NSH again in two to three months, or sooner if the blockers are fixed.

NSH ships about a release a week, so a fixed wait of six months would be too cautious. Watch its release notes for three fixes: text outside the window being drawn, file dialogs for TypeScript apps, and the web build accepting the Mac's permissions.

Until then, a rewrite of a mature, carefully tuned web app has to find its small behaviours again one by one: the controls' show and hide rules, the samples, the script screen. Here that cost more than NSH saved.

The Mac app came from the web app; the new web app came from the Mac app

Only the first step was work. The web build needed no rewrite: it is the Mac app's source, built for a browser.

The happy path is fast and smooth

3–6 msBuild after a changewith reload on save
0.1 sPackage the Mac app4 s for the web
120 fpsScrolling the script0 dropped, 6% CPU
16 testsHeadless, under 5 sfake clock, no window

One codebase really did give two apps

The web build differs only in opening files, saving and the samples menu.

Side by side, the three look almost the same

The same window size, sample and light mode in each. Tap a picture to see it full size.

Script screen

Live web app: the script screen
Live web app
NSH web build: the script screen
NSH web build
NSH Mac app: the script screen
NSH Mac app

Prompter

Live web app: the prompter with its control bar
Live web app
NSH web build: the prompter with its control bar
NSH web build
NSH Mac app: the prompter with its control bar
NSH Mac app

Settings

Live web app: the Settings panel
Live web app
NSH web build: the Settings panel
NSH web build
NSH Mac app: the Settings panel
NSH Mac app

The differences you can spot are all small fixes

Each is a styling or wording change in the app's own code, not a limit of NSH.

Where it earned its claims

Testing

Best-in-class UI tests

Playwright-style steps run headless and in a real Mac window, with screenshots. They caught most bugs before a click.

Native feel

A real Mac app

Native menus, text fields, floating windows, and light or dark with one call.

Reuse

Plain JavaScript ported as-is

The parser and the Word converter came over unchanged.

Escape hatch

Web views run real code

The microphone, MP3 and Word code ran inside one, untouched.

Two silent flaws would have shipped broken apps

Mac and web

Text below the first screen was never drawn

NSH skips text whose layout is out of sight and ignores animated transforms. Long scripts scrolled into blank space. Fixed with a scroll view moved each frame.

Web

The web app wouldn't start

Its engine refused a permission format the Mac accepts, with no documentation. Fixed by using bare command names.

Neither was caught by tests. Screenshots and hands-on checks found both.

Basic needs took workarounds

NeedWhat NSH lacksWorkaround
Open and Save panelsFile dialogs (Rust apps only)AppleScript on the Mac; a page script on the web
Microphone and recordingVolume levels and audio captureA hidden web view
Saving long recordingsFiles over 8 MiBStreaming through base64
Word importLibraries that patch built-insmammoth in a hidden web view
Samples menu on the webNative menus in browsersNSH's own drawn menu

Each workaround is something to keep in step as NSH changes.

It is very young

  1. 17 Octv0.1.0, the first release
  2. 22 Octv0.2.0, still the Homebrew version on 4 Nov
  3. 26 Octv0.3.0
  4. 4 Novv0.4.0, released the day this experiment began
40 MBMac app on diskmostly NSH's runtime
1.4 MBWeb first visitcompressed; 6.5 MB built
4.3 MBWebAssembly engineuncompressed
~120 MBMac app's memorywhile running

Choose it for new apps, not for rebuilding a tuned one

Good fit
  • A new app needing native Mac or iOS plus the web
  • Built mostly from NSH's own components
  • Rust is acceptable, which lifts the file and engine limits
Poor fit
  • Rebuilding a mature, heavily tuned web app
  • Apps that lean on the microphone or files
  • Anything that can't absorb breaking changes
Sources

Figures are from the experiment itself: the teleprompter-nsh repository, its NOTES.md, its test runs and NSH's own frame-rate monitor. Release dates are from NSH's GitHub releases. NSH itself: nsh.dev.