Pelagica is an alternative web frontend for Jellyfin built using React. It aims to provide a fast, modern, and customizable user experience for browsing and watching your media library.
- Features
- Demo
- Docker Installation
- Custom Themes
- Discord
- Localization
- Development Setup
- Contributing
- What does that name mean?
- Acknowledgements
- Disclaimer
- License
- Customizable Sections: Tailor your homepage with sections like "Continue Watching", "Recently Added", or completely custom queries.
- Media Bars: Add custom media bars to feature specific content.
- Search: Quickly find media across your library from anywhere using
Cmd+K/Ctrl+K. - Video Player: Integrated video player for movies and TV shows.
- Music Player: A music player that allows you to listen to your music albums or playlists while browsing your library.
- Responsive Design: Works seamlessly on both desktop and mobile devices.
- Theming: Light and dark mode support as well as custom themes
- Localization: Supports multiple languages through community contributions.
You can find a roadmap of planned features and improvements in the GitHub Projects.
If you want to suggest new features or report bugs, please use the GitHub Issues section.
- Streamystats: Get your streamystats recommendations directly on your home page.
- kefintweaks Watchlist: View and manage your kefintweaks watchlist within Pelagica.
|
|
|
|
Screenshots may include media artwork used for demonstration purposes only.
You can find a live demo of Pelagica at:
The demo instance has the jellyfin.streamyfin.app server with a username preconfigured, so you just have to click "Login" to test it out. If your own Jellyfin server is publicly accessible, you can also use that by entering the server URL and your credentials.
For production use, you should self-host Pelagica using Docker or another method.
Thank you to Streamyfin for providing a demo Jellyfin server for testing!
The easiest way to run Pelagica is using Docker. This provides a production-ready setup with nginx web server.
-
Create a directory for Pelagica:
mkdir -p pelagica && cd pelagica
-
Run the container:
docker run -d \ --name pelagica \ -p 8080:80 \ -v "$(pwd)/config:/config" \ --restart unless-stopped \ kartoffelchipss/pelagica:latestMake sure to replace
$(pwd)/configwith the actual path where your config files should be located (e.g./mnt/user/appdata/pelagica) -
Access Pelagica:
Open your browser to http://localhost:8080
# View logs
docker logs -f pelagica
# Stop the container
docker stop pelagica
# Start the container
docker start pelagica
# Update to latest version
docker pull kartoffelchipss/pelagica:latest
docker stop pelagica
docker rm pelagica
# Then run the docker run command again from Quick StartIf you prefer using docker-compose, create a docker-compose.yml file:
services:
pelagica:
image: kartoffelchipss/pelagica:latest
container_name: pelagica
ports:
- '8080:80'
volumes:
- /path/to/your/config:/config
restart: unless-stoppedReplace /path/to/your/config with the actual path where your config files should be located (e.g. /mnt/user/appdata/pelagica)
Then run: docker-compose up -d
If you want to build the Docker image from source instead of using prebuilt images:
# Clone the repository
git clone https://github.com/KartoffelChipss/pelagica.git
cd pelagica
# Build and start
docker-compose up -d --buildYou can find instructions on how to build and/or publish custom themes here.
For discussions about Pelagica, join the JellyfinCommunity and head to the #pelagica channel.
Pelagica supports multiple languages and depends on community contributions for translations. If you'd like to help translate Pelagica into your language, you can contribute via GitLocalize.
| Tool | Version |
|---|---|
| Go | 1.25+ |
| Node.js | 24.16+ |
| pnpm | latest |
| Task | latest |
Dependencies are installed automatically on first run (and whenever package.json, pnpm-lock.yaml, go.mod, or go.sum change).
task devThis starts both the frontend (http://localhost:3000) and backend in parallel.
You can also run them individually:
task frontend # Vite dev server only
task backend # Go backend onlyTo see all available tasks:
task --listIssues and pull requests are welcome. Please open an issue to discuss larger changes before submitting a PR.
You might be wondering about the name "Pelagica". Since I didn't want to call it the usual "*fin" or "jelly*" names, I looked for synonyms related to the sea. "Pelagic" refers to living in the deep ocean, which felt fitting for a Jellyfin frontend.
Pelagica’s design was inspired by the finetic Jellyfin frontend.
No code was used; this project is an independent implementation.
This project is a third-party frontend for Jellyfin and is not affiliated with the Jellyfin project.
Jellyfin is a media server designed to organize and stream legally obtained media. This project does not provide, host, or encourage access to pirated content.
The movie posters and images shown in the examples are not owned by me and are only used for demonstration purposes. All rights belong to their respective owners.
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.




