Library / SDK
unity-atoms/unity-atoms avatar
unity-atoms/unity-atoms

Unity Atoms: modular Scriptable Objects for Unity

⚛️ Tiny modular pieces utilizing the power of Scriptable Objects

1,393 stars136 forksC#MIT

At a glance

What is it?
Unity Atoms is a C# package collection that connects small systems through Scriptable Objects. It suits Unity developers who want less direct coupling between scripts, although the README does not provide a first-use API example.
Who is it for?
Unity Atoms is appropriate for developers already using Unity 2022.2 or later who want their game systems to communicate through composable Scriptable Objects. It is a poor fit for a small project that can remain simpler with direct references.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 99 days ago.
What is it written in?
Mainly C#, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Unity Atoms addresses direct coupling between game systems

Unity Atoms targets a specific architectural problem in Unity: scripts and systems commonly become tightly connected, producing a codebase that the README describes as monolithic, cumbersome to test, and difficult to debug. The library offers small composable units called Atoms, built around Unity Scriptable Objects, so systems can exchange data without every component needing a direct reference to every other component.

The intended users are Unity developers working on projects where input, UI, state transitions, tags, mobile behavior, scene management, or similar concerns need to be arranged as separate systems. This is an architectural library, not a ready-made gameplay framework. The repository does not claim to supply a complete game, a general-purpose dependency injection container, or a replacement for Unity's built-in components.

The flexibility is also a decision point. A system assembled from many small pieces needs clear ownership and understandable data flow. The README gives a concise motivation, but it does not document a specific production-scale setup in enough detail to establish which atom pattern fits a given project. The hosted documentation is therefore relevant to architectural evaluation, rather than something to consult only after installation.

Scriptable Objects carry data and actions between Atoms

Based on the repository description, Unity Atoms uses Scriptable Objects as persistent, editable assets around which small modules are composed. The project calls these modules "Atoms" and presents them as modular pieces intended to improve separation between scripts and systems. Scriptable Objects let values and behavior be represented as Unity assets rather than being confined to one scene component.

The visible package layout supports a broad systems-oriented scope. The root package publishes separate directories for `Core`, `BaseAtoms`, `FSM`, `Mobile`, `SceneMgmt`, `Tags`, `UI`, `MonoHooks`, and `InputSystem`. This layout indicates that Core provides the foundation, Base Atoms supplies common building blocks, and the remaining directories isolate optional domains.

The README does not expose the internal listener API, initialization sequence, serialization rules, or update order for a particular Atom. It also does not show a value moving from a producer to a consumer. Accordingly, the exact runtime graph cannot be confirmed from the README and repository metadata. The defensible architectural claim is narrower: Unity Atoms is designed around modular Scriptable Object assets that can be composed into game systems. Its documentation site is the source for concrete type names and wiring patterns.

Installing Unity Atoms Core and Base Atoms under Unity 2022.2

The README requires Unity 2022.2 or later. The most direct documented installation path uses Unity's Package Manager and pins both required packages to release `v4.6.2`. Core and Base Atoms are mandatory; optional subpackages can be added by changing the repository path.

In Unity's Package Manager window, add `https://github.com/unity-atoms/unity-atoms.git?path=/Packages/Core#v4.6.2` for Core and `https://github.com/unity-atoms/unity-atoms.git?path=/Packages/BaseAtoms#v4.6.2` for Base Atoms. After installation, the Package Manager should list `com.unity-atoms.unity-atoms-core` and `com.unity-atoms.unity-atoms-base-atoms` at the requested release rather than reporting a failed Git dependency.

Pinning the release tag makes the installed package revision explicit. A moving branch reference would make later package resolution less predictable, while release tags also require the project team to review future upgrades separately.

For a first real use, the README stops at installation. It does not name a concrete Atom asset to create, a code type to derive from, or Inspector fields to connect. Rather than invent an API tutorial, an engineer should use the linked documentation to identify the appropriate Base Atom, create it as a Unity asset, connect it to a producer and consumer, and confirm the connection in the Inspector. The repository confirms the package installation, but it does not document the exact editor steps for that first graph.

Optional registry packages expand the maintenance surface

The README documents three distribution routes. The Package Manager route uses Git URLs, the npm route uses the `com.unity-atoms.*` scope, and the OpenUPM route offers individual packages through `openupm-cli`. These routes do not install the entire repository by default. The required Core and Base Atoms packages remain the common baseline.

OpenUPM documents separate installation commands for optional domains. Run only the commands corresponding to packages the project will actually use.

bash
openupm add com.unity-atoms.unity-atoms-core
openupm add com.unity-atoms.unity-atoms-base-atoms

Available optional commands cover the `fsm`, `mobile`, `mono-hooks`, `tags`, `scene-mgmt`, `ui`, and `input-system` packages. Each command names one package rather than pulling every feature into the project.

