This guide covers local development for Ech0 — environment setup, hot reload, and front-/back-end integration. For higher-level architecture see CLAUDE.md and CONTRIBUTING.md.
📌 Go 1.26.0+
📌 C Compiler
When using CGO-dependent libraries such as go-sqlite3, install:
- Windows:
- MinGW-w64
- Add the
bindirectory toPATHafter extraction
- macOS:
brew install gcc - Linux:
sudo apt install build-essential
📌 Google Wire Install wire for dependency injection file generation:
go install github.com/google/wire/cmd/wire@latest
📌 Golangci-Lint Install Golangci-Lint for linting and formatting:
- Run
golangci-lint runin the project root for linting - Run
golangci-lint fmtin the project root for formatting
📌 Air (Optional, Backend Hot Reload)
- Recommended via Makefile:
make air-install - Or install manually:
go install github.com/air-verse/air@latest
📌 Swagger Install Swagger to generate/use OpenAPI docs:
- Run
swag init -g internal/server/server.go -o internal/swaggerin project root to generate or update Swagger docs - Visit
http://localhost:6277/swagger/index.htmlin your browser to view and use docs
📌 Event Runtime Parameters (Busen)
ECH0_EVENT_DEFAULT_BUFFER/ECH0_EVENT_DEFAULT_OVERFLOWECH0_EVENT_DEADLETTER_BUFFER/ECH0_EVENT_SYSTEM_BUFFERECH0_EVENT_AGENT_BUFFER/ECH0_EVENT_AGENT_PARALLELISMECH0_EVENT_WEBHOOK_POOL_WORKERS/ECH0_EVENT_WEBHOOK_POOL_QUEUE
📌 NodeJS v25.5.0+, PNPM v10.30.0+
Note: if you need multiple Node.js versions, use fnm to manage them.
Step 1: Backend (in Ech0 root directory)
make run # normal backend start (equivalent to go run main.go serve)
make dev # backend hot reload with AirIf dependency injection relationships change, run
wirefirst inech0/internal/di/to regeneratewire_gen.go.
Step 2: Frontend (new terminal)
cd web # enter frontend directory
pnpm install # run if dependencies are not installed
pnpm dev # start frontend preview
# or run from project root: make web-devStep 3: After both are running
- Frontend preview:
http://localhost:5173(actual port shown in terminal after start) - Backend preview:
http://localhost:6277(default backend port is 6277)
When importing packages in a layered architecture, use standardized alias names:
- model layer:
xxxModel- util layer:
xxxUtil- handler layer:
xxxHandler- service layer:
xxxService- repository layer:
xxxRepository
make check # backend fmt + lint + swagger, web format + lint + i18n:check
make wire-check # ensure wire_gen.go is up-to-date
go build ./...
pnpm -C web buildSee CONTRIBUTING.md for the full PR workflow.
auth-design.md— auth modelaccess-token-scope-design.md— access token scopesi18n-contract.md— i18n contract between front-end and back-endlogging.md— structured logging conventionstimezone-design.md— timezone handlingtable-design-standard.md— admin panel table conventionshelm-release-validation.md— Helm chart release validation