> ## Documentation Index
> Fetch the complete documentation index at: https://nexohub.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Commands

> Everything you can run, and what it prints.

All of these run on the proxy. There are no commands on the backends.

| Command | What it does |
| - | - |
| `/nexohub status` | what each backend has |
| `/nexohub push [server]` | send your latest files now |
| `/nexohub stage <server>` | test edits on one backend, hold the rest |
| `/nexohub promote` | give what you staged to everyone |
| `/nexohub discard` | throw the staged edits away |
| `/nexohub validate` | check your files parse, without pushing |
| `/nexohub history` | versions of `nexo-data/` you can go back to |
| `/nexohub rollback <id>` | put one back |
| `/nexohub adopt <server>` | take a backend's files as the network's |
| `/nexohub doctor` | check the setup end to end |
| `/nexohub packs` | list or clean up stored packs |
| `/nexohub contributions` | what your plugins have sent up |
| `/nexohub reload` | re-read `config.yml` |

## `/nexohub status`

```
[NexoHub] NexoHub, pack hosting delegated to HERMES
  lobby [3p] bundle 5d935602 in sync
      pack 58b2bb42  Nexo 1.26.0/26.2  (last heard 12s ago)
  pvp [1p] bundle 5d935602 +groups/survival+servers/pvp in sync
      pack 3094361a  Nexo 1.26.0/26.2  (last heard 4s ago)
[NexoHub] 2 pack(s) stored, keeping 5.
```

| | |
| - | - |
| `[3p]` | players on that server |
| `in sync` | it has your latest files |
| `stale` | still on older files |
| `never reported` | it is down, or its bridge is misconfigured |
| `+groups/survival` | it is in a group and gets that layer |
| `+servers/pvp` | it has its own overrides |

Empty servers report too, so `stale` never just means nobody is on it. An old
`last heard` on an idle backend is normal — it only moves when something changes.

A failed reload or a version disagreement is printed here too. See
[troubleshooting](/guides/troubleshooting).

## `/nexohub push [server]`

```
[NexoHub] Pushed to 2 of 3 backend(s).
[NexoHub] 1 had no players connected; they pull on their next poll, join or restart.
```

Saving a file does this already, so you rarely need it.

<Warning>
  Naming a server picks who is told first, not who receives. Everyone gets the same change
  within seconds. To keep an edit off your live servers use `/nexohub stage`; to give one
  backend different files, put them in `nexo-data/servers/<name>/`.
</Warning>

## `/nexohub stage <server>`

Holds everyone else on the files as they are now, so you can edit against one backend
without your players seeing it.

```
[NexoHub] Staging on dev.
[NexoHub] 3 backend(s) held on the files as they are now: lobby, pvp, smp
[NexoHub] Edit nexo-data/ now. Only dev follows it.
```

Stage first, then edit — the copy is taken when you run the command. Name several
backends if you want: `/nexohub stage dev dev2`.

While it runs, saving files, pushing and rolling back all stop at the staged backends.
`/nexohub status` marks the held ones. Players moving between a held and a staged backend
download a pack each way, which is what testing a different pack means.

A stage survives a proxy restart, on purpose.

## `/nexohub promote`

```
[NexoHub] Promoted what dev was running to the whole network.
[NexoHub] Pushed to 3 of 4 backend(s).
```

If your files do not parse, nothing is promoted and the stage keeps running.

## `/nexohub discard`

Puts `nexo-data/` back exactly as the stage found it, deletions included.

```
[NexoHub] Discarded the stage on dev.
[NexoHub] Restored 42 file(s) to nexo-data/.
[NexoHub] A snapshot was taken first, so /nexohub history still has the work you threw away.
```

The work is not gone — roll back to get it.

## `/nexohub validate`

```
[NexoHub] 2 file(s) do not parse:
  _shared/glyphs/emotes.yml line 7: mapping values are not allowed here
  _shared/pack/pack.mcmeta: invalid JSON
```

YAML problems carry the line, JSON problems name the file only.

## `/nexohub history`

