Resilient Content Delivery for Unity.
Vault is an early-development Unity package for coordinating downloadable game content: manifests, content packs, versions, dependencies, progress, verification, installation state, recovery, and cache management.
Vault is not an Addressables replacement. Addressables can load and operate on assets; Vault sits above a content provider and orchestrates product-level delivery and recovery policy. A future Addressables adapter may perform underlying asset operations while the Vault core remains provider-independent.
Vault is an early development release. The first vertical slice includes manifest validation, dependency planning, explicit install states, storage checks, SHA-256 verification, atomic promotion semantics, recovery hooks, and in-memory source/storage implementations for samples and tests.
It does not include production networking, resumable downloads, signed manifests, encryption, Addressables adapters, retry policy, cache eviction, rollback, or mobile data policy.
Use Unity 6 and add the package by Git URL through the Package Manager:
https://github.com/KostasBan/Vault.git?path=/Packages/com.kostasban.vault
Package ID:
com.kostasban.vault
Namespace:
KostasBan.Vaultvar baseBytes = Encoding.UTF8.GetBytes("base pack");
var expansionBytes = Encoding.UTF8.GetBytes("expansion pack");
var manifest = new ContentManifest("0.1.0", new[]
{
new ContentPackDefinition("base", "1.0.0", baseBytes.Length, InMemoryLocalContentStore.ComputeSha256(baseBytes)),
new ContentPackDefinition("expansion", "1.0.0", expansionBytes.Length, InMemoryLocalContentStore.ComputeSha256(expansionBytes), new[] { "base" })
});
var source = new InMemoryContentSource(manifest, new Dictionary<string, byte[]>
{
["base"] = baseBytes,
["expansion"] = expansionBytes
});
var store = new InMemoryLocalContentStore(availableBytes: 1024 * 1024);
var vault = new VaultClient(source, store);
await vault.RefreshManifestAsync(CancellationToken.None);
var result = await vault.InstallAsync("expansion", null, CancellationToken.None);flowchart LR
Game["Game Code"] --> Client["VaultClient"]
Client --> Manifest["ContentManifest"]
Client --> Source["IContentSource"]
Client --> Store["ILocalContentStore"]
Source --> Provider["HTTP, local files, Addressables adapter, or custom provider"]
Store --> Cache["Temporary and installed content cache"]
- HTTP content sources
- Optional Addressables adapter
- Pause/resume and byte-range downloads
- Retry with backoff
- Wi-Fi and mobile-data policy
- Catalog compatibility rules
- Cache eviction policy
- Rollback and last-known-good content
- Disk corruption recovery
- Signed manifests
- Optional bridge assemblies for Lens diagnostics, Beacon configuration, Sonar events, and Flow loading integration, kept outside the core runtime
Run the local repository validation script:
./scripts/Validate-Repository.ps1Unity EditMode/PlayMode tests are included under Packages/com.kostasban.vault/Tests. The default GitHub Actions workflow avoids Unity-license-dependent steps and validates structure, package metadata, docs, and source hygiene.