Skip to content

Saneject 1.0.0

Choose a tag to compare

@alexanderlarsen alexanderlarsen released this 16 Apr 06:43
· 28 commits to main since this release
caed436

Full framework rewrite

  • Saneject 1.0.0 is a full rewrite of the framework rather than an incremental update.
  • The core architecture has been rebuilt around a clearer editor-time pipeline: graph construction, context-aware filtering, binding validation, dependency resolution, injection, runtime proxy preparation, and structured logging.
  • Runtime has been reduced to a lightweight startup handoff where scopes register global components and swap runtime proxies before normal gameplay startup.
  • With this release, Saneject leaves beta and is now considered production ready.

Major changes

  • Reworked Scope and binding APIs around DeclareBindings(), typed binding families for components, assets and globals, stricter validation, and clearer qualifier/filter behavior.
  • Added a more explicit context model for scene objects, prefab instances and prefab assets, with more solid context-aware traversal, filtering, and resolution than the legacy system.
  • Rebuilt the editor tooling around the new architecture, including stronger context tooling, a more capable scope inspector, improved logging/validation, batch injection, settings, and runtime proxy utilities.
  • Replaced the old proxy workflow with the new RuntimeProxy system. Legacy proxies forwarded interface calls through generated code inside the proxy itself, while the new model injects an intentional placeholder that is swapped with the real instance during early startup. Generated proxy interface members now throw if the placeholder is accessed before swap, which makes the bridge more stable and predictable.
  • Added comprehensive architecture and API documentation, plus a broader test suite covering bindings, graph traversal, contexts, injection, scopes, proxies, inspectors, and runtime behavior.

Breaking changes

  • This is not a drop-in upgrade from the 0.x beta line. Existing projects should expect migration work.
  • Custom Scope classes must now override DeclareBindings() instead of the previous scope binding method.
  • The old ProxyObject / FromProxy() workflow has been replaced by RuntimeProxy / FromRuntimeProxy().
  • Several APIs have been cleaned up or renamed, including FromAnywhereInScene() to FromAnywhere(), and proxy generation terminology moving from ProxyObject / [GenerateProxyObject] to RuntimeProxy / [GenerateRuntimeProxy].
  • Global registration no longer uses SceneGlobalContainer; scopes now serialize and register their own global components directly into GlobalScope during startup.
  • Settings are now split more clearly into machine-local User Settings and shared Project Settings. Options that affect project-wide injection behavior and correctness now live under ProjectSettings/Saneject/ and be version controlled, while cosmetic and workflow-specific preferences remain local and stored in EditorPrefs.
  • Custom tooling or integrations built against older internal inspectors, menus, Roslyn tooling, or editor/runtime internals will likely need updates.

Summary

This release marks the end of Saneject's beta period. The new foundation is clearer, stricter and more maintainable, with production-ready editor-time injection, better context handling, stronger tooling, and a more stable and predictable runtime bridge for the cases Unity cannot serialize directly.