Skip to main content

Development Setup

1

Clone the repository

git clone https://github.com/kaizen403/openlinear.git
cd openlinear
2

Install dependencies

pnpm install
Requires Node.js 22+ and pnpm 9+.
3

Start development

pnpm dev
Runs all apps in watch mode. Or run specific apps:
pnpm dev:web                              # Web apps only
pnpm --filter @openlinear/landing dev     # Landing site only (port 3002)
pnpm --filter @openlinear/desktop-ui dev  # Desktop UI only (port 3000)

Available Commands

CommandDescription
pnpm devRun all apps in development mode
pnpm dev:webRun web apps only
pnpm buildBuild all apps via Turbo
pnpm lintRun linters across all packages
pnpm testRun all tests
pnpm typecheckTypeScript type checking
pnpm db:pushSync Prisma schema to database
pnpm db:seedSeed the database
pnpm db:studioOpen Prisma Studio
pnpm build:sidecarBuild the sidecar binary
pnpm build:desktopBuild the Tauri desktop app
pnpm build:appFull desktop build (sidecar + app)
pnpm build:app:fastDesktop build without sidecar rebuild

Project Structure

DirectoryDescription
apps/desktopTauri desktop app (Rust shell)
apps/desktop-uiNext.js webview UI
apps/sidecarLocal Express API and execution engine
apps/apiShared API routes and services
apps/landingMarketing site (Next.js, deployed on Vercel)
packages/dbPrisma schema and database client
packages/openlinearnpm package (CLI launcher + library)
packages/typesShared TypeScript type definitions
packaging/aurArch/AUR package metadata
scripts/Build, dev, and release scripts

CI/CD Pipeline

Continuous Integration

Every push and pull request triggers:
push / PR → install deps → sync AUR metadata → build sidecar
          → typecheck desktop UI → build npm package
Defined in .github/workflows/ci.yml.

Release Pipeline

Tag-based releases via .github/workflows/release.yml:
git tag vX.Y.Z → GitHub Actions → build desktop artifacts
               → GitHub Release → npm publish → AUR publish
The release workflow:
  1. Verifies the tag matches versions in packages/openlinear/package.json and apps/desktop/src-tauri/tauri.conf.json
  2. Regenerates packaging/aur/openlinear-bin/.SRCINFO
  3. Builds macOS and Linux release artifacts
  4. Publishes to GitHub Releases, npm, and AUR

Required Secrets

SecretPurpose
NPM_TOKENnpm automation token for publishing
AUR_SSH_PRIVATE_KEYSSH key for AUR package updates

Release Checklist

# 1. Ensure versions match in:
#    - packages/openlinear/package.json
#    - apps/desktop/src-tauri/tauri.conf.json

# 2. Sync AUR metadata
bash ./scripts/sync-aur-metadata.sh

# 3. Commit and tag
git add packages/openlinear/package.json \
        apps/desktop/src-tauri/tauri.conf.json \
        packaging/aur/openlinear-bin/PKGBUILD \
        packaging/aur/openlinear-bin/.SRCINFO
git commit -m "chore(release): vX.Y.Z"
git tag vX.Y.Z
git push origin main --follow-tags

Local Verification

Before pushing a release, verify locally:
pnpm install
bash ./scripts/sync-aur-metadata.sh
bash ./scripts/build-sidecar.sh
pnpm --filter @openlinear/desktop-ui lint
pnpm --filter ./packages/openlinear build