Install an Agent
Install or reinstall the correct EnderDash agent for a server, proxy, or standalone host.
Use this guide when
Use this page when you need to:
- install EnderDash on a new runtime
- reinstall after rotating an agent key
- move a server record to a different runtime
Just trying EnderDash first?
Use demo mode to see the product structure and explore the interface before you install anything. Demo mode is fully mocked, so it is useful for evaluation, not for real setup.
Before you begin
You need:
- an active subscription on the organization
- a server record in Servers
- owner or admin access, because Downloads and agent-key management are admin-only
Pick the correct download
Open Downloads, select the server record, and choose the build that matches the runtime:
| Runtime | Download |
|---|---|
| Bukkit, Spigot, Paper, Purpur, Folia | EnderDash-Bukkit.jar |
| Velocity | EnderDash-Velocity.jar |
| BungeeCord, Waterfall | EnderDash-Bungeecord.jar |
| Hytale | EnderDash-Hytale.jar |
| Standalone host | EnderDash-Standalone.jar or the standalone artifact shown in Downloads |
| Docker or Podman host | ghcr.io/enderdash-com/enderdash-agent:latest |
| Kubernetes cluster | ghcr.io/enderdash-com/enderdash-agent:latest |
Do not reuse a Bukkit build on a proxy or a standalone host. The runtime must match the artifact.
Container platform support
EnderDash supports common operational workflows for Docker-compatible hosts and Kubernetes clusters. It is not a replacement for every native platform tool.
| Platform | First-class support | Compatibility scope |
|---|---|---|
| Docker | Containers, logs, stats, exec, images, volumes, networks, daemon details, events, Compose-labeled containers, Compose project actions, Swarm services, Swarm nodes, Swarm tasks, and Minecraft server presets. | Compose projects are discovered from Docker Compose labels. When the Compose CLI is available on the agent host, EnderDash can run up, down, build, pull, and config for discovered projects. |
| Podman | Containers, logs, stats, exec, images, volumes, networks, and Minecraft server presets through the Docker-compatible Podman API socket. | This is compatibility support through the Podman API socket, not native Podman project management. Podman pods, Quadlet lifecycle management, Buildah flows, and podman kube workflows stay outside EnderDash. Rootless sockets only expose that user's containers. |
| Kubernetes | Cluster info, pods, deployments, services, nodes, events, logs, diagnostics, exec, port-forward, debug containers, StatefulSets, DaemonSets, ReplicaSets, Jobs, CronJobs, Ingresses, PVCs, PVs, HPAs, ConfigMaps, Secrets, namespaces, ServiceAccounts, RBAC resources, NetworkPolicies, StorageClasses, custom resources, CRD discovery, rollout status, resource metrics, YAML dry-run, YAML diff, YAML apply, YAML delete, and Minecraft server presets. | EnderDash supports common operational workflows, not the whole Kubernetes API surface. YAML diff requires kubectl on the agent host. Resource metrics require the Kubernetes metrics API, usually metrics-server. Helm release management is not implemented as a native panel. |
For Kubernetes custom resources, use the CRD browser or enter the API group, version, and plural resource name in the dashboard. The agent uses those values to list and inspect matching objects, but your cluster RBAC must already grant get and list for that API group and resource plural.
For a detailed feature and RBAC reference, see Container Platforms.
Install the runtime package
Plugin and proxy runtimes
- Drop the downloaded jar into the runtime's
plugins/directory. - Restart the runtime so it loads the plugin and exposes the
enderdashconsole command. Without this restart the command does not exist yet. - Run
enderdash install <agentKey>in the console. The agent connects immediately, no second restart needed.
If the console command does not fit your host, set the key in one of these supported ways and restart the runtime.
agentKey: "<agentKey>"Save the config file at plugins/EnderDash/config.yml.
java -Denderdash.agentKey='<agentKey>' -jar server.jarAdd the JVM property before the jar argument in the startup command.
export ENDERDASH_AGENT_KEY='<agentKey>'Set the environment variable in the shell or service environment that starts the runtime.
Standalone runtimes
- Place the standalone artifact in the directory where it will run.
- Save the agent key in
~/.enderdash/config.yml. - Start the standalone runtime.
The config file is the most explicit standalone setup, but the standalone agent also accepts the same runtime overrides as plugin and proxy runtimes.
agentKey: "<agentKey>"Save the config file at ~/.enderdash/config.yml.
java -Denderdash.agentKey='<agentKey>' -jar EnderDash-Standalone.jarAdd the JVM property before the jar argument.
export ENDERDASH_AGENT_KEY='<agentKey>'
java -jar EnderDash-Standalone.jarSet the environment variable in the shell or service environment that starts the agent.
Docker hosts
Run the standalone agent image and mount the Docker socket only on hosts where EnderDash should inspect or manage local containers:
docker run -d --name enderdash-agent \
--restart unless-stopped \
-e ENDERDASH_AGENT_KEY='<agentKey>' \
-v enderdash-agent-data:/enderdash/data \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/enderdash-com/enderdash-agent:latestThe socket mount gives the agent broad control over the local Docker daemon. Use a dedicated host or a tightly controlled server record when you enable container management.
To run the same setup with Docker Compose:
curl -fsSLO https://raw.githubusercontent.com/enderdash-com/deploy/main/agent/compose.yaml
cat > .env <<'EOF'
ENDERDASH_AGENT_KEY=<agentKey>
EOF
docker compose up -dCheck the container:
docker compose psAfter the agent is connected, the Containers panel can create Minecraft server presets on the same Docker or Podman host. The preset uses itzg/minecraft-server, creates a persistent /data volume, publishes the Minecraft port, installs the EnderDash Modrinth plugin through MODRINTH_PROJECTS, and writes plugins/EnderDash/config.yml with the agent key you provide.
The same preset flow can target Docker Swarm. EnderDash creates a Swarm service with the Minecraft server image, published ports, persistent data volume, and EnderDash labels so the service is visible in Swarm inventory.
Podman hosts
Start the Podman API service first, then run the same agent image against the Podman socket:
systemctl --user enable --now podman.socket
podman run -d --name enderdash-agent \
--replace \
--restart unless-stopped \
--group-add keep-groups \
-e ENDERDASH_AGENT_KEY='<agentKey>' \
-v enderdash-agent-data:/enderdash/data \
-v "${XDG_RUNTIME_DIR}/podman/podman.sock:/run/podman/podman.sock" \
-e DOCKER_HOST=unix:///run/podman/podman.sock \
ghcr.io/enderdash-com/enderdash-agent:latestRootless Podman exposes only the containers owned by that user. --group-add keep-groups keeps the user's supplementary groups available to the container process so the mounted socket can be opened. Use a rootful socket only when the server record is allowed to manage system containers.
To run the agent as a rootless Podman systemd user service:
mkdir -p ~/.config/containers/systemd
curl -fsSL https://raw.githubusercontent.com/enderdash-com/deploy/main/agent/quadlet/enderdash-agent.container \
-o ~/.config/containers/systemd/enderdash-agent.container
curl -fsSL https://raw.githubusercontent.com/enderdash-com/deploy/main/agent/quadlet/enderdash-agent-data.volume \
-o ~/.config/containers/systemd/enderdash-agent-data.volume
cat > ~/.config/containers/systemd/enderdash-agent.env <<'EOF'
ENDERDASH_AGENT_KEY=<agentKey>
EOF
chmod 600 ~/.config/containers/systemd/enderdash-agent.env
systemctl --user enable --now podman.socket
systemctl --user daemon-reload
systemctl --user enable --now enderdash-agent.serviceCheck the service:
systemctl --user status enderdash-agent.serviceKubernetes clusters
Use the public Kustomize manifests or the public Helm chart. Both install the standalone agent image and read the agent key from the same Secret.
Create the namespace and Secret:
kubectl create namespace enderdash
kubectl -n enderdash create secret generic enderdash-agent \
--from-literal=agentKey='<agentKey>'Install the read-only Kustomize manifests when EnderDash should inspect cluster state without running Kubernetes mutations:
kubectl apply -k 'https://github.com/enderdash-com/deploy//agent/kustomize/base?ref=main'Install operator mode instead when EnderDash should be allowed to run Kubernetes actions such as restarts, scaling, exec, port-forward, debug containers, and YAML apply or delete:
kubectl apply -k 'https://github.com/enderdash-com/deploy//agent/kustomize/operator?ref=main'The public EnderDash Helm repository provides the same two RBAC modes:
helm repo add enderdash https://charts.enderdash.com
helm repo update
helm install enderdash-agent enderdash/enderdash-agent \
--namespace enderdash \
--set rbac.mode=readonlyUse rbac.mode=operator only for clusters where EnderDash should run Kubernetes mutations such as rollout restarts, StatefulSet scaling, CronJob suspension, pod debug containers, pod exec, port-forward sessions, and YAML apply or delete actions.
Operator mode also enables Minecraft server presets for Kubernetes. A preset creates a Secret for the EnderDash plugin config, a PVC for /data, a Service for the Minecraft port, and a StatefulSet running itzg/minecraft-server with the EnderDash Modrinth plugin enabled.
The chart exposes production knobs for image pull secrets, pod labels and annotations, pod and container security contexts, resource requests and limits, persistence, node selectors, tolerations, and affinity. Enable persistence.enabled=true when the standalone agent needs state to survive pod replacement instead of using the default emptyDir volume.
The Kustomize source lives in the EnderDash deploy repository. The Helm chart source lives in the EnderDash Helm charts repository.
Reinstall after a key rotation
If Downloads shows a fresh agent key, the previous key is no longer valid for that server record.
- On runtimes with the command surface, run
enderdash install <agentKey>again. - On standalone or manual setups, replace the old
agentKeyvalue in the config file, JVM property, orENDERDASH_AGENT_KEYenvironment variable and restart.
Manual fallback
If the runtime does not expose the enderdash console command, use the config file, a JVM property, or an environment variable. These options are supported by Bukkit, Velocity, BungeeCord, Hytale, and standalone runtimes.
agentKey: "<agentKey>"
signalingUrl: "wss://signaling.enderdash.com/ws"Use signalingUrl only if you need to override the default signaling host.
java -Denderdash.agentKey='<agentKey>' -jar server.jarSet the JVM property before the jar argument in your startup command.
export ENDERDASH_AGENT_KEY='<agentKey>'Set the environment variable in the shell, service, or host panel environment that starts the runtime.
Verify the result
The install is complete when:
- the server shows Online
- the server page opens without setup prompts
- live panels begin loading data
If the runtime starts but EnderDash still shows the server as offline, continue with Recover an Offline Server.
Related pages
Was this page helpful?
Send a quick note if anything is missing or unclear.
Last updated on
Connect Your First Server
Learn the complete first-run flow for creating a server record, installing an agent, and confirming the first successful connection.
Recover an Offline Server
Work through the common install, key, and network problems that keep a server offline or force constant relay fallback.