Conduit is an open-source, self-hosted media application built around Stremio-compatible add-ons. The server synchronizes households, profiles, installed add-ons, libraries, and watch progress; clients contact add-ons and media sources directly.
The project is under active development. The web and desktop clients are available today, and the shared Android/iOS mobile client is in release preparation. Treat current deployments and mobile builds as pre-release installations and keep profile exports and database backups.
- Shared household profiles with independent libraries and watch history
- Stremio-compatible catalogs, metadata, streams, and subtitles
- Web and Electron desktop clients backed by one shared interface
- Android and iOS clients with shared Compose UI and native playback
- Portable profile import/export
- Local password accounts without an email-delivery dependency
- Google OAuth or administrator-configured OpenID Connect
- Recovery codes and machine-local administrator recovery
Prerequisites are provided by the Nix flake:
direnv allow
cp .env.example .env
docker compose -f compose.source.yaml -f compose.dev.yaml up -d postgres
pnpm install
pnpm core:build
pnpm db:migrate
pnpm devThe web client runs at http://localhost:5173 and the API server at
http://localhost:3000.
See Development for repository structure, individual commands, tests, database migrations, and desktop requirements.
Install the signed Flatpak repository and Conduit for the current user:
flatpak remote-add --user --if-not-exists conduit \
https://davidvanderklay.github.io/conduit/conduit.flatpakrepo
flatpak install --user conduit media.conduit.desktopLater releases are delivered through the normal flatpak update flow. See
Desktop releases for update, removal, and
troubleshooting instructions. A standalone .flatpak bundle remains available
on each GitHub release as a fallback.
Download the deployment files into any empty directory. No source checkout or local image build is required:
mkdir conduit && cd conduit
release=v0.1.2-alpha.12
curl -fsSLO "https://github.com/davidvanderklay/conduit/releases/download/${release}/compose.yaml"
curl -fsSLO "https://github.com/davidvanderklay/conduit/releases/download/${release}/.env.docker.example"
cp .env.docker.example .env
# Edit .env, replace every replace-with-* value, and pin CONDUIT_VERSION to the
# downloaded release without the leading v (for example 0.1.2-alpha.12).
docker compose up -dOpen http://localhost:8321. The default first-owner flow requires the private
CONDUIT_BOOTSTRAP_TOKEN from .env. The default port binds to localhost; set
CONDUIT_BIND_ADDRESS=0.0.0.0 only when deliberate LAN or router exposure is
wanted. See Deployment and operations for reverse proxies,
backups, bootstrap modes, and upgrades.
- User and authentication setup
- Deployment and operations
- Desktop, Android, and iOS releases
- Mobile development and release
- Media compatibility
- Development guide
- Project roadmap
- Portable profile format
The first account becomes the instance owner. Local registration closes by
default after that account is created. The owner can configure Google directly
or connect a custom OpenID Connect provider from /admin.
Users may link OAuth and disable their local password. Before doing that they should save recovery codes and verify the OAuth login in a separate browser. An operator with shell access can restore local login without enumerating users:
pnpm admin:recoverThe command prompts for one account email and prints a single-use recovery link that expires after ten minutes. See Authentication for the complete security and recovery model.
Account identities are separate from household profile names. Conduit does not request a personal name during local registration. Google login requests only OpenID and email identity scopes.
Configured add-on URLs are encrypted in PostgreSQL. OAuth client secrets are also encrypted and OAuth tokens are encrypted by Better Auth. Clients fetch add-on catalogs, metadata, streams, and subtitles directly; the sync server does not proxy add-on or media traffic.
Profile exports protect portable user data, while recovery codes protect account access. They solve different problems, and users should keep both.
The mobile clients now cover server selection, local and OAuth sign-in, households and profiles, add-on catalogs, search, libraries, watch history, continue watching, native stream playback, subtitles, and synchronized watch progress. They also retain an encrypted profile snapshot for limited offline access to library and history state; media is not downloaded for offline playback. See Mobile development and release for the current support boundary and packaging path.
The next major product targets are mobile release hardening and TV-oriented experiences including tvOS. Longer-term work includes first-class Jellyfin/Plex integration for unified progress and library workflows. See the detailed Roadmap.
Conduit is intentionally not becoming a general reader or media inbox. YouTube, RSS, audiobooks, and podcast aggregation are outside the current product scope; the focus remains a cohesive film and television experience.
Conduit is licensed under the MIT License. See LICENSE and THIRD_PARTY_NOTICES.md.