Skip to content

MalikZu/Doppel

Repository files navigation

Doppel app icon

Doppel

Run a second, independent copy of any Mac app — with its own name, icon, and data.

Work and personal Slack. Two WhatsApps. A throwaway Chrome profile that looks like its own app. Doppel makes a real, separate copy so each instance keeps its own identity and settings.

CI macOS 14+ Swift 6 SwiftUI License: MIT


What it does

Doppel duplicates an installed macOS app into a standalone copy you can run at the same time as the original, each with separate data. It inspects the app first, tells you up front whether (and how) it can be duplicated, then lets you give the copy a custom name and icon.

How it works

Doppel reads the target bundle statically (no launching) and picks the right strategy:

App family Strategy Result
Native (AppKit/Catalyst, unsandboxed) Full copy + ad-hoc re-sign A genuinely separate app with its own Dock identity and icon, optional $HOME-isolated data.
Electron / Chromium / Firefox Lightweight launcher A tiny bundle that opens the original with its own --user-data-dir/--profile. Survives updates; custom icon shows in Finder/Spotlight.
Sandboxed (App Store) Full copy + re-sign into its own container Duplicable with caveats — signature-tied features (iCloud, Keychain, push) stop working. Apps that validate their App Store receipt (e.g. WhatsApp) open then immediately quit; Doppel detects the receipt and warns up front.
iPhone/iPad app on Mac ⛔ Blocked macOS can't run a second instance of a wrapped iOS app — explained clearly instead of failing.

Every duplication starts with a pre-flight verdict (green / amber / red) so nothing is touched before you know what will happen — and the original app is never modified.

Features

  • Pre-flight verdict — plain-English ok/warning/blocked with the reasoning, before any action.
  • Two clone strategies, chosen automatically per app family (and overridable).
  • Icon customization — color tint and a ribbon badge (e.g. WORK), composited live.
  • Data isolation — give each copy its own data folder so accounts/settings stay separate.
  • Unique identities — name-derived bundle ids, so two copies never collide or share data.
  • Safe by design — refuses to clone an app onto itself; overwrites go to the Trash, not oblivion.
  • Liquid Glass UI on macOS 26, with a clean material fallback on macOS 14–15.
  • doppelctl CLI — the same engine, scriptable and headless.

Install

Download

Grab the latest DMG from the Releases page, open it, and drag Doppel to Applications.

✅ Releases are signed with a Developer ID and notarized by Apple, so they open with no Gatekeeper warning — just drag to Applications and launch. Each release also ships a .sha256 so you can verify the download.

Build from source

Requires macOS 14+ to run and Xcode 26 to build (the Liquid Glass code needs the macOS 26 SDK).

make run      # run the app from source
make app      # assemble + ad-hoc sign dist/Doppel.app
make dmg      # build an ad-hoc-signed, drag-to-install DMG (no cert needed)
make release  # Developer ID sign + notarize + DMG (needs a cert; see scripts/release.sh)
make test     # run the unit tests

Official releases are signed and notarized — locally via make release, or in CI via the Release (notarized) workflow (.github/workflows/release-notarized.yml).

Command line

doppelctl inspect "/Applications/Slack.app"

doppelctl clone "/Applications/Slack.app" \
  --name "Slack (Work)" \
  --badge WORK --tint "#611f69" \
  --data ~/Library/Application\ Support/Doppel/slack-work

Flags: --name (required), --id, --dest, --data, --badge, --tint "#rrggbb", --strategy auto|copy|lightweight, --force.

Project layout

Sources/DoppelCore   engine — inspection, verdicts, cloning, icon compositing
Sources/Doppel       SwiftUI three-step wizard
Sources/doppelctl    headless CLI over the same engine
Tests/DoppelCoreTests
scripts/             build, dmg, release, and icon generation
packaging/           Info.plist, entitlements, privacy manifest, app icon

Editions

Direct (primary) MAS-lite (App Store)
Build swift build swift build -Xswiftc -DMAS_LITE
Sandbox No Yes
Native apps ✅ full independent copy ⛔ blocked
Sandboxed (App Store) ✅ full copy + re-sign (receipt apps flagged) ⛔ blocked
Electron / Chromium / Firefox ✅ lightweight launcher ✅ lightweight launcher

Disclaimer

Duplicating third-party apps is your responsibility and subject to each app's own license and terms. Doppel never modifies the original app.

License

MIT © 2026 Malik AlZubaidi

About

Run a second, independent copy of any Mac app — its own name, icon, and isolated data. A native macOS app in SwiftUI.

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors