# Using addons

Installing, switching and removing addons and mods from inside the game

Source: https://socketsvc.vercel.app/addons/using
The **Addons** tab of the voice settings (`V`, or `/ssvc addons`) lists what you have installed, what a server you are on uses, and what is available to install.

It manages [two kinds of thing](/addons), and every row says which it is: an addon runs inside SocketSVC and stops the moment you switch it off, while a mod is loaded by the game itself and nothing you do to one takes effect until you restart.

<Callout title="A mod's row says what it will be, not what it is">
  Switch a mod on and its row reads **Will be enabled when you restart** — and keeps reading that if you leave the tab and come back. A banner counts how many changes are waiting. Cancelling them is free, because nothing has happened yet.

  SocketSVC never restarts the game for you. It tells you what is needed; closing your world to apply a toggle is not its decision to make.
</Callout>

## Installing

The tab lists what the [addon index](#where-addons-come-from) offers that you do not already have. Installing asks first, and says plainly which kind it is:

- an **addon** can be switched on as soon as it downloads;
- a **mod** runs with the same privileges as any other mod, SocketSVC cannot contain it, and it will not load until you restart.

Every download is checked against a SHA-256 checksum before anything runs. A file that does not match is deleted, not installed.

It all happens on the tab, while you watch. The row you pressed counts itself up — **Downloading… 42%**, then **Checking…**, then **Installing…** — and an addon is *running* by the time the row moves into the installed list. Nothing needs a restart and nothing needs the screen closed and reopened.

- Press install on a second thing while the first is downloading and it says **Waiting…** until its turn. Pressing a row that is already downloading does nothing, rather than starting it twice.
- An install that fails says so **under its own row**, with the reason, and the row offers **Try again**. It no longer takes the rest of the list down with it.
- **Check again** re-reads the index without leaving the tab. It is a button rather than a timer: the index is somebody's server, and polling it because a screen happens to be open is not SocketSVC's call.

You can also just put an addon jar into `config/socketsvc/addons/` yourself. It appears in the list — switched **off**, because a file turning up in a folder is not you asking for it to run — within a couple of seconds, while the tab is open. The folder is re-read on a timer for as long as you are looking at it, so a jar copied in from a file manager does not need the screen reopened either.

### When a server requires one

A server can mark an addon as required. Connect without it and your client installs it from your own index, switches it on, and says so in chat — see [Required addons](/addons/servers#required-addons). **Install what a server requires**, beside the index rows, turns that off; chat then tells you what the server wants and leaves the install to you.

## Removing

Whenever you like, including while it is running and including while a server wants it.

An addon is switched off and its file deleted immediately. A mod's file is held open by the game — on Windows it cannot be deleted at all while you are playing — so it is queued and removed at the next start. Its saved data is kept either way.

Removing something a server uses is allowed and just means that feature stops working for you. The next time you join, you are offered it again.

## Where addons come from

The **addon index** is set in the client config (`config/socketsvc.json`) as `addonIndexEndpoint`. It points at SocketSVC's own update service by default — the same place, and the same decision, as the [updater](/client/updates): trusting the people who wrote the mod you already installed is not the same as trusting an arbitrary server.

Point it somewhere else to use a network's own index, or blank it to be offered nothing at all. Every install still asks first.

<Callout title="No index means no downloads, and the tab says so">
  With it blank there is nothing to download from, so **Available to install** is one sentence and a **Use the SocketSVC index** row rather than a list. Pressing that row sets the endpoint and reads the index, without leaving the game.

  It used to be blank by default, and the section did not exist at all in that state — no heading, nothing between **Installed** and **Folder**. A config left over from a build of that era still has the blank value, which is why the way to turn it on is now a row on the screen and not a line in a file.
</Callout>

Addons are published to **GitHub releases**, not to Modrinth. The Modrinth project is the core mod — client, server and proxy — and a page carrying a dozen optional extras would make the thing you came to install harder to find.

## Choosing a version

An installed addon's row has a **Version** line under it showing what you have. It opens a list of
every build your index carries **for the Minecraft version you are running** — newer ones, older
ones, and any prerelease, each marked `· release` or `· dev`.

Switching is one click and takes effect immediately, like the switch above it: the old jar is
unloaded and deleted, the new one downloads with the same progress on the row, and the addon is
running again by the time the list redraws. Worth knowing about when a new build breaks something,
or when a server is happier with an older one.

**Mods are listed but not switchable.** The game holds a mod's jar open while you play, so changing
which version is installed means removing it first and then installing the one you want.

## An addon's own settings

An addon that has settings shows a **Settings** row under its switch, which opens a page of its own — the cinema's volume, quality and frame rate live there.

Those settings belong to the addon, not to SocketSVC: it is the addon that names them, holds them and saves them. The row appears only while the addon is running, and is gone the moment you switch it off. Mods never have one — a mod has its own config file, and usually its own screen.

## Addon keys

An addon cannot register a keybind of its own: the game collects keybinds once at startup, and an addon you switch on from a settings screen has missed that by minutes.

So SocketSVC reserves eight of them — **Addon key 1** to **8** in the ordinary controls screen, unbound by default. An addon borrows one while it is enabled and gives it back when you switch it off. Bind them like any other key.

## Next

[Servers and addons](/addons/servers) covers what happens when a server names one, and
[Writing one](/addons/writing) is the API.