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 core and input bundled as transitive deps and has zero dependency on the other 11 packages.

The 11 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 — 14 packages, the dep graph between them, and the editor windows that automate sibling-package installs for users who want the full game-scaffold experience.

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 All Missing in Tools > CupkekGames > Package Manager (installs 11 Git URLs in one go)
Full CupkekGames ecosystem for your own gameSame as above — Luna + the 11 sibling packages

Luna's package.json > dependencies declares only com.cupkekgames.core and com.cupkekgames.input. The Asset Store listing bundles those alongside Luna, so installing Luna is a single one-package import.

Package map (full ecosystem)

CupkekGames ships 14 Unity packages. Only com.cupkekgames.luna is on the Unity Asset Store; the other 11 (everything except luna + core + input) are distributed as Git URLs in the Cupkek-Games GitHub organization, and installed via the Package Manager window.

Package map

core shared utilities (Singleton, Pool, Fadeable, KeyValueDatabase, AssetFinder, base PrefabLoader) ├── input Unity Input System integration (InputDeviceManager, InputIcons, EscapeAction) ├── luna UI Toolkit component library + UIPrefabLoader binding (depends on core + input) ├── servicelocator ServiceRegistry / ServiceProvider — DI pattern ├── data IData / DataSO / asset catalog / DropTable / Primitives (depends on servicelocator) │ ├── gamesave GameSaveManager<TData,TMeta> (depends on data) │ └── newtonsoft Newtonsoft adapter for data (depends on data + servicelocator + Unity Newtonsoft) ├── scenemanagement SceneSO + SceneLoader + addressable scene loading ├── rpgstats character stats / attributes / modifiers (depends on data + servicelocator + luna) │ └── inventory items + equipment + drag-drop (depends on rpgstats) ├── addressables Addressables wrapper + addressables-flavored PrefabLoader variants (luna + Unity Addressables) ├── sequencer Boot sequencer + bridges (depends on scenemanagement + servicelocator) ├── settings SettingsSystem + UI.Settings panel (depends on data + luna + input) └── ink Ink narrative engine integration (depends on luna)

Luna-free packages: core, input, servicelocator, data, gamesave, newtonsoft, scenemanagement, sequencer. The rest depend on luna.

Distribution model

  • Asset Store ships only com.cupkekgames.luna. com.cupkekgames.core and com.cupkekgames.input are bundled alongside as transitive deps.
  • Git URLs (in the Cupkek-Games org) host the 11 remaining packages: servicelocator, data, gamesave, newtonsoft, rpgstats, inventory, addressables, scenemanagement, sequencer, settings, ink.

End-users don't manage Git URLs 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.

  • Compact one-line rows: status icon + display name + package id + version (when installed) + Install button (when missing).
  • Header toolbar: <installed>/11 installed count badge + Refresh + Install All Missing (N).
  • One-click bulk install. Internally calls UnityEditor.PackageManager.Client.Add(gitUrl) sequentially across domain reloads. The queue is persisted to EditorPrefs so the install resumes after each domain reload.
  • Last-error footer shows the reason if a single install fails (e.g. invalid URL, network error).
  • Auto-opens once on first project load when any sibling packages are missing (gated by EditorPrefs so it doesn't nag every reload).

The sibling Git URL list lives in Editor/CupkekGamesPackageRegistry.cs. The installer wraps Client.Add / Client.List in Editor/CupkekGamesPackageInstaller.cs.

LunaUI Panel

Tools > CupkekGames > LunaUI Panel — the per-sample setup helper. Distinct from the Package Manager window.

  • Two-pane split: list of imported samples on the left, detail pane on the right.
  • For LunaUI sample: shows info about the 9 component clusters and the FullScreenExamples flagship scene.
  • For GameFull sample: shows a one-line CupkekGames-package summary with an Open Package Manager button (handing off to the Package Manager window for actual installs); LunaUI sample import status with an Import LunaUI Sample button if missing; Unity / external dep checks (Input System, Addressables, Localization, Newtonsoft, Ink); Add/Remove demo scenes for Build Settings; troubleshooting tips.
  • Auto-opens when a sample is imported (uses Unity's [InitializeOnLoadMethod] + EditorPrefs to detect new imports across domain reloads).

Implementation: Editor/LunaUIWindow.cs.

Asmdef boundaries

Each package has its own asmdef(s). Cross-package references use GUIDs, not name strings — GUIDs survive folder moves and renames within their owning package, which is why the major v2 reorganization didn't break anything: only path-based URL strings (in UXML/USS) needed mechanical sed updates.

Why the split?

Pre-v2, much of the ecosystem lived in a single com.cupkekgames.systems package. That made every Luna user pull in inventory + rpgstats + sequencer + addressables whether they needed them or not, plus the systems were tightly coupled to Newtonsoft.

After the v2 split:

  • servicelocator decoupled from data — service-locator pattern is a generic DI registry, useful far beyond persistence.
  • gamesave decoupled from data — save manager is a specific use case, not core data infrastructure.
  • newtonsoft decoupled from data — Newtonsoft is one possible serializer; data should be serialization-agnostic.
  • scenemanagement decoupled from sequencer — scene loading is useful without the boot sequencer.
  • input decoupled from core — input system integration is its own subsystem (with Unity Input System dep), not a foundational utility.
  • UIPrefabLoader<TKey> chain (non-addressable) moved to luna runtime; PrefabLoader<TKey> base moved to core. Addressables variants stay in com.cupkekgames.addressables.

End result: someone using just Luna for UI Toolkit components doesn't pull in any game systems. Someone building a full game pulls in the whole stack via one click in the Package Manager window.

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