Architecture & Distribution

💡 TL;DR — most users only need Luna.

If you just want the UI Toolkit component library, install com.cupkekgames.luna from the Asset Store. Done. Luna ships with its deps bundled as transitives — the foundation primitives plus data and graphs, which power Luna's catalog-keyed nav-graph navigation. The gameplay domain packages (rpgstats, inventory, gamesave, etc.) are still not required.

Gameplay domain sibling packages are only required by the GameFull sample (and by you, if you want to build a full game on top of the same systems Luna ships with). They're entirely optional.

This page documents the full CupkekGames ecosystem — 49 packages organized into three tiers (foundation primitives, direct foundation dependents, domain layer), the dep graph between them, and the editor windows that automate sibling-package installs.

Distribution at a glance

What you wantWhat you install
Luna UI Toolkit component library onlycom.cupkekgames.luna from Asset Store. That's it.
Run the GameFull sampleLuna + click Install GameFull Packages in Tools > CupkekGames > Package Manager (writes the CupkekGames UPM scoped registry to your manifest, then installs the domain sibling packages atomically)
Full CupkekGames ecosystem for your own gameSame as above — Luna + the domain sibling packages

Luna's package.json > dependencies declares the foundation primitives it needs plus data and graphs (as of 2.0.0). The Asset Store listing bundles those alongside Luna, so installing Luna is a single one-package import.

Foundation primitives

Single-concern, (near-)leaf packages. These were extracted from the former core package. Three declare small internal deps: keyvaluedatabases → editorui, packagemanager → editorui, input → keyvaluedatabases (+ com.unity.inputsystem).

PackageProvides
com.cupkekgames.singletonsSingleton<T> MonoBehaviour base
com.cupkekgames.poolIObjectPool<T>, GameObjectPool*, ObjectPoolBase, ObjectPoolSO + Factory pattern
com.cupkekgames.fadeablesFadeable, FadeableMono, FadeableColor/Position/Scale, EasingType
com.cupkekgames.keyvaluedatabasesSerializable Dictionary-like database + drawer
com.cupkekgames.editoruiReusable editor widgets (IMGUI / UIElements)
com.cupkekgames.editorinspectorMultiLineHeaderAttribute, FolderReference + drawers
com.cupkekgames.packagemanagerTools > CupkekGames > Package Manager window + scoped-registry installer
com.cupkekgames.inputUnity Input System integration (InputDeviceManager, InputIcons, EscapeAction)

Direct foundation dependents

PackageDirect depsProvides
com.cupkekgames.prefabloaderskeyvaluedatabasesIPrefabLoader, PrefabLoader<TKey>, PrefabLoaderString
com.cupkekgames.assetfinderkeyvaluedatabases, editorui[AssetFinder] attribute + populator toolbar
com.cupkekgames.servicesassetfinder, editorui, editorinspectorServiceRegistry / ServiceProvider — DI pattern

Domain layer

PackageDirect depsProvides
com.cupkekgames.lunadata, graphs, services, singletons, pool, fadeables, keyvaluedatabases, prefabloaders, assetfinder, editorui, editorinspector, inputUI Toolkit component library + nav-graph navigation + UIPrefabLoader binding
com.cupkekgames.datakeyvaluedatabases, editorui, assetfinder, servicesIData / DataSO / asset catalog / DropTable / Primitives
com.cupkekgames.graphsdata, editoruiNode-graph framework — GraphAssetSO base, graph editor window, runtime debug registry
com.cupkekgames.gamesavedataGameSaveManager<TData,TMeta>
com.cupkekgames.newtonsoftdata, services, addressableassets, scenemanagement, sequencer, settings, gamesave, com.unity.nuget.newtonsoft-jsonNewtonsoft adapter for data
com.cupkekgames.scenemanagementsingletons, keyvaluedatabases, editorinspectorSceneSO + SceneLoader (versionDefine: addressables)
com.cupkekgames.rpgstatsluna, data, servicescharacter stats / attributes / modifiers
com.cupkekgames.inventoryluna, data, services, rpgstats, singletonsitems + equipment + drag/drop
com.cupkekgames.addressableassetspool, keyvaluedatabases, prefabloaders, luna, com.unity.addressablesAddressables wrapper + addressables-flavored PrefabLoader variants
com.cupkekgames.sequencerscenemanagement, services, singletons, keyvaluedatabasesBoot sequencer + bridges
com.cupkekgames.settingssingletons, keyvaluedatabases, editorinspector, input, luna, data, sequencer, services, addressableassets, scenemanagement, gamesave, com.unity.localization, com.unity.inputsystem, com.unity.render-pipelines.universalSettingsSystem + UI.Settings panel
com.cupkekgames.inkbridgekeyvaluedatabases, lunaInk narrative engine integration (Ink Unity Integration is installed separately — not a declared dep)

