# Updates

Update channels, automatic updates, and switching between release and dev builds

Source: https://socketsvc.vercel.app/client/updates
SocketSVC keeps itself on the build its **update channel** serves. The download happens in the
background while you play; the JAR in your `mods` folder is only swapped once you quit, so the
next time you start Minecraft you are on the new version.

Open the voice settings (**V** by default) and pick the **Updates** tab. The same builds, for
every side and loader, are on [the download page](/download) if you would rather install one by hand.

## What the tab shows

| Row | Meaning |
| --- | --- |
| The first line | The SocketSVC version, Minecraft version and loader this install is running |
| Status | Up to date, a version that is available, a download in progress, or "restart to finish" |
| Automatic updates | Whether new builds are downloaded for you in the background |
| Update channel | Which stream of builds this install follows |
| Builds on this channel | Every build available for **your exact** Minecraft version and loader |

When a download is finished the status reads *Ready — restart to finish*. Nothing in `mods` has
changed yet: a JAR the game has open cannot be replaced underneath it. Quitting the game hands
the swap to a small helper process that waits for Minecraft to exit, checks the download's
SHA-256, removes the old JAR and copies the new one in. If you change your mind before quitting,
press **Discard**.

## Channels

| Channel | What lands in it |
| --- | --- |
| **Release** | Published, tested builds. The right choice unless you were asked otherwise. |
| **Dev** | Development builds, published as soon as CI finishes one. Expect rough edges. |
| **A branch channel** | A named branch someone is testing. Only appears if the project has published one. |

Switching channel takes effect immediately, downgrade included — going from a dev build back to
Release means moving to an *older* version, and that is exactly what the switch does.

A channel can also be **pinned** to one specific build, shown as *(pinned)* in the picker. A
pinned channel serves that build and nothing newer, which is how a release is published and how a
bad build is rolled back.

## Installing a specific build

Every build on the current channel is listed with its version and type (Release, Beta or Dev).
Click one to install it; hover it to see its date and the first line of its release notes. The
build you are already running is marked *Installed*.

Only builds for your Minecraft version and loader are ever listed, so there is no way to install
a JAR that does not fit your game. A Quilt install is offered the Fabric JARs, which is what it
runs.

## Tools

The soundboard and some addons (Cinema, for one) run two programs SocketSVC downloads the first time
they are needed: **yt-dlp**, which fetches media from a URL, and **FFmpeg**, which converts and
decodes it. The **Tools** section at the bottom of the tab covers them.

| Row | What it does |
| --- | --- |
| Keep tools up to date | On by default. An installed tool moves to the version the update service recommends, in the background |
| Check tools for updates | Asks now instead of waiting for the next launch |
| Status line | The installed version, a newer one if there is one, or download progress |
| Update / Download / Delete | Update to the recommended version, download before it is needed, or free the space |
| Versions | Every version the service offers for your platform; install any of them to roll back |

Keeping yt-dlp current matters more than anything else here: sites change what they serve, a new
yt-dlp release is usually the fix, and an old one simply stops working. A tool you have never used
is never downloaded, updates or not.

Every download is checked against the SHA-256 its release publishes before it is used, and an update
installs beside the old version, which keeps working until the new one is verified. If the update
service cannot be reached, a first download falls back to a version built into the mod. A system
FFmpeg (on your `PATH`, or installed with Homebrew or a package manager) is always used instead of a
downloaded one, and macOS has no FFmpeg download at all.

## When updates are unavailable

The tab says *This install can't update itself* when SocketSVC is not running from a JAR in a
`mods` folder — a development launch, or a packaged modpack that loads mods from elsewhere. Update
it the way you installed it.

If a download fails, the reason is shown under the status line. The update service being
unreachable is not fatal: the game keeps running the version you have.

## For server admins

Updates come from `https://socketsvc-updater.vercel.app` unless `updateEndpoint` in
`config/socketsvc.json` points somewhere else; `autoUpdate`, `updateChannel` and `autoUpdateTools` live there too. Running your own deploy
means you decide which build your players' clients install. See
[the repository's update docs](https://github.com/HippoDev03/SocketSVC/blob/main/docs/updates.md) for
how channels, publishing and rollback work.