Releases: rdmrocha/fpkg-cli
Release list
0.6.8
Tracks LibProsperoPkg 0.6.8. Re-run ./fpkg patch after updating.
Builds are now verified properly
Every build already ended with a structural look at the finished file. It now also runs the library's quick verifier: segment ranges, CNT and entry digests, PlayGo layout, the outer superblock ICV, the NAPS layout, inner inode metadata and the SI directory. About a second on a 650 MB package, and a failure fails the build. --no-verify skips both.
This is worth having because the PlayGo map is exactly the thing 0.6.8 fixed, and the official GUI still runs only the structural half after a build — its own quick and full verifiers are manual buttons on the Extract tab. A package either tool calls "verified" today has not had its PlayGo layout checked; now ours has.
Packages built with earlier versions may fail this check. The final PlayGo extent was sized against the wrong base, overrunning the mount image by however far the CNT body ran past 64 KiB — so a package with a full sce_sys is affected and a minimal one is not. fpkg verify <pkg> --quick reports it as PlayGo extents cover 0x… bytes; the package image before CNT requires 0x…. Rebuilding on 0.6.8 fixes it.
Changed defaults
--app-drmnow defaults to standard, following the GUI.--ac-drmnow defaults to entitlement. This also corrects a mistake: the GUI has defaulted add-on content to Entitlement all along, andfpkgshippedfree.--sdk-versionstill defaults to1, but it now also setsrequiredSystemSoftwareVersionto the same version. That is the point of the release — a dump demanding newer firmware than you have is brought down to the SDK you pick. A default build therefore declares firmware 1.00;--sdk-version keepleaves the source's own value untouched.
Also in the library
PlayGo maps now mark only chunk 0 as initially required, so progressive install is actually progressive, and a GP5 that declares chunk_info without any scenario gets a conventional play-mode scenario filled in.
0.6.7-fix1
fpkg 0.6.7-fix1
Fixes one regression in 0.6.7. Re-run ./fpkg patch after updating — this release changes what the patch does.
Container sources failed when an SDK was stamped. 0.6.7 gave --sdk-version a default of 1, which made the library rewrite the .sceversion trailer in every executable on every build. That path opens the original executable by filename, and a .ffpfsc source has no filename to open, so any container holding a .prx, .self, .elf or eboot.bin died with Could not find a part of the path '...ffpfsc:<handle>:/...'. Two further IL patch sites cover it; fpkg patch now reports nine instead of seven. Folder sources were never affected, and neither were containers built with --sdk-version keep.
A container carrying executables and the equivalent folder now produce byte-identical inner files, with the SDK correctly restamped.
fpkg 0.6.7
Tracks LibProsperoPkg 0.6.7.
New commands
fpkg template <pkg> <dir>— export a rebuildable add-on template: the sce_sys inputs plus a.gp5carrying the content id, passcode, entitlement key and PlayGo counts recovered from the package. Data-bearing AC packages only; the payload is not included.fpkg verify <pkg> --quick | --full— the library's own verifiers. Quick checks structure, digests, the outer superblock ICV and the SI directory; full also decodes every block, chunk and inner file. Exits 1 on any issue.fpkg extract <pkg> <dir> --rebuild-source— just the sce_sys inputs a rebuild needs. Never opens the inner filesystem, so it finishes in seconds.
New build options
--app-drm free|standard(default free, matching the official GUI) and--ac-drm free|entitlement. These replace the old param.json rewrite — 0.6.6 added a real build option, sofpkgno longer edits your files to set the DRM type. Note--ac-drm freealso omitslicense.dat/license.infoentirely.--playgo-languages— comma-separated language codes, orall.--no-media-repair— opt out of the PNG repair below.
Corrupt artwork is now repaired
icon0, pic0, pic1 and pic2 .png are validated properly (signature, chunk chain, CRC-32, IEND, no trailing bytes) and any that fail are rebuilt from the matching .dds. Dumps really do ship damaged artwork, and upstream packs a present file unchecked. Its own "restore a missing pic1/pic2" path is Windows-only, so this is done in managed code that works everywhere. A damaged image with no usable .dds stops the build instead of shipping.
Changed
--playgonow accepts 1–255 (was 1–64). The library default moved 64 → 100.--sdk-versionnow defaults to 1, matching the 0.6.7 GUI. Use--sdk-version keepto leave the source's own values alone.- Since 0.6.7 the SDK no longer moves
requiredSystemSoftwareVersionin either direction — upstream decoupled them. - Removed
--retain-param-json; there is nothing left to retain.
Guards upstream dropped
- Zero-length PlayGo chunks. 0.6.4 refused a chunk count the image can't fill; 0.6.6 removed that check and 0.6.7 didn't restore it. With the default now 100, a small source silently gets empty chunks.
fpkgrefuses and tells you what fits. - Exported templates. The default sce_sys sweep would delete a template's licence and PlayGo files, which are deliberate inputs.
fpkgdetects the shape and points you at--retain-sce-sys.