// the find
drakeet/Floo
:octocat: A dynamic URL router for Android
Floo is an Android URL router. You register URL patterns against target activities or URIs and navigate by URL instead of building Intents directly. Every request passes through interceptors before it resolves to an Intent, so logging, deep-link handling, and web fallback can live in one place. It suits apps with heavy cross-screen or cross-app linking that want a single routing table.
- The pipeline has distinct hook points. Request interceptors see the fully built URL, target interceptors see the resolved target, and TargetNotFoundHandlers run only on a miss. The README spells out that ordering, and it matches how a deep-link router should behave.
- StackStates offers popCount, target, and result in one fluent chain, so a single call can unwind the back stack to a given page and return a result to it. Doing that by hand means a fair amount of Activity result plumbing.
- The library is small. It is one package plus an extensions subpackage with a handful of interfaces (Interceptor, TargetNotFoundHandler, IntentHandler). Swapping in a custom IntentHandler, as the sample's FragmentIntentHandler does, is simple.
- The last push was April 2019, and the README still carries a note about an AndroidX rebuild. Anyone adopting it now is taking on a dependency that has seen no commits in seven years, so any fixes needed for current Android releases fall on the adopter.
- The routing table is a string-keyed map passed to Floo.apply at startup. A typo in a mapping or a malformed JSON entry only fails at runtime, and nothing type-checks the URLs or the extras passed through putExtra.
- The library is Java only, and the chained Navigation builder with string keys reads awkwardly from Kotlin. Nothing in the visible tree targets Kotlin callers.
- Jetpack Navigation's deep-link support now covers much of the in-app case. This is worth the dependency mainly if you need interceptor-level control or cross-app URL routing that Navigation does not provide.