Development
Branches
| Branch | Purpose |
|---|---|
main |
Stable releases only. Merging from dev triggers a release if major or minor version increased. |
dev |
Active development. Every push auto-increments the patch version and publishes a rolling pre-release. |
Work on dev, merge to main when ready to release.
Setup
No build step — this is a PowerShell script extension. To test changes live:
- Clone the repo
- Copy or symlink
PlayniteSunrise.psm1to:%AppData%\Playnite\Extensions\SunshineAppExport\SunshineAppExport.psm1 - Restart Playnite to reload the extension
Important: The file must be saved as UTF-8 with BOM. Non-ASCII characters in string literals (em dashes, arrows, etc.) will cause a parse failure and silently prevent the extension from loading.
Releasing
- On
dev, bump the minor version inextension.yaml(e.g.0.1.x→0.2.0) and updateinstaller_manifest.yamlwith the new version andPackageUrl - Push to
dev— CI will auto-increment the patch and publish a pre-release for final testing - Merge
devintomain— CI detects the minor/major bump and creates a full release automatically
Patch-only merges (from dev’s auto-increment) do not trigger a release.
Verifying Manifests
Before merging, validate extension.yaml and installer_manifest.yaml against Playnite’s schema:
.\verify.ps1
Requires Playnite to be installed (Toolbox.exe is shipped with it). The release workflow also runs this check automatically and blocks the release if validation fails.
Project Structure
| File | Purpose |
|---|---|
PlayniteSunrise.psm1 |
Main extension — all logic lives here |
extension.yaml |
Playnite extension manifest (id, name, version) |
installer_manifest.yaml |
Addon database manifest — update for each release |
verify.ps1 |
Local manifest validation script |
covers/ |
Bundled default cover images for Playnite Desktop/Fullscreen entries |
.github/workflows/dev.yml |
CI: patch bump + rolling pre-release on dev push |
.github/workflows/release.yml |
CI: manifest verify + full release on main push |
Runtime Data Files
The extension writes these files at runtime — they are not in the repo:
| Path | Contents |
|---|---|
%LocalAppData%\PlayniteSunrise\settings.json |
Persistent user settings |
%LocalAppData%\PlayniteSunrise\ignored_games.json |
Ignore list |
%LocalAppData%\PlayniteSunrise\covers\*.png |
User-supplied cover overrides for Playnite entries |
%LocalAppData%\PlayniteSunrise\Apps\*.png |
Exported cover art |
%LocalAppData%\PlayniteSunrise\Apps\WaitForGameStop.ps1 |
Helper script (auto-generated) |
%LocalAppData%\PlayniteSunrise\Apps\KillGameChildren.ps1 |
Helper script (auto-generated) |
%LocalAppData%\PlayniteSunrise\Apps\WaitForPlaynite.ps1 |
Helper script (auto-generated) |
%LocalAppData%\PlayniteSunrise\Apps\KillPlayniteIfLaunched.ps1 |
Helper script (auto-generated) |
%LocalAppData%\PlayniteSunrise\Apps\pids_<GameId>.txt |
PID snapshot written at game start, read by kill script |
%LocalAppData%\PlayniteSunrise\Apps\sentinel_<GameId>.txt |
Written by OnGameStopped to signal stream end |
Credits
- This repo: Teknoshark/Playnite_Sunrise
- Original extension: MichaelMKenny/SunshineAppExport
- JPG crop fix: Nonary