React Router Patterns

The React Router experience, reimagined for Svelte with declarative routing and data loading patterns.

Routing Patterns

Live Demo Declarative Mode
Declarative Routing

Router Type: Browser Router

Uses the HTML5 History API for clean URLs (/profile)

Key Features

  • Component-based route definitions
  • Nested routing support
  • Navigation hooks (useNavigate, useLocation)
  • Route transitions and animations
  • Catch-all routes for 404 handling
<script lang="ts">
  import { Routes, Route, BrowserRouter, HashRouter, MemoryRouter } from "$lib/index.js";
  import { browser } from "$app/environment";
  import type { RouterType } from "$components/showcase.svelte";

  import Home from "./home.svelte";
  import Profile from "./profile.svelte";
  import Settings from "./settings.svelte";

  interface DeclarativeRouterProps {
    routerType: RouterType;
  }

  let { routerType }: DeclarativeRouterProps = $props();
</script>

{#if routerType === "browser" && browser}
  <BrowserRouter children={routes} />
{:else if routerType === "hash" && browser}
  <HashRouter children={routes} />
{:else}
  <MemoryRouter children={routes} />
{/if}

{#snippet routes()}
  <Routes>
    <Route path="/" Component={Home} />
    <Route path="/profile" Component={Profile} />
    <Route path="/settings" Component={Settings} />
    <Route path="*">
      {#snippet element()}
        <div class="text-center py-8">
          <h2 class="text-xl font-bold mb-2">404 - Page Not Found</h2>
          <p class="text-muted-foreground">The page you're looking for doesn't exist.</p>
        </div>
      {/snippet}
    </Route>
  </Routes>
{/snippet}