Prerequisites
Required Software
Go (for Server and CLI development)
Go (for Server and CLI development)
Version: Go 1.21 or laterInstallation:Verify:
Node.js (for UI development)
Node.js (for UI development)
Version: Node.js 16, 17, 18, 19, or 20Installation:Verify:
Docker (for containerized builds)
Docker (for containerized builds)
Installation:Verify:
Git (version control)
Git (version control)
Installation:Configure:Verify:
Make (build automation)
Make (build automation)
Installation:Verify:
Optional Tools
- PostgreSQL – For local database testing
- kubectl – For Kubernetes integration testing
- kind – For local Kubernetes cluster testing
- helm – For Helm chart development and testing
Cloning the Repository
Fork and Clone
-
Fork the repository on GitHub:
- Visit github.com/meshery/meshery
- Click the “Fork” button in the top right
- Clone your fork:
- Add upstream remote:
- Create a feature branch:
Server Development Setup
Install Go Dependencies
Install golangci-lint
golangci-lint is used for linting Go code.Run Meshery Server Locally
Basic server (port 9081):http://localhost:9081.
Run with local provider:
Build Server Binary
main binary in the project root.
Run the binary:
Lint Go Code
Generate Error Codes
Meshery uses MeshKit’s error utility for error handling:UI Development Setup
Install UI Dependencies
ui/ and provider-ui/ directories.
Run Meshery UI Locally
Development server (port 3000):http://localhost:3000.
The UI expects the Meshery Server to be running at
http://localhost:9081. Run make server in a separate terminal.Run Provider UI
Lint UI Code
Build UI for Production
Build all UIs:CLI Development Setup
Build mesheryctl
mesheryctl binary in mesheryctl/ directory.
Run mesheryctl
Run Unit Tests
Run Integration Tests
Docker Development Setup
Build Meshery Container
Build Playground Mode Container
Run Meshery in Docker
With production Remote Provider:Documentation Development Setup
Install Jekyll Dependencies
Run Documentation Site Locally
With live reload (port 4000):http://localhost:4000.
Without live reload:
Build Documentation
Run Docs in Docker
Environment Variables
Meshery Server accepts several environment variables for configuration:| Variable | Description | Default |
|---|---|---|
PORT | Server port | 9081 |
DEBUG | Enable debug logging | false |
PROVIDER_BASE_URLS | Remote provider URLs | Production URLs |
ADAPTER_URLS | Adapter service URLs | - |
KEYS_PATH | Path to encryption keys | - |
SKIP_COMP_GEN | Skip Kubernetes component generation | false |
DISABLE_OPERATOR | Disable operator deployment | false |
PLAYGROUND | Enable playground mode | false |
Verifying Your Setup
Quick Verification
Run these commands to verify your setup:Full Build Test
Test that you can build all components:Troubleshooting
Go version mismatch
Go version mismatch
If you see warnings about Go version:
Node.js version issues
Node.js version issues
The Makefile automatically detects Node.js version and uses appropriate build scripts. Supported versions: 16, 17, 18, 19, 20.
Docker permission denied
Docker permission denied
On Linux, you may need to add your user to the docker group:
Port already in use
Port already in use
If port 9081 or 3000 is already in use:
golangci-lint not found
golangci-lint not found
Install golangci-lint:
Next Steps
Code Style Guide
Learn Meshery’s coding conventions
Server Development
Start contributing to the Go backend
UI Development
Start contributing to the React frontend
Testing Guide
Learn how to test your changes