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.
Chat apps and favicon services ask for /favicon.ico, which was getting the hand-off page
back instead of an icon.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Ask agents for named layer links and give open links a preview
Agents now write layers as Markdown links named after the layer, rather than bare ids or
draftly:// links. Pasted open.whisk.design links preview with the app icon.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Hand sign-in back to the app through open.whisk.design
In production the sign-in callback now sends the browser on to
open.whisk.design, which macOS can open in Draftly directly. Browsers that
skip universal links get the same hand-off page, so they still end up in
the app. Local development keeps the web app's return page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Links people paste can now be written on open.whisk.design, which stands for
the draftly:// link with the same path. A small Worker there tells Apple the
whole host belongs to the Mac app, so macOS opens these links straight in
Draftly. Where it doesn't, the page forwards to the draftly:// link instead.
The app turns the link macOS hands it back into the draftly:// link and opens
it the usual way, and a shared helper writes the open link for any draftly://
link.
This replaces the invitation-only association on the backend's own host.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Open invitation links in the Mac app instead of the browser
The backend now tells Apple that invitation pages on workers.whisk.design
belong to the signed Mac app, and the app is signed with a Developer ID
profile that carries the matching associated domain. When macOS hands the
app one of those links, it opens the same invitation the page would have
sent the person to.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Deploy the marketing site from the Whisk Cloudflare account
whisk.design is moving into the Whisk account next to the backend, so the
site is deployed there too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Deploy the marketing site from the Whisk Cloudflare account
whisk.design is moving into the Whisk account next to the backend, so the
site is deployed there too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Share how captures draw an artboard and wait their turn
Captures and PNG exports each prepared the artboard, drew it, held its images
and let them go in their own copy of the same steps, and all three kinds of
picture repeated the code that takes the window's turn, gives up after a time
limit and shrinks the window back. Both now live in one place each. Images
are let go as soon as the drawing comes down rather than after the font
check that follows it.
Part of the cleanup around DRA-478.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011uNQqEC4S9RmVn2bfer18c
No public downloads available for this build.
Paste a copied layer as its words while editing text (DRA-478)
A copied layer now carries a reference to it as its plain text, for agents
in other apps. Pasting it into a text layer being edited in Draftly would
have dropped that reference into the design. The text editor reads the
copied layers instead and pastes their words, as it did before references,
including for paste as plain text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011uNQqEC4S9RmVn2bfer18c
No public downloads available for this build.
Name the check that adding waits out a drag or a layer opening for typing
Placing an image, adding a layer and adding an artboard each spelled out the
same two conditions. They now ask one question.
Refs DRA-480
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011uNQqEC4S9RmVn2bfer18c
No public downloads available for this build.
Share the close-up framing and the window-sized capture step
The room shown around a box in a close-up was written out twice, once for
review marks and once for the suggested image prompt, and the agent window
grew itself to a picture's size, took it and shrank back in two places. Each
now lives in one function.
Refs DRA-478
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011uNQqEC4S9RmVn2bfer18c
No public downloads available for this build.
Draw a copy's picture only from an agent copy of the file that has loaded
A copied layer's reference now reads draftly://files/<file>/layers/<layer>,
with the artboard it was seen in and, inside a component instance, the
instances it was seen through. Those are the words the edit tools and
get_computed_styles already use (artboardId and through), so an agent can act
on a reference directly instead of translating renderer addresses.
inspect_node and get_screenshot read references through one shared resolver
with one set of messages. get_screenshot pictures just the layer, framed from
the same layout pass that measures it, and chooses rather than refuses: when
several artboards draw the layer it uses the one it was seen in, or the first,
and says which others draw it. The format follows what was pictured, so a
whole artboard is always the JPEG overview.
Copying layers always puts their names and references on the clipboard as
text, whether or not an agent is connected, while copying inside a text field
still copies the text and a cut gives its words. The person's window no longer
serialises the whole file inside the copy event: it sends what was copied, and
while an agent has the file open its own copy of the file draws the picture.
Main follows the image services' ownership pattern, never starts the agent
window for a copy, checks the copy is still on the clipboard right before
adding the picture, reports real failures and tells the person nothing.
Refs DRA-478
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011uNQqEC4S9RmVn2bfer18c
No public downloads available for this build.
Bring clipboard previews together with the latest editor changes
With error reporting on, as on main, a failed sign-in callback is shown in a
message box that offers to copy its Error ID rather than the plain error box,
which was the only dialog the Linux packaged app check listened for, so it saw
no error and failed every main build.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Catch the Error ID message box in the packaged app check
With error reporting on, as on main, a failed sign-in callback is shown in a
message box that offers to copy its Error ID rather than the plain error box,
which was the only dialog the Linux packaged app check listened for, so it saw
no error and failed every main build.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Leave a blank log destination out of the backend deploy
A repository variable that isn't set arrives as an empty string, which the
deploy refuses as a setting that didn't reach it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Leave a blank log destination out of the backend deploy
A repository variable that isn't set arrives as an empty string, which the
deploy refuses as a setting that didn't reach it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No public downloads available for this build.
Deploy the backend without a log destination when none is configured
The deploy refused to start without BETTER_STACK_LOG_DESTINATION, although the
Worker's configuration already treats log export as optional.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>