Skip to content

Releases: artsu281-ai/double-bubble

Double Bubble 2.2.0

Choose a tag to compare

@artsu281-ai artsu281-ai released this 09 Oct 06:06

Kyrgyz, a language menu you can find on day one, and no more glass.

Кыргызча

The interface is now available in Kyrgyz. Choose it in Settings → Language,
or right at the top of the welcome window the first time you open the app — the
language menu now lives there too, so nobody has to dig through a language they
can't read to find it. Language names are written in themselves: English,
Русский, Кыргызча.

The translation has not yet been checked by a native speaker. If a phrase reads
oddly, please open an issue.

No Liquid Glass

  • The Dock icon is flat: no sheen, rim or shadow, and the Liquid Glass toggle is gone.
  • Toolbar buttons are no longer wrapped in glass capsules, and the sidebar button
    is a plain one.

Launch arguments per account

Each account can carry extra command-line flags its copy is started with
(account editor → Launch arguments). Double Bubble refuses flags it sets itself
to keep the account's data separate.

Also: a doublebubble://open?account=<id> link that opens one account, and a
notice when an account's copy is older than the app it was made from.

Updating

Use Update and Restart in the app, or download the zip below, unzip it and
drag Double Bubble.app into Applications. The build is signed ad hoc, so on a
manual install macOS asks once: right-click → Open.

Double Bubble 2.1.1

Choose a tag to compare

@artsu281-ai artsu281-ai released this 04 Sep 10:53

The app follows macOS again, and its colours can be read.

Someone compared Double Bubble to another Mac app and said it felt less
coherent. Most of that didn't survive being checked against the code. Two
things did, and the first turned out to be worse than the complaint.

The house theme had stopped following macOS

If you had Double Bubble open and switched macOS to Dark, nothing happened
until you quit and reopened it. On the Default theme and on System —
the two that exist to follow the system, and Default is the one nearly
everyone runs.

The app was publishing the appearance it had already worked out, which travels
up to the window, and the window dresses everything inside it — including the
piece of code that reads the appearance back. So it read its own answer and
latched to whatever the screen looked like at launch. It now says "follow the
system" and means it.

The colours could not actually be read

This part is arithmetic, not taste. Measured against WCAG's 4.5:1 for text:

  • clay on cream — 3.57:1
  • the green — 4.03:1, the amber — 4.04:1
  • a white letter on the amber account colour — 2.75:1, below even the
    3:1 asked of large text

That is what "faded, like old paper" was describing, and it had a number.

The clay itself hasn't moved: it's the app's colour and it stays exactly where
it was for every fill, outline and tint. What changed is that words and
small glyphs painted in it now use the same clay one stop darker — the identical
hue, at 4.62:1. And wherever a label sits on a coloured fill, the app now picks
black or white by measuring that fill, instead of assuming white. White is right
on the light clay and wrong on the dark one, and doing it this way fixes the
accounts you already have rather than only the next ones.

There's now a test that computes every one of these ratios and fails if a
future colour drops under the bar.

While we were in there

  • Switching theme cross-fades instead of cutting.
  • The Dock icon set to Automatic follows macOS again — choosing the app's
    own Light or Dark theme had started dragging the Dock tile with it.
  • Three animations ignored Reduce Motion. They don't now.
  • Hovering a card in the grid or in All Accounts shows it. It used to look
    identical to every other card, in the one view where everything is clickable.
  • An account starting or stopping — the whole point of the app — now
    animates instead of snapping.
  • The inspector slides in and out; the update banner fades in; the
    drag-and-drop overlay fades instead of appearing in one frame.
  • Closing any unrelated application on your Mac no longer makes Double
    Bubble's window redraw itself.

Three things macOS expects that were missing

  • ⌃⌘S and View ▸ Hide Sidebar
  • Check for Updates… in the Double Bubble menu
  • Settings in the menu bar icon

Requires macOS 14 or later, Apple silicon. 65 tests, up from 54.

Update from inside the app — Check for Updates…, or the banner — or download
below.

Double Bubble 2.1.0

Choose a tag to compare

@artsu281-ai artsu281-ai released this 02 Sep 19:53

You can now teach Double Bubble about an application it doesn't understand.

Double Bubble knows how to isolate 33 applications by name and can guess at
Electron ones. That is a small number against what people actually have
installed, and when it guesses wrong there was nothing to be done but wait for
a release — while the person looking at the wrong guess has the application
right there.

The inspector's Isolation tab now has If this application doesn't work,
with two settings:

How to keep it apart — work it out automatically, pass a data directory,
copy the application, or copy it and pass a data directory. Whatever you choose
is used ahead of Double Bubble's own answer.

