Documentation

Build from source

Prefer launching through Electron so the API cookie and encryption secret are provisioned for a secure local session.

Prerequisites

  • Node.js 20+
  • npm

Run locally

git clone https://github.com/nipunyatawara-dev/Omnisync.git
cd Omnisync
npm install
npm run electron   # starts Electron + Next.js with a secure local API token

Environment variables

Optional OAuth overrides: copy .env.example to .env.local.

VariablePurpose
GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRETCustom GitHub OAuth app credentials
OMNISYNC_REQUIRE_GITHUB_OAUTH_CONFIGDisable the bundled client ID
OMNISYNC_API_TOKENSet by Electron for the local API session
OMNISYNC_ENCRYPTION_SECRETSet by Electron for credential encryption
OMNISYNC_USER_DATA_DIROverride the user data directory

A bundled OAuth device-flow client ID exists for default GitHub sign-in. Profile data, encrypted secrets, and workspace configuration are stored under User data/ (or OMNISYNC_USER_DATA_DIR), with credential files at mode 0600.

Build

npm run build
npm start

Package for distribution

npm run build:electron
npm run electron:pack    # unpacked app in dist/
npm run electron:build   # current-platform installer

macOS

npm run electron:build:mac-arm64
npm run electron:build:mac-x64
# or both:
npm run electron:build:mac

macOS builds ship unsigned by default (identity: null). Distributing signed/notarized builds requires an Apple Developer identity configured in electron-builder. Unsigned apps may need right-click → Open on first launch · see Install.

Windows

npm run electron:pack:win    # unpacked app for smoke testing
npm run electron:build:win   # NSIS installer (.exe)

Windows builds are unsigned by default. SmartScreen may warn on first launch until the binary is Authenticode-signed. Publish artifacts to GitHub Releases, then bump RELEASE_TAG in the website lib/downloads.ts so the download page points at the new files.

Tests

npm test           # Vitest
npm run test:e2e   # Playwright

Next

  • Architecture · how the Electron shell, Next.js UI, and API layers fit together
  • Contributing · pull requests, style, and issue reports