whirl is a free, open source ai interaction & interfaces project written in TypeScript and released under MIT. It has 505 GitHub stars, 48 forks and 1 open issues, and was last pushed 6 days ago. On this registry it ranks #142 of 147 tracked projects in AI Interaction & Interfaces, with 5 head-to-head comparisons available.

What is whirl?

Whirl is an MIT-licensed, full-stack AI chat application built on Next.js and Convex, for anyone who wants to run their own multi-model chat interface — whether for personal use, self-hosting, or contributing to an open-source project.

What it is

Whirl is the complete source behind whirl.chat: a full-stack AI chat app written in TypeScript and published in full under the MIT license. It is built on Next.js 16 and React 19 for the web app, Convex for the database, functions, streaming, and crons, Clerk for authentication, and OpenRouter — used through the AI SDK — to route model requests. Bun workspaces tie the tooling together, and the repository also ships an admin console built with Vite, an Expo-based native app, and a package containing the Convex backend schema, functions, and AI pipeline.

The concrete problem it addresses is that a capable chat interface normally means assembling and maintaining many separate pieces: model routing, persistent memory, document editing, tool integrations, search, and privacy controls. Whirl brings these into one application, replacing a collection of standalone utilities with a single interface where every top model sits in one conversation with adjustable thinking levels, memory carries across chats, and artifacts such as documents, charts, and interactive pages remain editable and shareable.

Key capabilities

  • Routes every top model through OpenRouter in a single conversation, with adjustable thinking levels.
  • Produces living artifacts — documents, charts, and full interactive pages — that stay editable in a side panel and can be shared by link.
  • Connects to your own tools over MCP, with OAuth included, and supports installable skills that teach the app new behaviour.
  • Maintains long-term memory that carries preferences and projects across chats, powered by Supermemory when enabled.
  • Performs live web search and page reading for answers grounded in the current web, using Exa when configured.
  • Offers locked chats encrypted on your device with a password the server never sees, answered only by zero-retention models, alongside an incognito mode.
  • Includes message queueing, voice input, image generation, file attachments, folders, sharing, light and dark mode, accent colours, and an installable mobile web app.

Who uses it and how

  • Developers self-hosting the app locally and in production, following the repository's self-hosting guide, which covers the Clerk JWT template Convex requires.
  • Operators who enable only the integrations they need, adding their own keys for billing (Autumn), search (Exa), memory (Supermemory), analytics (PostHog, Axiom), tracing (Braintrust), email (Resend), and the support agent (Median), with Whirl hiding any features left unconfigured.
  • Contributors working across a monorepo that separates the production Next.js app in apps/v2, an admin console in apps/console, a native app in apps/mobile, and the Convex backend in packages/backend.
  • Users who want a mobile experience without a separate install, running Whirl as an installable mobile web app with light and dark mode.

Getting started

Clone the repository, run bun install, create a Convex deployment with bunx convex dev from packages/backend, set the CLERK_JWT_ISSUER_DOMAIN and OPENROUTER_API_KEY secrets, fill in .env.local under apps/v2, and start everything from the repo root with bun run dev to open localhost:3000.

How it compares

No list of paid products this project replaces is given, and the registry names no comparable tools alongside it, so Whirl stands alone here as a self-hosted, MIT-licensed chat application.

When to use it — and when not

A self-hoster must operate a Convex deployment, a Clerk application, and an OpenRouter API key at minimum, and switches on each optional capability — billing, search, memory, analytics, tracing, email, support — separately with its own credentials, so this is not a single-binary install. It suits people comfortable with a Bun, Next.js, and Convex stack who want control over their data and configuration; anyone wanting a zero-setup hosted chat client should look elsewhere. Note also that apps/legacy, the previous web app, is kept only for reference and is not maintained.

project readme (upstream, from github) — read inline

Whirl

The AI chat app that sweats the details. Every top model, real memory,
living documents, and your own tools, in one fast and friendly place.

whirl.chat · Self-hosting · Architecture · Contributing


Whirl is a full-stack AI chat app built on Next.js and Convex. It's the code behind whirl.chat, published in full under the MIT license. Read it, run your own, or help make it better.

Features

  • Every top model in one conversation, routed through OpenRouter, with adjustable thinking levels.
  • Living artifacts: documents, charts, and full interactive pages that stay editable in a side panel and can be shared by link.
  • Integrations with your own tools over MCP (OAuth included), plus installable skills that teach Whirl new tricks.
  • Long-term memory that carries preferences and projects across chats.
  • Live web search and page reading for answers grounded in today's web.
  • Locked chats, encrypted on your device with a password the server never sees, answered only by zero-retention models.
  • Incognito mode, message queueing, voice input, image generation, file attachments, folders, sharing, and a lot of care around motion and polish.
  • Light and dark mode, accent colors, and an installable mobile web app.

Tech stack

Layer What it uses
Web app Next.js 16, React 19, Tailwind CSS v4, Motion
Backend Convex: database, functions, streaming, crons
Auth Clerk
Models OpenRouter via the AI SDK
Tooling Bun workspaces, TypeScript

Everything beyond Convex, Clerk, and OpenRouter is optional and switches on with its own keys: billing (Autumn), web search (Exa), memory (Supermemory), analytics (PostHog, Axiom), tracing (Braintrust), email (Resend), and the support agent (Median). Leave them out and Whirl hides the features they power. See docs/configuration.md.

Quick start

You'll need Bun, a free Convex account, a Clerk application, and an OpenRouter API key.

git clone https://github.com/whirlchat/whirl.git
cd whirl
bun install

# 1. Create a Convex dev deployment and push the backend.
cd packages/backend
bunx convex dev            # first run walks you through creating a project

# 2. In another terminal, give the backend its secrets.
bunx convex env set CLERK_JWT_ISSUER_DOMAIN https://your-instance.clerk.accounts.dev
bunx convex env set OPENROUTER_API_KEY sk-or-v1-...

# 3. Point the web app at Convex and Clerk.
cd ../../apps/v2
cp .env.example .env.local  # then fill in the four required values

# 4. Run everything from the repo root.
cd ../..
bun run dev

Open localhost:3000 and say hi. The self-hosting guide covers each step in detail, including the Clerk JWT template Convex needs and how to deploy to production.

Repository layout

apps/
  v2/         The web app (Next.js). This is the one in production.
  console/    Admin console for models, integrations, and skills (Vite)
  mobile/     Native app (Expo)
  waitlist/   Standalone waitlist page
  remotion/   Promo video compositions
  legacy/     The previous web app, kept for reference. Not maintained.
packages/
  backend/    Convex backend: schema, functions, and the AI pipeline
docs/         Guides for self-hosting, configuration, and architecture
brand/        Logo, colors, banners, and app icons

Documentation

  • Self-hosting: run Whirl locally and in production
  • Configuration: every environment variable and what it switches on
  • Architecture: how a message travels from the composer to the model and back
  • Contributing: conventions, checks, and pull requests

Contributing

Bug reports, ideas, and pull requests are all welcome. Start with CONTRIBUTING.md, and please follow the code of conduct. Found a security issue? See SECURITY.md.

License

MIT © Anterra

Frequently asked questions

Is whirl free to use?

whirl is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does whirl do?

The AI chat app that sweats the details. Every top model, real memory, living documents, and your own tools.

What is whirl written in?

whirl is primarily written in TypeScript. Its source is publicly available at https://github.com/whirlchat/whirl, and it has 505 GitHub stars.