Skip to content
Getting Started

Introduction

Qikbar is a free, open-source command bar for any web app. It brings search, routing, actions, extensions and AI together in one tiny package.

Qikbar adds a ⌘K command bar to your web app, like Raycast, Linear or Vercel have. Users press ⌘K (CtrlK on Windows and Linux) to:

  • Search everything: pages, commands, and live records from your API
  • Navigate anywhere using your existing router
  • Act with keyboard-driven actions, forms and nested views
  • Ask AI to do things: “open the Acme project”, “invite Sam to the team”
import { createQikbar } from '@qikbar/qikbar'

createQikbar({
  routes: [
    { path: '/', title: 'Home', icon: 'home' },
    { path: '/settings', title: 'Settings', icon: 'settings' },
  ],
  commands: [{ title: 'Toggle dark mode', icon: 'moon', run: () => toggleTheme() }],
})

That’s a complete integration. Press ⌘K.

Why Qikbar

Batteries included. A command palette needs fuzzy ranking, keyboard handling, accessibility, async data, nested views, theming and, increasingly, AI. Qikbar ships all of it so you don’t have to build it.

Framework-agnostic. The core is plain TypeScript with zero dependencies. Use the vanilla API anywhere, the React bindings in React and Next.js, or a single <script> tag.

Fast. About 3.5 KB boots the shell. The UI loads when the browser is idle. Ranking 10,000 commands takes about 3 ms, and lists with 100,000 rows are virtualized.

AI-native. Connect Claude, GPT, Gemini, a local model, or a proxy to your own server. Every command, route and data source becomes a tool the model can call. Users type what they want and Qikbar does it.

Extensible. The extensions API is inspired by Raycast. It bundles commands, live sources, AI tools and user preferences into a portable package.

Yours. MIT licensed. No accounts, no tracking, no SaaS.

Core ideas

Concept What it is
Commands Items at the root of the bar: a title, an icon, and something to do
Routes Pages in your app, opened with your router
Sources Async search providers, for example records from your API
Views Screens a command can push: list, grid, detail, form, chat
Actions What you can do with the selected item (↵, ⌘↵, ⌘.)
Extensions Reusable bundles of commands, sources, tools and preferences
AI Chat and natural-language actions with any model

Everything is plain data. A command is an object, a view is an object, and an action is an object with a run function. You can generate them, serialize most of them, and an AI model can reason about them.

Where to go next

Edit this page on GitHub