A GitHub-compatible code forge: Git over HTTPS, repositories, issues, pull
requests, code browsing, and a REST API at /api/v3.
The hosted app is git.nandan.fyi. Git objects live in Cloudflare R2; application data lives in Neon Postgres. The server runs on Vercel's Node runtime without native Git or persistent disk.
| Path | Package | Purpose |
|---|---|---|
apps/web |
@pushstack/web |
Product UI, REST API and Git smart HTTP |
apps/docs |
@pushstack/docs |
Product, API, architecture and library documentation |
apps/cli |
@pstk/cli |
pushstack / pst: auth, repositories and API requests |
packages/git-fs-s3 |
git-fs-s3 |
Git filesystem, operations and smart HTTP over object storage |
packages/git-edge |
git-edge |
Object-level three-way merging and repository caches |
packages/tsconfig |
@pushstack/tsconfig |
Shared TypeScript configuration |
pnpm links internal packages explicitly with workspace:*. Turborepo builds
libraries before their consumers and caches each workspace's tasks. Biome is
configured once at the root. Workspace tests enforce shared dependency versions,
TypeScript configuration and validation commands.
Use Node 24 (.node-version) and pnpm 12.14.0 (packageManager).
npm install --global pnpm@12.14.0
pnpm install
pnpm dev:local # http://localhost:3000
pnpm --filter @pushstack/docs dev # http://localhost:3001Local development uses PGlite and on-disk Git under
apps/web/.pushstack-local/. It needs no cloud accounts, survives restarts,
and prints verification/reset email links in the terminal. The launcher blanks
R2, Resend and Sentry credentials so it does not contact those services.
To use real services, copy apps/web/.env.example to apps/web/.env.local,
set the database and auth variables, run pnpm db:push, then pnpm dev.
See the deployment guide
for configuration and storage requirements.
Run from the repository root:
pnpm build # build every application and library
pnpm typecheck # check every runtime workspace
pnpm test # workspace integrity + unit and behavior tests
pnpm smoke:git # real Git client against the smart HTTP endpoint
pnpm check # repository-wide Biome lint and format check
pnpm lint # workspace lint tasks
pnpm format # format with Biome
pnpm db:push # apply the web schema to the configured database
pnpm db:studio # inspect the configured databaseTarget a workspace for development or a specific test:
pnpm --filter @pushstack/web test src/server/__tests__/repo-access.test.ts
pnpm --filter git-fs-s3 test
pnpm --filter @pushstack/web test:e2e
pnpm --filter @pstk/cli build
node apps/cli/dist/bin.js --helpThe CLI is usable from this checkout. Its npm publication and trusted-publisher setup are separate release steps; see the CLI README.
Behavior tests run real server functions and API handlers against PGlite with the real schema and in-memory object storage. CLI contract tests use the same REST dispatcher with real personal access tokens. Native Git smoke tests use a scratch HOME and never modify the developer's global Git configuration.
CI runs typecheck, tests, production builds, Biome, the full dependency audit, secret scanning and native Git smoke tests. Dependencies have no overrides or ignored advisories. pnpm build scripts are explicitly allowed, bundled agent skills are denied, and optional peers are installed only when needed.
Documentation is authored in apps/docs/content/docs and served by Fumadocs.
Start with the user guide,
REST compatibility matrix, or
architecture.
CLAUDE.md contains repository-specific engineering instructions.
Production deploys from main. Database changes use pnpm db:push; there are
no migration files. Library releases use annotated tags such as
git-fs-s3@v0.15.3, with matching package versions and changelogs, and npm trusted
publishing through .github/workflows/release-packages.yml. Pushed tags are
immutable: corrections get a new patch release.
Copyright (C) 2026 Nandan Varma. Licensed under the GNU Affero General Public License v3 or later. Running a modified version as a network service requires offering its corresponding source to that service's users.