Imperator FreeGames
Polls a feed of games that are currently free to keep, notifies you when a new one shows up, and lists them all in a popover.
README.md
// Overview
A macOS menu bar watcher for game giveaways. It polls a public feed of games that are currently free to keep on Steam, Epic and GOG, notifies you when a new one shows up, and lists them all in a popover.
A SwiftPM executable with no dependencies. LSUIElement is true, so there is no
Dock icon and no menu — the status item is the entire interface.
// Requirements
macOS 13 or later on Apple silicon. Built and tested on macOS 26 only; older versions are expected to work but have not been verified.
The app is not notarized and carries no Apple Developer signature, so macOS cannot vouch for it. Install at your own risk — provided as is, no warranty, under the MIT license.
// Install
Download the latest zip from the releases page, unzip, and move
Imperator FreeGames.app to /Applications.
Gatekeeper blocks the first launch. Right-click the app and choose Open, or clear the quarantine flag:
xattr -dr com.apple.quarantine "/Applications/Imperator FreeGames.app"// Permissions
No Accessibility, Input Monitoring or Automation grants. The app declares no
NSUsage keys and reads nothing on your machine.
Notifications are asked for on first launch through
UNUserNotificationCenter. Decline and everything still works — you lose the
alerts and keep the badge dot.
Open at Login is the footer toggle, which calls
SMAppService.mainApp.register() to add the app to Login Items. Turning it off
unregisters it.
Network access is one outbound HTTPS request every 30 minutes, to a static JSON feed. Nothing is sent: no identifiers, no telemetry, no account. Clicking a game opens its store page in your browser.
// Use
Click the menu bar icon to open the popover. Games are grouped by platform with a count per section, and each row carries the title, the price it was before the giveaway, the release year, the developer and a short description. Click a row to open the store page.
A red dot on the menu bar icon means something new arrived since you last looked. Opening the popover clears it, and the new titles keep a red NEW pill until then.
The footer holds Open at Login, Open Website, About and Quit. The refresh arrow in the header forces a fetch rather than waiting for the next 30-minute tick.
State lives in
~/Library/Application Support/Imperator FreeGames/state.json — the IDs already
seen, capped at the 50 most recent per platform. The first fetch after a fresh
install seeds that list silently, so installing the app does not fire a
notification for every game already on offer.
// Build
make installBuilds release, bundles, codesigns, installs to /Applications and launches.
make run and make clean are the other targets.
Signing uses the self-signed Imperator Dev identity. Ad-hoc signing mints a
new code hash on every build, which drops the login item registration on update
— fine for local iteration, wrong for a release.
// Implementation note
SwiftPM does not compile asset catalogs, so the popover and menu bar icons are
inline SVG strings decoded through NSImage(data:) with isTemplate = true,
which lets them follow the system appearance.