TL;DR — most users only need Luna.
If you just want the UI Toolkit component library, install
com.cupkekgames.lunafrom the Asset Store. Done. Luna ships withcoreandinputbundled 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.
| What you want | What you install |
|---|---|
| Luna UI Toolkit component library only | com.cupkekgames.luna from Asset Store. That's it. |
| Run the GameFull sample | Luna + click Install All Missing in Tools > CupkekGames > Package Manager (installs 11 Git URLs in one go) |
| Full CupkekGames ecosystem for your own game | Same 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.
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.
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.
com.cupkekgames.luna. com.cupkekgames.core and com.cupkekgames.input are bundled alongside as transitive deps.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.
Tools > CupkekGames > Package Manager — the dedicated editor window for the sibling-package install flow.
<installed>/11 installed count badge + Refresh + Install All Missing (N).UnityEditor.PackageManager.Client.Add(gitUrl) sequentially across domain reloads. The queue is persisted to EditorPrefs so the install resumes after each domain reload.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.
Tools > CupkekGames > LunaUI Panel — the per-sample setup helper. Distinct from the Package Manager window.
[InitializeOnLoadMethod] + EditorPrefs to detect new imports across domain reloads).Implementation: Editor/LunaUIWindow.cs.
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.
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)
Font Family
DM Sans
Wix
Inclusive Sans
AR One Sans
Direction