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.
260 matching builds · Page 5
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.
Say on the home screen when an update is ready to install (DRA-539)
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)
Older saved versions name a local image source and how its bytes were converted, which the
current format no longer has, so the rewrite turned them away. They are uploads, so they now
come through as uploads and can be restored again.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Let the slim-records rewrite read versions saved before images were kept as added (DRA-520)
Older saved versions name a local image source and how its bytes were converted, which the
current format no longer has, so the rewrite turned them away. They are uploads, so they now
come through as uploads and can be restored again.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Let the slim-records rewrite read versions saved before images were kept as added (DRA-520)
Older saved versions name a local image source and how its bytes were converted, which the
current format no longer has, so the rewrite turned them away. They are uploads, so they now
come through as uploads and can be restored again.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Read a layer's classes through classNameOf in the batch set_classes test (DRA-520)
The test came from main after layers stopped spelling out an empty class
list, so a layer with no classes holds none rather than "".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Don't hold an agent's join for the safety version or a slow access check (DRA-524)
When an agent joins, the room saves a version of what people did before it. That
save goes through the same queue as manual saves, restores, autosaves and
uploads, so a slow or backed-up queue left the agent's join unanswered for as
long as it took. The join now waits at most four seconds for it, then carries
on while the save finishes in the background. The version may then include the
agent's first changes, which is a better trade than an agent waiting minutes.
A join that waited a second or more for it is logged with how long.
The check of the session's access against D1 is the only other thing that can
hold up a join, and it is now limited to six seconds too. If it runs out the
app gets an HTTP error and joins again, the same as for a dropped connection.
The test backend can now hold up version writes, to show a join isn't delayed by
them.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Don't hold an agent's join for the safety version or a slow access check (DRA-524)
When an agent joins, the room saves a version of what people did before it. That
save goes through the same queue as manual saves, restores, autosaves and
uploads, so a slow or backed-up queue left the agent's join unanswered for as
long as it took. The join now waits at most four seconds for it, then carries
on while the save finishes in the background. The version may then include the
agent's first changes, which is a better trade than an agent waiting minutes.
A join that waited a second or more for it is logged with how long.
The check of the session's access against D1 is the only other thing that can
hold up a join, and it is now limited to six seconds too. If it runs out the
app gets an HTTP error and joins again, the same as for a dropped connection.
The test backend can now hold up version writes, to show a join isn't delayed by
them.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Let add_font take several font files in one call (DRA-526)
add_font takes paths for a family's weights or several families at once.
Main reads the files together, so files of one family come back as one
font with a face for each. As with the other batches, it is all or
nothing: a file that isn't a font, a path that isn't absolute, or a
family the file already holds from Google refuses the whole call with
every such file or family named, and nothing is added. A call that works
is one undo step.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Let agents read a layer back as HTML with read_html (DRA-527)
Re-reading edited copy took an agent dozens of outline, search and text calls, and clipped rows still hid the end of long text. read_html returns a layer, or what an artboard or content root holds, as the HTML write_html accepts, with all of its text. It goes through the same writer as the HTML export, so classes, inline styles and token references come out as the layer holds them.
Each element is marked with its layer id (data-layer-id) and, when it holds one text layer, that layer's id (data-text-id), so edits can aim at it. write_html now ignores both marks, which keeps a read and write round trip from storing ids as attributes. Bold, italic, underline, strike, code, small and links come out as the tags write_html turns back into styled words, line breaks as br, images by id, and component instances as data-component elements with their props and slot fills. Hidden layers, instance overrides and slots can't be written as HTML, so the reply says when they were left out.
Past maxChars (40,000 unless set) the markup stops between elements and the reply names the layers it didn't show, to read next. A block of text is never split, so one longer than the limit is written whole. The tool listing gets a little bigger, so the size ceiling on it moves up to match.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>