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 7
Drop the longer waits from the import lanes test now its real cause is fixed (DRA-502)
The longer waits went in before the race was found. With the store's writes queued as in the
app, the default waits pass every time, so the extra time was only hiding slowness.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Add a one-off cleanup for published copies that deleted files left behind (DRA-498)
Deleting a file now removes its published copies from storage, but files
deleted earlier still have theirs, and once the hourly cleanup drops such
a file's records nothing in the database points at them any more.
The script lists the publication folders in the bucket whose publication
has no record or whose file was deleted, and shows how many objects and
how much space they take. It removes them only when run with --apply.
Folders that belong to a file still being deleted are left for that
deletion, and so are folders that don't look like a publication's.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Let delete_token and the theme override tools take a token's CSS name (DRA-507)
update_token already accepts a token's CSS name, but delete_token,
set_theme_override and clear_theme_override still needed the id for a file
token, so agents had to look it up first. They now take either, resolving
the name the same way update_token does and refusing a name that matches
no token or more than one.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The limit it described is out of date, and new windows now load large files from a snapshot
rather than one message, so the note no longer explains how the app works.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Measure a file's size a little at a time while the window is idle (DRA-515)
The window already measured the file after it loaded, in an idle callback,
but that callback was one stretch of about 100 ms at 80,000 layers, long
enough to be felt by anyone who started working just then. The measure now
goes through the records in steps of 500, taking as many as the idle time
allows and at least one, then adds in whatever was edited meanwhile. If the
size is read first, as when the first edit comes before the measuring is
done, that read measures everything at once and the steps stop.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Keep the main process's compiled modules between runs
Loading the main process's code and its dependencies took about 380 ms before the
first window could be made, much of it compiling. Node can keep what it compiled in
the account's data folder, which takes about 50 ms off every start after the first.
That has to be switched on before the app's modules load, so the file Electron starts
now only does that and then loads the app, which moves to app.ts.
DRA-510
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Expect the short names generated images now get (DRA-504)
A generated image is named for what its prompt asks for, so "A red paper boat" becomes "Red paper
boat". The prompt field still shows what was typed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Check where main posts uploads, and an agent's large write end to end (DRA-489)
Main only posts a window's upload to its own backend, for the file the window
names; a test now holds it to that. The person-and-agent test also has the
agent write a page too large for one socket message, which reaches the server
and the person, and then undo it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Follow an artboard's name in its frame's title after a rename (DRA-514)
The frame is memoised and read the name once, so after a rename its title, which screen readers
announce, kept the old one until something else made it render again.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Drop the kept-layer option from shownChildren now that nothing passes it
The layer model filters its own children now, so the option it used to pass to
keep a selected blank text in the list has no callers left.
DRA-514
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Skip layers under a locked parent when Tab moves between layer names
Locking a layer moves nothing in the layer tree, so since the tree began
following each change (DRA-492) it keeps the same object, and the layer
list built from it kept the lock state it had when it was built. Tab in a
layer name then stopped at layers that were locked through a parent, and
their rows kept their lock, hide and drag controls enabled.
Locks above a layer are now read from the file when a row is drawn or Tab
looks for the next name, instead of being kept in the list rows.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No public downloads available for this build.
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>