Files

2.4 KiB

SPRX Catalog Manifest

SprxCatalog uses a deliberately small INI manifest. This follows the project's existing config.ini conventions and the reference ploader.ini without introducing another parser or a nested JSON schema.

[plugin.base-runtime]
path=/data/OnionHEN/sprx/base-runtime.sprx
exact_title_ids=CUSA12345,CUSA67890
priority=10

[plugin.overlay]
path=/data/OnionHEN/sprx/overlay.sprx
exact_title_ids=CUSA12345
auto_start=true
priority=100
dependencies=base-runtime

[plugin.native]
path=/data/OnionHEN/sprx/native.prx
title_id_prefixes=PPSA
auto_start=true

Each plugin has one [plugin.<id>] section. The ID is unique and uses the same printable identifier rule as the existing plugin UI and plugin manager. path is an absolute .sprx or .prx path; the loader performs the final realpath() and regular-file checks before touching the target process.

exact_title_ids and title_id_prefixes are comma-separated allowlists. A plugin is eligible for a target only when one of these fields matches its Title ID. auto_start=true selects the roots for automatic startup. A dependency is included in the startup plan even if it is not auto-started itself. Dependencies must be declared and must also match the target Title ID; missing, mismatched, duplicate, or cyclic dependencies reject the plan.

enabled defaults to true when it is absent, preserving existing catalogs. The SPRX page can persist it as enabled=true or enabled=false. Disabling a module only removes it from future Big App startup plans; it does not and cannot unload a module already injected into a game process.

The SPRX page's Delete action removes only the [plugin.<id>] catalog entry. It never deletes the .sprx or .prx file, and it is rejected while that module is loaded in the current matching game.

Startup order is a topological order. Among entries whose dependencies are already satisfied, larger priority values start first; ties are resolved by plugin ID for deterministic behavior. Dependencies always precede their dependents, regardless of priority.

This is intentionally not a general package-management format. Version ranges, optional dependencies, environment expressions, permissions, and per-plugin retry overrides are deferred until a concrete use case requires them. Keeping those concerns out of Phase 2 makes malformed manifests easy to reject and keeps policy in SprxLoader rather than duplicating it here.