Jellyfin Server: Take Control of Your Media with Open Source

Jellyfin Server is your free and open-source solution to organize, manage, and stream your digital media. If you’re seeking a robust, user-centric alternative to proprietary media servers like Emby and Plex, look no further. Jellyfin empowers you to build your personal media empire, offering seamless streaming to various devices from a dedicated server, all without hidden costs or restrictive licenses. Born from Emby’s 3.5.2 release and reimagined on the cross-platform .NET Core framework, Jellyfin Server is built by a passionate community dedicated to creating a better media experience for everyone. Join the open-source movement and discover the power of Jellyfin Server.

What is Jellyfin Server?

Jellyfin Server stands out as a Free Software Media System, placing you firmly in control of your media. It’s designed as a direct alternative to proprietary options like Emby and Plex, offering a comprehensive suite of features to serve your movies, TV shows, music, photos, and more. Operating as a dedicated server application, Jellyfin streams your media to a wide array of client devices through intuitive apps.

Originating from Emby version 3.5.2, Jellyfin embarked on a journey to become a truly open and cross-platform solution. By migrating to the .NET Core framework (now .NET), Jellyfin ensures compatibility across Windows, macOS, Linux, and even more platforms. The philosophy behind Jellyfin is simple: provide a powerful media server without the typical constraints. There are no premium tiers locking away features, no licensing fees, and no hidden agendas. Instead, you get a transparent, community-driven project focused on continuous improvement and collaborative development.

If you’re ready to delve deeper, the official documentation is an invaluable resource. For community support, troubleshooting, and to stay updated, explore the communication channels. To understand the project’s ethos and history, visit the about page.

Ready to get started with your own Jellyfin-server? Jump to the downloads page or follow the detailed installation guide. For a quick setup, the quick start guide is your best bet. For those who prefer building from the ground up, compiling from source code is also an option.

Encountering issues? Report them by opening an Issue on GitHub. Interested in contributing to the project? Explore the contributing guide and community standards to find your place in the Jellyfin community. Have a feature idea? Share it on the feature request hub. Want to help localize Jellyfin? Contribute through the Weblate instance.

Setting Up Your Jellyfin Server Development Environment

This section guides you through setting up a local development environment for Jellyfin Server. Contributing to open source projects like Jellyfin is a rewarding experience, and this guide will help you get started. Before you begin, make sure to thoroughly review the development contribution guidelines. Jellyfin Server supports all major operating systems, except FreeBSD.

Prerequisites for Jellyfin Server Development

To build Jellyfin Server, you’ll need to install the .NET 9.0 SDK on your system. This SDK provides the necessary tools to compile and run .NET applications.

While command-line instructions are provided, using an Integrated Development Environment (IDE) is highly recommended, especially for debugging. Any IDE that supports .NET 6 development will work seamlessly. Popular choices include recent versions of Visual Studio (2022 or newer) and the cross-platform Visual Studio Code.

Additionally, ffmpeg is essential for media processing within Jellyfin. Ensure you have ffmpeg installed and accessible in your system’s environment path.

Cloning the Jellyfin Server Repository

The next step is to obtain a local copy of the Jellyfin Server codebase. You can clone the main repository directly if you intend to run the server from source. However, if you plan to contribute code changes, it’s best practice to fork the repository to your own GitHub account. Here’s how to clone the main repository using HTTPS:

git clone https://github.com/jellyfin/jellyfin.git

Installing the Jellyfin Web Client

Jellyfin Server is designed to host the web client, providing a user interface for managing and accessing your media. You’ll need to obtain the web client files separately, as they are not included directly in the server repository.

It’s worth noting that you can also host the web client independently. In that case, you can skip this step.

Here are three ways to acquire the Jellyfin web client files:

  1. Download from Azure DevOps Pipeline: Obtain pre-built web client files from the Azure DevOps pipeline. You can find builds for specific releases in the branches tab.
  2. Build from Source: Build the web client from source by following the instructions in the jellyfin-web repository. This option is ideal for frontend developers wanting to modify the web client.
  3. Copy from Existing Installation: If you have an existing Jellyfin Server installation, you can copy the web client files. For example, on Windows, they are typically located at C:Program FilesJellyfinServerjellyfin-web.

Running Your Jellyfin Server

