Changelog · 20 releases · Aug 6 – Sep 26, 2026

From a script to a stage, in seven weeks.

Greenroom started as the one-click version of a teacher's 7:50 ritual. Every version since was cut from a real morning class: something broke, something was missing, and the fix shipped before the next one. This is the whole record, including the build that never launched.

20
releases
51days
first release to latest
326
commits
4.3k → 38.6k
lines of Swift
1
build that never launched

01 · The shape of it

Two bursts, a steady climb, and a second wind that kept going

Lines of Swift in the app at each release, on the day it shipped. The size of the code is a blunt measure, but it shows where the work went: a first day that produced most of the app, ten days of hardening in the 0.3 series, one Sunday (0.4.0) that doubled it, and two September mornings that gave it a browser and a way onto YouTube. Then the two largest releases of all: a console for the class (0.8.0), and Screenroom (0.9.0), which added more code than the whole app had in its first week.

Lines of Swift per release, August 6 to September 26, 2026 A step chart. 0.1.0 on August 6 has 4,274 lines. The 0.3 series through August 20 stays between 6,000 and 8,000. 0.4.0 on August 24 jumps to 16,588. 0.6.0 on September 3 reaches 18,781 and 0.7.0 on September 4 reaches 20,290. 0.8.0 on September 18 reaches 27,115 and 0.9.0 on September 26 reaches 38,621. 0.3.0 is marked as the release that never launched. The data table below lists every value. 40k 30k 20k 10k 0 Aug 6 Aug 13 Aug 20 Aug 27 Sep 3 Sep 10 Sep 17 Sep 24 RELEASE DAY → LINES OF SWIFT IN App/ FOUNDATION HARDENED IN CLASS TEACHING SURFACE BROWSER · YOUTUBE CONSOLE · CUES · SCREENROOM 4.3k · 0.1.0 16.6k · 0.4.0 38.6k · 0.9.0 0.3.0 · never launched
Hover or tab to a dot for the release. Counted with git ls-tree on each release tag, Swift files under App/ only. The hollow amber point is 0.3.0, which shipped missing a framework and could not launch; it is the reason the release script now verifies every linked library and smoke-launches the exact bytes before publishing.
Data table: every release, with commits and lines
VersionPublishedCommitsSwift linesHeadline
0.1.0Aug 6, 05:4714,274First packaged build
0.2.0Aug 6, 15:15395,989Most of the app
0.2.1Aug 6, 16:3746,020Clean quit
0.3.0Aug 7, 12:2176,041Never launched
0.3.1Aug 9, 16:5526,041Self-updating
0.3.2Aug 10, 04:1346,108Browser windows, quiet OBS
0.3.3Aug 17, 06:0856,246Presets, transparency page
0.3.4Aug 18, 07:22116,781Stability from real classes
0.3.5Aug 18, 09:0396,947Dual display done right
0.3.6Aug 18, 10:3487,205Drag-to-resize layout
0.3.7Aug 19, 01:47197,385Design-system pass
0.3.8Aug 20, 06:3098,018Right display, quiet quit
0.4.0Aug 24, 04:235216,588Clips, participants panel
0.4.1Aug 24, 04:41216,599Tile identified first
0.5.0Aug 24, 07:02416,802Live speaker window
0.5.1Sep 3, 11:24216,821Recordings have sound
0.6.0Sep 3, 12:49718,781Greenroom Browser
0.7.0Sep 4, 04:061920,290YouTube upload, Sessions
0.8.0Sep 18, 02:535127,115Classroom console
0.9.0Sep 26, 09:227138,621Screenroom, Cues, camera switching

02 · Release by release

What each morning taught the app

Filled dots are patch releases; lime dots added a whole capability. Each era shows the stage as it stood by its end. Full notes for every version are on GitHub Releases.

Aug 6 · one day

Foundation

Three releases before dinner. The first was the ritual as a script; the second turned out to be most of the app.

OBS · ZOOM · TILED WINDOWS
0.1.0
Wed Aug 6 · 05:47
4,274 lines
New

The one-click morning

OBS virtual camera with you keyed in, a Zoom meeting, and a tiled layout. Credentials travel as one settings file.

Virtual cameraStart / join ZoomTiled layoutSettings export
0.2.0
Wed Aug 6 · 15:15
5,989 lines · 39 commits
NewFixed

“Everything since 0.1.0, which turns out to be most of the app”

Also fixed: the cutout rendered you at 1% opacity, and the freezes that needed a force-quit.

Scheduled meetingsPresenter modePeople viewRecordings⌥⌘ ShortcutsFast Start
0.2.1
Wed Aug 6 · 16:37
6,020 lines
Fixed

Quitting stops saying “Greenroom quit unexpectedly”

The Zoom SDK crashed in its own teardown at exit; Greenroom now shuts it down first. It also returns to the front when a session ends.

Aug 7 – 20 · two weeks

Self-updating, and hardened in class

The updater arrived, failed once, then made every later install automatic. The rest is what a real classroom did to the app.

↻ updates itself DRAG TO RESIZE · SELF-UPDATING
0.3.0
Thu Aug 7 · 12:21
6,041 lines
Never launched

The build that could not start

A build step deleted the Sparkle framework from the bundle; the app crashed on open everywhere and downloads were pulled. The release script has verified every library and smoke-launched every build since.

0.3.1
Sat Aug 9 · 16:55
6,041 lines
New

The last version anyone installs by hand

Sparkle auto-updatesEdDSA-signedCheck for Updates…
0.3.2
Sun Aug 10 · 04:13
6,108 lines
Fixed

Browsers get their own window; OBS stops crashing on quit

A session had been tiling the teacher's whole tab pile.

0.3.3
Sun Aug 17 · 06:08
6,246 lines
New

Meeting presets, and the transparency page

Presets“Is it safe?” pageHonest about plaintext credentials
0.3.4
Mon Aug 18 · 07:22
6,781 lines · 11 commits
FixedNew

No more windows bursting open full-screen

Deterministic placement, a guard against stray meeting windows, safe quitting, an unmirrored self-view.

⌥⌘Z Quick-hidePick the participant displayHide Self View
0.3.5
Mon Aug 18 · 09:03
6,947 lines
Fixed

Dual display, done right

Speaker tile on the main screen, participant grid with controls on the second. They had been swapped.

0.3.6
Mon Aug 18 · 10:34
7,205 lines
New

Layout by direct manipulation

Drag the handlesLive re-tilingEnd Session asks firstCrash-safe MP4
0.3.7
Tue Aug 19 · 01:47
7,385 lines · 19 commits
Fixed

A design-system pass, and the grid finally stays put

Brand green everywhere; the participant grid stops fleeing its display; quitting feels instant.

0.3.8
Wed Aug 20 · 06:30
8,018 lines
Fixed

OBS quits quietly; windows go to the right display

Four crash causes closedDisk space in Recordings
Aug 24 · one Sunday

The teaching surface

The custom meeting UI becomes the app's own console, and the recorder learns to clip the past. The code doubles in a day.

⌥⌘2 · last 2 min saved CLIPS · PARTICIPANTS PANEL · SECOND DISPLAY
0.4.0
Sun Aug 24 · 04:23
16,588 lines · 52 commits
New

Clips after the fact, and a participants panel built for teaching

⌥⌘1·2·5 ClipsParticipants panelHands up, in orderChat rebuiltEnds a meeting a crash left live
0.4.1
Sun Aug 24 · 04:41
16,599 lines
Fixed

The meeting tile is identified first, always

It could be mistaken for the gallery and pushed behind the workspace.

0.5.0
Sun Aug 24 · 07:02
16,802 lines
NewFixed

The live speaker window works

Participant video stops going black: every stream is sized against Zoom's subscription budget.

Live speaker windowPhotos preview in chatProper initials
Sep 3 – 4 · two mornings

Sound, a browser of its own, and a way onto YouTube

A quiet bug that had shadowed every recording; the first piece of the workspace Greenroom draws itself; then the recording leaves the Mac for the first time, on purpose, with a switch.

● REC · with sound BROWSER · MIC IN THE SCENE · → YOUTUBE
0.5.1
Wed Sep 3 · 11:24
16,821 lines
Fixed

Recordings have sound

Every recording so far had a silent track: nothing in the scene was listening to the mic. A dedicated mic input now follows the system device.

0.6.0
Wed Sep 3 · 12:49
18,781 lines
New

Greenroom Browser

A WebKit window Greenroom owns, so it tiles itself with no permission to grant. Chrome and friends stay in the list.

Tabs in the title bar⌘F Find⌘Y History, localSuggests as you typeYesterday's tabs on Start
0.7.0
Thu Sep 4 · 04:06
20,290 lines · 19 commits
New

Recordings go to YouTube, and every class has a home

Off by default and its own channel on the safety page: a finished recording uploads as unlisted, asked or automatic, in the background.

YouTube uploadAsk / automaticSessions windowRename a class, or its videoFeature & setting counts
Sep 18 – 26 · 8 days

A console for the class, and a room for student talks

The participants panel stops being one long column and becomes a console. Then the two things built beside it ship: Cues, which listens in class, and Screenroom, where a student's talk is recorded, marked and watched back.

⇄ two cameras Cues · on this Mac CLASSROOM CONSOLE · CUES · TWO CAMERAS
0.8.0
Thu Sep 18 · 02:53
27,115 lines · 51 commits
NewFixed

The participants panel becomes a classroom console

The one long rail is gone. Everything that competed for space in it has its own place, and End session is always in reach. The fixes were all found by running real classes. Cues is built and runs, but it is held back: nothing listens to the microphone in this release.

Session headerLive QueueThe grid takes the windowInspector drawerFolds for a laptop screen
0.9.0
Fri Sep 26 · 09:22
38,621 lines · 71 commits
NewFixed

Screenroom, Cues, and a camera that follows you

Screenroom records a student's talk, takes your notes as they speak, and counts pace, filler words, pauses and time facing the room on this Mac. An agent you already run can write the feedback; the video and audio are not sent. Cues, held back in 0.8.0, is here on macOS 26.

ScreenroomCuesCamera switchingSessions: two listsThe new markAiming a camera without OBSUpdates never during a class

The next morning decides the next version.

Every release above answered something a real class did. If yours does something new, say so.