That choice matters for upgrades. The repository's `publish:all` script publishes Core, Mobile, SceneMgmt, Tags, UI, MonoHooks, BaseAtoms, FSM, and InputSystem as separate packages. The README also warns that subpackages may have additional dependencies. Installing only the required pair keeps the dependency set smaller, while adding UI, input, or state-machine packages can increase integration and upgrade work.

The root `package.json` reports version `4.6.2` and declares Unity `2022.2`. The README's npm example still shows `4.6.1`, so the two documented installation routes are not synchronized to the same example version. Teams using npm should verify package availability and project dependency resolution before standardizing that route.

Unity Atoms and direct MonoBehaviour references solve different coupling problems

A direct-reference architecture in Unity passes serialized component references from one MonoBehaviour to another. That is easy to inspect and understand for a small feature, but references can spread through the project and make replacement or isolated debugging more difficult. Unity Atoms is an alternative when the project wants systems to coordinate through shared Scriptable Object assets rather than explicit component-to-component links.

The difference is architectural, not cosmetic. Direct references bind one scene component to another. An Atom-based arrangement can represent the relevant value or action as an asset that other systems consume, provided the documented type and connection model is used correctly. This can make domain boundaries clearer and lets designers edit certain data through Unity assets. The README explicitly identifies runtime editability as a goal.

The trade-off is indirection. Instead of following one serialized field, an engineer must understand which asset owns a value, which system writes it, which system listens, and when those systems initialize. A tiny game with one player controller, one UI object, and a handful of events may gain little from that model. Unity Atoms becomes more defensible as the number of independent domains and combinations grows.

The library also does not remove the need for testing. Its modularity claim is intended to make testing easier, but no test examples, coverage figures, or supported mocking strategy appear in the README. That benefit remains a design goal, not a verified outcome.

Release activity is current, while usage documentation remains thin

The repository is not archived, and the last push was on 2026-07-17. Recent releases include `v4.6.2` on 2026-06-20, `v4.6.1` on 2026-03-08, and `v4.5.0` on 2023-12-19. These dates show recent repository and release activity, but they do not establish compatibility with every Unity project or remove upgrade work between package versions.

Unity Atoms is published as several packages rather than one indivisible runtime. An upgrade may therefore involve a new Core release, a matching Base Atoms release, and changes in whichever optional packages a project uses. The README does not document a formal semantic-versioning policy, migration procedure, deprecation period, or rollback process. A root `CHANGELOG.md` file is present in the repository layout, but its contents are not reproduced in the README, so no specific upgrade procedure can be stated from that file.

The project uses the MIT license. That means the repository declares a permissive MIT license, subject to the license text and its notice requirements. This review does not interpret how those terms apply to a particular game or commercial distribution. Anyone concerned about bundled dependencies should review those packages separately rather than assuming every subpackage is covered by the root package's declared license.

Documentation for Unity Atoms is separate from package setup

Unity Atoms has substantial repository structure for documentation: the top level includes `docs/`, `website/`, sidebars, a Docusaurus Dockerfile, and a Docker Compose service. The README links to `https://unity-atoms.github.io/unity-atoms` for usage documentation and points to a separate philosophy page.

The documentation website is built separately from consuming the Unity packages. Its Dockerfile uses `node:12.18.3`, runs `yarn install`, and starts the site with `yarn start`. Docker Compose maps ports `3000` and `35729` from the `docusaurus` service. These files support maintenance of the documentation component; they are not required steps for installing Unity Atoms in a Unity project.

This separation creates a practical evaluation gap. The package README is effective for requirements, package locations, and installation routes, but it does not contain a complete first-use tutorial. A prospective adopter must consult the hosted documentation for concrete Atom classes, editor workflows, initialization details, and supported integration patterns. Without that step, the README is enough to understand the architectural intent but not enough to validate the implementation details for a particular game.

Editorial conclusion

Unity Atoms is appropriate for developers already using Unity 2022.2 or later who want their game systems to communicate through composable Scriptable Objects. It is a poor fit for a small project that can remain simpler with direct references. Before adoption, verify the package-specific Atom types in the linked documentation, choose Core and Base Atoms deliberately, and check that optional subpackages do not introduce dependencies your project does not need.

Frequently asked questions

What Unity version does Unity Atoms require?

Unity Atoms requires Unity 2022.2 or later. The root package metadata also declares Unity `2022.2`.

Which Unity Atoms packages are required?

The README identifies Core and Base Atoms as mandatory. Packages for FSM, mobile, MonoHooks, tags, scene management, UI, and input are optional.

How do I install Unity Atoms from Git?

Add the documented Git URLs for `/Packages/Core` and `/Packages/BaseAtoms` in Unity's Package Manager, both pinned to `#v4.6.2`. Additional packages use different repository paths.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. Releases
  5. unity-atoms/unity-atoms on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/unity-atoms-unity-atoms.svg)](https://hysenlabs.com/projects/unity-atoms-unity-atoms)

Was this useful?