With the prerequisites installed, repository cloned, and web client obtained, you’re ready to run Jellyfin Server. Instructions are provided for running via command line and popular IDEs.

Running with Visual Studio

If you’re using Visual Studio, simply open the Jellyfin.sln solution file. Then, press F5 to start the server in debug mode. Visual Studio will handle building the project and launching the server.

Running with Visual Studio Code

For Visual Studio Code users, first, open the Jellyfin Server repository directory using the “Open Folder…” option. VS Code will prompt you to install recommended extensions for the workspace – ensure you install the “Workspace Recommendations”. After installing extensions, press F5 to run the server. VS Code is configured with launch profiles for easy debugging and running.

Running from the Command Line

To run Jellyfin Server from the command line, use the dotnet run command. Navigate to the cloned repository directory in your terminal. The following command assumes your repository folder is named jellyfin:

cd jellyfin
dotnet run --project Jellyfin.Server --webdir /absolute/path/to/jellyfin-web/dist

Replace /absolute/path/to/jellyfin-web/dist with the actual absolute path to your web client’s dist directory.

Alternatively, you can build the server executable and run it directly. This allows for easier command-line argument passing. To do this:

  1. Build the project:
    dotnet build
    cd Jellyfin.Server/bin/Debug/net9.0
  2. Run the executable:
    • On Linux/macOS: ./jellyfin
    • On Windows: jellyfin.exe

Use the --help flag with the executable to see a list of available command-line options.

Accessing the Jellyfin Web Client

Once your Jellyfin Server is running and configured to host the web client, you can access it in your web browser by navigating to http://localhost:8096 (default address). The API documentation is accessible at http://localhost:8096/api-docs/swagger/index.html.

Running from GitHub Codespaces

GitHub Codespaces provides a convenient cloud-based development environment. Jellyfin Server is configured to run smoothly within Codespaces.

Important Notes for Codespaces:

  • Initial setup might take 20-30 seconds for extension loading and environment preparation. Wait until you see Downloading .NET version(s) 7.0.15~x64 ...... Done! in the output tab.
  • To access your Jellyfin instance externally, make the “ports” public in the VS Code “ports” window.
  • On first access via WebUI, you might be redirected to the login page instead of setup. Refresh the login page to access the setup wizard.

Two Codespaces configurations are available:

Default – Development Jellyfin Server

This configuration provides a basic development environment for Jellyfin Server without pre-installed dependencies like ffmpeg or the web client. You’ll need to perform the setup process each time you create a new Codespace. Use the .NET Launch (nowebclient) launch configuration to start the server (requires an external web client).

Development Jellyfin Server ffmpeg

This configuration extends the default setup by including a default installation of ffmpeg 6, following the instructions at https://jellyfin.org/docs/general/installation/linux#repository-manual. For specific ffmpeg versions, consult the comments in .devcontainer/Dev - Server Ffmpeg/install.ffmpeg.sh. Use the ghcs .NET Launch (nowebclient, ffmpeg) launch config to run with ffmpeg enabled.

Running Jellyfin Server Tests

Jellyfin Server includes unit tests to ensure code quality and functionality. These tests are part of the Continuous Integration (CI) pipeline on Azure. You can run tests in several ways:

  1. Command Line: Use dotnet test in the repository root to run all tests.
  2. Visual Studio Test Explorer: Utilize the Test Explorer in Visual Studio to discover and run tests.
  3. Visual Studio Code CodeLens: Run individual tests directly within the code editor using CodeLens annotations in Visual Studio Code.

Advanced Jellyfin Server Configuration

Hosting the Web Client Separately

In advanced scenarios, you might want to host the Jellyfin web client separately from the server. This is particularly useful for frontend developers who prefer using a separate webpack development server for faster iteration. Refer to the jellyfin-web repository for instructions on setting up a separate web client development environment.

To prevent the server from hosting the web client, use the nowebclient configuration flag. This can be set either via the command-line switch --nowebclient or by setting the environment variable JELLYFIN_NOWEBCONTENT=true.

For convenience, Visual Studio includes a dedicated launch profile named Jellyfin.Server (nowebcontent) for running the server without hosting the web client.

Important Note: The Jellyfin setup wizard cannot be accessed if the web client is hosted separately.

[

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *