// the find
vuejs/vue-router
🚦 The official router for Vue 2
The official router for Vue 2, now end-of-life alongside Vue 2 itself. If you're maintaining a Vue 2 app you haven't migrated yet, this is still what you reach for — it's battle-tested and the docs are genuinely good. For anything new, use vuejs/router (Vue Router 4) instead.
Navigation guards are well-designed — beforeEach, beforeResolve, and afterEach give you clean interception points without fighting the framework. Lazy-loading via dynamic imports works out of the box with webpack and Vite code-splitting. The scroll behavior hook is a rare feature that actually handles the restore-on-back case properly. Docs are thorough and translated into six languages, which is more than most projects bother with.
Both Vue 2 and this router are officially end-of-life — security patches are not guaranteed and the maintainers have said as much in the README. The composition API story is bolted on via a separate composables shim rather than being native, so $route and $router as instance properties is still the idiomatic path, which ages poorly. No typed routes — you get string-based route names with no compile-time checking, a problem Vue Router 4 later addressed with typed router plugins. The Flow type annotations (not TypeScript) are a relic that makes contributing or reading the source awkward in a world that has standardized on TS.