Skip to content

PlayGuard 1.3.0

Latest

Choose a tag to compare

@playguard-release playguard-release released this 24 Oct 07:29
e6d8a98

1.3.0 · 2026-10-24

⬇️ Download playguard.zip (4.1 MB) · the app alone (10.4 MB) · how to install

🚀 78 features · 🐞 43 fixes · ✨ 8 polish · 170 commits since v1.2.0


🌟 Highlights

PlayGuard's biggest release yet: a new look, homebrew on the HOME menu behind the PIN, and settings that apply at once.

  • 🎨 Cadran, a new look:
    Every screen redrawn, tiles first on every tab, dark by default, screens that move (in full on the dock, lighter in hand, or Reduced motion), and Larger text on the whole frame.

  • 🎮 Homebrew on the HOME menu:
    PlayGuard or any homebrew as a forwarder, with its own icon or one from the album's screenshots, and a user chosen at launch, made and edited in Console › Forwarders.

  • 🔐 Behind the PIN:
    A forwarder can ask for the PIN, with hours without it, hours it never opens, a stop once the day's play time is used up and a pause after refused PINs; lock the homebrew menu, and a homebrew starts only from its forwarder.

  • 🔑 PIN and security:
    A setting to pause parental controls while the parent is in PlayGuard (off by default), the PIN before going back to the previous build, and a recovery report a copy can no longer crack.

  • 🌍 Language and theme at once:
    No restart, Chinese included, the focus kept where it was; flags and icons in the pickers.

  • 🧭 Menus reorganised:
    PIN becomes Security, Block all games moves to the Play timer, Today gives extra time in one row and folds the checks that are fine into one pill.

  • 🕒 Console:
    The network clock's measure in words ("12 s ahead"), a sys-patch tile, newer releases in a pill, the real serial number when PRODINFO is blanked, and sys-patch patches left incomplete said.

  • 🌐 A website:
    The guide in every language of the console, and PlayGuard to try in a browser, at playguard.link.

Important

Update the recovery sysmodule from the bell after this release: an older one's proof is no longer accepted. Dark is now the default theme (Preferences › Theme), and Scheduled profile reads Soon until the MQTT bridge.


📜 What changed

Every change in 1.3.0 (129 changes)

