THE IDEA
Writing apps are built to make text frictionless: undo, autocorrect, infinite backspace. That's great for work and terrible for a first draft. A typewriter makes you commit to every letter.
Typewriter rebuilds that feeling on glass. Backspace only moves the carriage back; typing again overstrikes the letter that's already there. When you get near the right margin, the bell rings.
HOW IT WORKS
THE MACHINE
- Moving Paper: The strike point never moves. The sheet slides left under it as you type and climbs a line on every carriage return.
- Typebars: Each key maps to one of the bars fanned out in the basket. That bar swings up to the platen on every keypress.
- Real Controls: The return lever, shift, shift lock and a two-color ribbon. Drag the paper to turn the platen knob.

IMPERFECT INK
- Per-Strike Jitter: Every letter is stored with its own small offset, rotation and ink density, so no two e's look the same.
- Under-Inking: About a third of strikes fade on one side, like a slug hitting the ribbon unevenly.
- Bleed: Each line is drawn into a Canvas with a slight blur, as if the ink soaked into the paper fibers.
SYNTHESIZED SOUND
- No Samples: Every sound is generated when the app launches, from filtered noise bursts and decaying sine partials.
- A Key Strike: The slug hits the platen, the steel typebar rings briefly, the escapement clicks, then the bar drops back. Six variants rotate so it never sounds like a loop.
- The Return: Line-space ratchet clicks, the carriage slides along its rails, then a thud against the margin stop, with a heavy haptic timed to it.
THE DRAWER
- Finished Sheets: Feed a new sheet and the old one lands in the desk drawer.
- Roll It Back In: Any archived page can go back into the machine, with the carriage on the next empty line.
- Share: Export a page as a high-res image, or copy it as plain text. Where a cell was overstruck, the last letter wins.
TECHNICAL APPROACH
SwiftUI & Canvas
The whole machine is drawn in code. Equatable line views mean only the line being typed redraws
AVAudioEngine Synth
A tiny additive/subtractive synth renders PCM buffers, played through a pool of 12 player nodes
@Observable Model
Carriage, shift, ribbon and sheets in one model, saved as JSON with a debounced write
Hardware Keyboards
Works with a physical keyboard too. Arrow keys roll the platen, return pulls the lever