First run
Quickstart + install matrix
Use this if you are setting up Apollo for the first time.
Apollo documentation
These docs are organized for real use. Start with setup, read the architecture section if you want context, and use the reference sections when you need exact routes, hooks, or examples.
Best starting points
This page brings Apollo's public documentation into one place: setup for first run, architecture for context, reference for the server, and plugin docs for client extensions.
First run
Use this if you are setting up Apollo for the first time.
Integration
Use this when you need auth, search, playlists, or media details.
Extension
Use this to build client-side tabs, services, and event hooks.
No results
Try an endpoint name, setup term, platform, or plugin hook name.
Quickstart
Apollo is a split stack. The server owns tracks, downloads, playlists, streams, and the local API. The client is the desktop app. If you only remember one rule, it is this: start the server first, then point the client at it.
Step 1
Windows has a packaged build today. Linux currently runs from source with Node.js, yt-dlp, and ffmpeg.
Step 2
Install the Windows client or run the desktop app from source. If the server is remote, set APOLLO_SERVER_URL.
Step 3
Apollo is usable without plugins. Add them when you need custom tabs, lyrics providers, or client automation.
git clone https://github.com/ProtonDev-sys/apollo.git
cd apollo
npm install
npm start
git clone https://github.com/ProtonDev-sys/apollo-client.git
cd apollo-client
npm install
npm start
Explanation
Apollo follows a clean boundary that makes the rest of the docs easier to navigate. Server docs are about library ownership, media handling, and downloads. Client docs are about playback and the UI. Plugin docs are about extending the client safely.
Server
Tracks, playlists, downloads, health, auth, and media delivery.
Client
Authentication, search UI, library views, and desktop control.
Plugins
Detail tabs, lyrics providers, and host event integrations.
Install matrix
Apollo does not offer the same install path on every platform, so this section spells out what is available right now.
| Platform | Client | Server | Status |
|---|---|---|---|
| Windows | Packaged build or source path | Packaged build or source path | Best current path |
| Linux | Source path | Source path | Supported, but more manual |
| Android | No client build yet | Not a server target | Not available yet |
| iOS / iPadOS | No client build yet | Not a server target | Not available yet |
winget install OpenJS.NodeJS.LTS
winget install yt-dlp.yt-dlp
winget install Gyan.FFmpeg.Essentials
Reference
Apollo Server exposes a local HTTP API for health, auth, library queries, search, playback resolution, playlists, downloads, and media delivery. Think of this section as an API overview rather than a full schema reference.
| Family | Typical paths | Purpose |
|---|---|---|
| Health + auth | /api/health, /api/auth/status, /api/auth/session | Check runtime state and establish a bearer session. |
| Library + search | /api/tracks, /api/search, /api/artists | Read your indexed library and search results from connected providers. |
| Playback + streams | /api/playback/*, /media/* | Resolve what should play and serve the media files. |
| Downloads | /api/downloads/* | Queue downloads and track their progress. |
| Playlists | /api/playlists/* | Create, update, reorder, and manage playlists. |
Reference
The common flow is straightforward: detect whether auth is enabled, exchange the shared secret for a bearer token, then use that token on later requests. Revoke the session explicitly when the client signs out.
POST /api/auth/session
Content-Type: application/json
{
"secret": "replace-this-with-the-shared-secret"
}
Reference
Library endpoints answer questions about what Apollo already owns. Search endpoints answer questions about what Apollo can resolve or download. Keep those two jobs separate in your client code.
Reference
Downloads and playback are related, but they are not the same thing. Keep them separate in your tooling and your UI.
Downloads
Use downloads endpoints for job state, progress, and retries.
Playback
Use playback endpoints when the client needs a file or stream to play.
Media
Use media endpoints to serve the file or stream after playback is resolved.
Reference
Playlists are saved library data. Media endpoints are about serving files and streams. Keeping those separate makes client code easier to reason about.
Plugin docs
Apollo Client plugins are trusted extensions. They can register UI sections, consume runtime APIs, and participate in app workflows, which means plugin docs need to be explicit about boundaries and cleanup expectations.
export default {
id: "example-plugin",
name: "Example Plugin",
async setup(api) {
api.registerDetailTab({
id: "example-tab",
label: "Example",
order: 30,
mount({ container }) {
container.textContent = "Apollo plugin panel";
}
});
}
};
Plugin docs
The runtime is built around a few clear parts: setup APIs for registration, context objects for mounted detail views, and helper services for things like lyrics and events.
| Runtime part | Use it for |
|---|---|
| setup(api) | Register detail tabs, providers, listeners, and host integrations. |
| mount({ container, context, services }) | Render tab UI and consume playback or selection context. |
| services.resolveLyrics(track) | Resolve synced or plain-text lyrics through the app's lyrics system. |
| services.emit / services.on | Coordinate with host-level events without reaching into internals directly. |
Plugin docs
Host events let plugins react without polling. Cleanup matters as much as registration because Apollo is a long-lived desktop app, not a disposable page load.
async setup(api) {
const off = api.on("selection:changed", refreshView);
const timer = setInterval(refreshView, 5000);
return () => {
off?.();
clearInterval(timer);
};
}
Operations
Most first-run issues reduce to one of four causes: the server is not running, the client is pointed at the wrong URL, required download tooling is missing, or auth/session state is stale.