Skip to main content
Glassine moves in days rather than versions so far. Version 0.2.18 (build 30, September 21, 2026) is the direct download; 0.2.15, on the Mac App Store, has the same code without the updater, as of its own day, and each new version follows it there once Apple has looked. Both hold everything else below, including the lines marked after build 7, which went in after the earlier store build of that number. Everything here is in the source on main.
  • Tables are tables. A pipe table used to show as hairlines where its pipes were and one rule under the header — open at the top and the bottom, nothing between the rows, and a long cell wrecked it: a column was padded to its widest cell however long, so a key-and-paragraph table pushed every row’s closing pipe off the page onto a line of its own, rows two lines tall, stubs under the words. It is drawn as a grid now, the way Craft or Notion would: a border with rounded corners, a line under every row and at every column, the header in bold on a faint fill, room kerned round every cell’s words. A table is never wider than the page — the widest columns are narrowed first, together — and a cell longer than its column wraps under it, by the row’s head indent, with its lines ending at the border by the row’s tail indent, so the pipe after a cell that only just overflows no longer drops onto a line of its own; its closing pipe is laid out at no width for the same reason. A long cell in an earlier column wraps too, and the cells after it in that row follow on its last line, the grid leaving those columns open for the row. The separator is a thin strip the header’s line is drawn through, and Tab skips it. The table is laid out again when the column changes width.
  • Smart dashes leave a separator alone. Typing | --- | --- | with smart dashes on turned each --- into an em dash as the space after it arrived, and the table came apart; --- on a line of its own was already protected. On a line of pipes, dashes, colons and spaces the substitution now stands down for every keystroke, an em dash it has already made is turned back into hyphens, and a separator written with em or en dashes still reads as one, in the editor and in Review.
  • A paste straightens a separator, makes a table of tabs, lands on its own lines. A separator that arrived as | — | — | from somewhere else gets --- back. Plain text whose every line has the same number of tabs — a spreadsheet selection, a table a page handed over as text — becomes a pipe table. A paste of more than one line goes on lines of its own rather than joining the first row to the words before the caret. Text dragged in from another app is read like a paste; words dragged across the page carry Glassine’s own mark and are not read for their style a second time.
  • /table 3x4. The slash menu’s Table takes a size — columns, or columns × rows with the header counted — and sits in the first screen of the menu now, which shows nine items rather than eight.
  • A heading keeps its room above. With the syntax hidden, a heading pasted in — or written straight under a paragraph — sat flush against the line above until the caret visited it, and then kept its room. A hidden marker was a null glyph, and the typesetter lays null glyphs at the start of a paragraph into the line before them, after its newline, and then counts that line as neither the end of its paragraph nor the start of the next: no spacing on either side. The caret’s visit laid the line out again from its own boundary, which is why it came right. A marker at the start of a paragraph — a heading’s ## , a quote’s >, a task’s - — is now a control glyph of no advance, which starts the paragraph’s own line, so the room is there from the first layout.
  • No half-there card in the Timelapse. With Everything showing, a day’s note begun the morning after — Tuesday’s note, started Wednesday — stood under Wednesday as well as Tuesday, and both cards claimed to be the source of the open-zoom, which left the second a sliver of a plate. A note stands under its own day and nowhere else now, and a day left with nothing on it is no day of the corridor.
  • Tables on the cards. A document’s card — on the wall, among the fanned pages, in a pip’s preview — showed a table as its raw pipes. It draws it as a small grid now: up to four columns and five rows, the header on its fill, each cell one line, a note counting what is left out. The wall’s cards keep their one run of text; only a card with a table in it splits the run around the grid.
  • Closing pages. Every document opened stays open as a page, so the stack grew until the fan was a bazillion cards. ⌥⌘W (File → Close Other Pages) keeps the page on screen and closes the rest; ⌥⇧⌘W (File → Close All Pages) empties the stack and leaves All Documents. With the pages fanned out the card under the highlight has a × in its corner that closes it and keeps the fan up, beside ⌫ which did that already; a pip in the footer has the three in its right-click menu, and ⌥-click on a pip closes that page. The command bar lists the two new ones.
  • Date chips draw as one capsule again. A token whose @ is dimmer than its date could reach the layout manager as two runs, each drawing its own capsule, overlapping.
  • The Today view is now Timelapse, in the sidebar, the View menu, the command bar, the shortcut sheet and here.
  • ⌘1, ⌘2 and ⌘3 open the three rows at the top of the sidebar in order: All Documents, Timelapse, New Document. ⌘P, ⌘D and ⌘N still work. The rows are reordered to match and show the numbers.
  • Gallery cards animate their own entrance, so a mosaic removed mid-cascade can no longer leave a ghost behind.
  • Timelapse: every day is the same size whatever it holds, each fades out at its lower edge before it reaches the day in front, so the cards never touch or overlap, and the days sit close — a fifth of a card apart, whatever the window’s height. Today starts at the middle of the window; the days before it climb the upper half. Pressing ⌘1 then ⌘2 no longer leaves both sidebar rows lit.
  • The self-photographing mode (used to check layout without anyone at the Mac) now asks the window server for the app’s own window only, so macOS no longer treats each picture as screen recording and says so; the store pictures keep the fuller composite by request.
  • Float on top. ⌘. (View → Float on Top) keeps the window over other apps’ windows and on screen across Stage Manager sets; a pin in the footer shows while it floats. Remembered between launches.
  • This documentation site, at docs.glassine.ink, and the front door at glassine.ink.
  • App Store build 0.2.3 (7), with all of the above, submitted for review in answer to App Review’s request for information about the first build.
  • After build 7. Formatting as you go. A bar appears over selected text — bold, italic, strike, code, chip, link, H1–H3, bullet, numbered, task, quote — and acts on every paragraph a selection touches. A / at the start of a line opens a menu of headings, lists, task, quote, code block, divider, link, chip and dates, filtered by what you type after it. Chips: ⌘⇧H puts the selected words in a capsule like a date’s, written as ==word==, drawn in Review and the PDF too. Hide Markdown syntax (⌃⌘M, View menu, Settings → Editor) takes the marks off the page except in the sentence being written; bullets draw as bullets. See formatting. The caret’s glide time now goes up to 500 ms.
  • After build 7. Sorting by date created works: every save used to put a new file in the old one’s place, which made a document’s creation date its last save, so the order was the same as Last edited. Saves now carry the creation date across. Documents already in the library keep the dates they have, which is when they were last saved before this build; new ones and everything from here on are right.
  • After build 7. glassine.ink, remade. One window travels down the page as you scroll — the film, then each picture in turn, beside the words about it — and comes back up the same way; the page is lit by the app’s own backdrop, drawn by the same shader, and the last part lets you change it. Headings in the Book page’s face.
  • After build 7. ⌘→ stops at the end of the line. With the syntax hidden, a line followed by a task, a heading or a quotation sent the caret to the start of that next line instead, and ⌘⇧→ selected into it. A hidden marker is a glyph that takes no room, and the typesetter puts those at the start of a paragraph into the line above, after its newline — so the end of that line’s glyphs, where AppKit’s ⌘→ goes, lay past the newline and the marker. The end of the line is now worked out by the editor and never lies beyond the caret’s own paragraph; the last line of a wrapped paragraph had the same fault.
  • After build 7. The icon is the glass. The app icon’s sheet is now a square of Glassine’s own window — the Dusk theme over the Aurora backdrop, folds of indigo, magenta and teal, taken by the app photographing itself (tests/shot-icon.sh → Resources/aurora.png; make_icon.py --aurora draws the wordmark’s g on it in paper-white, with a soft shadow so the letter sits on the bright folds). One icon for both appearances now; the paper and charcoal sheets are retired.
  • After build 7. The tour. A copy that has never been through it starts with it: eight cards over the page, sliding in one after the other with their rows settling in turn — what Glassine is (plain files, marks that step back, glass, nothing that tries too hard), then the backdrop behind the glass, a theme, the type, the caret’s shape and glide, typewriter scrolling, focus and hidden syntax, and whether documents stay open as pages — each chosen on the card and seen at once on the page behind, through the same settings as Settings, so ⌘Z there takes any of it back. Return goes on, ← back, Esc leaves it; the demonstration copy and the check shots never see it. Help → Tour of Glassine and Settings → About → The tour bring it back. tests/shot-syntax.sh tour N photographs a card.
  • After build 7. Open pages. A document opened stays open, as a page, until it is closed (⌘W, File → Close Page), and the pages sit in a stack with the one being written on top, kept between launches — with no row of tabs across the window. Hold ⌥ and press Tab: the page steps back and the open pages fan out across it as cards, each the page itself in little (its title and first lines in the theme’s colours), in the order they were last used, the way ⌘Tab shows apps, with the page before this one already under the highlight. Tab steps along, ⇧Tab (or ←, →) back, ⌫ closes the highlighted page, Esc leaves things as they were, a click opens a card at once, and letting go of ⌥ opens the highlighted page — the other sliding aside as it comes in — so a tap of ⌥Tab flips to the page before. A row of pips beside the document’s name in the footer shows the open pages, the one on screen lit; a click goes there, the pointer names them, and ⌥Tab with one page open gives them a small shake. The ⌘K command bar lists every open page by name, and Previous page and Close page. Trashing, shelving or renaming a page keeps the stack right. Settings → Library → Keep pages open, off, is one document at a time, as before. tests/keys.sh drives it by key press. See pages.
  • After build 7. Tables in the editor. A pipe table used to be lines of pipes and dashes, which is what it is in the file; the editor now shows it as a table. Every cell is measured as it is drawn and the narrower ones are padded — a kern on the cell’s last space, or on its opening pipe for a right-aligned column — so each column is as wide as its widest cell, in any font; the pipes are drawn as hairlines the height of the row, the separator’s dashes as a rule under the header, and the header in bold. The file is untouched. Tab goes to the next cell with its words selected, ⇧Tab to the one before, and Tab from the last cell adds a row; /table in the slash menu starts one. Review had tables already. See tables.
  • After build 7. A paste keeps its shape. ⌘V read the clipboard’s plain text, which is the one flavour on it that has lost its structure — Chrome, Word, Pages and Notes all drop the bullets and the numbers from it — so a pasted list arrived as bare lines. A paste now reads the rich flavour (RTF, or HTML) and writes what it finds as the Markdown the editor would have written: - and 1. for the lists, nested by their depth and numbered from one; # for a heading set larger than the body; **, *, ~~ and ` for the weights; [text](url) for a link, bare when the text is the address; a pipe table for a table; a fence round a block of code. Plain text, when that is all there is, has its • turned to - and its 1) to 1.. Text copied out of Glassine carries a mark of its own and goes back in untouched. Edit → Paste as Plain Text (⌥⇧⌘V) is the raw string. tests/pastetest.sh runs the conversion over HTML and RTF as the clipboard carries them; tests/pasteshot.sh pastes into the editor itself.
  • After build 7. Move to Trash asks first. ⌘⌫ sits a finger from ⌘⇧⌫ and the Delete key, and a tester lost the page he was writing to it (and found it in the Trash). Every way to the Trash — the key, the File menu, a row’s or a card’s menu — now puts up a sheet naming the document, or the folder and everything in it: Return moves it, Esc keeps it, and ⌘Z still puts it back afterwards.
  • After build 7. The page holds still while the sidebar comes and goes. Showing or hiding the sidebar slides the editor to a new width over a few frames, and on each of them the text was wrapped twice — once at the new width less the old margins, a width nobody asked for, and again at the right one — while the scroll position stayed where it was. In a window narrow enough for the column to change, every line above the window rewrapped and the text in view jumped by as much, frame after frame; pressed quickly, the page sputtered. The column’s width is now set in one place, once, only when it changes, and the line being looked at — the caret’s, or the first one showing — is held where it is while the text reflows around it. The same holds for resizing the window.
  • After build 7. A new document is no longer filed as a daily note. ⌘N puts a document in the folder last worked in, and opening a day’s note made that folder Daily — so anyone who keeps daily notes found every new document landing among them. Daily is now never the folder a plain new document goes to: it goes to the top of the library instead. New Document Here on the Daily folder, and its +, still put one there.
  • After build 7. The month in the sidebar. Under All Documents, Timelapse and New Document sits a calendar of the month, one cell a day, shaded by how much of that day’s daily note there is — faint for a few lines, the full accent for a heavy day, bare where there is no note. The scale is the writer’s own: a day is full at the 85th percentile of the days with a note (never under 150 words), so one long day does not flatten the rest. Today is ringed; the open note’s day is ringed in the text colour; the note being written is counted as it is typed. Click a day to open its note or start one, ‹ › to turn the month, today to come back; the header folds it away. Word counts are taken at the library scan and cached with the tags and previews, so the calendar costs nothing to draw. See the sidebar.
  • After build 7. Rows dragged into order. A document in the sidebar’s tree can be picked up and carried: it lifts under the pointer with a shadow, the rows it passes spring aside, and on release it glides into the gap. The order becomes Your order, a fourth sort beside last edited, name and date created — chosen by itself the moment a row is dragged, kept folder by folder, with unplaced documents at the top; ⌘Z takes a drag back. A row carried over a folder, or over the Documents header, moves there; the tree scrolls when a row is carried to its edge. Not system drag and drop: the row itself moves, no snapshot, no drop line, and the rows that are not being carried only redraw when the gap moves. See dragging.
  • After build 7. Under the hood. The library no longer polls. It watches its folder through the file system’s own events and rescans a beat after anything changes — a file from another app, a sync landing, a save of its own — where before it walked the whole tree every three seconds whatever had happened, and a change from outside could take that long to show. A slow poll stays behind the events for what they can miss (a dataless iCloud file filling in, a volume that does not report), every thirty seconds and only while the app is active. A document is found by its id through an index rather than a search of the whole list; the sidebar’s lists of open and starred documents, and the calendar’s grid of days, are worked out once per scan or month instead of on every redraw; and a long document’s word count is taken off the main thread when it opens or reloads, so a big file no longer holds the window while it is counted.
  • After build 7. ⌘3 and ⌘D are today’s note. The third numbered row in the sidebar is now Today — the day’s note, started if the day has none — with ⌘3 and ⌘D both going there; ⌥⌘D is retired (it was the system’s Dock key). Timelapse keeps ⌘2 and gives up ⌘D; New Document keeps ⌘N and sits under the three, unnumbered. The Timelapse’s Start today’s note card, the command bar and the shortcut sheet say the new keys.
  • After build 7. The search bar no longer leaps as it goes. Esc sent the ⌘F bar gliding back to its spot in the header, and then, for the last frames of its fade, it jumped to the middle of the window before vanishing. The overlay was taken down on a timer, a beat before the spring had landed, and the flags reset in the same update told the outgoing bar to come out again while it faded. Now the bar’s place is its own, the app is told the moment the glide has landed and takes the overlay down then, with the header’s field fading up under it; a ⌘F pressed while the bar is still on its way back starts a fresh one. The same shape was in the command bar: Return cleared the query as the card faded, so the list filled back in under it. The query is now reset when the bar next opens.
  • After build 7. A day’s note starts under its heading. A new daily note put its heading, an empty line, and then the caret on a third — so the day began with a blank paragraph nobody wrote. It now starts on the line right under the heading.
  • After build 7. Editorial’s first paragraph is a paragraph. The style set the paragraph after the headline larger, lighter and grey, as a magazine’s standfirst; on ordinary writing it read as a heading that had wandered. It is now set like the rest.
  • After build 7. --- is a rule the moment it is typed. The third hyphen on a line of its own draws the rule and drops the caret to a fresh line under it; Return is no longer needed. Only the exact three at the end of a line — a longer run of dashes, or a rule being edited, is left alone.
  • After build 7. A rule stays a rule under the caret. Clicking on a horizontal rule showed its three dashes until the caret left the line, the way the caret’s line shows its marks. A rule has nothing in it to edit, so it now stays drawn with the caret on it; Backspace still takes it apart.
  • After build 7. Eight more Review styles. Fourteen now: Reader (a quiet page, a serif, a narrow measure), Gallery (wall text, spaced capitals, white space), Newspaper (a broadsheet — headline across the page, two justified columns with a rule between, a drop cap; one column when narrow), Typewriter (Courier on cream paper, double spaced, emphasis underlined), Notebook (ruled paper, a red margin, blue-black ink, the writing on the lines), Thesis (Times, double spaced, sections numbered 1., 1.1), Verse (for poems — centred, every line a line, a blank line a stanza) and Blueprint (white line type on blueprint blue over a fine grid). The ones with their own paper — Book, Book Dark, Typewriter, Notebook, Blueprint — stay light or dark whatever the theme, and the pill over the page now knows that for all of them. For Verse, the page’s HTML marks a block that follows a blank line (data-gap). See Review.
  • After build 7. ⌃Tab too. Control-Tab brings up the open pages like Option-Tab does, ⌃⇧Tab steps back, and whichever modifier opened the carousel, letting that one go opens the highlighted page. The Settings caption, the shortcut sheet and the tour say both.
  • After build 7. A long page comes up at once. Switching to a document of a few thousand words took several seconds. When a page came up the editor measured the line to hold still, which laid the text out; the layout manager grew the view to fit as it went, which came back into the same measurement, which laid out the rest of the document from inside the pass before it — a dozen nested passes on a long page. A guard against the re-entry: the page is immediate, and resizing the window on a long page is lighter for the same reason.
  • After build 7. The page beside the editor answers to ⌘⇧↩ rather than ⌥⌘↩ — one hand, for something reached for often.
  • After build 7. A quotation ends where its > lines end, and a list where its items end. In Review — and on the page beside the editor, and in the PDF — the paragraphs after a quotation were drawn inside it, indented and in italics, and the paragraph after a list item, a task included, was drawn as part of that item, unless a blank line stood between. That was CommonMark’s “lazy continuation”, where a line after a quoted paragraph or a list item is taken as more of it; in Glassine every line is a paragraph of its own and the editor draws only the > lines as the quote and only the - lines as the list, so the page now does the same. A line indented under an item still belongs to it.
  • After build 7. The page beside the editor. ⌘⇧↩ (View → Review Beside the Editor; the ⌘K command bar; the footer’s menu) keeps Review to the right of the text instead of in place of it — the same rendering in the same style, and live: a beat after typing pauses the page takes the new text in place, without a reload, the scroll where it was, and it scrolls to the block the caret is in as you move through the document. Every top-level block the renderer writes now carries the source line it starts on (data-line), which is how the page knows where to go; the editor reports the caret’s line a beat after it moves, only while a page is following. A hairline between the two is dragged to share the width; the share and the switch are kept between launches, like the sidebar’s. ⌘⇧↩ again, or the × on the page’s pill, puts it away; Esc stays the editor’s; from Review, ⌘⇧↩ brings the editor back with the page beside it. See Review.
  • After build 7. The column of text is centred again after the sidebar comes or goes. The text view is meant to be exactly as wide as the scroll view that holds it, and it followed the scroll view’s width by autoresizing — which adds the change in the scroll view’s width to whatever width the view began with. On macOS 27 the scroll view is made at no size at all and given its real size a moment later, so the text view ended up wider than the window’s page by the 600 points it was born with, and the column was centred in that wider width: to the right of the middle, and by a different amount once the sidebar had been hidden or shown. The view now sets its width to the scroll view’s outright whenever it lays its column out.
  • After build 7. A Welcome page for the app as it is. The document a first launch creates when the library is empty had been written before backdrops, the formatting bar, chips, hidden syntax, Timelapse, the command bar, the remade Settings and sync existed, and named keys that had since moved. It now tours the app as it stands — the backdrop behind the page and where to change it, the bar over a selection and the slash menu, ⌃⌘M, ⌘1 and ⌘2, ⌘K and ⌘/, Review, ⌥⌘D and the date words, Settings and its search and ⌘Z, and the library on a second Mac through GitHub — in the same voice, ending the same way. Every key in it is the one the app answers to. And a first launch now opens on the page itself, from its heading, rather than on All Documents with one card in it; a document opened any other way still opens at its end, where the writing continues. A copy already made keeps the page it has; the demonstration copy’s showcase carries the new one.
  • After build 7. Aurora from the first launch. A new copy opens with the Aurora backdrop behind the glass — the theme’s own colours, so the first page looks as the pictures do whatever the wallpaper — rather than a blur of the desktop; Desktop is a tile away in Settings → Behind the glass. Settings saved before this keep whatever they held.
  • After build 7. A light theme over a backdrop keeps its quiet grey. Paper’s syntax colour — the marks, a task’s box, the text of a finished task — is set for Paper’s own near-white page and all but vanished against the pale folds of a backdrop. Over a backdrop it now leans toward the text colour, in the editor and in Review; dark themes were set for dark grounds already and are unchanged.
  • After build 7. On the Mac App Store. Glassine Writer — build 17, version 0.2.3 — was approved and went live on September 13, 2026: apps.apple.com.
  • After build 7. A demonstration copy. ./build.sh --demo makes Glassine Demo.app: the app under an identity of its own, so its settings are its own, with the showcase pages of the store pictures for a library — in a folder of its own, in nobody’s iCloud Drive — and no updater. For pictures and recordings that show nobody’s real notes; it runs beside Glassine. Help → Reset Demo Library writes the pages fresh, dated from today; Help → Window at 1440 × 900 sets the window to the store’s picture size. See building.
  • After build 7. Sync no longer makes copy after copy of the document being written. GitHub marks each of its answers good for a minute, and the Mac’s networking layer took it at its word: for a minute after a push, a round read the branch as it stood before that push, took the version before this Mac’s own for the other Mac’s work, and wrote it beside the document as (conflict) — once a minute, for as long as the writing went on. Glassine asks GitHub afresh every time now. And so that no stale answer from anywhere can do it again: a head this Mac has already been past is not believed until it has come three rounds running (a branch really put back); the id recorded for a pushed file is of the bytes actually sent; a file the editor took up during a round is left alone even if it was free when the round began; a copy is not made when one with the same bytes already sits beside the file; and the editor treats an earlier text of its own coming back over its file as an echo — what is here is newer, and goes back over it — rather than as another Mac’s work. tests/synctest.sh has the stale answer among its cases. Copies already made are ordinary documents: delete them, and the deletion syncs.
  • After build 7. The horizontal rule stays on its line. A --- rule could sit a line too high — on the paragraph above, across its text — after a trip through Review and back, or after the caret had passed through it. Its dashes were laid out as glyphs that took no room, and the typesetter measured such a line one way on a full layout and another on a partial one. The dashes are laid out like any text now and simply not drawn, so the rule’s line is measured like every other line and the rule sits where it belongs, every time.
  • After build 7. Sync with GitHub. Settings → Library → Sync keeps the library in a private repository of yours, for a second Mac you’d rather not sign into iCloud on, and for a history of every note. No git, no daemon: Glassine talks to GitHub’s API itself, pushing each round of changes as one commit a few seconds after a save and pulling every half minute, on coming to the front, and on a click of the arrows in the sidebar’s footer. Three-way merge against what both Macs last agreed on; a file changed on both keeps this Mac’s version and writes the other beside it as (conflict); a deletion on one Mac goes to the other’s Trash; the document being typed in is left alone until its save lands. Connect with a fine-grained token for the one repository (the token lives in the keychain); a sign-in with a code on github.com is built and waits for Glassine’s registration with GitHub. Every scenario — adds, edits, removals, renames, conflicts, a busy file, an empty repository — is exercised by tests/synctest.sh through a folder standing in for GitHub. See sync with GitHub.
  • After build 7. Settings, remade. A rail of sections down the left — Library; Type, Caret, Modes, Typing; Theme, Behind the glass; About — each fitting its page, drawn in the theme’s own colours rather than the system’s grouped form: panels of rows, sliders and pill pickers in the accent, tiles for the themes and the backdrops with the chosen one ringed in its accent. A search box at the top of the rail finds any setting by name — the rail keeps the sections that have something, the card turns to the first, and the rows that match light up; ⌘F goes there, Esc clears it. The Type section shows a piece of page set in the current type, and the Caret section a line with the caret gliding along it, blinking and shaped as it is set, hopping when the tricks are on. A row that is not at its default shows ↺ under the pointer, to put that one back. About holds the version, the updater, links to the manual and the source, and Restore defaults, which ⌘Z takes back. Settings reopens on the section it was closed on. See settings.
  • After build 7. Open With. Glassine registers as an editor of Markdown and plain-text files, so Finder’s Open With lists it and Get Info → Change All… can make it the default for .md (or .txt). A file from outside the library opens in place — edited and saved where it is, never copied in — under an Elsewhere row in the sidebar; File → Add to Library copies it in. File → Open… (⌘O) opens any such file. See files from elsewhere.
  • After build 7. The editor no longer goes deaf for a few seconds after being left alone or after a trip to another window with a backdrop showing. The backdrop’s frames were drawn on the main thread, and asking the graphics system for the next frame can block for up to a second whenever the window server is not taking frames — the display dimmed, the window on another Space, a switch between apps — twenty times a second. The frames are drawn on a queue of their own now; the main thread never waits.
  • After build 7. Backdrops of your own, and more colour in the built-in ones. The backdrops moved from General to Settings → Themes → Behind the glass, laid out like the themes: a list, and the selected one’s colours beside it. Press + to copy any set into one of yours and change its three to five colours; the theme still sets the lightness, so it stays readable. Three new sets — Nebula, Borealis, Sunset — and the old ones now run through more than one colour: the folds run round the set as a ramp, so every colour in it is on screen at once with folds of its own. Frost is gentler at the low end and goes all the way at the top, so the whole slider is usable, and a paper grain slider of the backdrop’s own sits beside it. Drift runs at about a third of its first speed: it had been moving enough to catch the eye. The switch between the two halves of the pane, and the appearance controls, sit centred; Settings reopens on the half it was closed on. See behind the glass.
  • After build 7. Caret tricks. Left alone for a few seconds the caret does a trick — a hop, a bounce, a flip, a wiggle, a stretch, a lean — and another every several seconds until you type; every shape performs. (The first came after seven to twelve seconds in 0.2.5 and 0.2.6, late enough that most people would never see one; it comes after two and a half to four now.) Settings → Editor → Caret → Tricks when idle turns them off. And when typing carries the caret to the next line — a word wrapping, a Return — its glide takes a quarter longer, so the long way back to the left reads as one motion. See the caret.
  • After build 7. ⌘Z in Settings takes back the last change to a setting, from any pane, the View menu or the command bar, and ⇧⌘Z puts it back; a slider dragged or a colour picked is one step. Edits to custom themes are on the same stack.
  • After build 7. The Edit menu is back, and with it ⌘A, ⌘Z, ⌘X, ⌘C and ⌘V in the editor, and ⌘Q, ⌘H, ⌘W and ⌘M. The Window → Glassine item added for App Review had been put in by taking the scene’s standard menus away, which took those too. In build 11 of the direct download and build 10 of the store version only; the update puts them back.
  • After build 7. Backdrops. The glass can look through folds of colour inside the window instead of the desktop — long, deep, slowly moving, like silk lit from one side, drawn by a small shader on the graphics processor — in the theme’s own colours (Aurora) or one of six palettes, with drift and frost to taste, for a desk without a wallpaper worth looking through. Built dark first, so pale text stays readable over every part of it. Settings → General → Behind the glass, View → Backdrop, or ⌘K. See behind the glass.
  • After build 7. A dark icon. When the Mac is in dark mode the Dock and the app switcher show the same sheet at night — charcoal, the g in paper-white — and the paper icon by day; it changes with the appearance. Finder and Launchpad, which read the icon file, keep the paper one. Resources/make_icon.py --dark draws it from the same geometry.
  • After build 7. Window → Glassine brings the window back after it has been closed, as does any menu command that needs it (⌘N, ⌘1, ⌘2, ⌘F, ⌘,); clicking the Dock icon already did. The permission prompts for iCloud Drive and the Documents folder now say what Glassine does with the folder, with an example. Both asked for by App Review.
  • After build 7. The gear at the bottom of the sidebar opens Settings again. It had been asking for a Settings window the app stopped having when Settings became an overlay, and so did nothing; ⌘, and the menu were unaffected.
  • After build 7. Esc from the ⌘F search glides the field back to its spot in the header, on the same spring that brought it out; it used to cut straight back.
  • After build 7. The direct download updates itself. Sparkle checks a feed at glassine.ink once a day, and a new version is offered, downloaded, checked against its signature and installed in place; Help → Check for Updates… asks now. Settings → General turns the daily check off. The App Store version is built without it — the store is its updater.
  • After build 7. In Review, ⇥ and ⇧⇥ walk the six styles, next and previous.
  • After build 7. ⌘⇧S is a second key for Review, beside ⌘↩ — ⌘S shows the sidebar, so the shifted key sits under the same finger.
  • After build 7. ⌘1, ⌘P and the sidebar’s All Documents row only ever show All Documents. They used to close it when pressed again, which dropped you into whatever document was last open — easy to hit while switching between Timelapse and All Documents. Esc is the way back to a document.
  • After build 7. Esc from a note opened out of Timelapse returns to Timelapse — the page shrinking back into its day — rather than to All Documents.
  • After build 7. Caret shapes. Settings → Editor → Caret has a row of eight to pick from, each drawn as it will look: Bar, Pin, Serif, Wedge, Ghost, Comet, Glow and Hollow. All of them glide, blink and take the width and colour the same way. See the caret.
  • After build 7. Three hyphens on a line draw as a horizontal rule — a line across the middle of the column — instead of sitting there as dashes, and smart dashes no longer turn them into an em dash and a hyphen on the way. The dashes come back while the caret is on that line.
  • After build 7. A sixth Review style, Book Dark: the Book page after dark — warm charcoal paper, cream type, a terracotta drop cap and ornaments. Both Book pages have slightly softer corners.
  • After build 7. Capsules — dates and chips — stand a full space clear of the words around them; they used to swallow the space and touch. They also hug the type now rather than the whole line, so a short word gets a pill rather than an egg, and one that starts a line keeps its rounded left edge. In Review’s Book styles a capsule no longer inherits the paragraph’s first-line indent, which had been pushing its word to the right inside it.
  • After build 7. Paragraph indent, in Settings → Editor: the first line of each body paragraph steps in by up to three ems; headings, lists and quotes keep their own margins. The caret’s settings moved into the Editor pane, under Caret, so Settings has three panes rather than four.
  • After build 7. ⌘B, ⌘I, ⌘E, ⌘⇧X and ⌘⇧H turn their mark off the way a rich-text key does: at the end of a run the caret steps out past the closing mark instead of opening a second, empty pair; in the middle the run splits; with the words selected the marks come off.
  • After build 7. Typing a heading in typewriter mode no longer makes the line bob. Each keystroke arrived in the body size and was enlarged a moment later; the view was centred on the line twice, once for each, and the two disagreed by a few points. The typing attributes now follow the styling, and the line is centred once, from the text as it is drawn.
  • After build 7. Looks. Theme and Behind the glass were two sections that could not be judged apart — a backdrop takes its lightness from its theme, the tint veils the folds — and now there is one setting for how the window looks: a look, under Settings → Look. Eight come built in as tiles, each a small picture of the window: Soft Sky (a cool page on a deep violet-blue night — three neighbouring colours, kept deep — the look the app comes with from here on, in its author’s own colours), Slate, Deep Water, Pine, Plum, Umber, Linen (light) and Desktop. Under the tiles, the makings of the look on screen in one run: its name, the nine colours of the page, the glass, and what lies behind it — folds of colour in three to five wells with drift, frost and grain, or the desktop. A built-in look is for looking at; Duplicate makes one that is yours, and a look of yours is edited in place, everything live behind the card. A theme and a backdrop are still what a look is made of underneath, but neither is shown as a thing of its own any more: a change to a part a built-in supplies makes the look a copy of its own first, and deleting a look takes its makings with it. Export… writes a look to a .glassinelook.json file with its theme and backdrop inside; Import… reads one. View → Look and Look: … in ⌘K apply one; ⌘Z takes a whole look back as one step. Everything made before — custom themes, custom sets, and the pairing in use if no built-in matched it — became looks of their own in Mine on the first launch. First-launch defaults: Soft Sky, frost 20%, grain 8.5%. See looks.
  • After build 7. Esc between the overviews. Esc in All Documents goes to the Timelapse, and Esc in the Timelapse goes to All Documents, so each is a key from the other and both get found; a search, a tag or a day is cleared first. Esc from a page still goes where the page was opened from. The ⌘K bar names the way back to the page.
  • After build 7. The Timelapse by key. ↑ and ↓ walk the days the way the scroll wheel does; ↩ opens the day in front — its note, or its one document, or its wall; ⇥ switches the scope.
  • After build 7. Everything, day by day. The Timelapse has a second scope beside the daily notes, a pill in its header or ⇥ apart: every document written that day — made or last edited then — in the day’s slot, the day’s note first and the rest by their last edit, a row of up to four cards that recedes with the corridor like a single card does, ending in a +3 for the rest. A document shows under the day it was made and the day it was last edited, so a page worked on over a week stands at both ends of it. Kept between launches.
  • After build 7. A day’s wall. A day clicked in the sidebar’s calendar — or a day’s name in the Timelapse, or its +3 — narrows All Documents to that day: every document made or last edited then, the day’s note at the top, with a capsule beside the date to open the note or start one. The calendar stays in the sidebar while a day is up, so the next is a click away; right-click a day for its note, as a click used to be; a dot under a day’s number marks other documents written that day, and the hover text counts them. Esc, the ⓧ, ⌘1 or ⌘F bring the whole library back.
  • After build 7. The fanned pages, refined. The highlighted card is flat and full-size at the middle and the others turn a little toward it and step back, the way Stage Manager keeps the other windows at the side; each wears its number, and 1–9 jump to it. The pointer takes the highlight with it without moving the row (a row that re-centred on hover ran away under the pointer, card after card), so letting go of ⌥ opens the card under the pointer; a click opens a card with either button — with ⌃ held a click is a right click, which no tap gesture heard, so the press is matched to the cards by hand — as do ↩ and space; ↑ ↓ step with ← →; a sideways scroll steps too; the hint names the modifier held. The pips in the footer lift a small picture of their page when the pointer rests on one, and the picture follows the pointer along the row.
  • After build 7. Scrolling the Settings card no longer walks the Timelapse behind it. The corridor took every scroll in the window for a step along the days; it now leaves them to whatever card is over it — Settings, the shortcut sheet, the command bar, a prompt, the fanned pages. The mosaic’s keys had the same gap: with Settings over All Documents, Return in a field there opened a card behind the card. Both check first now.
  • After build 7. The tour, done rather than read. The eight cards of prose over a dimmed window are gone. The tour is a small prompt at the foot of the page that asks for one key at a time — type a few words, ⌘1, ⌘2, Esc, ↩, ⌘↩, ⌘3, ⌥⇥, ⌘K, then a look to pick by eye — and watches the app: when the thing has happened the keys light in the accent, a check draws in, the card pops (and the trackpad taps), a line says what it was, and the next step slides in. The keys press themselves every few seconds as a hint. The page stays yours throughout: nothing is dimmed, every key does its real work, and the tour puts the app where each step can be done from (a fresh page to type on, the corridor before the Esc step, two pages before ⌥⇥). ⇥ skips a step, ⇧⇥ goes back, the ✕ ends it; Esc is never taken, since Esc is one of the keys. Twelve steps, about a minute. tests/shot-views.sh tour N photographs a step, and the other views that changed today.
  • After build 7. The main thread no longer waits on the disk. ⌘1 froze the window for fifteen seconds, and the log said where the time went: after a save, after the app came to the front, after a sync landed, the open document was read back through the file coordinator — a round trip to filecoordinationd, which waits on every presenter of the file (iCloud, Finder windows, any app watching the folder) for as long as they take — on the main thread; the save on a page switch and the first-line rename after it went the same way; and every pass of the sidebar’s body read the wordmark from the bundle again, at animation rate. The read-back after every save was a mistake of its own: a URL caches its modification date, and off the main thread the cache is never cleared, so the date asked for on the save queue after a write was the one from before it, and every save looked like a change from outside. Now the file is read back, saved on a page switch, renamed after its first line and, when iCloud has not brought it down yet, opened — all off the main thread, through one queue, with what comes back weighed against the page as it is by then (a page that was typed into or saved while a read was out ignores that read; the next event asks again); the date comes from the disk each time; the wordmark is read once; and a save that must land before the file is moved or the app quits still waits, by design. A watchdog now keeps an eye on the main thread as well: when it fails to answer for a second, its stack is read and written to ~/Library/Logs/Glassine/stall-….txt, with a line in the unified log (subsystem com.alexlibre.glassine, category watchdog) and a second reading if the stall goes on — so the next freeze, whatever it is, can be read rather than guessed at.
  • After build 7. The window is dragged by its top edge, and All Documents comes up at once. A sample of the main thread under any animation showed a tenth of its time in AppKit working out where the window could be dragged by: with isMovableByWindowBackground on, the window computes, on every change of layout, the region of its content that is not draggable — for a SwiftUI window a walk of the whole view tree, on every frame. SwiftUI’s own WindowDragGesture in its place took the drags the sidebar’s rows need to be carried into order, wherever it was put, so the glass is no longer a handle at all: the window is dragged by its top edge, the way a window is, and nothing is computed. (The configurator that sets the window’s colour and shadow also used to do so on every pass of the content view’s body, each time asking for the same regions again; it touches the window only when something changed now.) All Documents, on a library of ninety documents, held the main thread for a second and a half as it came up: each card set every line of its preview as a view of its own — eight hundred text layouts for a wall of thirty — under a shadow that had the whole card drawn again offscreen and a fade mask that is a layer of its own whether or not there is anything to fade; and with an assistive client on the Mac (a window manager, a launcher, a lifelogger — anything that reads the screen through accessibility) SwiftUI walks every one of those on every frame to keep the accessibility focus right. A card’s preview is now one run of text, the shadow is the plate’s, and the fade is there only when the preview runs past the foot of the card. The wall comes up in about 150 ms cold and 110 warm on that library, measured by the check shots (BIG=1 tests/shot-views.sh gallery); the fanned pages still set their lines one by one, there being a few of them.
  • After build 7. Cards carried into order on the wall. A card in All Documents can be picked up and carried the way a row in the sidebar’s tree can: it lifts under the pointer, a little larger and with a shadow; the column it left closes up under it and the column under the pointer opens a gap at the nearest place, with a spring; a dashed plate marks the gap, and on release the card glides into it. Nothing else moves. The wall is still one order laid out shortest-column-first, under which moving one card can change the column of every card after it — a first cut did exactly that, and a card carried sideways took the cards below it along — so the carry is a carry on a board instead: the card goes into a column at a gap, and the board is written back as the order that lays out as it (the columns read off bottom-up, the shortest first, the way the layout reads them in). The one thing the order cannot hold is a foot that is not level, so when a column has grown too tall the card at its very foot crosses to the shortest, and a gap the order could not hold the carried card in is not offered. The board is the wall as it stood at the pick-up, without the card, so the place the pointer means cannot chase its own reflow. The wall scrolls when a card is carried to its edge. The order becomes Your order, as in the sidebar — chosen the moment a card is dragged, from whatever sort was showing, with nothing else moving — and Your order is now one order for the whole library rather than one list a folder: the wall shows all of it, each folder of the sidebar shows its part, a row dragged there moves the card here, and a document moved between folders keeps its place. An order kept folder by folder before this build is folded into one on first launch, the top level first and then the folders by name, which is how the wall showed it. Only the whole wall can be arranged; a search, a tag or a day shows a selection, and there a card stays a button. To make this possible the wall is laid out explicitly: a plan gives every card its frame, from heights the cards report as they are built (an estimate until then, kept across openings), and only the cards in and around the visible stretch are built at all, so a wall of hundreds costs what a wall of thirty does; a selected card off the built stretch is scrolled to by the plan. tests/shot-views.sh walldrag carries a card and prints the order before and after; wall with -glassine.shootDrag photographs one held.
  • After build 7. The icon wears Soft Sky. The app’s icon was its own glass photographed in Dusk over Aurora — the look of the first versions, the one that went when the quiet sets came in — so it was the one place the old colours were still on show, in the Dock all day. It is the same picture taken again in the look the app comes with now: Midnight over Soft Sky, a square from the right of the window where the pale fold passes, the wordmark’s g in paper-white on it with its shadow and the ruled lines. One icon for both appearances, the glass being dark already. tests/shot-icon.sh takes the picture in any look (THEME, BACKDROP, FROST, GRAIN) and make_icon.py --glass softsky draws on it; the aurora picture and its iconset are gone from the repository. The site’s favicon and touch icon follow.
  • Motion. Checking a task sweeps the strike across the words over half a second while they fade to the muted colour, with a pulse on the box; the sink a moment later fades out, moves and fades back in; unchecking brightens the words back. Review does the same in CSS. And twenty smaller things: focus mode crossfades between paragraphs, settles when turned on and lifts gradually; date capsules and pasted links pulse; sidebar rows slide; stars spring; every count ticks; the search field brightens with focus; a folder’s count and its + trade places on hover; the Saved mark springs in; cards cascade in and lift on hover; Review scales in; the command bar highlight glides; Settings tabs crossfade. All of it steps aside under Reduce Motion. See small delights.
  • New installs start in Helvetica Neue.
  • Focus mode keeps Markdown styling in the dimmed text — darker and less saturated rather than flattened to grey.
  • Leaving a document shrinks the page back into its card, the reverse of the way it opened.
  • Two more built-in themes, Dusk and Lavender; Dusk is the new default and the dark half of the system pair.
  • The sidebar’s Documents tree starts collapsed, with a count; All Documents is the better way to browse.
  • The Shelf. Shelve a document or folder (right-click, ⌘⇧⌫, or ⌘K) and it leaves Recents, Starred, the tree and All Documents for a collapsed Shelf section at the bottom of the sidebar, still searchable; Unshelve puts it back where it was. On disk, a plain move into a Shelf folder that mirrors the original path.
  • Scrolling lifts focus mode; the next click or keystroke brings it back where the caret lands.
  • Paste a link over words to link them: with a web address on the clipboard, ⌘V over a selection makes [words](url) instead of replacing the words.
  • A day’s note keeps its date as its name whatever its heading says, and only date-named notes appear in the Timelapse corridor.
  • A new icon: the wordmark’s lowercase g on paper, ruled lines fading in from the left.
  • The window reopens at the size and position you left it.
  • Review works in the sandboxed App Store build (the web view needs the outgoing-connection entitlement to start).
  • The app photographs itself for the store screenshots; no permissions, no one at the keyboard.
  • App Store build 0.2.3 (6) submitted for review.
  • Nested lists. Tab and Shift-Tab nest and un-nest bullets, numbers and tasks; numbered items renumber; Return on an empty nested item steps out.
  • Headings centered by default, in the editor and Review, with a switch.
  • Finished tasks sink below the unfinished ones after a moment, nested items in tow, and rise back home when unchecked. On by default, with a switch.
  • Drag a task box, a bullet or a number to reorder a list.
  • A steadier sidebar resize.
  • Undo for almost everything: after the editor’s own undo runs out, ⌘Z reaches file operations — a new document, a rename, a move, a duplicate, a trash.
  • Settings became a taller card with room to breathe; the Themes pane scrolls; Tab cycles the panes.
  • A hand-made wordmark in the sidebar header.
  • The App Store flavor: sandbox, an iCloud container of its own, bookmarked custom folders, and the packaging scripts. A privacy policy.
  • Ocean became the default look, then a set of first-install defaults tuned for writing: typewriter and focus on, a soft 4 pt caret.
  • The ⌘K command bar, listing what applies where you are.
  • Search that glides from the header to the middle of the window on ⌘F, and searches full text.
  • The Daily timeline — later Timelapse — as a receding corridor, with ⌘D for the view and ⌥⌘D for today’s note.
  • Quiet chrome while typing; the ⌘/ shortcut sheet; themes that follow the system; the Start writing placeholder; daily notes; PDF export; the card that grows into the page.
  • Faster launch: the library is listed without reading a file, and previews, tags and search text arrive on a background queue.
  • Gradient strikes, lit capsules, softer edges. Click a task’s [ ] to check it, in the editor and in Review.
  • Documents open with the caret at the end.
  • Glassine 0.1, first public commit: the glass window, the smooth caret, the iCloud library, autosave, the Craft-style sidebar, All Documents, Review with five styles, copy as Markdown or rich text, typewriter scrolling, focus mode, the counter.
  • ⌘P for All Documents, ⌘S for the sidebar; date tokens (@today, @yesterday, @tomorrow); full-text search on ⌘F; the release pipeline and the daily update check.