Skip to content


Switch branches/tags


Failed to load latest commit information.


An online database of 3DS and DS homebrew



Supported sites for automatic data collection

These sites are the preferred places to host your downloads as Universal-DB can automatically fetch most of the info about it. More sites can be added provided they have sufficient info about it and are easy enough to get that info from, prefereably having some kind of API for it.

Using the data

As Universal-DB is hosted by GitHub pages we're not able to have a proper API, but you can use docs/data/full.json to get all the data we collect from the GitHub API and such all in one place or LightSage's UDB-API for an unofficial proper API. If using full.json, it can be accessed from Please make an issue here or ask on our Discord server if you would like anything to be added to full.json, if possible we will try add it.

It would be nice if you credit us if you use our data, just a link to this repo or the official website with something like "Data from Universal-DB" or so would be fine.

Running the data collection

Universal-DB is updated automatically every hour / 6 hours (depending on the app's priority) using GitHub Actions, however if you would like to run the data collection and file generation yourself then you will need to:

  1. Install tex3ds using devkitPro's pacman
    • This is needed to generate the t3x files for the Universal-Updater's UniStore
  2. Install a recent version of Python 3
  3. Open a terminal window in the source folder of this repository
  4. Run pip3 -r requirements.txt to install the needed Python libraries
  5. Run ./
    • You can pass a GitHub API token as the first argument to expand your API rate limit, this is needed with the default source.json
    • You can pass priority as the second argument to only update apps with "priority": true

source/source.json is where the base data comes from, all apps should have a github (user/repo string), systems (string array), categories (string array), image (url string), and icon (url string). If the app isn't on GitHub then you will need to fill out most of the other information too. Some info can be pulled from the Bitbucket API too, but it's a bit more complicated than GitHub, look for examples in the current source.json. If priority is true then the app will be checked hourly by actions instead of every 6 hours, technically everything could be done hourly but due to the amount of apps that rarely update it's done every 6 to reduce spam on GitHub's API. All info in full.json can override the GitHub API by specifying it in source.json, for example if you want an app title to have a space instead of a hyphen.

Running will generate the following files:

  • A markdown file for each 3DS app in docs/_3ds
  • A markdown file for each DS app in docs/_ds
  • docs/data/full.json, a JSON with all collected info
  • docs/unistore/universal-db.unistore, a UniStore format file for Universal-Updater
  • docs/unistore/universal-db.t3x, a t3x format spritesheet for Universal-Updater

Running the site locally

All of the website files are stored in the docs folder. To test the site locally, install Jekyll by running:

gem install bundler jekyll

Then run

bundle install

Then you can run the site by running this in the docs folder:

bundle exec jekyll serve


  • Pk11: Most website design and data collection code
  • devkitPro: tex3ds


Universal-DB - An online database of 3DS and DS homebrew