| description | Developer environment setup covering IDE configuration, Windows symlink support, and project install steps |
|---|
- Editor: Cursor, etc. Any VS Code compatible editor.
- Recommended extensions are listed in
.vscode/extensions.json.
- Install the Oxc extension for Oxfmt and Oxlint.
- Copy the example settings file to your local Zed config:
cp .zed/settings.json.example .zed/settings.json
- Customize
.zed/settings.jsonas needed (it is git-ignored).
This project uses symlinks to synchronize files such as AGENTS.md and skills. Windows developers must enable symlink support before cloning:
- Enable Developer Mode (Settings → Update & Security → For developers), or grant
SeCreateSymbolicLinkPrivilegeviasecpol.msc. - Configure Git:
git config --global core.symlinks true - Clone (or re-clone) the repository after enabling symlink support.
pnpm installThe required Node.js version is defined in .node-version. Use a version manager like nvm or fnm to install it automatically:
nvm installThe pnpm version is locked in the packageManager field of package.json. Just enable corepack and it will use the correct version automatically:
corepack enablepnpm installcp .env.example .envpnpm devBy default, development runs append Dev to Electron's default userData
directory, keeping local dev data separate from packaged app data. To run
an entirely isolated development profile, set an absolute profile root in
.env:
CS_DEV_PROFILE_ROOT=/absolute/path/to/cherry-profileThis keeps Cherry home, BootConfig, legacy config discovery, Electron
userData, and logs under that root. The root cannot be relative or the
filesystem root, and packaged builds ignore it. When set, it takes precedence
over CS_DEV_USER_DATA_SUFFIX.
| Data | Isolated location |
|---|---|
| Cherry home and BootConfig | {profileRoot}/.cherrystudio |
Electron userData |
{profileRoot}/userData |
| Application logs | {profileRoot}/logs |
For lightweight isolation of multiple development instances, give each
instance a unique userData suffix. You can set it in .env:
CS_DEV_USER_DATA_SUFFIX=DevQuitoOr pass it inline when starting a dev instance:
CS_DEV_USER_DATA_SUFFIX=DevQuito pnpm dev
CS_DEV_USER_DATA_SUFFIX=DevParis pnpm devThe suffix must be a single path component (no path separator, drive colon,
* ? " < > |, control character, or trailing dot). Blank values fall back to
Dev; anything else that breaks those rules stops the dev run instead of
falling back, so two instances never end up sharing one directory.
pnpm debugThen input chrome://inspect in browser
pnpm test# For windows
$ pnpm build:win
# For macOS
$ pnpm build:mac
# For Linux
$ pnpm build:linuxFor architecture-specific commands and the pinned better-sqlite3 prebuild workflow, see
Linux Packaging.