Prerequisites
Before building Jellyfin, ensure you have the following prerequisites installed:Install .NET 9.0 SDK
Install FFmpeg
Jellyfin requires jellyfin-ffmpeg for media transcoding.
- Linux
- Windows
- macOS
Follow the Linux installation guide to install the official Jellyfin FFmpeg package.
Jellyfin Server is supported on all major operating systems except FreeBSD.
Cloning the Repository
Clone the Jellyfin repository from GitHub:If you plan to contribute code changes, you should fork the repository first and clone your fork instead.
Installing the Web Client
The server hosts the web client’s static files. You have two options:Option 1: Use Pre-built Web Client
Copy the web client files from an existing Jellyfin installation:- Windows:
C:\Program Files\Jellyfin\Server\jellyfin-web - Linux:
/usr/share/jellyfin/webor/usr/lib/jellyfin/jellyfin-web
Option 2: Build from Source
Build the web client from the jellyfin-web repository:dist directory.
Option 3: Host Web Client Separately (Development)
Building the Server
Choose one of the following methods to build Jellyfin Server:- Command Line
- Visual Studio
- Visual Studio Code
Running the Server
Running from Command Line
You can run the server directly or run the built executable:Use the
--help flag to see all available command line options:Running from Visual Studio
- Open
Jellyfin.sln - Set
Jellyfin.Serveras the startup project (if not already set) - Press
F5to run with debugging, orCtrl+F5to run without debugging
Running from Visual Studio Code
- Open the repository folder
- Ensure recommended extensions are installed
- Press
F5to start debugging - Select the
.NET Core Launch (web)configuration if prompted
Accessing the Server
Once running, access the server at:- Web Client:
http://localhost:8096 - API Documentation:
http://localhost:8096/api-docs/swagger/index.html
On first run, you’ll be redirected to the setup wizard. If running without a web client, you’ll need to complete setup through an external client.
Running Tests
Jellyfin includes comprehensive unit and integration tests:- All Tests
- Specific Project
- Visual Studio
- VS Code
Run all tests in the solution:
Advanced Configuration
Hosting the Web Client Separately
For frontend development, you can host the web client in a separate webpack dev server:Running in GitHub Codespaces
Jellyfin supports development in GitHub Codespaces with pre-configured containers:Default Configuration
- Basic server environment with no web client or ffmpeg
- Use
.NET Launch (nowebclient)launch configuration - Connect via external client
With FFmpeg
- Includes ffmpeg6 installation
- Use
ghcs .NET Launch (nowebclient, ffmpeg)launch configuration
Codespaces may take 20-30 seconds to fully initialize all extensions. Wait until you see “Downloading .NET version(s) 7.0.15~x64 … Done!” in the output.
Project Structure
Key projects in the solution:| Project | Description |
|---|---|
Jellyfin.Server | Main executable and web host configuration |
Jellyfin.Api | REST API controllers and endpoints |
MediaBrowser.Controller | Core interfaces and contracts |
Emby.Server.Implementations | Main business logic implementations |
Jellyfin.Server.Implementations | Additional server implementations |
MediaBrowser.Model | Shared data models and DTOs |
Jellyfin.Data | Entity Framework database models |
Troubleshooting
Build Errors
SDK version errors
SDK version errors
Ensure you have .NET 9.0 SDK or later installed:
Missing web client errors
Missing web client errors
If you see errors about missing web content:
- Either provide the
--webdirpath to web client files - Or use
--nowebclientflag to run without the web client
Port already in use
Port already in use
If port 8096 is in use, specify a different port:
Next Steps
API Overview
Learn about the Jellyfin API architecture and endpoints
Contributing Guide
Read the contribution guidelines and development workflow
Plugin Development
Create plugins to extend Jellyfin’s functionality
Running Tests
Write and run tests for your code changes