Skip to content

Repository files navigation

Vault

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.

Status

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.

Installation

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.Vault

Quick Example

var 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);

Architecture

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"]
Loading

Roadmap

  • 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

Development

Run the local repository validation script:

./scripts/Validate-Repository.ps1

Unity 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.

About

A resilient content-delivery framework for Unity that coordinates downloadable content, dependencies, verification, caching, and recovery.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages