### Native Manifest Format - bootstrap.json Source: https://context7.com/exa/unsup/llms.txt Used for first-time installs, this file provides a complete list of files with their hashes, sizes, and URLs. ```json { "unsup_manifest": "bootstrap-1", "version": { "name": "1.4.2", "code": 14 }, "hash_function": "sha256", "files": [ { "path": "mods/fabric-api.jar", "hash": "aabbcc...", "size": 2097152, "url": "https://cdn.example.com/fabric-api.jar" } ] } ``` -------------------------------- ### unsup.ini Configuration File Examples Source: https://context7.com/exa/unsup/llms.txt This section details the configuration options available in `unsup.ini`. It covers essential settings like version, source format, and source URL, as well as optional configurations for update behavior, GUI suppression, hash enforcement, signing, branding, colors, DNS, proxies, authorization, multi-environment support, and flavor defaults. ```ini ; Minimum required config — Packwiz format version=1 source_format=packwiz source=https://example.com/pack/pack.toml ``` ```ini ; Native unsup manifest format version=1 source_format=unsup source=https://example.com/pack/ ``` ```ini ; --- Optional settings --- ; Update behavior: auto | semi | manual (default) behavior=manual ``` ```ini ; Suppress GUI entirely (e.g., for servers) no_gui=true ``` ```ini ; Show "nogui" server arg as equivalent to no_gui recognize_nogui=true ``` ```ini ; Require SHA-256 or SHA-512 (reject MD5/SHA-1) enforce_secure_hashes=true ``` ```ini ; Signing: verify the manifest with an OpenBSD signify key public_key=signify RWTSwM40VCzVER3YWt55m4Fvsg0sjZLEICikuU3cD91gR/2lii/jk67B ``` ```ini ; Also accept a second/rotating key alt_public_key=signify ``` ```ini ; Update MultiMC/Prism mmc-pack.json component versions update_mmc_pack=true ``` ```ini ; Show a button to let users change their flavor choices offer_change_flavors=true ``` ```ini ; Branding branding.modpack_name=My Amazing Pack branding.icon=pack_icon.png ``` ```ini ; Color customization (hex, no #) colors.background=1a1a2e colors.accent=00ff88 ``` ```ini ; Custom subtitle shown before update check subtitle=Checking for updates... ``` ```ini ; DNS resolver: system | quad9 | https://... dns=quad9 ``` ```ini ; HTTP proxy http.proxy=socks5://127.0.0.1:1080 ``` ```ini ; Authorization for private sources [authorization] https://private.example.com/=Bearer mytoken123 ``` ```ini ; Multi-environment support (client/server) use_envs=true env.client.marker=net.minecraft.client.main.Main env.server.marker=net.minecraft.server.Main ``` ```ini ; Flavor defaults (applied when no saved choice exists) [flavors] performance=sodium ``` -------------------------------- ### Remote Config Bootstrapping with System Properties Source: https://context7.com/exa/unsup/llms.txt Configure unsup to download its configuration file (`unsup.ini`) from a remote URL using JVM system properties. This is useful for launcher profiles that need to specify a config URL without shipping a local `unsup.ini` file. The system properties can also include a signature key for verification and authorization tokens. ```bash # JVM system properties for bootstrap: -Dunsup.bootstrapUrl=https://example.com/packs/mypack/unsup.ini -Dunsup.bootstrapKey=signify%RWTSwM40VCzVER3YWt55m4Fvsg0sjZLEICikuU3cD91gR/2lii/jk67B -Dunsup.bootstrapAuth=Bearer%myPrivateToken ``` ```bash # unsup will: # 1. Download unsup.ini from the URL # 2. Verify it against the .sig file at .sig using the provided key # 3. Save it locally and proceed as normal ``` -------------------------------- ### Manifest Signing with SigProvider Source: https://context7.com/exa/unsup/llms.txt Demonstrates how to parse public keys and verify signatures for manifests using the SigProvider class. Supports both raw Ed25519 and OpenBSD signify formats. ```APIDOC ## Manifest Signing — `SigProvider` `SigProvider.parse(String line)` — parses a public key string supporting two formats: raw Ed25519 (X.509 DER base64) or OpenBSD signify format. Manifests are verified against `.sig`. If `public_key` is configured and a `.sig` file is not present or does not match, the update is rejected with a fatal error. ```java // In unsup.ini: // public_key=signify RWTSwM40VCzVER3YWt55m4Fvsg0sjZLEICikuU3cD91gR/2lii/jk67B // Generate a signify key pair (OpenBSD signify tool): // signify -G -p mypack.pub -s mypack.sec // Sign a manifest: // signify -S -s mypack.sec -m manifest.json -x manifest.sig // Programmatic key parsing: SigProvider key = SigProvider.parse("signify RWTSwM40VCzVER3YWt55m4Fvsg0sjZLEICikuU3cD91gR/2lii/jk67B"); boolean ok = key.verify(manifestBytes, signatureBytes); // Raw Ed25519 key (X.509 DER, base64 encoded): SigProvider rawKey = SigProvider.parse("ed25519 MCowBQYDK2VwAyEA......"); ``` ``` -------------------------------- ### Import unsup as a Prism Launcher Component Source: https://context7.com/exa/unsup/llms.txt This JSON file is used to import unsup into Prism Launcher. It specifies the component's name, UID, version, and the agent URL for downloading. ```json // com.unascribed.unsup.json (import into Prism via Add Component > Import) { "formatVersion": 1, "name": "unsup", "uid": "com.unascribed.unsup", "version": "1.2.0", "+agents": [ { "name": "com.unascribed:unsup:1.2.0", "url": "https://repo.sleeping.town" } ] } ``` -------------------------------- ### Packwiz Manifest Format - pack.toml Source: https://context7.com/exa/unsup/llms.txt The standard Packwiz configuration file. It defines pack metadata, index details, and version information, including optional unsup-specific settings. ```toml name = "My Pack" author = "packauthor" version = "1.4.2" pack-format = "packwiz:1.1.0" [index] file = "index.toml" hash-format = "sha256" hash = "abc123..." [versions] minecraft = "1.20.1" fabric = "0.15.0" unsup = "1.2.0" # triggers reading unsup.toml for extra options ``` -------------------------------- ### Parse and Verify Manifest Signatures with SigProvider Source: https://context7.com/exa/unsup/llms.txt Parses public key strings in raw Ed25519 or OpenBSD signify format. Use to verify manifest signatures against provided public keys. ```java SigProvider key = SigProvider.parse("signify RWTSwM40VCzVER3YWt55m4Fvsg0sjZLEICikuU3cD91gR/2lii/jk67B"); boolean ok = key.verify(manifestBytes, signatureBytes); ``` ```java SigProvider rawKey = SigProvider.parse("ed25519 MCowBQYDK2VwAyEA......"); ``` -------------------------------- ### Check for Updates with UpdateHandler Source: https://context7.com/exa/unsup/llms.txt The main update routine fetches the manifest, computes a diff, and applies changes. Set `autoaccept` to true to skip the update prompt. `dryRun` simulates the update without writing files. ```java boolean updated = UpdateHandler.checkForUpdate( state, // JsonObject: current state from .unsup-state.json config().format(), // SourceFormat.UNSUP | PACKWIZ | RAW config().source(), // URI: the manifest URL !config().behavior().promptUpdates(), // autoaccept: true skips the "Update available?" dialog SysProps.DRY_RUN.orBias(), // dryRun: true = simulate, do not write files false, // forceFlavorDefaults: skip flavor dialog res -> {} // modifier: no-op ); ``` ```java UpdateHandler.checkForUpdate( state, SourceFormat.UNSUP, new URI("merge:https://host1.com/pack/;https://host2.com/addons/"), true, false, false, res -> {} ); ``` -------------------------------- ### Packwiz Manifest Format - unsup.toml Source: https://context7.com/exa/unsup/llms.txt An optional file co-located with pack.toml that extends Packwiz functionality with unsup-specific options like flavor groups and metafile configurations. ```toml # unsup.toml (optional, co-located with pack.toml) [flavor_groups.shader] name = "Shaders" description = "Optional shader pack" side = "client" # only shown to clients when use_envs is active [[flavor_groups.shader.choices]] id = "complementary" name = "Complementary Reimagined" [[flavor_groups.shader.choices]] id = "none" name = "No shaders" [metafile."shaders/complementary.zip"] flavors = ["complementary"] ``` -------------------------------- ### Native Manifest Format - manifest.json Source: https://context7.com/exa/unsup/llms.txt The root manifest file for the native format. It includes the current version information and defines flavor groups with choices. ```json { "unsup_manifest": "root-1", "versions": { "current": { "name": "1.4.2", "code": 14 } }, "flavor_groups": [ { "id": "performance", "name": "Performance Mods", "description": "Choose your preferred performance mod set.", "choices": [ { "id": "sodium", "name": "Sodium", "description": "Fastest" }, { "id": "optifine","name": "OptiFine","description": "Shaderpacks" } ] } ] } ``` -------------------------------- ### Native Manifest Format - versions/.json Source: https://context7.com/exa/unsup/llms.txt Defines the changes for a specific version step, including file operations like add, modify, or delete, with associated hashes, sizes, and URLs. ```json { "unsup_manifest": "update-1", "hash_function": "sha256", "changes": [ { "path": "mods/sodium-mc1.20.1.jar", "from_hash": "aabbcc...", "from_size": 1048576, "to_hash": "ddeeff...", "to_size": 1150000, "url": "https://cdn.example.com/sodium-mc1.20.1.jar", "flavors": ["sodium"] }, { "path": "mods/old-mod.jar", "from_hash": "112233...", "from_size": 512000, "to_hash": null, "to_size": 0 } ] } ``` -------------------------------- ### unsup Java Agent and Standalone Execution Source: https://context7.com/exa/unsup/llms.txt Use these commands to run unsup either as a Java agent attached to another JVM or in standalone mode. The optional argument for standalone execution specifies an environment name. ```bash # As a Java agent (add to launcher JVM args): -javaagent:/path/to/unsup.jar ``` ```bash # Standalone execution (arg = optional env name): java -jar unsup.jar [env-name] ``` ```bash # Example: standalone with explicit environment java -jar unsup.jar server ``` -------------------------------- ### Update MultiMC/Prism Components with MMCUpdater Source: https://context7.com/exa/unsup/llms.txt Reads and writes MultiMC instance files to update component versions based on pack manifest. Enable with `update_mmc_pack=true` in unsup.ini. ```ini ; Enable in unsup.ini: update_mmc_pack=true ; Remap pack version keys to MultiMC component UIDs (Packwiz mode): [mmc-component-map] fabric=net.fabricmc.fabric-loader quilt=org.quiltmc.quilt-loader neoforge=net.neoforged.neoforge ``` ```json // ../mmc-pack.json (before update) { "formatVersion": 1, "components": [ { "uid": "net.fabricmc.fabric-loader", "version": "0.14.21" }, { "uid": "net.minecraft", "version": "1.20.1" } ] } // After unsup applies a pack update that bumps fabric to 0.15.0: // net.fabricmc.fabric-loader → 0.15.0 is written back automatically. // unsup waits until 5.5s after launch before writing to avoid MMC race condition. ``` -------------------------------- ### Manual unsup Integration for MultiMC Source: https://context7.com/exa/unsup/llms.txt For MultiMC users, unsup is added manually via JVM arguments. Ensure the path to unsup.jar is correct for your instance. ```bash # Prism Launcher: Import this JSON via: # Edit Instance → Version → Add Component → Import Component # # MultiMC does not support Java agent components. # For MultiMC, add the agent manually in JVM arguments: -javaagent:/path/to/.minecraft/unsup.jar ``` -------------------------------- ### Authorization Configuration with Authorizer Source: https://context7.com/exa/unsup/llms.txt Explains how to parse authorization specifier strings for Basic, Bearer, and AWS4-HMAC-SHA256 authentication. Authorizers are bound to URL prefixes. ```APIDOC ## Authorization — `Authorizer` `Authorizer.parse(String v)` — parses an authorization specifier string (Basic, Bearer, or AWS4-HMAC-SHA256) used in the `[authorization]` config section to authenticate requests to private manifest/file hosts. Each authorizer is bound to a URL prefix and applied to all requests whose URL starts with that prefix. ```ini # unsup.ini — [authorization] section examples # HTTP Basic Auth (colon-separated user:password, then base64 encoded) [authorization] https://private-cdn.example.com/=Basic dXNlcjpwYXNzd29yZA== # Bearer token https://api.example.com/packs/=Bearer ghp_MyPrivateGitHubToken # AWS S3 (AccessKeyId:SecretAccessKey[:region], default region us-east-1) https://my-bucket.s3.amazonaws.com/=AWS4-HMAC-SHA256 AKIAIOSFODNN7EXAMPLE:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY:us-east-1 ``` ```java // Programmatic use: Optional auth = Authorizer.parse("Bearer mytoken"); // auth.get().authorize(request, requestBuilder) applies the header Optional spec = Authorizer.parseSpec( "https://cdn.example.com/", // URL prefix "Bearer mytoken" ); // spec.get().urlPrefix() == "https://cdn.example.com/" ``` ``` -------------------------------- ### Override unsup Behavior with Java System Properties Source: https://context7.com/exa/unsup/llms.txt Tune or override runtime behavior by passing Java system properties as JVM arguments. Useful for debugging, CI, and customizing execution. ```bash # Behavior (auto | semi | manual) -Dunsup.behavior=auto # Parallel download workers (default: 6) -Dunsup.downloadWorkers=3 # Dry run — no files written (useful for CI) -Dunsup.dryRun=true # Force a specific language (IETF BCP-47 tag or special values) -Dunsup.language=de-DE -Dunsup.language=tok # Toki Pona -Dunsup.language=en-XA # Accented English (pseudo-locale for l10n testing) -Dunsup.language=en-PIG # Pig Latin # Enable verbose debug logging -Dunsup.debug=true -Dunsup.debug.requests=true # Show GUI even in standalone mode -Dunsup.guiInStandalone=true # GUI rendering backend (auto | swing | opengl) -Dunsup.puppetMode=swing # Ignore use_envs — download all files regardless of environment -Dunsup.ignoreEnvs=true # Remote bootstrap config -Dunsup.bootstrapUrl=https://example.com/pack/unsup.ini -Dunsup.bootstrapKey=signify%RW... -Dunsup.bootstrapAuth=Bearer%mytoken # Force flavor selection in Packwiz mode -Dunsup.packwiz.changeFlavors=true # Override flavor choice for a group (bypasses saved state) -Dunsup.flavor.performance=sodium # Pause 4s before applying update (lets you read the update plan) -Dunsup.debug.pauseBeforeUpdate=true ``` -------------------------------- ### MultiMC/Prism Component Updating with MMCUpdater Source: https://context7.com/exa/unsup/llms.txt Details the `MMCUpdater.scan()` and `MMCUpdater.apply()` methods for updating component versions in MultiMC/Prism instance files when `update_mmc_pack=true`. ```APIDOC ## MultiMC/Prism Component Updating — `MMCUpdater` `MMCUpdater.scan()` and `MMCUpdater.apply(Map newVers)` — when `update_mmc_pack=true`, reads the `../mmc-pack.json` and `../patches/*.json` MultiMC instance files, matches component UIDs (e.g. `net.fabricmc.fabric-loader`) to versions declared in the pack manifest, and writes updated versions back atomically. ```ini ; Enable in unsup.ini: update_mmc_pack=true ; Remap pack version keys to MultiMC component UIDs (Packwiz mode): [mmc-component-map] fabric=net.fabricmc.fabric-loader quilt=org.quiltmc.quilt-loader neoforge=net.neoforged.neoforge ``` ```json // ../mmc-pack.json (before update) { "formatVersion": 1, "components": [ { "uid": "net.fabricmc.fabric-loader", "version": "0.14.21" }, { "uid": "net.minecraft", "version": "1.20.1" } ] } // After unsup applies a pack update that bumps fabric to 0.15.0: // net.fabricmc.fabric-loader → 0.15.0 is written back automatically. // unsup waits until 5.5s after launch before writing to avoid MMC race condition. ``` ``` -------------------------------- ### Configure Authorization Specs with Authorizer Source: https://context7.com/exa/unsup/llms.txt Parses authorization specifier strings for Basic, Bearer, or AWS4-HMAC-SHA256. Binds authorizers to URL prefixes for authenticating requests to private hosts. ```ini # unsup.ini — [authorization] section examples # HTTP Basic Auth (colon-separated user:password, then base64 encoded) [authorization] https://private-cdn.example.com/=Basic dXNlcjpwYXNzd29yZA== # Bearer token https://api.example.com/packs/=Bearer ghp_MyPrivateGitHubToken # AWS S3 (AccessKeyId:SecretAccessKey[:region], default region us-east-1) https://my-bucket.s3.amazonaws.com/=AWS4-HMAC-SHA256 AKIAIOSFODNN7EXAMPLE:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY:us-east-1 ``` ```java Optional auth = Authorizer.parse("Bearer mytoken"); // auth.get().authorize(request, requestBuilder) applies the header Optional spec = Authorizer.parseSpec( "https://cdn.example.com/", // URL prefix "Bearer mytoken" ); // spec.get().urlPrefix() == "https://cdn.example.com/" ``` -------------------------------- ### System Property Overrides Source: https://context7.com/exa/unsup/llms.txt Lists various Java system properties that can be used to tune or override runtime behavior of the application. ```APIDOC ## System Property Overrides — `SysPropDefs` All runtime behavior can be tuned or overridden with Java system properties passed as JVM arguments (`-D=`). ``` # Behavior (auto | semi | manual) -Dunsup.behavior=auto # Parallel download workers (default: 6) -Dunsup.downloadWorkers=3 # Dry run — no files written (useful for CI) -Dunsup.dryRun=true # Force a specific language (IETF BCP-47 tag or special values) -Dunsup.language=de-DE -Dunsup.language=tok # Toki Pona -Dunsup.language=en-XA # Accented English (pseudo-locale for l10n testing) -Dunsup.language=en-PIG # Pig Latin # Enable verbose debug logging -Dunsup.debug=true -Dunsup.debug.requests=true # Show GUI even in standalone mode -Dunsup.guiInStandalone=true # GUI rendering backend (auto | swing | opengl) -Dunsup.puppetMode=swing # Ignore use_envs — download all files regardless of environment -Dunsup.ignoreEnvs=true # Remote bootstrap config -Dunsup.bootstrapUrl=https://example.com/pack/unsup.ini -Dunsup.bootstrapKey=signify%RW... -Dunsup.bootstrapAuth=Bearer%mytoken # Force flavor selection in Packwiz mode -Dunsup.packwiz.changeFlavors=true # Override flavor choice for a group (bypasses saved state) -Dunsup.flavor.performance=sodium # Pause 4s before applying update (lets you read the update plan) -Dunsup.debug.pauseBeforeUpdate=true ``` ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.