Local Setup Guide
This guide walks you through running KubeStellar Console from source on your local machine for development or evaluation. For production deployments, see the Installation page.
Prerequisites
| Requirement | Version | Check |
|---|---|---|
| Go | 1.24+ | go version |
| Node.js | 20+ | node --version |
| npm | 10+ | npm --version |
| kubectl | Latest | kubectl version --client |
| kubeconfig | At least one cluster | kubectl config get-contexts |
| kubestellar-mcp plugins | Latest | which kubestellar-ops kubestellar-deploy |
Install kubestellar-mcp Plugins
The console requires kubestellar-ops and kubestellar-deploy MCP plugins. Install them via the Claude Code Marketplace or Homebrew:
Option A: Claude Code Marketplace (recommended)
# In Claude Code, run:
/plugin marketplace add kubestellar/claude-plugins
Then install kubestellar-ops and kubestellar-deploy from the Discover tab.
Option B: Homebrew
brew tap kubestellar/tap
brew install kubestellar-ops kubestellar-deploy
See the kubestellar-mcp documentation for details.
Clone the Repository
git clone https://github.com/kubestellar/console.git
cd console
Option 1: Without OAuth (Development Mode)
The simplest way to run the console locally. No GitHub credentials needed — a local dev-user session is created automatically.
./start-dev.sh
This script:
- Checks for Go and Node.js prerequisites
- Kills any processes using ports 8080 and 5174
- Compiles and starts the Go backend on port 8080
- Installs npm dependencies (
cd web && npm install) - Starts the Vite dev server on port 5174
- Creates a local
dev-usersession (no GitHub login)
The Vite dev server proxies API requests to the Go backend on port 8080.
Option 2: With GitHub OAuth (Full Auth Flow)
For multi-user deployments or to test the complete authentication flow.
Step 1: Create a GitHub OAuth App
- Go to GitHub Developer Settings > OAuth Apps > New OAuth App
- Fill in:
- Application name:
KubeStellar Console - Homepage URL:
http://localhost:8080 - Authorization callback URL:
http://localhost:8080/auth/github/callback
- Application name:
- Click Register application
- Copy the Client ID and generate a Client Secret
Step 2: Create .env File
Create a .env file in the repository root (same directory as startup-oauth.sh):
GITHUB_CLIENT_ID=your_client_id_here
GITHUB_CLIENT_SECRET=your_client_secret_here
Important: The
.envfile must be in the same directory asstartup-oauth.sh. The script reads it from its own directory. The file is.gitignored so your credentials are never committed.
Step 3: Start the Console
./startup-oauth.sh
This script:
- Loads environment variables from
.env - Kills any processes using ports 8080 and 8585
- Starts the kc-agent (MCP + WebSocket server on port 8585)
- Builds the frontend (
cd web && npm run build) - Starts the Go backend on port 8080, serving both the API and the built frontend
Open http://localhost:8080 and sign in with GitHub.
Note: With
startup-oauth.sh, the Go backend serves both the API and the pre-built frontend on port 8080. There is no separate Vite dev server (port 5174 is not used).
Environment Variables
Required for OAuth Mode
| Variable | Description |
|---|---|
GITHUB_CLIENT_ID | GitHub OAuth App Client ID |
GITHUB_CLIENT_SECRET | GitHub OAuth App Client Secret |
Optional
| Variable | Description | Default |
|---|---|---|
GOOGLE_DRIVE_API_KEY | Enables benchmark cards (Latest Benchmark, Performance Explorer, Hardware Leaderboard, etc.) | Demo data fallback |
CLAUDE_API_KEY | Enables server-side AI features | Client-side API keys only |
ENABLED_DASHBOARDS | Comma-separated list of dashboards to enable (reduces bundle size) | All dashboards |
Port Reference
| Port | Component | Script |
|---|---|---|
| 8080 | Go backend (API + frontend in OAuth mode) | Both scripts |
| 5174 | Vite dev server (dev mode only) | start-dev.sh |
| 8585 | kc-agent (MCP + WebSocket) | startup-oauth.sh |
Startup Scripts Comparison
| Feature | start-dev.sh | startup-oauth.sh |
|---|---|---|
| GitHub login | No (local dev-user) | Yes (OAuth) |
| Frontend served by | Vite dev server (:5174) | Go backend (:8080) |
| Hot reload | Yes (Vite HMR) | No (must rebuild) |
.env required | No | Yes |
| kc-agent started | No | Yes |
| Best for | Development/coding | Testing OAuth, production-like setup |
Working with Worktrees
If you are working on multiple feature branches simultaneously, use git worktrees to avoid conflicts:
cd /path/to/console
git worktree add /tmp/console-my-feature -b my-feature-branch
cd /tmp/console-my-feature/web
npm install # worktrees share git but NOT node_modules
cd /tmp/console-my-feature
./startup-oauth.sh # or ./start-dev.sh
Troubleshooting
Port Already in Use
If you see “address already in use” errors:
# Find and kill processes on the ports
lsof -i :8080 | grep LISTEN
lsof -i :5174 | grep LISTEN
kill -9 <PID>
Both startup scripts attempt to clean up stale port processes automatically.
”MCP bridge failed to start”
The kubestellar-mcp plugins are not installed. Install them with Homebrew or the Claude Code Marketplace:
brew tap kubestellar/tap
brew install kubestellar-ops kubestellar-deploy
“GITHUB_CLIENT_SECRET is not set”
You are running startup-oauth.sh without a .env file. Either:
- Create a
.envfile with your OAuth credentials (see Step 2 above) - Or use
./start-dev.shinstead — it does not require OAuth credentials
Clusters Not Showing
- Verify your kubeconfig has accessible clusters:
kubectl config get-contexts - Test connectivity:
kubectl --context=your-cluster get nodes - Check that kubestellar-mcp binaries are in your PATH:
which kubestellar-ops
Stale Frontend After Code Changes
If using start-dev.sh, the Vite dev server provides hot module replacement. If using startup-oauth.sh, you must restart the script after changing frontend code (it rebuilds on startup).
Next Steps
- Features Guide — Explore all console features
- Architecture — Understand how the components work together
- Authentication — Deep dive into OAuth and session behavior
- Configuration — Customize AI mode, themes, and more