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 8
Follow the layer and page lists from the moment a file is opened
When the lists are first read after a file has loaded, each scans every record in the store, and
the layer list comes out in the store's own order. A layer tree built from that order took about
twice as long as one built from the order the room sent the layers in (290 ms against 145 ms for
80,000 layers), because layers that sit together in the file are then processed together.
Following the lists from the start means the file's arrival reaches them as one change, with no
scan. The tree now reads the same page list as everything else rather than querying for pages
itself.
DRA-513
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Compress large outgoing messages as each one is sent (DRA-489)
tldraw hands every session its own JSON copy of a change. Compressing those
in the background kept every session's copy alive until the streams caught
up, so a large write with a few windows open needed several times its size in
memory. Compressing each message as it arrives lets its copy go before tldraw
builds the next one, roughly doubling the write a room can pass to other
windows within the same memory.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Check that stopped zooms rest and new text waits for its own artboard (DRA-491)
Ending the call's trace span sent it to main in front of the reply, and main
took it in first. With error reporting on, that held every reply up by about a
millisecond, around a fifth of a small call's total time.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Lower the agent tool list size limit from 71,000 to 53,800 characters (DRA-511)
Every agent session pays for the whole tool list, so the limit now sits just
above its current size and a new tool has to earn its place.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Accept a closed connection when the server refuses an oversized font before reading it (DRA-497)
Font uploads are now refused from the declared length without reading the body. A client that is
still sending the body can see the connection end before it reads the 413, which made this test
fail now and then on a busy machine. The test accepts either outcome and still checks that nothing
was stored.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Ask apps that reject unknown record fields to update before artboards carry heightMode (DRA-506)
Artboard records can now carry heightMode. Revision 5 apps reject fields they don't know and
would drop their connection on every such record, so the floor moves to 6 and this build writes
revision 7.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Let go of an idle agent connection's caches after a few minutes and count it without them (DRA-499)
A connection's copy of a file keeps about a third as much again in caches built from it,
and nothing used them while the agent was away. After five quiet minutes the connection
releases them and the next call builds them again, which takes about 300 ms for a file of
85,000 layers. The connection stays open, and the person's own window is untouched.
The memory budget counts a connection that has released its caches at the size of its
copy alone, using the file's size from just before, since measuring it again would read
every record.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Run the import lanes test's disk writes through a queue, as the app does (DRA-502)
The test gave the intake store a stand-in that ran every write at once, so two imports for the
same file could race writing its records and one of them never started uploading. The app always
queues those writes. With the real queue the test passed six parallel runs out of six, where the
old one failed two.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Check that a room stays within a memory budget at the file size limit (DRA-489)
A new integration test pushes a realistic 47 MB file through a room, then
restarts the backend over the same storage with workerd's V8 heap capped.
Saving, reading back, sharing, copying and restoring the file must fit in
48 MB of heap, and an agent's join plus a version saved during a window's
first load must fit in 144 MB, a little over what a first load alone takes.
The test backend can now keep its storage between starts and cap the heap.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Name the children inspect_node lists the same way inspect_tree names rows (DRA-504)
Each import writes its record to disk before it uploads, so the test's one-second waits could run
out when the machine was busy and the test failed now and then. The waits now allow ten seconds;
what they check is unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Check that walking up from a layer agrees with the layer tree on whether it is in place (DRA-492)
Commands now ask whether a layer is in place by walking up from it, so the
random edit test checks that answer against the tree for every layer too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Shorten the descriptions of the new path and batch inputs (DRA-502)
Every client reads all the tool descriptions each session, so the
sentences added for paths, items and topics say only what a caller needs.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Stop hashing the whole file for every screenshot, and prepare unchanged artboards once (DRA-493)
Every screenshot and every layer measure turned the whole file into one string
and hashed it just to print an eight character Snapshot tag. At the largest
size a file can be that took about 150 to 230 ms and tens of megabytes of
memory on the one turn every agent shares, and about 850 ms in a file four
times that size. The tag now comes from the artboard being drawn: a hash of
what it draws, worked out once per prepared artboard, which takes a couple of
milliseconds for a 930 layer artboard. It still means the same tag is the same
content, now also after a restart, and an edit to another artboard no longer
changes it.
Artboards an agent looks at again before the file changes are no longer
prepared again. The last few are kept for twenty seconds, and the images they
hold go back to main when they are let go. Preparing an artboard no longer
waits for another agent's picture to finish, since only drawing and picturing
need the window, and main is asked about fonts while the artboard is measured.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Name the image model that was busy, and stop listing it as available (DRA-503)
A generation refused as "The image service is busy" didn't say which model,
while list_image_models went on showing that model as available and as the
default, so the next call walked into the same refusal.
The message now names the model, and the refusal carries it. Draftly
remembers for a minute that the model turned a request away. During that
time list_image_models and get_image_model_options show it unavailable, with
how many seconds are left, the default moves to a model that is free, and
asking for the busy one is refused with the models to use instead.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Make get_review smaller and point at the layers an edit can change (DRA-505)
Of a 17.5 KB reply, 14 KB was Details repeating what the sentences already said: each mark's
comment, the reviewer, the note, the presentation's own summary and, for each likely layer, its
kind, text and probability. Details now carries what the sentences can't: the artboards by id and
name, each mark's boxes, and its likely layers as id, through and name. The sentences give a
layer's first words when its name doesn't already say them.
A mark's likely layers also used to be mostly containers, such as "div (div element)". Layers
that hold no others, like a heading, a button or an image, are now the only ones offered and the
only ones the ranking service is asked about, unless the mark touches nothing but containers.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Keep agents' idle connections open while they fit a memory budget (DRA-499, DRA-490)
Each agent connection holds its own copy of the file, about three and a
half times the file's stored size: roughly 125 MB at 85,000 layers. The
window allowed 16 of them whatever their size and closed any idle for
ten minutes, so large files were both heavy to hold and expensive to
reopen.
Connections now report what their copy and its undo take, and the agent
window keeps them within 1 GB. While there's room, an idle connection
stays open for up to an hour. When a new copy or a growing one pushes
the window over, the connections idle longest with nothing unsent close
first; if none can, a call that needs another copy is refused as busy,
as it was at the old limit. The fixed count rises to 32, which now only
bounds sockets for many small files.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Make create_token refuse a name that exists, and let update_token take a CSS name (DRA-507)
create_token used to change the existing token when its CSS name was already
taken, which reset a value a person had edited, three times in one session.
Agents did it because update_token only took an id for file tokens.
create_token now refuses a name that belongs to a token, Tailwind's or the
file's, and says to call update_token with that name. update_token accepts a
file token's CSS name as well as its id, and refuses a name that matches no
token or several.
The token form keeps its "change value" behaviour for a name in use, by
choosing between creating and updating itself, so the create-or-set action is
gone.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Save downloaded icon sets without waiting for the disk to flush them (DRA-495)
Icon sets can be fetched again, and a copy cut short by a crash already
counts as a miss and is fetched again, so writing one doesn't need to
wait for the disk.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>