Profile
Back to NewsBack
GitHub Trending 5 min
Reader Mode
Silo-Server/silo-server: Self-hosted media streaming server with a Go backend, React web UI, Docker deployment, transcoding, and Jellyfin-compatible APIs.

Silo-Server/silo-server: Self-hosted media streaming server with a Go backend, React web UI, Docker deployment, transcoding, and Jellyfin-compatible APIs.

4 hours ago

Silo logo

Silo

A self-hosted media server for films, series, audiobooks, ebooks, podcasts, and manga.

Latest GitHub release Container image on GHCR Continuous integration Go 1.26 React 19 AGPL-3.0-or-later license

Quick start · Documentation · Builds & releases · Discord · Support Silo · Contributing


[!WARNING]
Silo is pre-release. APIs, configuration, and database migrations may change
before the first stable release. Back up your deployment before updating.

1.0 release scope

The 1.0 milestone covers movies and series. Audiobooks, ebooks, and Audiobookshelf compatibility keep working as they do today and are labeled beta: they are outside the 1.0 support promise and will be replaced by a consolidated Books effort with no assigned release date. The broader capabilities below include those beta implementations, not a promise that every media type is supported in 1.0. Existing library data is preserved when upgrading.

What Silo does

Play

Direct play when possible, remux when needed, transcode otherwise, with VA-API, Quick Sync, and NVENC hardware acceleration.
Organize

One catalog for films, series, audiobooks, ebooks, podcasts, and manga, matched through metadata plugins such as TMDB and TVDB.
Connect

Use the included web app, or the Jellyfin/Emby-compatible API with clients such as VidHub, Findroid, and Infuse. Client coverage varies.
Share

Household profiles with their own watch state, library access, and parental controls.
Manage

Libraries, users, providers, storage, search, and playback are configured in the admin interface, not in config files.
Scale

Start with one integrated server; split proxy and transcode roles across shared PostgreSQL and Redis when you need to.

Quick start

Requires Docker Compose 2.24 or newer. The default Compose file runs the omnibus image: Silo with a bundled PostgreSQL (with pgvector) and Redis, plus Meilisearch when you turn it on.

git clone https://github.com/Silo-Server/silo-server.git
cd silo-server
cp .env.example .env
chmod 600 .env
key="$(openssl rand -base64 48)" && printf '\nSECRET_KEY=%s\n' "$key" >> .env

Set MEDIA_ROOT in .env to the absolute path of your media, then:

docker compose up -d

Open and complete onboarding.

Hardware transcoding (VA-API or NVIDIA) and access for proxy or transcode nodes on other hosts are commented out in docker-compose.yml; uncomment the lines you need.

Updating an install from before the omnibus image

An install that runs Silo, PostgreSQL, and Redis in separate containers keeps that layout when its .env sets COMPOSE_FILE=docker-compose.split.yml; set it before updating. docker-compose.yml is an example of a new install and does not look for an earlier one: started on that data folder, it replaces the old silo container and comes up on a new, empty database with setup open, while the earlier PostgreSQL and Redis keep running with their data untouched. Moving into the single container is a separate step. The separate GPU and node Compose files are gone, so a COMPOSE_FILE that names one fails until it names only the deployment file you use, with the matching lines in it uncommented. See Moving from the multi-container stack.

The user manual covers the rest, starting with installation: backing up SECRET_KEY, storage, GPU acceleration, Meilisearch, external PostgreSQL and Redis, transcode nodes, PostgreSQL tuning, backups, and updates.

Builds and releases

Until the first release, default-branch images carry an ordered build-N tag and the full commit SHA alongside latest. Build numbers order published images; they are not release versions. Release versioning defines each tag and the SemVer contract.

Documentation

Community and contributions

Questions and discussion: Discord. Bugs, install problems, and performance issues: the GitHub issue forms, which ask for reproduction steps and raw logs.

Native clients are developed in silo-apple and silo-android. Client-visible API, authentication, playback, or metadata changes should consider both.

Right now, the most helpful way to contribute is a clear, accurate issue. We implement and review changes through our own workflow, and pull request volume has outgrown what we can review carefully, so a good issue usually helps us more than a pull request.

Pull requests are still welcome from contributors who've had one merged in a Silo repository, or when a maintainer asks for one. We close other pull requests without review. CONTRIBUTING.md explains what makes an issue useful.

Supporting Silo

Silo is developed in spare time and funded out of pocket, and will stay free and open source. GitHub Sponsors covers AI development tooling (Claude, Codex), push-notification relay infrastructure, and future project costs. Bug reports, code, and documentation help just as much.

Code review is supported by Macroscope through its open source program.

Sponsored by Macroscope

License and trademarks

Silo's source code is licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later). See LICENSE.

The Silo name, logo, and wordmark are trademarks of Silo Media L.L.C. and are not covered by the AGPL. Forks and redistributions may use the code but must not use the Silo brand as their identity and must remove or replace the brand assets. Publishing a Silo-branded app to an app store requires written permission. See TRADEMARK.md for permitted referential use, including phrases such as "compatible with Silo."

Chat with me