Gerbera UPnP Media Server: Build, Media Flow, and Limits
UPnP Media Server for 2026: Stream your digital media through your home network and consume it on all kinds of UPnP supporting devices 📱💻📺
At a glance
- What is it?
- Gerbera exposes local and external media to UPnP-compatible devices through a C++ media server with metadata extraction, rescanning, scripting, transcoding, and a Web UI. It fits people who want network playback and server-defined libraries, but its dependency and feature choices need review before adoption.
- Who is it for?
- Adopt Gerbera when a home network contains several UPnP-compatible playback targets and a local operator is prepared to configure media directories, database behavior, and optional integrations. Do not select it as a simple file-sharing replacement or as a turnkey server without checking client compatibility and format support.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 21, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Gerbera's UPnP Media Server Role
Gerbera solves the problem of making digital media available to devices that understand UPnP media services rather than opening each file through a conventional file-sharing workflow. Its intended users are home-network operators who have media stored on a server and want compatible televisions, speakers, computers, phones, or other renderers to browse and play that content. The README describes playback through a home network and also mentions links to external URLs, so its scope includes local libraries and internet content represented as UPnP resources.
The server is aimed at users who need more control than a basic file listing provides. Gerbera extracts metadata from formats including MP3, OGG, AAC, M4A, FLAC, WavPack, and JPG, can create thumbnails, and can generate video thumbnails. It can arrange the server view using extracted metadata. That makes the presentation of a library dependent on parsing and organization rules rather than only on directory names.
This is a C++ application with a Web UI, database storage, protocol support, and optional media components. The repository also contains packaging, Docker, Conan, test, documentation, and web-interface directories. Gerbera therefore belongs in the category of server software that needs operating-system integration and an initial media configuration, not in the category of a client-side streaming utility.
Gerbera's Media Discovery and UPnP Flow
Based on the repository layout and feature list, Gerbera combines a media database, filesystem or external URL sources, metadata parsers, and UPnP protocol support. The database is backed by SQLite by default. Optional PostgreSQL and MySQL or MariaDB support is listed in the dependency table, which gives administrators a choice for larger or existing database environments.
Media discovery can be timed or driven by inotify. Timed rescans provide a fallback for systems where filesystem events are unavailable or incomplete, while inotify can reduce the delay between a file change and its appearance in the server. The README does not document the exact configuration keys for either method, so the project documentation must be consulted before selecting a schedule or event setup.
When content is added or changed, Gerbera can extract tags, identify media types, collect thumbnails, and expose the result through its server layout. UPnP support comes through libupnp or libnpupnp, with the dependency table marking these as alternative protocol implementations. Optional libraries add capabilities such as MKV metadata, WavPack support, FFmpeg metadata, Exif metadata, and video thumbnails. Plugins or scripts can perform format transcoding, which changes playback compatibility but also adds configuration and processing complexity.
External URLs are represented as links and served to a renderer. The README does not explain authentication, URL filtering, caching, or failure handling for those links. That omission matters for an operator deciding whether internet sources should be exposed through the same server instance as private local media.
Building Gerbera with the Documented Release Preset
The README does not provide a packaged installation tutorial. It directs users to the online installation documentation and provides a quick build sequence using CMake and the `release-pupnp` preset. The sequence below is a source build, so the target system first needs the dependencies described in the README, including a C++ toolchain, CMake, and the selected UPnP library. The build output and installation permissions will depend on that dependency set.
The documented commands clone the repository, create a build directory, configure the preset, compile, and install the result:
git clone https://github.com/gerbera/gerbera.git
mkdir build
cd build
cmake ../gerbera --preset=release-pupnp
make -j4
sudo make installAfter installation, the README does not specify a service name, configuration-file path, default listening port, or startup command. It does document a Web UI, but it does not state the URL or the exact steps for adding the first media directory. Those details must come from the installed documentation or the `config/` files in the repository. The build commands are therefore a reliable starting point, while a first-run procedure based on an invented port or URL would be misleading.
The repository includes `Dockerfile`, `README.Docker.md`, and several CMake files. Those files provide additional deployment paths, but the README does not document a complete Docker invocation or a ready-to-use configuration file. The source build is the only complete executable sequence documented here.
Gerbera Features That Change Server Operations
The Web UI is not merely a status page in the feature list. It provides a tree view of the database and filesystem, with actions described as adding, removing, editing, and browsing media. This gives an administrator a control surface for library management, but the README does not describe authentication, permissions, CSRF protection, or whether every filesystem operation is restricted to configured paths. Those security boundaries should be checked in the full documentation before exposing the interface beyond a trusted home network.
Metadata-driven layouts can make libraries easier to navigate when tags are consistent. They can also make behavior less predictable when files contain incomplete or conflicting tags. The available format list is broad, yet it is not a promise that every codec can be played directly by every renderer. Transcoding plugins and scripts offer a route around some format gaps, but the project documentation gives no command, interface, or resource requirement for them.
Automatic rescans add operational convenience, but they also create choices around database refresh timing, ignored paths, and the handling of files that are still being copied. The README does not document atomic-import behavior or validation for incomplete media. A deployment should therefore treat scanning policy as a server configuration concern, not as an invisible guarantee.
The optional `duktape` dependency provides scripting support, and the optional database drivers expand deployment choices. Enabling more components increases the number of versions and runtime interactions that an operator must understand. Gerbera is consequently more configurable than a minimal static media endpoint, but configuration decisions become part of server maintenance.
Where Gerbera Is the Wrong Tool
Gerbera is a poor fit when the only requirement is copying media files to another computer. A file-sharing service can expose directory contents without translating them into UPnP object metadata, maintaining a media database, or arranging resources by tags. Gerbera adds those capabilities, along with protocol libraries, rescanning, thumbnails, and rendering concerns, so that overhead is unnecessary for a simple transfer workflow.
It is also a poor fit for environments in which every client is known not to support UPnP. The project targets UPnP-compatible devices, and the README does not claim compatibility with every media application or network protocol. A client may discover the server but still reject a format, metadata field, or transport stream. The transcoding feature can address some cases, but only after the relevant plugins or scripts are configured.
The README does not document authentication for external URLs, access control for the Web UI, or behavior when a remote URL becomes unavailable. Operators should not infer those controls from the fact that the application is intended for a home network. The project is also not a substitute for media transcoding infrastructure when a deployment requires guaranteed real-time conversion across many codecs. Its feature list describes transcoding as a flexible plugin or script capability, not as a documented, universally available conversion pipeline.
Docker, Dependencies, and Upgrade Cost
The repository contains several Dockerfiles and a `README.Docker.md`, while the main Dockerfile uses Alpine Linux and builds several optional components before the Gerbera application. The dependency table shows that some libraries are required and others are optional. Required components include `pugixml`, `jsoncpp`, `libiconv`, `sqlite3`, `zlib`, `fmtlib`, and `spdlog`. Protocol support requires either `libupnp` or `libnpupnp`.
This dependency profile has two consequences. A source build needs more than a compiler, and upgrading Gerbera may involve checking dependency compatibility rather than replacing one executable. The README lists minimum, recommended, and latest-tested versions, but it does not provide an upgrade procedure or a compatibility statement for every release transition. A deployment should preserve its configuration and database strategy when moving between versions.
The repository is not archived. Its last push was on 2026-10-15, and recent releases include `v3.3.0`, `v3.2.1`, and `v3.2.0`. Those facts indicate repository activity, but they do not establish that every optional integration will remain unchanged. Operators who enable transcoding, external databases, scripting, or last.fm scrobbling should treat those interfaces as upgrade-sensitive.
The project is listed with a custom licence that GitHub cannot classify. The repository directs readers to `LICENSE.md`. This review does not interpret that licence or provide legal advice. Before redistribution or deployment in an organization, the licence text should be checked for obligations concerning source code, notices, packaging, or modifications.
Adoption Boundaries for Gerbera
Gerbera suits a home media setup with multiple UPnP-compatible devices, a server that can remain reachable on the local network, and an operator willing to configure discovery and metadata behavior. Its Web UI, database, rescanning, format support, and transcoding extension points address problems that a plain file listing does not. The project is also relevant when local libraries and external URLs need to appear through the same UPnP presentation layer, provided the operator resolves the undocumented access-control questions first.
It does not suit users seeking a dependency-light file server, a client-independent playback guarantee, or a documented Docker launch sequence in the README. The first checks should be `LICENSE.md`, the selected `libupnp` or `libnpupnp` dependency, and the `config/` files that define media sources. After those are confirmed, verify one actual renderer against the intended formats before enabling expensive plugins or broad rescanning.
Editorial conclusion
Adopt Gerbera when a home network contains several UPnP-compatible playback targets and a local operator is prepared to configure media directories, database behavior, and optional integrations. Do not select it as a simple file-sharing replacement or as a turnkey server without checking client compatibility and format support. Before installation, inspect LICENSE.md, choose either libupnp or libnpupnp, and verify that the required build dependencies are available for the target operating system. The repository is not archived and its last push was on 2026-10-15, so the project's maintenance state does not present an abandonment concern.
Frequently asked questions
What is Gerbera used for?
Gerbera is a C++ UPnP media server for browsing and playing digital media through compatible devices on a home network. It also supports external URLs, metadata extraction, thumbnails, transcoding plugins or scripts, and a Web UI.
How do I build Gerbera from source?
The README provides a quick build using `git clone`, an empty `build` directory, `cmake ../gerbera --preset=release-pupnp`, `make -j4`, and `sudo make install`. The target system must provide the dependencies listed in the project README.
Can Gerbera transcode media formats?
Yes, the README says that media format transcoding is available through plugins or scripts. It does not specify a default command or configuration example for enabling a particular transcoding pipeline.
Does Gerbera have a Web UI?
Yes. The README describes a Web UI with a tree view of the database and filesystem and controls for adding, removing, editing, and browsing media. It does not document the startup URL or authentication behavior in the README.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/gerbera-gerbera)Was this useful?