One Cursor installation. Multiple lives.
Cursor currently supports one signed-in account per installation. If you move between work and personal accounts (or need fully independent Cursor setups) you would normally sign out and back in repeatedly, use launch scripts, or keep alternate data folders by hand.
Multi Cursor is a small macOS companion app that switches Cursor to the account and environment you choose. After switching, you just open Cursor as usual.
- Switch between multiple Cursor accounts
- Launch Cursor normally from the Dock, Spotlight, Finder, or Terminal
- No wrapper scripts or special launch commands
- Switch accounts without duplicating environment data, or
- Create fully isolated Cursor environments
- Fully open source and free to use
Multi Cursor is an independent community project and is not affiliated with Cursor or Anysphere.
Most alternatives require a special way to launch Cursor every time. Multi Cursor does not. Once you've selected an account or environment, that becomes your current Cursor setup. Opening /Applications/Cursor.app works just as it always did, with the right history, settings, extensions, and login already in place.
Multi Cursor is not a wrapper around Cursor. It is a companion app that prepares Cursor's normal data folders, then opens Cursor normally.
| Best for | What changes | |
|---|---|---|
| Accounts | Several work or team logins within the same Cursor setup | The identity and subscription change. Chat history, settings, windows, and extensions remain shared. |
| Environments | Work vs personal, or any completely separate context | Each environment has its own chat history, open windows, settings, extensions, and accounts. |
Use an account when you want another Cursor login without changing your setup. Use an environment when you want an entirely separate Cursor life.
On first launch, Multi Cursor adopts your existing Cursor data as the Default environment and detects any existing signed-in account.
| Approach | Multiple logins? | Separate history and extensions? | Open Cursor normally? | Catch |
|---|---|---|---|---|
| Sign out / sign in | Yes | No | Yes | Slow and easy to mix contexts |
| Cursor / VS Code profiles | No, one login per installation | Partial | Yes | Profiles are UI/tooling presets, not subscriptions |
--user-data-dir |
Yes, with separate folders | Yes | No | You must use a special launch command |
| Multi Cursor | Yes | Environments, when needed | Yes | Cursor briefly quits while switching |
Multi Cursor is fully open source and currently distributed source-first: build it locally using the instructions below. This keeps the project transparent and avoids asking anyone to trust an unsigned binary from the internet.
Maintaining signed, notarized macOS releases requires an Apple Developer membership and ongoing release management. I originally built Multi Cursor for my own workflow and published it because it may help others; for now, I’ve chosen to keep the project source-first rather than investing time and money into maintaining official binaries. That may change if there is enough demand.
Building a local copy typically takes only a few minutes.
Note that a locally built app is suitable for your own Mac; distributing it to other people requires proper Apple signing and notarization. For signing, notarization, and distributing a build, see macOS distribution.
Multi Cursor is compatible with macOS 11 or later.
Windows and Linux are not supported yet.
Contributions are welcome; see Contributing.
- macOS 11 or later
- Node.js 20 or later
- Rust (
rustup/cargo) - Xcode Command Line Tools:
xcode-select --install - Cursor installed at
/Applications/Cursor.app(configurable withcursorAppPathin~/.multi-cursor/config.json)
npm install
npm run tauri devBuild a release app:
npm run tauri buildThe build output is src-tauri/target/release/bundle/macos/Multi Cursor.app. Consider it a build artifact; you'll want to install and use a copy in ~/Applications instead, so run:
npm run install-appThis copies the existing release build to ~/Applications/Multi Cursor.app, removes stale local build artifacts that can confuse Spotlight, and registers the installed app. It does not rebuild.
To build and install in one step:
npm run install-app -- --buildOpen it from Spotlight or Launchpad, or run:
open ~/Applications/Multi\ Cursor.appIf Multi Cursor is open, quit it before updating. If Spotlight shows an older duplicate, run npm run install-app again and avoid opening the copy under src-tauri/target/.
Ad-hoc signing is optional for your own Mac. If your local build opens without a Gatekeeper warning, you do not need it.
If you actually need it, run:
codesign --force --deep --sign - "$HOME/Applications/Multi Cursor.app"
xattr -dr com.apple.quarantine "$HOME/Applications/Multi Cursor.app"Warning: This does not make the app suitable for distribution to other Macs.
- Start Multi Cursor from the installed app or with
npm run tauri dev. - Your existing Cursor data appears as the Default environment. Rename it if useful. If Cursor was signed in, the account email appears automatically.
- Optionally select New under Environment.
- Copy current environment is enabled by default; turn it off for a completely empty environment with no settings, extensions, or chat history.
- To add a login to the selected environment, choose New under Accounts.
- If Cursor is open, confirm Restart. Cursor opens signed out in that environment; sign in normally.
- Keep Multi Cursor open while sign-in finishes so it can automatically capture the account email.
- Choose an environment. The current one is labelled.
- Select an account. The current account has a current badge; a pending login has a temporary Signing in… label.
- Click Launch, or double-click the account.
- After switching, next time you open Cursor, it will be in the selected environment and account. You can continue to use Cursor normally from the Dock, Spotlight, Finder, or
/Applications/Cursor.appuntil you need to switch again.
When switching, Multi Cursor closes Cursor if necessary, activates the selected data and login, then reopens Cursor. Launch is disabled when Cursor is already running with the selected account and environment.
- Rename environment changes only its display name, never its folder identifier.
- Delete environment is available only for inactive environments. Its stored folders and account snapshots move to Trash.
- Delete account removes Multi Cursor's saved login snapshot. Cursor only needs to quit when deleting the current account.
- Account names are captured email addresses, so they cannot be renamed. A temporary label is used while sign-in is pending.
- Creating new environments may consume several gigabytes of disk space, depending on your existing Cursor installation, installed extensions, and accumulated data.
- If a flow needs to quit Cursor, do not run Multi Cursor from a
tauri devsession inside Cursor, because quitting Cursor would end that session too. - Copying an environment requires Cursor to quit because its data files may be locked.
- Cursor running and Cursor idle report whether the Cursor IDE process is open.
- Auth files under
~/.multi-cursor/accounts/contain tokens. Never commit or share them.
Multi Cursor does not require flags or a launcher script. It makes Cursor's normal data folders match the selection, then starts Cursor as any other Mac app would.
Each account is a snapshot of Cursor's cursorAuth/* login keys in ~/.multi-cursor/accounts/. Switching writes those keys into the active environment's state.vscdb; it does not duplicate the whole database, which can be many GB.
flowchart LR
subgraph MC["Multi Cursor"]
A1["Account A snapshot"]
A2["Account B snapshot"]
end
DB["Active environment state.vscdb<br/>cursorAuth/* only"]
A1 -->|"Launch"| DB
A2 -->|"Launch"| DB
Within one environment, history, settings, and extensions stay the same; only the signed-in identity changes.
Cursor always reads these locations:
~/Library/Application Support/Cursor~/.cursor
Inactive environments live alongside them as Cursor.multi-cursor.<id> and .cursor.multi-cursor.<id>. On a switch, Multi Cursor renames the chosen folders into Cursor's normal paths. Cursor must be closed first, but the normal paths are why everyday Dock and Spotlight launches still work.
flowchart TB
subgraph live["What Cursor.app always opens"]
AS["Application Support/Cursor"]
DOT["~/.cursor"]
end
subgraph pool["Inactive environments"]
AS2["Cursor.multi-cursor.work"]
DOT2[".cursor.multi-cursor.work"]
AS3["Cursor.multi-cursor.home"]
DOT3[".cursor.multi-cursor.home"]
end
AS2 -.->|"rename on switch"| AS
DOT2 -.->|"rename on switch"| DOT
It provides the isolation people seek from --user-data-dir, while retaining the ordinary Cursor launch workflow.
Data layout (click to expand)
~/Library/Application Support/
Cursor # current environment
Cursor.multi-cursor.<env-id>/ # inactive environments
~/.cursor # current environment extensions / CLI state
~/.cursor.multi-cursor.<env-id>/ # inactive environments
~/.multi-cursor/
config.json
.storage-v2 # internal migration metadata
accounts/<env-id>/<account-id>.json # cursorAuth/* snapshots
- Folder renames and authentication-database writes happen only after Cursor has quit.
- Account snapshots contain only
cursorAuth/*keys; Multi Cursor never copies the completestate.vscdbon every switch. - Environment copies skip caches and
state.vscdb.bak-*files. Leftover live-profile backups are cleaned up on startup to reclaim disk space. - Deleting an inactive environment moves its pool folders to Trash. Multi Cursor never deletes the live
Cursoror~/.cursorfolders.
Profiles separate editor preferences and extensions, but Cursor still has one signed-in account per installation. Multi Cursor accounts solve that login limitation; environments add complete data separation when needed.
It is a valid way to isolate data, but every launch must use the right command. Multi Cursor activates the selected environment in Cursor's default locations, so Dock and Spotlight launches keep working.
No. Account switching saves and restores only Cursor authentication keys. Creating a separate environment can copy the current environment, because that is deliberately a complete, independent setup.
Switching is designed to use renames rather than destructive replacement, and deleted inactive environments go to Trash. As with any tool that manages application data, keep normal backups of important work.
Multi Cursor needs to perform operations on Cursor's data folders that are not possible from within Cursor itself. For example, it needs to rename the data folders when switching environments, and it needs to write the authentication keys to the active environment's database.
Maybe. At the moment the project is intentionally source-first. If enough people use it, I’ll reconsider publishing notarized macOS releases.
Created by Cláudio Silva.
Multi Cursor is licensed under the Apache License 2.0.