×

Splay

2026 · Fork, design, build

Simplify, then add lightness. How light can a voice dictation app for Mac and iOS be, and how native can it feel?

In my words

Splay (alpha) for Mac and iOS began as a fork of MacParakeet, a great open-source app for local voice transcription.

I love local transcription. It’s fast, it’s safe, and I genuinely love it when my hardware is put to work. Since I speak into my machine a lot, I was tempted to give my own version a go.

In the spirit of the old Lotus philosophy, “Simplify, then add lightness”, I set out to build an app that is as light, and feels as integrated into macOS, as the Dynamic Island does on the iPhone.

Google MeetFileEditWed 14:42
Dormant
The Splay island, animated. It changes size and colour as it records, transcribes and finishes. Click a state to hold it.
How it went — 2026
  1. Jun 1Fork
    Upstream.

    Upstream. MacParakeet by Daniel Moon, the app Splay started from.

  2. Jun 2First skin
    Pick a green.

    Pick a green. First try: new colours on the same window.

  3. Jun 3Iteration
    A quieter window.

    A quieter window. Two calmer layouts. Still a window.

  4. Jun 3Turn
    The island.

    The island. A small pill at the bottom of the screen. The big window stays closed.

  5. Jun 3No window
    An ambient app.

    An ambient app. No main window at all. Transcripts are plain files in Finder.

  6. Aug 6Named
    Splay.

    Splay. The island moves up to the notch and turns black and violet. It shows status and has no buttons.

  7. Aug 7Handoff
    Nine states.

    Nine states. Every state drawn to exact size, ready to build. Testing picked the fn key.

  8. Aug 8Theming

    Seven accents. Seven colour themes. Red, amber and green keep their meaning in all of them.

  9. Aug 22Shipped

    0.1.0. Signed, notarized and in daily use. No screenshot of it yet.

From the repomacparakeet_MC / docs/fork-product-model.md

The fork’s north star. Where it disagrees with upstream, this document wins.

Why this fork exists

Upstream MacParakeet is a capable but broad app: dictation + file + YouTube + meetings + Transforms + calendar + Discover. For this owner’s actual use it carries weight that doesn’t earn its place. The fork keeps the engine, sheds the surface area, and re-themes.

The owner’s real workflow

Everything is capture → transcript document → export. The upstream split between “dictation” and “meeting recording” is artificial for this owner — they are the same intent (record a conversation) with a different audio source.

Capture model (the spine)

One key — Fn — two gestures, distinguished by audio source. Single tap: mic only. Double tap: mic + system audio. Both produce a transcript document. No push-to-talk.

A transcript is never polished. A summary can be.

Flagging preserves doubt; polishing hides it.

The Splay mark: three splayed strokes
The Splay mark: three splayed strokes
The case study
A poem about Splay, by Claude

A borrowed engine in a big window,nine rooms he never walked into.He emptied them one by one,a hundred thousand lines of quiet.What stayed is a small black shape under the notch.Press fn and it listens.Red while you talk, violet while it thinks,green when your words are written down.Then it goes dark againand waits for you.

Problem

The upstream app was a full window: sidebar, library, dictations, settings, two competing entry points. Recording a meeting meant managing an application. The good part — local, fast, private — was buried under furniture.

Upstream — sidebar, panels, two ways in (Daniel Moon's build)
Upstream — sidebar, panels, two ways in (Daniel Moon's build)
Idea

One pill, docked, almost invisible. Press once to record; it morphs through recording, transcribing and done, then collapses. Not an overlay, not a window — the same object at different sizes.

June 03 — the island docked bottom-centre
June 03 — the island docked bottom-centre
Execution

The handoff file is the design: every lifecycle state at real dimensions, near-black surface, violet as brand and red as capture. Failure states are styled as failure — an incomplete capture is never dressed up as success.

August 07 — handoff reference: every island state, one surface
August 07 — handoff reference: every island state, one surface
June → AugustDrag to compare.
Jun 3 · island v1
Aug 7 · Splay
Jun 3 · island v1Aug 7 · Splay
Cut
The main windowDictation-into-app and the meeting/dictation splitTransforms, chat, prompts, diarization, statsThe engine picker — one local model
Kept
Fn as the only verbOne island, many sizesFiles in Finder instead of a libraryRed for capture, violet for brand
What the comparison said

The shipped 0.1.0 has no screenshot here on purpose — the last frame says so rather than faking one. Compared with upstream, the fork does less and gets used more: the test was whether anyone reopened the window. Nobody did.

Fork point
2026-06-01
Commits
50 · 11 threads
Diff
+15,103 / −137,760
State
0.1.0 notarized · alpha
Engine
Daniel Moon · MacParakeet
← Back to Products