Luna-free packages: all foundation primitives, foundation dependents (prefabloaders, assetfinder, services), plus data, graphs, gamesave, scenemanagement. The rest depend on luna (directly or transitively — newtonsoft pulls it via addressableassets/settings).

Transitives note: because Luna depends on data and graphs, installing Luna also pulls their own deps — data brings assetfinder + services, and graphs sits on data + editorui. The whole chain ships bundled with the Asset Store package.

Distribution model

  • Asset Store ships only com.cupkekgames.luna. Its deps (foundation primitives + data + graphs) are bundled alongside as transitive deps.
  • CupkekGames UPM scoped registry at https://www.docs.cupkek.games/upm serves all 49 packages. Tarballs live in each repo's GitHub Releases under the Cupkek-Games GitHub org; the registry is a dynamic Next.js route handler that reads them at request time and returns npm-compatible packument JSON. Updates surface natively in Unity's Package Manager UI. On Unity 6.3+ the Package Manager also labels each package's signature status; see the troubleshoot note for what the labels mean on third-party registry packages.

End-users don't manage manifest entries by hand. They use the editor window described below.

Package Manager window

Tools > CupkekGames > Package Manager — the dedicated editor window for the sibling-package install flow. Lives in com.cupkekgames.packagemanager (the bootstrap package — install it first via git URL or local file: path, then it writes the scoped registry into your Packages/manifest.json so the rest resolve via the registry).

  • Compact one-line rows: status icon + display name + package id + tag chips + version (when installed) + Install button (when missing).
  • Header toolbar: <installed>/<total> installed count badge + Refresh + Install GameFull Packages (N).
  • One-click bulk install. Writes the CupkekGames scoped-registry block to your Packages/manifest.json (idempotent — checked first, only written if missing) then issues a single UnityEditor.PackageManager.Client.AddAndRemove for all package ids. Unity resolves the whole graph atomically — one manifest write, one domain reload.
  • Last-error footer shows the reason if an install fails.
  • Auto-opens once on first project load when any GameFull-tagged packages are missing (gated by EditorPrefs so it doesn't nag every reload).

The package list lives in com.cupkekgames.packagemanager/Editor/CupkekGamesPackageRegistry.cs (each entry has PackageId, DisplayName, Tags). The installer wraps Client.AddAndRemove + manifest-bootstrap in Editor/CupkekGamesPackageInstaller.cs.

LunaUI Panel

Tools > CupkekGames > LunaUI Panel is the asset's intro screen, distinct from the Package Manager window. It is the only window that auto-opens in a clean project (on first install, and again when a new sample import is detected, via [InitializeOnLoadMethod] + EditorPrefs), so it doubles as the guided setup: a single page where only actionable things render, finished steps collapse, and health warnings appear only when something is actually broken.

LunaUI Panel intro screen on first open: the required Import the Essentials sample card, the optional Try the demos card, Build your own UI links, and the amber Extra: GameFull card showing 0 of 10 packages installed

  • Broken-install alert: renders only if any of Luna's 8 bundled dependency packages is missing (a red alert with the count and a package list). A healthy install shows nothing.
  • Essentials: the one required step. A "Required" card with a one-click Import Essentials button; after import it collapses to a slim "Essentials imported" line with a Theme Stack docs link.
  • Try the demos (optional): Import Showcase (imports Essentials first automatically), Open LunaShowcase Scene, an input-actions hint with an Open Input Settings shortcut, and a link to the component demos.
  • Build your own UI: Quick Start and First View doc links.
  • Extra: GameFull: an amber card that keeps the separate GameFull journey in one place: a live "N of 10 packages installed" count over the sibling packages, a copy button for the Package Manager git URL, docs links, a warning when the sample was imported before its packages, and Add/Remove Build Settings buttons for the demo scenes once the sample and all packages are present.

LunaUI Panel after setup: Essentials collapsed to a slim imported line with a Theme Stack docs link, Open LunaShowcase Scene enabled, and the amber Extra: GameFull card still pending

Implementation: Editor/LunaUIWindow.cs (in the installed Luna package).

Settings

Theme

Light

Contrast

Material

Dark

Dim

Material Dark

System

Sidebar(Light & Contrast only)

Light
Dark

Font Family

DM Sans

Wix

Inclusive Sans

AR One Sans

Direction

LTR
RTL