A high-performance, professional-grade SSH/Terminal client built with Electron.
- Desktop Framework: Electron
- Frontend: Vite + React + TypeScript
- Backend: Hono + Node.js
- Package Manager: pnpm (workspace)
- Code Quality: ESLint 9 + Prettier
cosmosh/
├── packages/
│ ├── main/ # Electron main process
│ ├── renderer/ # Vite + React frontend
│ ├── backend/ # Hono API server
│ ├── api-contract/ # OpenAPI spec + generated shared API types
│ └── i18n/ # Shared i18n core and locale resources
├── pnpm-workspace.yaml
└── package.json
- SSOT: API contract lives in
packages/api-contract/openapi/cosmosh.openapi.yaml. - Type generation:
openapi-typescriptgeneratespackages/api-contract/src/generated.ts. - Protocol constants:
packages/api-contract/src/protocol.tsis generated from OpenAPI. - Envelope helpers:
packages/api-contract/src/envelope.tsexposes shared success/error templates.
- Electron runtime: Renderer -> Main (IPC) -> Backend (HTTP with internal token)
- Browser runtime (prepared fallback): Renderer uses browser transport placeholder with future token + base URL strategy.
- Renderer API calls are now isolated behind
packages/renderer/src/lib/api/client.tsandpackages/renderer/src/lib/api/transport.ts.
# Regenerate contract outputs from OpenAPI
pnpm --filter @cosmosh/api-contract generate
# Build contract package
pnpm --filter @cosmosh/api-contract buildFor package-local details, see packages/api-contract/README.md.
- Node.js >= 18.0.0
- pnpm >= 8.0.0
# Install dependencies for all packages
pnpm install# Start all services in development mode
pnpm dev # Start Electron app
pnpm dev:renderer # Start Vite dev server (port 2767)
pnpm dev:backend # Start Hono backend (port 3000)Optional override: set COSMOSH_RENDERER_DEV_PORT before starting dev services.
# Build all packages
pnpm build
# Build Electron distributable (Windows output in packages/main/release)
pnpm --filter @cosmosh/main buildWindows packaging generates Cosmosh Setup <version>.exe (NSIS installer) in packages/main/release.
# Run ESLint on all packages
pnpm lint
# Run Prettier on all packages
pnpm format# Validate locale key consistency in the shared i18n package
pnpm --filter @cosmosh/i18n check