-
Notifications
You must be signed in to change notification settings - Fork 8
Hosting a Package Repository
This page is a practical guide for pack authors who want to publish their EmoTracker packs to other users — by hosting their own package repository, testing it locally, and (optionally) getting it listed in the official community repository list that ships with EmoTracker.
If you only want to install packs, use the in-app Package Manager instead.
Looking for the deeper backend internals (
supported_games.json, the communitypackage_repositories.json, client cache policies, etc.)? See Service Backend Reference.
A package repository is just a single static file — repository.json — served over HTTPS, plus the pack .zip files it points at. EmoTracker downloads that JSON, lists each pack it describes in the Package Manager, and downloads the linked zip when the user clicks Install.
You do not need to run a server, an API, or any backend code. Anything that can serve static files over HTTPS works:
-
GitHub Pages — most community repositories use this. Create a repo, enable Pages, commit
repository.jsonand your.zipfiles. Done. -
Raw GitHub URLs — point at
https://raw.githubusercontent.com/<user>/<repo>/<branch>/repository.jsondirectly, with no Pages setup. - Your own web server — any static HTTPS host works.
The minimum filesystem layout for a third-party repository is:
your-host/
├── repository.json
└── your_pack.zip # Or hosted anywhere else reachable by URL
Author your pack as usual and produce a .zip. Decide on its uid before you publish — this is the identity the client uses forever, so pick something specific and namespaced.
A good convention is <game>_<feature>_<author>, e.g. alttpr_keysanity_yourname. Avoid generic IDs like tracker or pack — uid collisions across repositories will cause one pack to overwrite another on install.
This is the file every host serves. It lists the repository's display name and one entry per pack.
{
"name": "My Tracker Packs",
"packages": [
{
"name": "My Cool Pack",
"game_name": "A Link to the Past Randomizer",
"version": "1.0.0",
"uid": "alttpr_my_cool_pack_yourname",
"link": "https://example.com/packs/my_cool_pack.zip"
}
]
}That's enough to make a pack appear in EmoTracker. Everything below is optional.
-
name(root) — Display name of your repository, shown as a section header in the Package Manager. -
packages— Array of pack entries. -
name(entry) — Pack display name. Required — entries without one are silently dropped. -
author— Defaults to"Unknown"if omitted. -
game_name— Should match a top-level key insupported_games.json. If your game isn't there, see Adding a new game. -
version— Parsed withSystem.Version.TryParse, so it must look likeMajor.Minor[.Build[.Revision]](e.g.1.0,1.0.7.14). The entry is dropped entirely if this is missing or invalid — this is the most common reason a new pack fails to appear. -
required_app_version— Same format. If the user's installed EmoTracker is older than this, the Package Manager shows the pack but blocks installation until they update. -
uid— Unique pack identifier. Required, used as the local install filename (<uid>.zip). Must be unique across all repositories the user has loaded. -
link— Direct download URL for the pack.zip. Required. -
documentation_url— Optional link surfaced in the UI for users who want to read pack docs. -
flags— Array of capability strings (case-insensitive). Recognized values:-
Map— pack provides a map tracker -
Pins— pack supports map pins -
ChatHUD— pack supports the chat HUD overlay -
AutoTracker— pack includes an autotracker script -
Unsafe— pack does things the user should be warned about -
Official,Featured— privileged, see below
-
-
variants— Optional list of pre-configured variants the pack ships with. Each variant has its ownnameandflags.
About
OfficialandFeatured: These flags are stripped by the client unless the pack'slinkURL contains the configuredservice_base_url. You can't mark your own third-party pack as Official or Featured — those badges are reserved for packs hosted on the community service.
Pick a static HTTPS host and upload repository.json plus your .zip files (or host the zips elsewhere — link can point anywhere). Common options:
| Option | When to pick it |
|---|---|
| GitHub Pages | You already use GitHub and want a clean URL like https://yourname.github.io/your-repo/repository.json. Most community repositories use this. |
| Raw GitHub | You don't want to enable Pages — https://raw.githubusercontent.com/<user>/<repo>/<branch>/repository.json works just as well. |
| Your own server | You already host a static site and want to keep everything in one place. |
The client uses standard HTTPS GETs and bypasses caches, so any reachable static host is fine.
Before sharing it, verify the repository loads correctly in your own EmoTracker install:
- Open EmoTracker's
application_settings.jsonin~/Documents/EmoTracker. - Find the
package_repositoriesarray. - Add the URL to your
repository.jsonto the array, ex."package_repositories": ["http://myawesome.package/repository.json"]. - Reload the package list from the Package Manager.
Your repository should appear with its display name and your pack should be listable, installable, and (after install) loadable. If anything is missing, walk through this checklist:
| Symptom | Likely cause |
|---|---|
| Repository doesn't appear at all | URL is wrong, returns 404, or the host is serving HTML instead of JSON. Open the URL in a browser to confirm you see raw JSON. |
| Repository loads but a pack is missing | The pack entry is missing one of the required fields (name, uid, link) or version isn't a valid System.Version (v1.0 → no, 1.0 → yes). |
| Pack appears but install fails |
link points at a missing or non-zip file, or the host is rate-limiting downloads. |
| Pack installs but can't read game memory (autotracker) | The relevant region isn't covered by memory_watch_config.memory_range_whitelist for that game in supported_games.json. This is enforced client-side and is the responsibility of the service, not your pack — see Service Backend Reference → supported_games.json. |
| Two packs collide on install | Their uid values match. Pick a unique uid. |
Official / Featured badges don't show |
Expected — these are reserved for the official service URL. |
Once everything works in your own client, you can share the URL and users can add it as an Additional Repository themselves with no further setup required.
If you want your repository to appear in every EmoTracker install by default — without users needing to paste a URL — submit it to the community-curated list.
- Fork
EmoTracker-Community/EmoTracker-Service. - Edit
service/package_repositories.json. - Add a new key/value pair: a short, recognizable display name → the URL of your
repository.json. Example:"yourname.github.io": "https://yourname.github.io/your-repo/repository.json"
- Open a PR. Once it's merged, every EmoTracker client picks up the new repository on its next startup.
You can read more about how this list is consumed in Service Backend Reference → package_repositories.json.
-
Service Backend Reference — full reference for the EmoTracker service backend, including
supported_games.json,package_repositories.json, and how the client loads each file.
- Installation
- Installing and Loading Packages
- Item Types and Mouse Controls
- Map Locations
- Map Location Colors
- Saving and Loading
- Multi-Tab and Window
- Autotracking
- NDI Broadcasting
- Twitch Chat HUD
- Note Taking
- Voice Control
- Keyboard Shortcuts
{ "name": "<pack display name>", // required "author": "<author>", // optional, defaults to "Unknown" "game_name": "<key from supported_games>", "version": "1.0.7.14", // required, System.Version format "required_app_version": "2.3.8.8", // optional, System.Version format "uid": "unique_pack_identifier", // required "link": "https://.../pack.zip", // required "documentation_url": "https://...", // optional "flags": [ "map", "pins", "chathud", "autotracker" ], "variants": [ { "name": "Item Tracker", "flags": [ "chathud", "autotracker" ] }, { "name": "Standard Map Tracker", "flags": [ "map", "pins", "chathud", "autotracker" ] } ] }