Skip to content
Frameworks

Svelte & SvelteKit

Create Qikbar in your root layout and navigate with goto.

<script lang="ts">
  import { onMount } from 'svelte'
  import { goto } from '$app/navigation'
  import { createQikbar } from '@qikbar/qikbar'
  import { calculator } from '@qikbar/qikbar/extensions'

  let { children } = $props()

  onMount(() => {
    const bar = createQikbar({
      navigate: (href) => goto(href),
      routes: [
        { path: '/', title: 'Home', icon: 'home' },
        { path: '/settings', title: 'Settings', icon: 'settings' },
      ],
      extensions: [calculator()],
    })
    return () => bar.destroy()
  })
</script>

{@render children()}

SvelteKit intercepts anchor clicks, so the default navigator already does client-side navigation. navigate is optional.

Share the instance

import { createQikbar } from '@qikbar/qikbar'
export const bar = typeof window !== 'undefined' ? createQikbar({ autoIndex: true }) : undefined

Page-level commands

<script lang="ts">
  import { bar } from '$lib/qikbar'
  let { data } = $props()
  $effect(() => bar?.register([{ title: `Edit ${data.post.title}`, icon: 'pencil', href: `/posts/${data.post.id}/edit` }]))
</script>

$effect cleans up automatically because register returns the unregister function.

AI endpoint

import { createHandler, anthropic } from '@qikbar/qikbar/server'
import { ANTHROPIC_API_KEY } from '$env/static/private'

const handler = createHandler({ provider: anthropic({ apiKey: ANTHROPIC_API_KEY }) })
export const POST = ({ request }) => handler(request)
Edit this page on GitHub