Imperator Apps
← Home / Imperator FreeGames

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.

LiveMIT Licensev1.0.0Updated 2026-08-02

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 install

Builds 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.