Folders in your home the account should keep to itself — the setting for
the case that looks impossible: accounts whose data really is separate and who
still share one login. That means the sign-in is kept somewhere the data
directory never reaches. Antigravity does exactly this, in ~/.gemini, and
finding it took an afternoon of measuring; now anyone who spots the same
pattern can just say so.

What you set belongs to the application rather than to your library entry, so
removing it and adding it again does not lose what you learned. Paths you name
are added to what Double Bubble already knew, never substituted for them.

Settings are tabs now

Four across the top instead of six down a sidebar — Language rejoined General,
the Dock icon moved in with Appearance. The window is narrower for it.

Requirements

macOS 14 or newer.

Double Bubble 2.0.14

Choose a tag to compare

@artsu281-ai artsu281-ai released this 02 Sep 19:43

A library Double Bubble cannot read no longer takes your accounts with it.

This is the important one. Double Bubble kept its library — which applications,
which accounts, which folder belongs to which — in about four kilobytes of
preferences, and nowhere else. Those four kilobytes describe gigabytes of logins
and profiles that are meaningless without them.

If they ever failed to parse, the app treated that exactly like a first launch:
it wrote an empty library over them, then swept for folders no account claimed —
and with no accounts loaded, that is all of them. Your data would have gone to
the Trash and the map explaining it would already have been overwritten.

Now the app can tell "nothing stored" from "stored and unreadable". The second
changes nothing at all: no save, no deletion, and a message saying so and where
to look. A copy of the library is also kept beside your data, at
~/.double_bubble/library.json, so preferences that go bad are recovered
instead of mourned.

Tested by doing it: preferences corrupted with the copy intact recovered
cleanly; both corrupted left 1.2 GB of data, every private home and every
application copy exactly where they were, with the damaged preferences
preserved so the library can still be repaired.

Also

Failures that used to vanish are now recorded. Deletes, symlinks and copies
that did not happen left no trace anywhere — including a delete that fails after
you were told your data was gone. They now appear in Console.

Picking an application by hand asks the same question as the list. It only
checked whether an app insists on running from its own bundle, so something the
list had already refused could still be added through the file panel and fail
when opened. Where a working alternative exists, the row says so: "Can't run
twice — try Telegram Desktop".

48 tests, up from 28 — covering the library loading above, the function that
builds every folder name this app owns, and the wrapper logic that no account on
the development machine has ever exercised.

Requirements

macOS 14 or newer.

Double Bubble 2.0.13

Choose a tag to compare

@artsu281-ai artsu281-ai released this 02 Sep 19:16

Applications that cannot be run twice are no longer offered as though they can.

The welcome screen, and the Add Application sheet before it, listed Telegram.
Telegram cannot be run twice by Double Bubble — it is sandboxed and built around
App Groups, so a re-signed copy is locked out of its own data, and Double
Bubble has known this all along: it is written into the entry describing the
app. It just was not being asked at the point where it mattered.

The lists only checked one thing: whether an application insists on running
from the bundle it was installed in. That catches web browsers and nothing
else. Everything else was discovered on the first Open, after you had been
invited to add it.

Now the list asks what the launcher asks — whether the sandbox or library
validation would stop the copy from running, against the isolation this
application would actually get. On this Mac that drops Telegram from the offer
and puts Telegram Lite in its place, which is the build that does work.

Requirements

macOS 14 or newer.

Double Bubble 2.0.12

Choose a tag to compare

@artsu281-ai artsu281-ai released this 02 Sep 18:52

There is something to meet you on the first launch now.

Until now, opening Double Bubble for the first time gave you an empty screen,
one sentence, and a button that opened a file picker onto /Applications. The
sentence was fine. The first move — which application, and what a second
account even means here — got no help at all.

Double Bubble already knows what is installed on your Mac and which of it can
be run twice. So it offers them: six applications with their icons and how each
would be isolated, one click to add, straight on to naming its first account.
Anything else is one button away.

It is one screen rather than a sequence of them. An idea that takes a sentence
does not need slides, and slides are what people click through without reading.

It also tells you up front that some applications cannot be split — web
browsers insist on being the only copy of themselves — because finding that out
by adding one and being turned away is the wrong order to learn it in.

You will only see it if your library is empty, and only once. Help → Welcome
to Double Bubble
brings it back whenever you want it.

Also

The Help menu's link to the project pointed at a repository that does not
exist. It has been opening a 404 since it was added.

Requirements

macOS 14 or newer.

Double Bubble 2.0.11

Choose a tag to compare

@artsu281-ai artsu281-ai released this 02 Sep 18:48

The disk figures now tell the truth.

