Desktop builds from every branch. Check the branch and result, expand any commit notes, then choose a download.
Filters search the full history. Enter an exact branch name, or click a branch below.
About these downloads
Choose notarized macOS builds when available. Signed builds may still be awaiting notarization. Downloads are ZIP archives, retained for 14 days. Only installers uploaded after October 2, 2026 at 16:37 UTC are public. A failed build can still have a usable installer from a successful packaging job.
PR, commit, and log links open GitHub and may require repository access. Notes are the commit author's description.
459 matching builds · Page 5
Name the agent window's limit for the files it holds, now that agents share them (DRA-537)
An artboard's page that runs past its bottom edge was left for the
browser to scroll, although the canvas does that scrolling itself. So the
browser drew each frame well past the artboard's edges and, while a zoom
was under way, drew and re-layered every page from top to bottom. On the
benchmark file, whose pages run about ten times past their artboards,
starting and ending a zoom stalled for up to 135 ms, each re-layering
took 9 to 12 ms, and a zoom out dropped to under 20 frames a second
while the GPU drew those pages again.
The frames are now not scrollable by the browser, and each is drawn as a
layer of its own, so marks redrawn over the canvas as it pans don't make
the artboards beneath them draw again. Scrolling a page inside an
artboard works as before.
On the benchmark file at 60 Hz, a zoom out now keeps its 95th-percentile
frame at 17.6 ms instead of 66 ms, the end of a zoom no longer stalls, and
a zoom in's 95th-percentile frame takes 5 to 6 ms of the window's thread
instead of 9 to 12 ms.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Draw each artboard as a layer the browser doesn't scroll (DRA-534)
An artboard's page that runs past its bottom edge was left for the
browser to scroll, although the canvas does that scrolling itself. So the
browser drew each frame well past the artboard's edges and, while a zoom
was under way, drew and re-layered every page from top to bottom. On the
benchmark file, whose pages run about ten times past their artboards,
starting and ending a zoom stalled for up to 135 ms, each re-layering
took 9 to 12 ms, and a zoom out dropped to under 20 frames a second
while the GPU drew those pages again.
The frames are now not scrollable by the browser, and each is drawn as a
layer of its own, so marks redrawn over the canvas as it pans don't make
the artboards beneath them draw again. Scrolling a page inside an
artboard works as before.
On the benchmark file at 60 Hz, a zoom out now keeps its 95th-percentile
frame at 17.6 ms instead of 66 ms, the end of a zoom no longer stalls, and
a zoom in's 95th-percentile frame takes 5 to 6 ms of the window's thread
instead of 9 to 12 ms.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Ask for image thumbnails by only what a layer holds of each image (DRA-543)
When image layers were trimmed to their hash, type and size in pixels
(DRA-520), the check on what main is asked to show became just as strict.
The Images view, the reference list in the generate form and the canvas
still handed it the full image details, with name, size and source, so the
check refused them: the Images view threw as soon as it had an image to show
a thumbnail for, which is where generating an image stopped. The canvas's
images and an agent looking at an image were refused the same way.
The thumbnail hook now takes images and sends only what a layer holds of
each, and the canvas and agent views do the same. The display copy changes
(DRA-519) weren't involved.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Ask for image thumbnails by only what a layer holds of each image (DRA-543)
When image layers were trimmed to their hash, type and size in pixels
(DRA-520), the check on what main is asked to show became just as strict.
The Images view, the reference list in the generate form and the canvas
still handed it the full image details, with name, size and source, so the
check refused them: the Images view threw as soon as it had an image to show
a thumbnail for, which is where generating an image stopped. The canvas's
images and an agent looking at an image were refused the same way.
The thumbnail hook now takes images and sends only what a layer holds of
each, and the canvas and agent views do the same. The display copy changes
(DRA-519) weren't involved.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Measure reopening the large file as well as opening it (DRA-540)
The large-file measurement now closes the file once it has opened, waits
for this computer to keep its copy, and opens it again, timing the same
steps as the first open.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Build the macOS app on this Mac when it's awake (DRA-538)
A runner on the Mac now takes the macOS job in Desktop builds, and GitHub's
macOS runner takes it when the Mac isn't online. launchd keeps it listening in
the background at low priority. Each runner handles a single job and then a
fresh one registers through the GitHub CLI login, which avoids the dropped jobs
that persistent runners suffer from and keeps any admin token off disk.
Picking our runner or GitHub's moves into a shared workflow, which Checks now
uses too.
The macOS job sets up its own signing keychain instead of leaving it to
electron-builder. electron-builder unlocks its keychain with the certificate's
password rather than the keychain's, which macOS 26 and later refuse. The new
keychain is deleted when the job ends, so the signing key doesn't stay behind on
the Mac.
The Spark runners are stopped until GitHub ships a runner release that stops
dropping jobs (actions/runner#4728).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Build the layer tree from a file's records in one go (DRA-536)
A file opening builds its layer tree from nothing, which went through the
same draft of changes as a single edit does, record by record. The build now
goes straight over the records: owners, places, cut cycles, children and
recovered layers each in one pass over plain maps. It gives the same tree as
before, which the hierarchy tests hold it to, by comparing a tree kept up from
edits with one built from scratch. The edit path no longer needs its separate
mode for whole builds.
Building the tree for the 80,000-layer file took 139 ms and now takes 69 ms
(median of 12, in Node). Opening it (two runs, M4 Max), the file is editable
after 0.74-0.76 s and the first artboard shows after 0.93-0.99 s. The worst
frame stays at 199-202 ms, now the task that applies the room's records.
Altogether, against main: the worst frame is 199-202 ms rather than 737-840
ms, the file is editable after 0.74-0.76 s rather than 1.12-1.25 s, and the
first artboard shows after 0.93-0.99 s rather than 1.44-1.64 s. Every artboard
shows after 3.87-4.04 s rather than 2.71-2.87 s. A dropped card shows in place
after 83 ms rather than 112-139 ms, an undo after 84 ms rather than 122-139 ms,
and an agent's write_html after 76-97 ms rather than 115-237 ms.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Build the layer tree from a file's records in one go (DRA-536)
A file opening builds its layer tree from nothing, which went through the
same draft of changes as a single edit does, record by record. The build now
goes straight over the records: owners, places, cut cycles, children and
recovered layers each in one pass over plain maps. It gives the same tree as
before, which the hierarchy tests hold it to, by comparing a tree kept up from
edits with one built from scratch. The edit path no longer needs its separate
mode for whole builds.
Building the tree for the 80,000-layer file took 139 ms and now takes 69 ms
(median of 12, in Node). Opening it (two runs, M4 Max), the file is editable
after 0.74-0.76 s and the first artboard shows after 0.93-0.99 s. The worst
frame stays at 199-202 ms, now the task that applies the room's records.
Altogether, against main: the worst frame is 199-202 ms rather than 737-840
ms, the file is editable after 0.74-0.76 s rather than 1.12-1.25 s, and the
first artboard shows after 0.93-0.99 s rather than 1.44-1.64 s. Every artboard
shows after 3.87-4.04 s rather than 2.71-2.87 s. A dropped card shows in place
after 83 ms rather than 112-139 ms, an undo after 84 ms rather than 122-139 ms,
and an agent's write_html after 76-97 ms rather than 115-237 ms.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Go straight to other text while editing text (DRA-542)
While a text is being edited, moving over any other text now outlines it
with a dashed line, however deeply it is nested, and pressing it moves
editing there with the caret where the pointer landed. Before, hover went
quiet during editing and a press ended it and picked the text's block by
the usual depth rules.
A layer that holds nothing but a text counts as that text, so the leading
around a line and the room beside a short one still reach it. Text inside
components, read-only text, and locked or hidden layers keep the usual
rules, as does a press with a modifier held or on anything that isn't text.
The browser test drives the real canvas through the whole path.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Prepare the Mac signing keychain ourselves (DRA-538)
Updates download quietly and install the next time Draftly quits, so
nobody knew one was waiting. Once an update has downloaded, the home
screen now shows one plain line under the files, "An update is ready.",
with a Restart button that goes through the usual quit check.
The window is only told that an update is ready, not which version, and
the separate "new version is ready" notice that appeared on every screen
is gone. The notice for when the server turns this version away stays.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Keep artboards from shaking while a zoom is under way (DRA-491)
Each frame of a zoom rounded every artboard's width and height to whole
device pixels and moved the artboards after it by that rounded change.
The rounding ticked over at different frames for different artboards and
added up along the strip, so the pictures stepped by a pixel or more
against each other and against their outlines as they grew.
A zoom now moves and scales each artboard smoothly, without rounding,
from where it was laid out towards where it will rest. The canvas rounds
only at rest, and now rounds each artboard's edges from where they fall
along the strip rather than its width alone, so rounding no longer adds
up across artboards and each one rests within a device pixel of where
the zoom showed it. Overlays still waiting for the canvas to catch up are
scaled by the same whole-pixel sides, and the artboards just outside the
view are composited too, so those a zoom out brings in look like their
neighbours.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Keep artboards from shaking while a zoom is under way (DRA-491)
Each frame of a zoom rounded every artboard's width and height to whole
device pixels and moved the artboards after it by that rounded change.
The rounding ticked over at different frames for different artboards and
added up along the strip, so the pictures stepped by a pixel or more
against each other and against their outlines as they grew.
A zoom now moves and scales each artboard smoothly, without rounding,
from where it was laid out towards where it will rest. The canvas rounds
only at rest, and now rounds each artboard's edges from where they fall
along the strip rather than its width alone, so rounding no longer adds
up across artboards and each one rests within a device pixel of where
the zoom showed it. Overlays still waiting for the canvas to catch up are
scaled by the same whole-pixel sides, and the artboards just outside the
view are composited too, so those a zoom out brings in look like their
neighbours.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Measure a second agent's memory, and a file drawn without inline icons (DRA-73)
The large-file measurement now connects a second agent to the same
file and reports what it adds to memory. DRAFTLY_MEASURE_ICONS=0 draws
each card's icon as a plain block instead of an inline SVG, which shows
how much of a zoom's cost comes from the icons.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Measure a second agent's memory, and a file drawn without inline icons (DRA-73)
The large-file measurement now connects a second agent to the same
file and reports what it adds to memory. DRAFTLY_MEASURE_ICONS=0 draws
each card's icon as a plain block instead of an inline SVG, which shows
how much of a zoom's cost comes from the icons.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Remove the one-off workflow now every file and version is on the slimmer records (DRA-520)