This document explains how to build Windshift for multiple platforms.
# Build everything (frontend + server)
make all
# Clean and rebuild
make clean && make all
# Build server only
make build
# Build frontend only
make frontend
# Show all available make targets
make help# Build frontend
cd frontend
npm install
npm run build
cd ..
# Build server (current platform)
go build -o windshift main.go
# Build ws client (current platform)
cd cmd/ws
go build -o ws
cd ../..The Makefile produces binaries in the project root:
windshift # Main server binary (current platform)
windshift_unix # Linux binary (from make build-linux)
windshift.exe # Windows binary (from make build-windows)
The release script creates a dist/ structure:
dist/
├── binaries/
│ ├── windshift-linux-amd64
│ ├── windshift-linux-arm64
│ ├── windshift-windows-amd64.exe
│ ├── windshift-darwin-amd64
│ └── windshift-darwin-arm64
└── releases/
├── windshift-v1.0.0-linux-amd64.tar.gz
├── windshift-v1.0.0-linux-arm64.tar.gz
├── windshift-v1.0.0-windows-amd64.zip
├── windshift-v1.0.0-darwin-amd64.tar.gz
├── windshift-v1.0.0-darwin-arm64.tar.gz
└── SHA256SUMS.txt
# Cross-compile for Linux
make build-linux
# Cross-compile for Windows
make build-windows# Full release with binaries + Docker + GitHub release
./release.sh release -v v1.0.0 -n releases/v1.0.0.md
# Build binaries and packages locally (no publish)
./release.sh build -v v1.0.0
# Build and push Docker images only
./release.sh push -v v1.0.0-dev
# Dry run to preview actions
./release.sh release -v v1.0.0 -n releases/v1.0.0.md --dry-run
# Skip frontend build (use existing dist/)
./release.sh build --skip-frontend
# Show help
./release.sh --help| Platform | Server | WS Client |
|---|---|---|
| Linux (x64) | ✅ | ✅ |
| Linux (ARM64) | ✅ | ✅ |
| Windows (x64) | ✅ | ✅ |
| macOS (Intel) | ✅ | ✅ |
| macOS (Apple Silicon) | ✅ | ✅ |
- Go 1.25+ - Backend compilation
- Node.js 18+ - Frontend build
- npm - Package management
- Go 1.25+ - Client compilation only
- Docker + Buildx - Multi-arch Docker images
# After building
./windshift &
./cmd/ws/ws workspace list# After building
windshift.exe
cmd\ws\ws.exe workspace list# After building
./windshift &
./cmd/ws/ws workspace listProduction builds use these Go build flags:
-ldflags "-s -w"- Strip debug information and reduce binary size-tags="!test"- Exclude test code from production binaries- Version information embedded at build time
# Clear npm cache and reinstall
cd frontend
rm -rf node_modules package-lock.json
npm install
npm run build# Update dependencies
go mod download
go mod tidy
# Clean Go module cache
go clean -modcacheWindows: If you don't have zip command available, Windows archives won't be created but binaries will still build.
Linux: Ensure you have sufficient disk space. Cross-compilation creates multiple large binaries.
Run make help to see all available targets:
Production builds:
make build- Build production binary (excludes test code)make build-linux- Cross-compile for Linuxmake build-windows- Cross-compile for Windowsmake release- Full production release build
Development builds:
make dev-build- Development binary (includes test utils)make dev- Full development cycle
Testing:
make test- Run all unit testsmake test-coverage- Run tests with coverage reportmake test-verbose- Run tests with verbose output
Utilities:
make frontend- Build frontend onlymake clean- Clean build artifactsmake deps- Update dependenciesmake verify-size- Compare binary sizes with/without tests