Skip to content

PlayGuard 1.2.0

Latest

Choose a tag to compare

@playguard-release playguard-release released this 18 Oct 19:07
b99c65a

1.2.0 · 2026-10-18

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

🚀 39 features · 🐞 14 fixes · ✨ 16 polish · 78 commits since v1.1.0


🌟 Highlights

This release is about knowing what needs your attention and finding things faster: a notification bell, a reorganised layout, and a new check of the installed games. It also brings a richer Activity screen and a fuller change history.

  • 🔔 Notification bell:
    One place for what needs the parent, such as a weak PIN, PlayGuard left open without one, backups, SD-card space, an out-of-date recovery sysmodule or a newer Atmosphère, hekate or firmware. Y opens it, you can ignore a warning or mark everything read, and badges on tabs and rows lead to what to fix. The recovery sysmodule updates from the bell.

  • 🧭 New layout:
    Console, History and PIN tabs replace Tools and Network clock. Each setting sits next to the feature it shapes, and Advanced has a screen of its own. The header shows the version, and the language and theme change with a tap or −.

  • 📊 Activity:
    All games has its own screen, as covers or a list. The screen opens on the last account shown or on a default one. Long play times read in whole hours, and the all-time average is shown over months or years.

  • 🔍 Check the installed games:
    Finds games with broken data, explains the cause and the fix, and repairs them. It remembers its results, keeps a To check section, and

Important

Summary written automatically.


📜 What changed

Every change in 1.2.0 (69 changes)

