selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

Whirl logo

Self-host Whirl

AI chat app with every top model, memory, living docs

ReleaseOpen SourceMIT
Updated2 weeks ago
LanguageTypescript
Setup difficultyAdvanced
MobilePWA
ThemeDark mode
Stars
509
Ports
3000 (Web app), 3001 (Admin console)
Requires
Clerk, Convex, OpenRouter
Install with Vercel

What is Whirl?

Whirl is an AI chat application built with Next.js 16, React 19, and Convex that connects to OpenRouter for access to major language models. It offers living artifacts such as editable documents and charts, MCP integrations with OAuth for connecting external tools, persistent memory across conversations, live web search capabilities, encrypted private chats using zero-retention models, incognito conversations, voice messaging, image creation, file uploads, conversation folders, and link sharing. The interface supports light and dark themes with customizable accent colors and works as an installable mobile web app. User authentication is handled through Clerk. Running it yourself requires a Convex deployment, a Clerk application, and an OpenRouter API key, with optional integrations for billing, search, memory, analytics, tracing, email, and support features. The codebase is MIT licensed and maintained by Anterra.

Should you self-host Whirl?

Whirl scores 52/100 on selfhost.directory (how scoring works) and ranks #23 of 69 in AI Chat. It has 509 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is advanced: plan for several services and some ongoing maintenance. It is MIT-licensed and written mostly in Typescript.

Its closest alternative on selfhost.directory is LibreChat (85/100, 46 421 stars). It scores higher overall, so compare the two before you pick. See Whirl vs LibreChat side by side.

Whirl README

How to install Whirl

Install Whirl with Vercel

Any host that runs Next.js works
Environment variables
NEXT_PUBLIC_CONVEX_URL, NEXT_PUBLIC_CONVEX_SITE_URL, NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY, CLERK_SECRET_KEY, NEXT_PUBLIC_SITE_URL
  1. Import the repository and set the root directory to apps/v2.
  2. Add the environment variables from apps/v2/.env.example, using your production Convex and Clerk values.
  3. Deploy.

Also set NEXT_PUBLIC_SITE_URL to your public address on other hosts

How to configure Whirl

  • AUTUMN_SECRET_KEYEnables billing feature

    Enables billing feature

  • AXIOM_DATASETAxiom dataset name

    Axiom dataset name

  • AXIOM_TOKENAxiom ingest token

    Axiom ingest token

  • CLERK_JWT_ISSUER_DOMAINYour Clerk Frontend API URL, so Convex trusts sign-ins

    Your Clerk Frontend API URL, so Convex trusts sign-ins

  • CLERK_SECRET_KEYClerk secret key

    Clerk secret key

  • CLERK_WEBHOOK_SECRETVerifies Clerk's webhook

    Verifies Clerk's webhook

  • COMPOSIO_API_KEYEnables Composio integrations

    Enables Composio integrations

  • DEV_ALLOWED_ORIGINSExtra hosts allowed to reach the dev server, comma-separated

    Extra hosts allowed to reach the dev server, comma-separated

  • EXA_API_KEYEnables web search feature

    Enables web search feature

  • GIT_COMMIT_SHAThe build's version for update available prompt

    The build's version for update available prompt

  • KIRKIFY_SECRETEnables the /kirkify page (shared)

    Enables the /kirkify page (shared)

  • MCP_ENCRYPTION_KEYEncrypts the headers and OAuth tokens Whirl stores for each integration (must decode to exactly 32 bytes)

    Encrypts the headers and OAuth tokens Whirl stores for each integration (must decode to exactly 32 bytes)

  • MEDIAN_KEYEnables the Median support agent (shared with Convex)

    Enables the Median support agent (shared with Convex)

  • MEDIAN_SUPPORT_SECRETEnables the Median support agent (shared with web app)

    Enables the Median support agent (shared with web app)

  • NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYClerk publishable key

    Clerk publishable key

  • NEXT_PUBLIC_CONVEX_SITE_URLYour deployment's .convex.site URL

    Your deployment's .convex.site URL

  • NEXT_PUBLIC_CONVEX_URLYour deployment's .convex.cloud URL

    Your deployment's .convex.cloud URL

  • NEXT_PUBLIC_POSTHOG_HOSTPostHog host URL

    PostHog host URL

  • NEXT_PUBLIC_POSTHOG_PROJECT_TOKENPostHog product analytics project token

    PostHog product analytics project token

  • NEXT_PUBLIC_SITE_URLPublic origin for canonical URLs and share cards

    Public origin for canonical URLs and share cards

  • OPENROUTER_API_KEYEvery model call: chat, titles, images, transcription

    Every model call: chat, titles, images, transcription

  • POSTHOG_FREE_COST_ENDPOINTEndpoint's /run URL returning today's free spend in USD

    Endpoint's /run URL returning today's free spend in USD

  • POSTHOG_HOSTPostHog host for Convex

    PostHog host for Convex

  • POSTHOG_LLM_PRIVACY_MODEKeep prompt and reply text out of PostHog's LLM analytics events

    Keep prompt and reply text out of PostHog's LLM analytics events

  • POSTHOG_PERSONAL_API_KEYPersonal API key with read access for free-tier overload throttle

    Personal API key with read access for free-tier overload throttle

  • POSTHOG_PROJECT_TOKENPostHog project token for Convex

    PostHog project token for Convex

  • RESEND_API_KEYSending email through Resend

    Sending email through Resend

  • RESEND_AUDIENCE_IDThe audience new sign-ups are added to

    The audience new sign-ups are added to

  • RESEND_FROM_EMAILThe sender email on a domain verified in Resend

    The sender email on a domain verified in Resend

  • SITE_URLhttp://localhost:3000The web app's public origin, for share links, OAuth returns, and emails

    The web app's public origin, for share links, OAuth returns, and emails

  • SUPERMEMORY_API_KEYEnables long-term memory feature

    Enables long-term memory feature

  • VERCEL_WEBHOOK_SECRETVerifies Vercel's deploy webhook

    Verifies Vercel's deploy webhook

More in AI Chat

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…