An account's sign-in was counted nowhere. For applications that keep their
account outside the profile directory — Antigravity is the one this came up
with — the login and its settings live in a home directory of the account's
own, and that can be the larger half of what an account weighs. The inspector
showed the profile beside it and none of this. It is now listed as "Sign-in and
settings", and counts toward both the per-application breakdown and the total on
the Overview.

The application copy no longer shows a size. It is a clone: on APFS it
shares its blocks with the application it was made from, and copying a 436 MB
application costs zero bytes. But no tool on the system can see that sharing —
not Double Bubble's own measurement, not du, not Finder's Get Info. They all
add up file sizes and report the whole thing as occupied.

So the copy said "436 MB" and meant nothing of the kind. A wrong number there
is worse than none: it invites deleting an account to reclaim space nobody was
using. It now says what it is, and the Overview's total counts account data
only.

Requirements

macOS 14 or newer.

Double Bubble 2.0.10

Choose a tag to compare

@artsu281-ai artsu281-ai released this 02 Sep 18:44

A copy of an application now costs essentially no disk space.

Double Bubble gives an account its own copy of the application. On APFS that
copy is a clone — 436 MB duplicated in a tenth of a second, sharing every block
with the original, costing nothing. What actually cost was the step after it:
re-signing the copy, deeply, which rewrites every framework inside the bundle
and tears those shared blocks apart. 172 MB per account, spent re-signing
code nobody had touched.

None of it was necessary. Re-signing exists to shed the vendor's entitlements —
Claude Desktop, for instance, has Keychain access scoped to Anthropic's team,
which two copies of one signed bundle would otherwise share, so signing into one
account could quietly sign the other out. Those entitlements live on the
application's main executable, not on its frameworks.

So only the executable and the bundle are re-signed now. Measured on Claude
Desktop: the copy comes out ad-hoc signed with no team identifier and no
Keychain groups at all — the isolation is exactly as complete — and it verifies
clean. On Antigravity it launched normally, every helper process loading under
the vendor's own untouched signatures.

If a copy somehow fails to verify this way, the old deep re-signing runs
instead. Nothing is traded for the space.

What you'll see

Accounts created from here take essentially no disk space beyond their data.
Copies you already have keep their old signature — and its cost — until
something rebuilds them, which happens when the application itself updates.

One thing worth knowing: du has always overstated ~/.double_bubble. It adds
up logical file sizes and cannot see that clones share their blocks, so the
folder has never occupied what it appears to.

Requirements

macOS 14 or newer.

Double Bubble 2.0.9

Choose a tag to compare

@artsu281-ai artsu281-ai released this 02 Sep 18:07

Three strings that had been showing in English are translated, and the project
has tests.

The visible part

"New account starting from…", "Setting up…" and the note about an account that
has never been opened had never reached the string catalogue, so they showed in
English in a Russian interface. They have been that way for several releases.

Why they were found

The project now has a test suite — twenty-eight tests, each written from
something that had already shipped broken. Two of them check the string
catalogue against the source: that every string the code asks for exists, and
that no translation reorders its format specifiers without saying so. The
second matters more than it sounds: a translation that swaps %lld and %@
hands an integer to %@ and the app dies on the spot. That has happened here.

Those three English strings were what the suite found the first time it ran.

The rest cover the naming a batch of accounts produces, how release versions
are compared, and the per-account home directory — including that clearing an
account takes its sign-in with it and that deleting one never reaches through
its symlinks into the real home.

Also

Release builds are pinned to Apple Silicon, as every release so far has been.
Adding a test scheme had quietly made them universal and doubled the binary,
which is a change to what gets distributed and not something that should arrive
as a side effect.

Requirements

macOS 14 or newer.

Double Bubble 2.0.8

Choose a tag to compare

@artsu281-ai artsu281-ai released this 02 Sep 17:47

Account icons no longer flicker when you first open an app.

Two things were happening at once.

Every tile that finished rendering redrew all the others. The tile cache
announced each finished icon to every avatar in the window, so twelve accounts
meant twelve announcements redrawing twelve icons each — arriving one at a time
as the renders completed. A finished tile now goes back to the one view that
asked for it. Two views wanting the same account still share a single render.

The placeholder was the wrong shape. While a tile was being drawn, the spot
held a coloured circle with a letter in it — a different shape in different
colours from the icon about to replace it, which is what made the swap read as
the view redrawing itself. It now starts from the application's own icon, which
is already in memory, so the first frame is the right picture at the right size
and only the account's colour and mark arrive a moment later.

Serialising icon rendering in 2.0.6 spaced those arrivals out, which is
probably why this became noticeable now.

Requirements

macOS 14 or newer.