View on Asset Store (opens in new tab)
Package details
- Latest version
- 1.4.0
- Last updated
- First released
- Unity version
- 6000.3.12 or later
- Package size
- 352 KB
- Files
- 30
- Favorites
- 3
- Views in the past week
- 6
Price tracking
- Last checked
- Tracked since
- Lowest recorded
- $19.99 on
Keywords
OSL Easy Patcher
A lightweight Unity patcher for changed-file downloads, verified `.part` resume with safe Range fallback, optional compressed manifests, and cloud-SDK-free upload workflows.
Affiliate link · Purchases support this site
Price history
Last 6 months
USDAsset preview
1 / 6
OSL Easy Patcher screenshot 1
About this asset
OSL Easy Patcher is for Unity teams that need runtime content updates without adopting a full Addressables workflow. It compares a file manifest, downloads only missing or changed files, and can continue a partial transfer instead of restarting a large file when the host supports HTTP Range requests.
Repository Release Status
- Version `1.4.0` adds runtime download hardening, compressed manifests, and S3-compatible Editor uploads.
- The package export and date-confirmed repository release are complete as of 2026-09-03. This text does not claim Asset Store submission, approval, or public availability.
Why / Key Benefits
- Reduce repeat downloads: Compare local files with `version.json` and transfer only files that are missing or have changed.
- Continue interrupted files safely: Resume verified `.part` files when the HTTP host honors Range; restart safely when it returns full content, the object changes, or it reports `416`.
- Keep final files verified: Stream SHA-256 and optional HMAC validation before atomically promoting a partial download to its final name.
- Retry the failed file: Use up to three attempts per file instead of restarting the whole patch session.
- Choose your upload target: Publish from the Unity Editor to a Local Folder, Google Cloud Storage, AWS S3, Unity CCD, or Azure Blob Storage.
- Reduce manifest transfer size: Keep plain `version.json` for compatibility and optionally add GZip/Brotli sidecars with runtime fallback.
- Use S3-compatible storage: Configure an optional path-style custom endpoint for Editor uploads while setting the player-facing download URL separately.
- Avoid bundled cloud SDKs: The cloud uploaders use REST-based integrations rather than shipping the corresponding cloud SDKs in the package.
- Add optional payload protection: AES-256-CBC encryption, SHA-256 hashes, and HMAC-SHA256 checks help protect content and detect corruption or modification.
Typical Workflow
1. Select the patch files in the Unity Editor uploader.
2. Generate `version.json` and optional compressed sidecars, then publish to one of the five upload workflows.
3. Point `OSLPatchManager` or `OSLPatchUIController` at the player-facing HTTP base URL and choose a manifest preference.
4. At runtime, compare the manifest, download changed files, verify them, and initialize your `IOSLLoader`.
Requirements
- Minimum Unity Version: Unity 2021.3 LTS
- Tested Unity Versions: Unity 2021.3.45f2 and Unity 6000.3.12f1 (EasyPatcher EditMode tests and package-isolation import/compile)
- Scripting runtime: .NET Standard 2.1
- Resumable transfer: Range support enables resume; hosts that ignore Range restart the affected file safely.
- Optional UI: TextMeshPro or legacy Unity UI
Limitations / Scope
- This package transfers and verifies files; your `IOSLLoader` determines how downloaded content is loaded.
- `StartDownloadAsync(CancellationToken)` is additive; the existing parameterless call remains available. Cancellation and a stalled transfer preserve only the safe partial state available for a later retry.
- Compressed manifest sidecars are optional; plain `version.json` remains the compatibility fallback.
- A custom S3-compatible endpoint configures uploads only and does not automatically configure a public player download URL.
- Client-side encryption and HMAC reduce casual inspection and detect mismatches, but do not make distributed game content secret from a determined attacker.
Documentation & Support
From the publisher's Asset Store listing.
Technical details
- Runtime architecture: `OSLPatchManager` compares `version.json` with the local manifest and cached files, while `IOSLLoader` keeps content loading separate from transfer.
- Changed-file selection: Missing files and files with mismatched hashes are downloaded; unchanged verified files remain cached.
- Resume and retry: Partial bytes are retained in `.part` files and resumed with HTTP Range plus ETag-preferred or Last-Modified `If-Range` validators. A `206` response continues the transfer; Range-unsupported or changed `200` responses and `416` restart safely. Each file keeps the existing retry limit, cancellation is available through `StartDownloadAsync(CancellationToken)`, and a stall aborts the active request.
- Integrity and protection: SHA-256 verifies file contents. Optional AES-256-CBC with PKCS7 protects payload contents, and optional HMAC-SHA256 checks the manifest-declared HMAC value on the client.
- Upload targets: Local Folder, Google Cloud Storage, AWS S3, Unity CCD, and Azure Blob Storage. Cloud uploaders use REST or HTTP integrations and do not bundle the corresponding cloud SDKs.
- Manifest: `version.json` tracks file name, size, SHA-256 hash, encryption state, and optional HMAC value. The uploader can add raw `version.json.gz` and `version.json.br` sidecars while retaining plain JSON. Runtime `Auto` preference tries Brotli, GZip, then plain JSON; local `local_version.json` remains plain. Remote and decompressed manifest data are limited to 8 MiB before parsing.
- S3-compatible endpoint: Leaving the custom endpoint empty retains AWS virtual-host addressing. An absolute custom HTTP(S) endpoint uses path-style bucket addressing, signs the final authority/path with SigV4, and rejects credentials, queries, fragments, and traversal segments before network I/O.
- Compatibility boundary and release status: Manifest compression does not change manifest fields or patch payload URLs. The `1.4.0` repository package release (2026-09-03) retains `StartDownloadAsync()` while adding a `CancellationToken` overload. Implementation, test, package-isolation evidence, and `.unitypackage` export are complete. Asset Store submission, review, approval, and public release are not claimed.
- Test assets: `PatchTestRunner` contains five local end-to-end scenarios, including corruption and hash-mismatch recovery.
- Automated tests: Unity `6000.3.12f1` EasyPatcher EditMode passed `87/87` (failed/skipped `0`), covering compression/fallback plans, sidecar generation, legacy settings, S3 URI encoding, invalid endpoint rejection, path/root/encoded traversal, `200`/`206`/`416` and `Content-Range`, ETag/Last-Modified `If-Range`, cancellation/stall, SHA/HMAC-mismatch non-exposure of final/`.part`/`.meta`, and atomic promotion/local-manifest injected `IOException` cases.
Compatibility
| Unity version | Built-in | URP | HDRP |
|---|---|---|---|
| 6000.3.12f1 | Compatible | Compatible | Compatible |
OSL Easy Patcher is SRP-independent and works with the Built-in Render Pipeline, URP, and HDRP. Its core features focus on version checking, file download, manifest validation, caching, and AssetBundle loading, with no pipeline-specific rendering dependency. The included demo UI uses IMGUI/OnGUI and optional UI components.
As listed on the Asset Store.