```
[NexoHub] 4 snapshot(s), newest first:
  1769517840000-5d935602  118 file(s)  3m ago  your edit
  1769516010000-0c47b7c6  117 file(s)  33m ago  your edit
  1769508900000-77c1a2e5  96 file(s)  2h ago  before adopting lobby
```

The note at the end is why the snapshot was taken. Ids sort the way they read.

## `/nexohub rollback <id>`

Puts a snapshot back and pushes it. The first few characters of the id are enough.

```
[NexoHub] Restored 117 file(s) from 1769516010000-0c47b7c6, taken 36m ago.
[NexoHub] 2 file(s) added since then were removed.
```

It removes files added since, or it would not undo an added file. The current state is
snapshotted first, so you can roll back the rollback.

## `/nexohub adopt <server>`

Takes a backend's own `plugins/Nexo/` folder as the network's `_shared/`. For moving an
existing network onto the hub, not for day to day use.

```
[NexoHub] Asked lobby for its plugins/Nexo/ folder.
[NexoHub] _shared/ already holds 96 file(s); a snapshot is taken before anything is overwritten.
```

A backend with nobody on it is asked on its next poll instead. It needs to know its own
name, which on `server_name: auto` it learns from the first player join — so a brand new
install needs someone to join once first.

Generated output is left behind. Run `/nexohub validate` afterwards. The whole process is
in [moving an existing network](/guides/migrating).

## `/nexohub doctor`

Runs the checks you would otherwise do by hand. It makes a request out and back, so it
takes a moment.

```
[NexoHub] Checking...
  ok   everything under nexo-data/ parses
  note pack hosting is delegated to HERMES, so public_address is unused
  ok   all 3 backend(s) have reported in
  ok   no backend reports a failed reload
  ok   backends agree on their Nexo and Minecraft versions
  ok   every backend on the same files serves the same pack
  note plugins/nexohub/ uses 62 MiB (2 pack(s), 4 snapshot(s))
[NexoHub] No problems found.
```

`bad` lines are counted at the end. `note` lines are worth knowing but not wrong.

The one check you cannot do yourself is whether players can reach your address: on
`packs.host: proxy` doctor fetches it from outside your network.

## `/nexohub packs`

```
[NexoHub] 2 stored pack(s), newest first:
  58b2bb4218c7  153 KiB  2m ago
  3094361a6eda  153 KiB  18m ago
```

`/nexohub packs prune` cleans up now rather than waiting. A pack a server is still
handing out is never deleted, whatever `packs.keep` says.

## `/nexohub contributions`

What your backends' plugins have sent up: BetterHUD's fonts, ModelEngine's models, and
anything else written into `plugins/Nexo/pack/external_packs/`.

```
[NexoHub] 3 contribution(s), from 2 backend(s):
  lobby
      betterhud  412 KiB  5e6f7a8b
      bettermodel  1204 KiB  c1d2e3f4
  pvp
      betterhud  388 KiB  9a0b1c2d
```

Each backend keeps its own entries current, so removing one means stopping the plugin
that produces it, not deleting folders.

`/nexohub contributions drop <server> [name]` forces it, for a backend that cannot say so
itself — decommissioned, on an old bridge, or with `contribute: false`.

<Warning>
  If that backend still generates the folder it publishes it again on the next reload. Stop
  the plugin, or add it to `contribute_exclude`.
</Warning>

## `/nexohub reload`

Re-reads `config.yml`. Use it after changing the port, address, secret, groups, settings
or hosting instead of restarting the proxy.

```
[NexoHub] Reloaded config.yml and rebuilt every bundle.
```

Hosting changes take effect here straight away, but each backend only finds out on its
next sync. Follow with `/nexohub push`.

## On the backends

Nothing to run. You can watch it happen in their logs:

```
[NexoHubBridge] Applied bundle 5d935602, 42 file(s) into plugins/.
[NexoHubBridge] Registered the HUB pack server with Nexo.
[NexoHubBridge] The hub has bundle 5d935602; pulling it without waiting for a player.
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.