🚀 Features

  • activity: the Export chip goes straight to the SD card, the week's QR code is gone (#387) (700146f)
  • clock: the measurement's result in a dialog (#299) (c906613)
  • console: a sys-patch tile beside hekate, with its version and release notes (#311) (de2a7c2)
  • console: forwarders — a pause after refused PINs, hours it never opens, icons from the album, rescue page, backups (#274) (fcbb8fd)
  • console: Game patches asks to set the sigpatches aside in the modal that says what was found (#309) (b4f7efd)
  • console: lock the homebrew menu; a light PIN gate, free hours and tries in the history (#267) (26fb114)
  • console: NRO forwarders, PlayGuard and any homebrew on the HOME menu as games, listed, edited and deleted (#246) (fd07ef0)
  • console: protect a forwarder with the PIN (#263) (3a65c8a)
  • console: the gate's rules in the forwarder, the day's limit, two spans, the week's tries (#290) (6edf5e7)
  • console: the real serial number, read from Atmosphère's PRODINFO backup when blanked (#308) (939d6fe)
  • console: Tools back under System, action tiles on one line with their icon (#354) (18e908b)
  • console: version tiles say a newer release in a pill, not in a cut line (#316) (f017f4c)
  • dev: a console self-test before the hardware checklist; stacked pull requests in CONTRIBUTING (#291) (1984448)
  • diagnostics: what Atmosphère's DNS redirection does with Nintendo's servers, in the session log and the report (#314) (77f4318)
  • forwarders: a forwarder that would not start is said before it is made, and its known causes fixed (#305) (821fc65)
  • forwarders: a protected forwarder's rules as icons in the list (#292) (a8987f9)
  • forwarders: Check the homebrew menu says when it is not locked, and which rescue module is out of date (#318) (44b398f)
  • forwarders: Details edits the rules, ZR for the PIN, the gate's rule icons; the guide in every language (#294) (6f15550)
  • forwarders: launch options, a user chosen at launch, screenshots and video capture (#322) (c92b2c4)
  • forwarders: the forwarders made here in one card, protected or not: their icon's badge says which (#352) (68bf647)
  • forwarders: the gate tries again with Ⓐ once refused, opens faster, and says more (#330) (f11c5fa)
  • forwarders: the icon chosen in a grid of the album's screenshots, with a preview (#302) (591a61d)
  • games: a removal that shows what went: covers floating away, segments, its end, Try again (#377) (249498b)
  • games: removing several games in a dialog, a card when no game has a problem (#327) (9d28064)
  • games: the covers leafed through while games are checked or removed (#368) (7c9fb37)
  • games: the covers right under one short line in Check the installed games (#300) (8a683b5)
  • gate: the forwarders open as PlayGuard does, before the PIN, 2 s by default (#369) (4fee98b)
  • history: a change made by a development build says so, with its commit and pull request (#312) (cdba41b)
  • pin: pausing parental controls when the PIN is entered becomes a setting, off by default (#389) (28167af)
  • play-timer: the bedtime set with the stick, Off and By day in its dialog (#288) (bc09244)
  • prefs: Start on as a grid of the tabs (#306) (066b7e5)
  • profiles: the scheduled profile says Soon, until the MQTT bridge (#386) (265a061)
  • restrictions: a green check, not "Allowed", on the level tiles (#383) (8fa6a82)
  • security: the PIN pauses parental controls while the parent is in PlayGuard (#376) (e4b6fe7)
  • site,web: the documentation and simulator of each release beside main's, and what main has since (#269) (d0ee81f)
  • site,web: the site's roots and fallbacks, and the site and simulator on iOS and Android (#264) (5077acb)
  • start-up: the data folder's migrations run once each, not at every start (#250) (0c1fd65)
  • tabs: reorganise the menus, tiles first on every tab (#334) (4d96171)
  • tools: smoke_all, more resource checks and doc deltas (#254) (1b65e75)
  • tour: a 100-second tour in the Cadran look, the app moving, with music, a teaser and every language (#380) (42ea37a)
  • ui: a lighter footer clock, Console's tools first, extra time in one row, A says which day it ends (#341) (d0a1b7e)
  • ui: a picker's list fades at its foot while more rows follow, as a screen's (#252) (7e2647d)
  • ui: a soft light in its own ink behind each action tile (#362) (f1ca183)
  • ui: Cadran follow-up: dark screenshots and simulator, the child's key alone, wrapped lines without a leading space (#249) (81cf70b)
  • ui: Cadran polished: dark by default, states by their shape, the old look cleaned out (#245) (fd628cd)
  • ui: Cadran, PlayGuard's one look, on every screen (#92) (538a089)
  • ui: clearer Today pills, row badges, week bars and restriction levels (#333) (bac3c8d)
  • ui: every sheet in the Cadran look: sections, icons, switches, value lists (#293) (6fdaec2)
  • ui: flags and icons in the Preferences and network clock pickers (#295) (0203ec5)
  • ui: History in Preferences, a rail of eight; the controller's keys and the Cadran pieces written down (#279) (6e60893)
  • ui: language at once in every case, the focus kept, the week stepping by the hour (#260) (dfb2129)
  • ui: Larger text reaches the rail, the header and the footer (#361) (89cc23f)
  • ui: one progress dialog body, cadran::progress_body: the data check and the build download (#286) (f3849c1)
  • ui: PIN and Console say their state in one line at the top (#289) (8556c33)
  • ui: read-only said and undone, errors with a next step, plainer words, the header's keys shown (#349) (dddcf73)
  • ui: the footer shows − and Ⓨ again, left out when a screen needs the room (#365) (90a9053)
  • ui: the loading screen in the light theme's colours when it is chosen (#283) (3976b0d)
  • ui: the look in motion, full by default on the battery too, with a Reduced motion setting (#375) (5286a89)
  • ui: the screens left out of Cadran on its pieces: release notes, a build's page, empty lists, the start screens' lines (#278) (3362da7)
  • ui: the status tiles' icons in the action tiles' inks, one per tile in turn (#384) (854e000)
  • ui: theme and language without a restart, bedtime countdown, hold to step by the hour (#256) (8e29b22)
  • ui: visual effects automatic by default, in full on the dock and lighter in hand (#392) (238d96d)
  • ui: where a screen was opened from, Help in sections, one kicker (#280) (2eb783d)
  • updates: installed from the Homebrew App Store, updated through it, unless its catalogue is behind (#272) (8ab5925)
  • upload: the sent report's dialog says which code to scan, its link once (#298) (5a0c121)
  • web: a console that lives on: its time played counted and kept, a line under the screen, time servers that answer (#287) (44dd1cb)
  • web: dark screenshots, a changelog page and Atom feed, documentation search, and a preview image, tour video and 404 page in every language (#233) (6946034)
  • web: install in two tabs, the release's date to its notes, the simulator's size on its buttons, its tools behind a button on a phone, and data saver asked first (#247) (bba0e9c)
  • web: PlayGuard's website and its simulator in a browser, on GitHub Pages (#226) (80d9068)
  • web: screenshots in each language, questions and answers, and a site for search engines and AI assistants (#230) (8e2ae8b)
  • web: steps links, a tour, a report button, the simulator offline, screens compared with main (#229) (b18cc7e)
  • web: the documentation's screenshots in the page's theme, its search through the questions and the changelog, and a share sheet in the simulator (#248) (3a583ab)
  • web: the simulator in the website's look and on a phone: its header, no zoom into its fields, the pad under the screen or beside it in landscape (#243) (43278ea)
  • web: the simulator on a phone: full screen, home screen in landscape, splash screens, the tour awake (#268) (d514d18)
  • web: the simulator tested in a browser, the time moved on, live settings and a kept state (#228) (0a7acab)
  • web: the simulator versioned as the documentation, simulator/dev/ for main (#270) (daad239)
  • web: the site's layout checked on a phone in CI, an iPhone home-screen icon, "Locked out?" on the home page, a firmware check, copy buttons and a printable documentation (#242) (e31b718)
  • web: the website on a phone, screenshots larger over the page, install first, PlayGuard beside Nintendo's app, and each section a link away (#237) (0ddde1f)

🐞 Bug Fixes

  • activity: the game names and icons kept whole between threads, the gate's log kept until it is in the history (#339) (7579c95)
  • branding: the store icon's name clear of its dial (#273) (0852782)
  • ci: Emscripten's cache kept between web runs, and the site's address in https when Pages enforces it (#231) (6365234)
  • console: a sys-patch pattern meant for this firmware left unpatched is no longer hidden (#301) (887c2ba)
  • console: forwarder icons on every console language, no EXIF or progressive icon (#257) (943cf7c)
  • console: the Console and PIN tabs open on their tiles, without a headline over them (#307) (cf745ed)
  • console: the serial number found again in PRODINFO backups (#348) (d634a0f)
  • dev-build: Install another build's bar in the header, its note at the foot (#355) (975bf97)
  • dev: clearer build list and download window in Install another build (#329) (a79df0a)
  • forwarders: a protected forwarder starts its gate, no longer closing at once (#323) (95e1644)
  • forwarders: after the PIN, a protected forwarder starts its homebrew, no longer stuck on the gate's screen (#326) (4fb5d89)
  • forwarders: ForceDebug set in the ACID too, so Atmosphère 1.8.0+ starts them (#320) (e4ce858)
  • forwarders: making several forwarders shows its progress, one a frame, instead of freezing the screen (#342) (494d727)
  • forwarders: the loader refresh dialog reads clearly, and a forwarder made again leaves the bell (#325) (de3c3e2)
  • forwarders: the PIN no longer skipped by moving the clock, through a store, or by making a forwarder again (#336) (e17875c)
  • forwarders: the remake dialog joins the names to what follows (#366) (c916243)
  • games: one game said in the singular, no "A on a game" nor Ⓡ with none listed (#335) (4877a9c)
  • gate: every gate screen laid out as the opening, in PlayGuard's language and theme (#390) (40e6736)
  • header: the version badge is level with the title (#315) (676e137)
  • i18n: translations read safely from the background threads (#359) (03c388b)
  • pin: the PIN tab no longer offers to turn parental controls back on, and Today's button is amber (#310) (8eeb1cb)
  • play-timer: the child screen says time's up past the limit, one ring rule for every screen (#346) (37207ee)
  • play-timer: the week's summary fits beside its buttons, no longer cut (#385) (45397fe)
  • security: the open code scanning alerts on main (#321) (71836dd)
  • security: the PIN before a rollback, a recovery proof no copy can crack, a gate no clock can fool (#347) (80f7fba)
  • site: the website's screenshots taken again in the dark theme, Console and its Network clock the right screens (#393) (19ad06e)
  • sys-notes: the release notes' bar in the header, at its right (#363) (2cdc2bf)
  • today: started from its HOME icon, PlayGuard no longer says "opened from a game" (#373) (d388dc4)
  • today: with Larger text, the buttons and card heads keep Today on one screen (#370) (0e6f248)
  • ui: a frame with many draws no longer crashes PlayGuard on the console (#296) (631ce4a)
  • ui: About › Help & diagnostics no longer opens blank, its icons only (#382) (3356975)
  • ui: Console › Forwarders' cards no longer stay nearly clear (#391) (48d5431)
  • ui: dialogs in the colour of what they do, failures as failures, refusals as refusals (#275) (88c889b)
  • ui: hidden footers not refitted each frame; the pill race in the smoke test (#258) (c231a51)
  • ui: Install another build and the History no longer crash when their list is filled again (#394) (971a8f1)
  • ui: no empty band inside or between the lists' cards (#317) (1d57bed)
  • ui: the header's pill alone says parental controls are unlocked (#313) (46a139d)
  • ui: the header's pill of the tab shown, not of the one it replaced (#251) (9093a0e)
  • ui: the quick settings' list (Language, theme and text size) with its icons (#388) (ff509d5)
  • ui: the rail's text no longer flashes at each change of tab (#324) (994356c)
  • web: a step's button tapped, not held, so a busy page cannot repeat it (#240) (42c3f74)
  • web: no fsync in the simulator, which could freeze it when a change needed the unlock (#235) (372a4a1)
  • web: only this repository's builds on the site, a Content-Security-Policy, Sora served with the site, emsdk pinned (#227) (3053604)

✨ Polish

  • build: the build's identity on two files, a precompiled header on the desktop, runtime packages for the shards (#344) (21d7978)
  • games: the game check in three files: the list, the actions, the pieces they share (#284) (6bd3a64)
  • logic: the clock, Activity and forwarder logic out of the screens, with tests; no more copies (#350) (9e54190)
  • sim: the simulated console split by service, behind a lock, its games in one table, its variables read alike (#239) (09e2e78)
  • ui: late callbacks guarded, one update check per session, layers checked by CI (#351) (6f725bf)
  • ui: one colour API, the theme's; corners and type sizes as tokens (#277) (95e675c)
  • ui: structured dialogs and errors, one palette, Today split (#255) (80d9934)
  • ui: the hand-made dialogs on the Cadran pieces: a QR card, a wait, a bar, the display face (#276) (29f051d)
🛠️ For contributors: build, tests, docs (26 changes)

🧰 Other

  • cmake: warn on shadowed names, and none left (#360) (5225ba5)
  • packaging: the Homebrew App Store listing, written for each build and checked by the store's own tool (#271) (2e4cbc3)

🧪 Tests

  • sim: the time left read at the frozen Wednesday, not the host's clock (#319) (1c0f8c4)
  • smoke: still footer hints, targeted reference updates, doc lag warnings, bedtime and dialog coverage (#261) (ec08266)
  • smoke: the larger text on Console, Preferences, About and Help too (#282) (c19f601)
  • ui: the palettes' contrast checked, both themes (#281) (c2a3c53)
  • visual: the references are main's own screens, kept by CI; a pull request announces the screens it changes (#371) (2a0d612)

📚 Documentation

  • contributing: main wants pull requests up to date, not a merge queue (#343) (4e6fe1e)
  • contributing: one page per subject under docs/contributing/, the test suites grouped by area (#374) (5671ee4)
  • guide: a getting-started page, the features in sections, the common problems, in the console's 15 languages (#253) (b1e67c0)
  • guide: every translation caught up with the English pages, the roadmap with what shipped (#332) (e9d0378)
  • guide: every translation caught up with the security and wording changes (#357) (f30f1ce)
  • guide: every translation of the features page caught up with the English one (#378) (b4ae136)
  • guide: the 12 other translations caught up with the reorganised tabs, the last strings in English translated (#340) (c03a828)
  • guide: the boards in every language (#236) (f92a13f)
  • guide: the guide caught up with the app, the README's screenshots and tour taken again (#379) (44406cf)
  • guide: the guide's translations caught up with English, the scheduled profile and the PIN's pause in every language (#395) (7397496)
  • guide: the reorganised menus everywhere, the features page in every language, one name per thing (#345) (4e4f5d8)
  • guide: the user guide in every language of the console, with stale translations flagged and the site's links checked (#232) (fd61173)
  • pin: a restart of the console locks a temporary unlock again (#224) (446d2fa)
  • PlayGuard is in the Homebrew App Store and sphaira, in every language (#398) (6b21bc1)
  • PlayGuard is not in the Homebrew App Store yet, install it by hand (#328) (8a86a07)
  • readme: a cleaner README that reads well on a phone (#331) (21733c7)
  • readme: one short README in English; the documentation read on the website (#285) (70e402c)
  • release-notes: the 1.3.0 summary, from every pull request since 1.2.0 (#396) (0249826)
  • web: the website and the simulator at https://playguard.link (#244) (75f7bd9)

📦 Install

  1. New install: download playguard.zip (4.1 MB) and extract it to the root of the SD card.
    The app lands in sd:/switch/playguard/, its files in sd:/config/playguard/.

  2. Already installed? Update from PlayGuard itself (About › Update), sphaira or the Homebrew App Store. The app alone: playguard.nro (10.4 MB).

  3. Locked out? playguard-rescue.zip (78 KB) is the optional recovery sysmodule, for a forgotten PIN.

Note

Requires custom firmware (Atmosphère). Checked on firmware 21.0.0 → 23.0.1. Compatibility

🔍 Build

Build report (size, tests, coverage, screenshots, toolchain) · SHA256SUMS.txt · provenance: gh attestation verify playguard.nro -R JigSawFr/PlayGuard

Contributors: @JigSawFr