Skip to content

Free MIT template · Day 6 of 365

You're looking at a demo. Download the built static files (drop on any host) or grab the full source to customize.

↓ Download static ↓ Source (Astro) All 365 →Build with me →

# Changelog

All notable changes to routekit will be listed here. The format follows Keep a Changelog, and routekit adheres to Semantic Versioning.

## 1.0.0 — 2026-04-15

The first stable release. The API is now frozen for the 1.x line; breaking changes will land in 2.0 and require a deprecation cycle.

### Added

- `defineConfig()` helper for `routekit.config.ts` (forward-compatible with the planned codegen CLI).
- `meta` field on `RouteDefinition`, exposed as `match.meta` at runtime.
- React adapter (`routekit/react`) with `<Router />` and `useRoute()`.
- `isActive(href, url, options?)` utility for active-link styling.
- Wildcard routes (`/files/*`) capture remaining segments as `params.wildcard`.

### Changed

- Default `scrollBehavior` is now `'auto'` (was `'manual'` in pre-1.0). The new default scrolls to top on forward nav and restores on back/forward.

### Removed

- `router.subscribe()` (deprecated in 0.9.0). Use `router.on('navigate', ...)` instead.

## 0.9.0 — 2026-02-01

Breaking change

This release renamed the primary subscription API from `router.subscribe()` to `router.on(event, handler)`. Migration is mechanical:

    router.subscribe((match) => render(match));router.on('navigate', ({ match }) => render(match));

The old API is removed in 1.0.

### Added

- Multiple event types: `navigate`, `no-match`, `before-navigate`, `after-navigate`.
- TypeScript: `Match<T>` is now a discriminated union keyed by `path`.

## 0.8.0 — 2025-11-12

### Added

- Hash-based routing via `{ hash: true }` option. For environments that can’t fall back to `index.html`.
- Programmatic `router.replace()` (does not push history).

### Fixed

- Cmd-click and middle-click on `<a>` elements no longer trigger router navigation (matches browser native behavior).

## 0.7.0 — 2025-09-04

### Added

- `RouteDefinition.meta` (typed as `Record<string, unknown>`).
- `match.state` field for `pushState`-style state passing.

### Fixed

- Trailing slash matching is now consistent: `/posts/` and `/posts` match the same route. Previously inconsistent across `match()` and `start()`.

## 0.6.0 — 2025-07-21

### Added

- First TypeScript-first release. Generic types via `as const` route tables.
- Tree-shakable bundle: importing only `createRouter` and `useRoute` lands ≤2 KB.

### Removed

- IE11 polyfill. routekit now targets ES2020.

## 0.5.0 — 2025-05-10

Initial public release. CHANGELOG started here. Earlier versions were internal.