Repository navigation
Releases: Alims-Repo/NavEase
Release list
v0.2.0 — @AutoRegister only
NavEase 0.2.0 reduces the library to a single way of declaring a navigation graph — @AutoRegister — and fixes the defects found in what remains.
Breaking changes
Removed, along with everything that supported them:
@NavEaseScreen,@NavEaseArgs,@NavEaseResultand their route-string code generation- the
navEaseGraph { }DSL —NavEaseGraph,NavEaseEntry,NavEaseGraphBuilder - the
NavEaseHost(start) { add(Screen()) }manual-registration overload NavEaseNavGraph,AppNavGraphand theNavScreenfactory type- the whole
runtime.presentationpackage of deprecated typealiases NavEaseAutoRegistry.generatedClassHintandnavEaseInit()
Migration. Annotate each screen with @AutoRegister, extend ActivityScreen<K> directly, and host with NavEaseHost<Root>(start = ...). Screens must now be constructible with no arguments — take dependencies inside Content() instead. If you imported LocalNavAnimatedContentScope from the internal package, switch to LocalNavEaseAnimatedContentScope in runtime.composition.
Fixes
Multi-module builds could not link. NavEaseHostOverloads.kt was written to a fixed name in the runtime's package, so two modules produced the same class. The file name now carries the module's generated package.
Keys with the same simple name across roots broke code generation. Generated code referenced keys and roots by simple name over flat imports, so two roots each declaring a Detail produced conflicting imports and a duplicate serializer object. Every reference is now fully qualified.
A stale generated overload failed silently. A call that missed it fell through to the runtime's generic host, which never bootstrapped the registry — so the app worked on Android and died on iOS. It now fails on every platform with a message naming the cause.
Deserialization. A missing element left a null that was cast to a non-null type, giving a ClassCastException with no field name; an unknown element threw. Missing elements are now named in the exception, and unknown ones are skipped, so removing a key parameter no longer breaks restore.
Keys under an intermediate sealed layer resolved to the wrong root, and their host reported no screens. Resolution now walks to the outermost NavEaseRoot ancestor.
Screens were shared between hosts. One instance per screen was constructed at bootstrap and shared by every host. Screens are now registered as factories and built per host.
Non-deterministic output. Generated files changed between builds because KSP returns symbols in an unspecified order. Entries are sorted.
Gradle plugin. No longer writes source files during configuration, which made it configuration-cache hostile. Applying it to a module with no screens no longer breaks the build. A failure to add the processor now fails the build instead of logging a warning and generating nothing. Module names are sanitised into legal package segments. addNavigation3Dependency, navigation3Dependency and forceNavigation3Version are gone — they were documented at length but their implementation was commented out.
Also
- New build-time checks: a screen must be concrete and constructible with no arguments, and all duplicate keys are reported in one build.
- 37 tests across the processor, the codegen, the registry and the plugin. The processor previously had none.
- The vendored AndroidX Navigation 3 sources now carry their Apache-2.0 attribution, with a
NOTICEnaming the upstream project. - The public API dump was regenerated; it still described the pre-fork API and
apiCheckwas not catching it. CI now runs tests,apiCheckand a sample build on every push and pull request. - README and the documentation site rewritten around the single path, with new sections on multi-module layout and troubleshooting.
Known constraint
All screens for a given sealed root must live in one module: that root's host overload is generated by the module owning those screens. A root per feature module is the intended shape.
v0.1.4
v0.1.3
What's Changed
- Development by @Alims-Repo in #1
- Development by @Alims-Repo in #2
- Development by @Alims-Repo in #3
- Development by @Alims-Repo in #4
- Development by @Alims-Repo in #5
- updated doc and other minor changes by @Alims-Repo in #6
- Development by @Alims-Repo in #7
- Development by @Alims-Repo in #8
- Development by @Alims-Repo in #10
- Require explicit start destination and improve registry initialization by @Alims-Repo in #11
New Contributors
- @Alims-Repo made their first contribution in #1
Full Changelog: v0.1.2...v0.1.3
v0.1.2
v0.1.1
v0.1.0: feat(gradle-plugin): auto-apply Kotlin Serialization compiler plugin
- Apply org.jetbrains.kotlin.plugin.serialization automatically so @Serializable works on client screen classes out of the box - Same hasPlugin() guard as KSP: skips if consumer already declared it - kotlinx-serialization-core is already exposed via navease-runtime api(), so the runtime dependency is covered transitively — zero boilerplate needed
v0.0.9: build: update navease-runtime API dump for 0.0.9
Re-generated api/jvm/navease-runtime.api after public API changes introduced in the 0.0.9 development cycle.
v0.0.8: build: migrate mavenPublish to 0.36.0 and Dokka to V2
- Bump mavenPublish 0.30.0 → 0.36.0 - Remove SonatypeHost (removed in 0.36.0); publishToMavenCentral() now defaults to Central Portal with no argument required - Remove automaticRelease = false (removed in 0.34.0; false is now default) - Replace dokkaHtml → dokkaGeneratePublicationHtml everywhere (Dokka V2 task name; V1 tasks are blocked when V2 mode is enabled) - Pin navease-runtime JVM/Android targets to JVM 11 so consumers targeting JVM 11+ can inline library functions without errors - Derive VERSION_NAME from git tag in CI via ORG_GRADLE_PROJECT_VERSION_NAME so all three modules publish the same version automatically
v0.0.7
Fix: Added a second tasks.configureEach hook that catches all tasks w…