teleskopio - lightweight kubernetes web client.

Features
- Multiple config support – respect
$KUBECONFIGvariable and checks theconfig.yamlfile. - Simple
JWTtoken authorization, admin and viewer role - Full access (admin) or Read Only access (viewer) to cluster. - Resource editor/creator - integrated Monaco Editor with syntax highlighting.
- Live updates - real-time resource changes with
Kuberneteswatchers. Podlogs andEvent's - inspect logs and event history directly in the UI, owner links, share link to resource.- Light and dark themes and fonts.
- Scale resources
Deployments,ReplicaSets - Shortcuts to filter
CTRL + Fany resource, jump to sectionCTRL + Jany menu. - Objects multi-select operations (delete, drain, cordon, e.t.c.)
go-client- based native implementation that interacts directly with the Kubernetes API server, no pulling, only websocket events.- Kubernetes resource schemas per API version.
- Helm integration.
- Zero dependencies, no need to install
kubectl,helmon the host. - Air-gapped environments ready. No external requests.
- Built-in MCP server
Install
Linux
Download release.
MacOS
Use brew (ARM and Intel):
brew tap teleskopio/homebrew-teleskopiobrew install --cask teleskopio
Docker
- Pull docker image from Packages
docker pull ghcr.io/teleskopio/teleskopio:latest
- Generate config
docker run -it --rm ghcr.io/teleskopio/teleskopio:latest config > config.yaml
- Edit config
$ htpasswd -nbB admin MySecret123 # apache2-utils
> admin:$2y$05$U7puDu7wKOMP6i4eI1nO4ux909bH8FuPadEQq2oxx7SRXrBh3xJIG
vim config.yaml # edit config and add admin user
# add kubeconfig content to kube.configs
# check example in config.yaml
- Run
Run with --network=host if you're using kind cluster
docker run -it --rm --network=host -p 3080:3080 \
-v $(pwd)/config.yaml:/usr/bin/config.yaml ghcr.io/teleskopio/teleskopio:latest \
--config=/usr/bin/config.yaml
Or run with docker network
docker run -it --rm -p 3080:3080 \
-v $(pwd)/config.yaml:/usr/bin/config.yaml ghcr.io/teleskopio/teleskopio:latest \
--config=/usr/bin/config.yaml
5:47AM INF set loglevel level=DEBUG
5:47AM INF version version=""
5:47AM INF initialize web server addr=:3080
...
Helm
Right now only building helm package from sources install option available.
Clone repository. Run make build-helm-chart (helm binary in PATH is required.)
Check out helm chart values.yaml.
By default RBAC's for teleskopio give access to all cluster and to any kind of operation.
$ git clone git@github.com:teleskopio/teleskopio.git
$ cd teleskopio
$ make build-helm-char
helm package ./deploy/teleskopio
Successfully packaged chart and saved it to: /home/dev/teleskopio/teleskopio-0.1.4.tgz
# Add you own config.yaml
$ cat config.yaml
service:
type: ClusterIP
port: 3090
config:
name: config
content:
log_color: false
log_json: true
log_level: INFO
server_http: ":3090"
jwt_key: "b2436e01424c714e4583f2f2851a0e1304440157" # openssl rand -hex 20
auth_disabled: false
users:
- username: admin
password: "$2y$05$PgEhSAwkE0RlbYiJqSxF/e529Xu5HGey.cEY/qqoksLlFckk3kaiW" # htpasswd -nbB admin MySecret123
role: "admin"
- username: user
password: "$2y$05$PgEhSAwkE0RlbYiJqSxF/e529Xu5HGey.cEY/qqoksLlFckk3kaiW"
role: "viewer"
kube:
configs:
# Install local helm chart with own values.yaml
$ helm install teleskopio ./teleskopio-0.1.4.tgz -f values.yaml
NAME: teleskopio
LAST DEPLOYED: Sun Feb 1 15:39:52 2026
NAMESPACE: default
STATUS: deployed
REVISION: 1
DESCRIPTION: Install complete
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=teleskopio,app.kubernetes.io/instance=teleskopio" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
# Follow NOTES instruction and use port-forward
$ kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
Forwarding from 127.0.0.1:8080 -> 3090
Forwarding from [::1]:8080 -> 3090
Open http://127.0.0.1:8080.
Configuration
log_color: false # Color output (only work with text)
log_json: true # Output logs as JSON
log_level: INFO # Log Level
server_http: ":3080" # HTTP address
protocol: http # the web server protocol http,https
jwt_key: "super-salt" # salt for JWT token `openssl rand -hex 20`
jwt_token_expire: 1h # how long jwt token is valid (1h by default)
auth_disabled: false # set to true to disable auth completly
mcp:
enabled: false # mcp server is disabled by default
api_key: "somekey" # protect /mcp server with api_key
api_key_header: "X-MCP" # header key e.g. (X-MCP: somekey)
cors: # cors settings for /mcp endpoint, in case if the client in another web app
origin: http://localhost:5802 # must be exactly as the client origin!
headers: # additional headers
- mcp-session-id
- mcp-protocol-version
users:
- username: admin
password: "" # htpasswd -nbB admin MySecret12345
role: "admin"
- username: user
password: ""
role: "viewer"
kube:
configs:
# - apiVersion: v1
# clusters:
# - cluster:
# certificate-authority-data: LS0tLS1...
# server: https://127.0.0.1:57598
# name: kind-kind
# contexts:
# - context:
# cluster: kind-kind
# user: kind-kind
# name: kind-kind
# current-context: kind-kind
# kind: Config
# preferences: {}
# users:
# - name: kind-kind
# user:
# client-certificate-data: LS0tL...
# client-key-data: LS0tL...