EMU-nexus is a front-end designed to launch emulators and to organize ROM collections. It is developed in C++ and it uses GTK3 as graphical user interface. It does not try to compete with any other front-end. It is not designed for an HTPC, it is intended to be used in an everyday not specific purpose PC. It is distributed under the GPLv3 license.
Information and images of the consoles, systems and games comes from TheGamesDB. To avoid stress on TheGamesDB servers, a concise version of the database is processed in the cloud. This concise version is updated regularly and downloaded automatically.
This database is stored and indexed using Elasticsearch so it can be easily searchable. When EMU-nexus is launched, it starts the Elasticsearch process in the background (listens in the port 9301). The Apache 2.0 licensed version of Elasticseach is used.
EMU-nexus scans specific directories and matches files with entries in the database, if a match is found, it pulls the correct name, description, publishers, developers, release date, ESRB rating and images. You can also add ROM collections that use MAME filenames. If you already have sets of images downloaded, EMU-nexus can use those instead of downloading new ones. Optionally, you can add PDF documents, other images and text notes to your games.
ROM files could be uncompressed on the go. The uncompressed files are stored in cache so they can be used directly next time. Tar, Tar.gz, Zip and 7zip formats are supported.
For multidisk games, if multiple .cue files are present in a compressed ROM, a 00000_autogenerated.m3u file with all the .cue files referenced in order is generated. So those games can be easily launched using emulators like Retroarch with the Beetle Saturn core.
EMU-nexus stores all its data in $HOME/.config/emu-nexus/. Inside this directory, you will find the next items:
- cache/ Uncompressed ROMs are stored here. By default has a max limit of 9GB. When this limit is reached, the oldest files are deleted.
- elasticseach/ Contains the Elasticsearch binary and TheGamesDB concise database.
- media/ Contains the images and documents of your ROM collection.
- emu-nexus.sqlite SQLite database containing the data of your collection.
These are the libraries on which EMU-nexus was built on:
- Jansson Library for encoding, decoding and manipulating JSON data. It is used to process the Elasticseach responses.
- SQLite SQL database engine. Used for managing your collection data.
- cURL Free and easy-to-use client-side URL transfer library. Used for making HTTP requests. A libcurl version with SSL support is required (libcurl4-openssl-dev, libcurl-nss-dev or libcurl4-gnutls-dev).
- pthread (POSIX thread) Set of interfaces (functions, header files) for threaded programming. EMU-nexus uses multiple threads to smooth its performance.
- libxml2 XML C parser and toolkit developed for the Gnome project. Used to process MAME response data when processing ROMs that use MAME filenames.
- Dlib Modern C++ toolkit containing machine learning algorithms and tools for creating complex software in C++ to solve real world problems. EMU-nexus only uses a small set of Dlib to create thumbnails of the platforms and games artwork.
- Poppler PDF rendering library based on the xpdf-3.0 code base. Used for creating the thumbnails of game documents.
- libarchive Multi-format archive and compression library. Used to uncompress ROM files on the go.
- GTK+ 3 Multi-platform toolkit for creating graphical user interfaces.
Few custom styles are used, the appearance relies on the system theme. The screenshots presented here are using the Gnome Adwaita-dark theme.
The icon is based in the work of Pixel perfect. NES cartridge image comes from Wikipedia.
Install the required libraries:
sudo apt install libgtk-3-dev libsqlite3-dev libjansson-dev libcurl4-gnutls-dev libxml2-dev libdlib-dev libarchive-dev libpoppler-cpp-dev
Download the source code or clone the repository and run these commands:
cd <EMU-nexus source code directory>
make
sudo make install