Third-Party Notices Generator¶
Editor tooling that builds a consolidated THIRD_PARTY_NOTICES.txt from your resolved UPM packages and a curated hand-written file — so buyers can meet OSS attribution obligations without maintaining the package half by hand.
Unity: 6000.0+ — for the current engine version see package.json or CHANGELOG.md
Convenience tool, not legal advice — you own your attribution obligations. The generator automates the UPM-package half of attribution. Licenses for assets you drop into
Assets/(fonts, art, audio,.unitypackage-imported plugins) are not discovered; put those in your curated file. This tool does not guarantee legal compliance.
Overview¶
| Piece | Role |
|---|---|
Manifest (ThirdPartyNoticesManifest) |
Committed source of truth: paths, product name, opt-in build flags, exclude / force-include lists |
| Generate menu | Scans registered packages, merges curated text, writes the notices file |
| Package Manifest… window | One checkbox per package; state mirrors the generator's include decision |
| Build hooks | Opt-in regenerate before build + opt-in fail-if-missing/empty validator (both off by default) |
| Display sample | the Third-Party Notices sample under Samples/ThirdPartyNotices/ — loads the file from StreamingAssets and shows it in a scroll view |
This is editor tooling (like the Setup Wizard), not an IOxHeartService. There is no ServiceConfiguration toggle and no runtime API.
Quick Start¶
- Open Tools > OxHeart > Legal > Package Manifest… (creates a manifest at
Assets/Legal/on first use). - Edit Curated Source Path / Output Path on the manifest if your layout differs from the defaults:
- Curated default:
Assets/Legal/THIRD_PARTY_CURATED.txt - Output default:
Assets/StreamingAssets/THIRD_PARTY_NOTICES.txt(matches the sample) - Put buyer-owned licenses (fonts, art, etc.) in the curated file. The Generate menu creates a stub curated file if it is missing.
- Run Tools > OxHeart > Legal > Generate Third-Party Notices.
- Optionally enable Regenerate On Build and/or Validate On Build on the manifest.
- To show the file in-game, import the Third-Party Notices sample or copy its load pattern.
What gets included¶
Include decision, in order:
- Force-include list → always included
- Built-in modules (
PackageSource.BuiltIn) → dropped - Exclude list (exact name or trailing
.*wildcard, e.g.com.unity.ide.*) → dropped - Otherwise → direct dependencies only (transitives omitted)
Default excludes (editable on the manifest): com.unity.ide.*, com.unity.collab-proxy, com.unity.test-framework, com.unity.ext.nunit, games.moomoo.oxheart.
License text is read from the package root, probing in order: LICENSE.md, LICENSE.txt, LICENSE, Third Party Notices.md. Packages included but with no discoverable license are listed in a trailing "review manually" footer — they do not get an empty section.
Manifest window¶
Tools > OxHeart > Legal > Package Manifest…
- One checkbox per resolved package; checked state is exactly
IsIncluded(direct / transitive / module + LICENSE present shown in the row). - Unchecking adds the package to Excluded; checking removes it from Excluded and force-includes only when it would still be dropped (module or transitive).
- Generate Notices runs the same pipeline as the menu item.
Opt-in build flags¶
Both flags default to false. Enabling them is a deliberate buyer choice:
| Flag | When on |
|---|---|
| Regenerate On Build | Rewrites the notices file in a pre-build step (order −100) |
| Validate On Build | Fails the build if the output path is missing or empty (order 0) |
Output format¶
PRODUCT NAME THIRD-PARTY NOTICES
================================
<curated block, if any>
----------------------------------------
PACKAGE: com.example.pkg
----------------------------------------
<license text>
Packages with no discoverable license — review manually:
- com.example.no-license
Product name comes from Product Name Override on the manifest, or Application.productName when that field is empty.
Risks (read these)¶
- Package half only. Loose
Assets/licenses stay in your curated file. - Not legal advice. No warranty of compliance.
- Shallow license probe. Only the four root filenames above are read; unusual layouts need a curated entry or a force-include plus manual text in curated.
.unitypackageinstall. If OxHeart was imported as a.unitypackagerather than UPM,games.moomoo.oxheartwill not appear in the package list (the default self-exclude is harmless).
Related¶
- Editor Menu Reference — menu paths
- Third-Party Notices sample under
Samples/ThirdPartyNotices/— in-game display reference (ThirdPartyNotices.unityis camera + component only; no engine initializer)