Open-source project
DaemonEngine/Daemon avatar
DaemonEngine/Daemon

Daemon Engine: The BSD-Licensed FPS Engine Behind Unvanquished

An open-source multi-platform 3D game engine focused on first-person shooter gameplay and community-driven development workflows.

388 stars75 forksC++BSD-3-Clause

At a glance

What is it?
Daemon is a standalone, multi-platform 3D game engine built for first-person shooter gameplay, serving as the core of Unvanquished. This review covers its architecture, build process, and practical limitations based on the repository's documentation.
Who is it for?
Adopt Daemon if you are building a team-based FPS and want a BSD-3-Clause licensed engine with an active community and a proven game (Unvanquished) already running on it. Do not adopt it if you need a general-purpose engine, a stable release cadence, or a quick start without managing submodules and external dependencies.
Can I use it commercially?
Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 8 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 September 14, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Daemon Solves and Who It Serves

Daemon is a standalone engine, not a game. It solves the problem of building a multiplayer FPS without starting from scratch, specifically for teams that want a proven codebase with a permissive license. The README states it 'powers the multiplayer first person shooter Unvanquished,' which means the engine is not a toy or a tech demo; it has shipped a real game. The target audience is developers who want to create a game like Unvanquished, or who want to fork the engine for their own FPS project. The BSD-3-Clause license is a key draw: it permits commercial use with minimal restrictions, which is rare for game engines. The README also emphasizes community-driven workflows, with links to IRC and CI builds, suggesting that the project values contributor involvement. If you are building a single-player RPG or a 2D platformer, this engine is the wrong shape; it is explicitly focused on FPS gameplay.

How the Engine Is Structured: Submodules and .dpk Packages

The engine's architecture is centered on a modular data format. The README explains that to run a game, you need a 'pkg/' folder full of .dpk files, which are provided by the game that uses Daemon. This means the engine itself does not ship with game content; it is a runtime that reads packaged assets and game logic. The .dpk format is the key mechanism: it bundles maps, models, sounds, and likely scripts, allowing games to distribute content in a consistent way. The engine also separates the client and server: the graphical 'daemon' binary for playing, and the non-graphical 'daemonded' for dedicated servers. This split is practical for hosting, which is essential for multiplayer FPS. The source code relies on submodules; the README warns that if CMake complains about missing files in 'libs/crunch/', you skipped the submodule step. This indicates that the engine depends on several external libraries that are vendored via Git submodules, which is a double-edged sword: it keeps dependencies pinned, but it also means a shallow clone will fail to build.

Building Daemon: Commands, Dependencies, and Cross-Compilation

The build process is documented in detail, but it is not trivial. You need git, cmake, and a C++14 compiler. The supported compilers are GCC 9+, Clang 11+, and MSVC 2019 or later. Required dependencies include zlib, libgmp, libnettle, libcurl, SDL2, GLEW, libpng, libjpeg, libwebp, Freetype, OpenAL, libogg, libvorbis, libopus, and libopusfile. That is a long list, and each must be installed on your system. Optional is ncurses, which is likely for terminal UI in the dedicated server. On Linux, macOS, or MSYS2, the build commands are straightforward: 'cmake -H. -Bbuild' followed by 'cmake --build build -- -j4'. For Windows with Visual Studio, you run CMake and open the generated Daemon.sln. Cross-compiling from Linux to Windows is supported via a toolchain file: 'cmake -H. -Bbuild -DCMAKE_TOOLCHAIN_FILE=cmake/cross-toolchain-mingw64.cmake'. This is a concrete advantage: you can build Windows binaries without a Windows machine. However, the README does not mention a package manager command to install the dependencies; you must figure that out for your OS. The build output goes into a 'build' directory, and the resulting binaries are 'daemon' and 'daemonded'.

Running the Engine: The .dpk Requirement and Server Startup

Once built, running the engine is not a double-click affair. The README states that you need a 'pkg/' folder full of .dpk files, and this folder must be stored next to the daemon binary. This means you cannot just download the engine and run it; you need game content. For Unvanquished, the README points to the game's download page for ready-to-use packages. For a custom game, you must create your own .dpk files, which is a significant undertaking. To start a dedicated server, you run './daemonded +map <mapname>'. The map name is game-specific, and the README links to the Unvanquished repository for server configuration. This is a clear workflow, but it assumes you have the right .dpk files and know the map names. The engine does not include a built-in map loader or a default map, so the first run will fail if you skip the pkg setup. This is a limitation for evaluation: you cannot quickly test the engine without a game package.

Limitations and Failure Modes

The most obvious limitation is the lack of a recent release. The repository shows 'Recent releases: (none retrieved)', and the README does not mention version numbers. This means you are committing to a moving target on the master branch, which can be risky for production use. The submodule requirement is another failure point: if you forget to run 'git submodule update --init --recursive', the build will fail with confusing errors about missing files in 'libs/crunch/'. The README even includes a warning about this. The dependency list is long, and a missing library like libopusfile will stop the build; there is no bundled dependency manager. Also, the engine is specifically for FPS gameplay. If you need a general 3D engine for other genres, the focus on multiplayer FPS mechanics may be too narrow. The README does not document how to create new game logic or extend the engine, so the learning curve for a new team is steep. Finally, the CI links are present, but the README does not state which platforms are continuously tested; you should verify that your target platform is covered before relying on it.

Alternatives: ioQuake3 and Other FPS Engines

A direct alternative is the ioQuake3 engine, which also focuses on FPS and has a BSD-like license (but actually GPL-2.0). The key difference is that ioQuake3 is a Quake 3 derivative, meaning it has a fixed game design (arena shooters) and uses a different package format (PK3). Daemon uses .dpk, which is more flexible for modern content pipelines, and it is written in C++14, whereas ioQuake3 is C. Another alternative is the id Tech 3 engine, which is the basis for ioQuake3, but it is not actively maintained. If you want a modern FPS engine with a permissive license, Daemon is a rare choice. However, if you need a fully featured engine with a visual editor and scripting, you might look at Godot, but that is a general-purpose engine and not FPS-specific. The comparison here is that Daemon gives you a ready-made multiplayer networking stack and game loop, but you must build the game logic yourself, whereas Godot provides a full editor but you must implement networking from scratch. The README does not mention any scripting language for Daemon, so you likely write game logic in C++ or another compiled language, which is a higher barrier than a scripted engine.

Maintenance and Upgrade Costs

The README does not provide a changelog or upgrade guide, so the maintenance cost is unknown. The project is actively developed, as indicated by the CI pipelines and the IRC channel, but there are no release tags to track. This means you must follow the master branch and accept breaking changes. The submodule approach means that updating the engine requires updating the submodules, which can pull in changes to vendored libraries. The license is BSD-3-Clause, which is permissive, but you should check the license of each dependency; for example, SDL2 is zlib-licensed, but others like libvorbis are BSD-style, so there is no GPL contamination. The README does not mention any commercial licensing or fees, so it is free to use. However, the lack of a formal release process means you cannot rely on semantic versioning; you must pin to a specific commit if you want stability. This is a significant maintenance cost for a production project, as you will need to track upstream changes manually.

Editorial conclusion

Adopt Daemon if you are building a team-based FPS and want a BSD-3-Clause licensed engine with an active community and a proven game (Unvanquished) already running on it. Do not adopt it if you need a general-purpose engine, a stable release cadence, or a quick start without managing submodules and external dependencies. Before committing, verify that your target platform (especially macOS or MSYS2) is covered by the CI pipelines linked in the README, and confirm that the game logic you plan to use is compatible with the .dpk package system. Also check the current state of the submodules, as the engine requires them to be fetched successfully before compilation.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
Community notes

Community notes