ZOA Foundry
Declare the Foundry package set through a UPM umbrella package.
The Foundry package is an umbrella manifest that declares dependencies on a selected set of ZOA packages. It contains the package metadata used to bring those dependencies into a Unity project.
The 1.0.0 version in this checkout is package metadata; the product remains pre-alpha. Installation still requires access to the package sources and compatible dependencies. A manifest entry alone does not provide that access.
Tooling
Editor tools
Lint Package Dependencies
Tools > ZOA > Advanced > Validate > Foundry > Lint Package Dependencies
Builds the assembly dependency graph, reports every cycle as a full path and every forbidden edge as a source and target pair, logs the detail to the console, and summarises in a dialog.
Validate Assembly Boundaries
Tools > ZOA > Advanced > Validate > Foundry > Validate Assembly Boundaries
Scans every assembly definition under Packages and reports any runtime assembly that references an editor-only one, with counts of runtime and editor assemblies in the summary.
Cleanup Tool
Tools > ZOA > Advanced > Maintain > Foundry > Cleanup Tool
A UI Toolkit window listing removable categories with per-category counts: generated content, imported samples and content packs, feature-set installer output, test output, demo content, local save state, third-party assets, and miscellaneous. Third-party is selected by default.
Export Readiness Report
Tools > ZOA > Advanced > Maintain > Foundry > Export Readiness Report
Writes a markdown readiness report to Logs/FoundryExportReadiness and reports whether any blocking findings stand between the project and a clean export.
Export Package
Tools > ZOA > Advanced > Maintain > Foundry > Export Package
The profile-driven export window. Choose a profile, rescan, open the Cleanup Tool, write the readiness report, and generate deterministic package mirror and import-plan artifacts, with an optional unitypackage.
Help menu
Tools > ZOA > Advanced > Help
Open Documentation resolves the project's Docs/index.html and falls back to revealing the Docs folder. Open Plan Docs reveals Docs/Refactor. Open GitHub Repository and About ZOA Foundry round it out, with About reading the live version and description from the installed package manifest.
Declared ZOA dependencies (12)
Referenced by ZOA manifests (0)
How it works
Concepts
The manifest and version stamp
The umbrella declares twelve direct ZOA dependencies. Their manifests resolve further dependencies, while other repository packages remain outside that declared selection. FoundryVersion provides constants for build stamps and diagnostics.
Use the checkout revision and resolved manifests to identify a working package set. The umbrella’s 1.0.0 metadata does not establish a public production release.
Assembly validation
AsmdefBoundaryValidator checks for runtime assemblies referencing editor-only assemblies. AsmdefDependencyLinter inspects assembly cycles and configured forbidden edges.
These checks describe specific architectural rules. Review their findings alongside the target project’s compilation and runtime behavior when changing the package set.
Plan a package export
FoundryPackageInventory discovers local packages and their dependencies. Export profiles select seed packages, exclusions, asset roots, and whether to include samples, tests, or generated output.
FoundryExportPipeline.BuildPlan combines that inventory with the profile and reports blocking findings. Generate a readiness report before creating export artifacts, and inspect external dependencies separately.
Review generated and external assets
FoundryCleanupTool groups assets for review before distribution. FoundryAssetInventory identifies generated content, dependencies, project settings, and assets whose role needs inspection.
Review each proposed removal against the project you intend to distribute. An asset category is an aid to that review; it does not determine ownership or redistribution rights.
Setup
Workflow
- 01
Open the development checkout
Use the editor version recorded in ProjectVersion.txt and let Unity resolve dependencies. For another project, follow the access and import instructions supplied with its Foundry distribution.
- 02
Review Start Here
Open Tools → ZOA → Start Here and inspect the configuration and content workflow. Generate the content required for the scene you want to examine.
- 03
Configure integrations
Review NetworkSettings and SaveBackendSettings. FishNet is the supported network path; optional database providers need their external dependencies.
- 04
Validate the selected package set
Run the relevant assembly and setup checks, resolve reported issues, and exercise the intended interaction in Play mode.
- 05
Prepare an export when needed
Select an export profile, review the readiness report and cleanup candidates, and resolve blocking findings before producing artifacts.
Reference
Key types
FoundryVersion
class
The umbrella's only runtime type. Three constants describing the release, intended for build stamps and support diagnostics rather than for gameplay code to branch on.
- const string Version = "1.0.0"
- const string MinUnityVersion = "6000.4.0f1"
- const int PackageCount = 9
AsmdefBoundaryValidator
class
Editor validator that scans every assembly definition under Packages and reports runtime assemblies referencing editor-only ones. The check that catches a player-build break before the player build.
- static BoundaryResult RunFullValidation()
- BoundaryResult.Violations : List<(string RuntimeAssembly, string EditorAssembly)>
- BoundaryResult.IsValid
- BoundaryResult.Summary
AsmdefDependencyLinter
class
Editor linter that builds the assembly dependency graph, finds cycles by depth-first search with node colouring, and reports edges that violate the architecture's separation rules.
- static LintResult RunFullLint()
- LintResult.Cycles : List<List<string>>
- LintResult.ForbiddenEdges : List<(string Source, string Target)>
- LintResult.IsClean
FoundryPackageInventory
class
Discovers every package under a packages root and resolves a seed set into its transitive closure. The data layer both the export tool and the readiness report sit on.
- static FoundryPackageInventoryResult Discover(string packagesRoot = "Packages")
- static FoundryDependencyClosureResult ComputeClosure(FoundryPackageInventoryResult inventory, IEnumerable<string> seedPackageIds, IEnumerable<string> excludedPackageIds = null)
- static string ToMarkdown(FoundryPackageInventoryResult inventory)
- static string ToJson(FoundryPackageInventoryResult inventory)
FoundryPackageRecord
class
One package as the inventory sees it: id, display name, version, path, dependencies split into local and external, assembly definitions, role tags, and flags for samples, tests, runtime, and editor content.
- string packageId
- string version
- List<FoundryNameValue> localDependencies
- List<FoundryNameValue> externalDependencies
- List<string> asmdefs
- bool hasSamples
- bool hasTests
FoundryExportProfile
class
A declarative slice of the stack: seed packages, exclusions, asset roots and roles to include, third-party dependencies, and whether samples, tests, and generated demo output travel with it.
- List<string> seedPackages
- List<string> excludedPackages
- List<FoundryAssetRole> includedAssetRoles
- List<FoundryThirdPartyDependency> thirdPartyDependencies
- bool includeAllFoundryPackages
- bool includeSamples
- bool includeTests
FoundryExportProfileCatalog
class
The four shipped profiles, by id: swarms-host-client, swarms-authoring, steam-demo-reference, and full-foundry. Get throws on an unknown id rather than falling back to a default.
- const string SwarmsHostClient = "swarms-host-client"
- const string SwarmsAuthoring = "swarms-authoring"
- const string SteamDemoReference = "steam-demo-reference"
- const string FullFoundry = "full-foundry"
- static IReadOnlyList<FoundryExportProfile> All { get; }
- static FoundryExportProfile Get(string profileId)
FoundryExportPipeline
class
Turns a profile id into a plan, a readiness report, and export artifacts. Has CI entry points so the same gate runs in the editor and in a build pipeline.
- static FoundryExportPlan BuildPlan(string profileId)
- static int GenerateReadinessReport(string profileId = FoundryExportProfileCatalog.FullFoundry, string outputDirectory = DefaultReadinessReportDirectory)
- static int GenerateExportArtifacts(string profileId, string outputDirectory, bool exportUnityPackage = false, string unityPackagePath = null)
- static void ExportReadinessCi()
- static void ExportProfileCi()
FoundryExportPlan
class
The resolved answer for one profile: the package inventory, the dependency closure, the asset inventory, the assets to export, third-party dependencies, and the findings. HasBlockingFindings is the go or no-go.
- string profileId
- FoundryDependencyClosureResult packageClosure
- List<FoundryAssetRootRecord> exportAssets
- List<FoundryFinding> findings
- bool HasBlockingFindings
FoundryAssetInventory
class
Scans an assets root and classifies each root record by role, which is how the cleanup tool decides what is safe to delete and what needs a human to look at it.
- static FoundryAssetInventoryResult Scan(string assetsRoot = "Assets")
- static bool IsDeleteCandidate(FoundryAssetRootRecord record)
- static string ToMarkdown(FoundryAssetInventoryResult inventory)
FoundryAssetRole
enum
FirstPartyRuntime, FirstPartyDocs, GeneratedOutput, GeneratedDemoOutput, TestOutput, ThirdPartyDependency, ProjectSettingConfiguration, ReviewRequired, Unknown. The last two are the classifier declining to guess.
FoundryCleanupTool
class
The pre-export editor window. Scans for generated content, imported samples, feature-set installer output, test output, demo content, local save state, and third-party assets, and removes the categories you select. Third-party is pre-selected.
FoundryExportTool
class
The editor window over the export pipeline. Pick a profile, rescan, write a readiness report, and produce the mirror and import-plan artifacts, with the unitypackage export available as a compatibility path.
Integration
Behavior to account for
See also