🚀 Features

  • about: PlayGuard's release notes on the same screen as Atmosphère's and hekate's (#211) (6a368b4)
  • about: the release notes on the Version row, Ⓐ and a chevron, not a row of their own (#220) (98ca7da)
  • about: the release notes on their own screen, laid out as in "What's new" (#217) (be36404)
  • activity: a grey controller on a game's cover until its icon arrives (#214) (ae4628c)
  • activity: All games on a screen of its own, as covers or a list (#201) (1c7a4c8)
  • activity: drop the games to rediscover (#209) (6d03162)
  • activity: play time over 100 h in whole hours, the all-time average over months or years (#195) (69591f3)
  • activity: start on the account shown last, or on a default one (#198) (5f88b3b)
  • compat: firmware 23.0.1 verified on a console (#167) (a3f8802)
  • console: the Console tab's notes icons on their rows, their text a press away (#216) (3b98efb)
  • dev-builds: a clearer build page, GitHub's Markdown, text from GitHub made safe (#149) (0f325f3)
  • dev-builds: a page per build, a loading bar, Find a build, resumed downloads (#147) (44239ec)
  • dev-builds: each build on two lines with tags, Y to search (#150) (4f7d8bf)
  • dev-builds: go back to the previous build, even when the new one crashes (#148) (a116ddf)
  • dev-builds: the first tab lists the repository's releases, not just the latest (#145) (e7eacd3)
  • games: the data check remembered, a To check section, games picked for one action (#166) (ea59309)
  • games: the Reinstall actions as buttons above the list, and the list sent to a gist (#163) (a04395b)
  • games: Tools › Check the installed games: the cause, the fix and the repairs (#69) (bb35936)
  • header: the language and the theme in the main screen's header, a tap or − to change them (#189) (4964e7a)
  • header: the version in a tag next to the title, the bell, language and theme at the right (#221) (7b4f601)
  • history: refused changes, the countdown, day groups, a filter and an export (#159) (fd00eef)
  • logs: a log file per run, PlayGuard's own CPU crashes with their backtrace, a fuller report (#157) (cdbe871)
  • notices: a notification bell gathers what needs the parent, Y opens it (#155) (97be4df)
  • notices: a weak PIN, PlayGuard open without it, backups, SD space, the week, and kinds to turn off (#158) (0338592)
  • notices: ignore a warning to do from the bell, mark everything read (#188) (fe4a5b2)
  • notices: the bell counts the parental controls, the Console tab the console, in a fixed order (#179) (ff92739)
  • notices: the recovery sysmodule out of date, newer Atmosphère, hekate and firmware (#156) (7a386cf)
  • pin: the PIN entered once holds until PlayGuard closes, asking again after 5 minutes a switch away (#186) (e307f09)
  • play-timer: the week chart opens the per-day editor, one save for several days (#180) (9b9430a)
  • rescue: update an out-of-date recovery sysmodule from the notification bell (#164) (88a2c4f)
  • rollback: the previous build offered only after a start that did not finish, not with L + R (#218) (ea80f11)
  • tools: release notes of Atmosphère, hekate and the firmware (#165) (ddc8ca8)
  • ui: a badge on each tab with something to do (#199) (e23c2ef)
  • ui: a Console tab and a History tab in place of Tools and Network clock (#178) (36c19b5)
  • ui: an open padlock and a crossed-out pencil by the title, a tap goes where they are undone (#212) (ab8a14e)
  • ui: each setting next to the feature it shapes, Advanced on a screen of its own (#176) (c7a01bb)
  • ui: one meaning per word for the locks, a PIN tab, a chevron on lines that open a screen (#170) (6cc0166)
  • ui: the badge on the row to fix, and the tab opens on it (#202) (a494fd2)
  • ui: the installed games to check as covers, and All games' chevron (#213) (34b57c8)

🐞 Bug Fixes

  • app: the findings of the second review of main (#185) (1dee8b6)
  • console: a Diagnostics header above the network clock and the game check (#197) (a987107)
  • dev-builds: no error page in a resumed download, requests side by side, a cut install recovered, a digest required (#173) (263e2ae)
  • diagnostic: the memory PlayGuard allocated, developer mode logged, the free-communication list one ID per line (#222) (26463a1)
  • games: one scan of the installed games at a time, stopped on exit, and the same names as Activity (#171) (475240b)
  • i18n: a build without a checksum said to be refused, the public-report notice translated (#181) (c457964)
  • markdown: runs of <, & and <scripted are read once, not once per character (#154) (b6c7561)
  • play-timer: extra time comes back by itself the next day, no "Keep" to dismiss it with (#182) (fb1f49d)
  • play-timer: no PIN, no silent "not applied"; three pctl codes named (#151) (8c271f6)
  • rescue: the recovery report proven by the sysmodule, and other security fixes (#175) (7fbf87a)
  • security: "Lock and quit" closes the game PlayGuard runs over (#146) (fc60f5f)
  • sys-notes: older versions in the tabs left, so an up-to-date console can browse its notes (#196) (e01aed8)
  • ui: the focus kept on the screen after a dialog whose opener went (#169) (f84c157)
  • ui: the footer clock on one line, the hints whole on the Switch (#200) (db00d83)

✨ Polish

  • activity: the games' icons decoded off the UI thread (#210) (47a7895)
  • ci: shorter smoke-test pauses, cached packages, and the slow screens' timings in the diagnostic report (#206) (9b88467)
  • ci: the smoke test in balanced shards, faster scrolls to a list's end, and no relayout for an unchanged text (#203) (2353adb)
  • core: pctl, the recovery sysmodule, the simulator and playstats share what they repeated (#190) (f39766c)
  • games: the name and icon of each game read from ns' cache first (#168) (f107fae)
  • i18n: borealis' string lookup without an exception per string in English (#207) (bd93f24)
  • prefs: Preferences only sets the app up, About holds its updates and help (#187) (f827f98)
  • startup: the start-up's SD-card looks before the preferences halved, and each one timed (#215) (e9c1f1b)
  • tests: shared test helpers, default suite flags, markdown::parse in steps (#191) (358a223)
  • ui: borealis lays out only what changed, and registers a view's XML attributes only when read (#208) (69e2cae)
  • ui: shared console actions, the game check's rules under test, smaller notices and main() (#193) (97887fb)
  • ui: the change history and All games laid out once, and ccache caches the size of one build (#205) (a10465e)
  • ui: the UI thread kept off the SD card: logs in batches, files read in part, config.json first (#172) (ac248cd)
  • util: shared date, text, UTF-8, emoji and JSON helpers; dead code out; core headers extern "C" (#177) (d1005c4)
  • util: the remaining copies on the shared helpers; the game check's rules and the Activity export out of their screens (#183) (8d00e08)
  • util: the remaining hand-written copies on the shared helpers; the GitHub API's URLs and its 401 handled once (#192) (276e5fa)
🛠️ For contributors: tests, docs (5 changes)

🧪 Tests

  • fuzz: resource checks for binds, layouts, images and config keys, new suites and seven fuzz targets (#174) (7d76ecc)
  • smoke: the notices' ignored screen taken once the list scrolled from its settled layout (#194) (56503fd)

📚 Documentation

  • readme: the docs, screenshots and video tour of the current tabs (#184) (8f1cba4)
  • readme: the release badge read from the release-please manifest, not the GitHub API (#219) (bac4c15)
  • readme: the screenshots and video tour of 1.2.0 (#204) (0d4da46)

📦 Install

  1. New install: download playguard.zip (2.9 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 (7.4 MB).

  3. Locked out? playguard-rescue.zip (72 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