Skip to content

Repository files navigation

Open Quill

Open Quill

A self-hosted chat interface for local and cloud LLMs.
Anthropic-inspired design, artifacts, a real code sandbox. Nothing leaves your machine unless you say so.

Latest Stable Release CI License: MIT Follow on X

Quick start · Features · Documentation · Configuration · Privacy · Releases


Open Quill chat with the artifacts panel open, showing files the assistant created

The assistant building a Rust project file by file, with every artifact versioned in the side panel.


Home screen
Home: greeting, composer and quick prompts.
A project with instructions and files
Projects: shared instructions and files across chats.
Admin panel, models section
Admin: models, prompts, abilities and pricing.
The all-chats overlay
Your chats: search, archive and bulk actions.

Quick start

1. Check the requirements

Requirement Version Notes
Node.js 22.23.2 or newer CI builds and tests on Node 24
An OpenAI-compatible model server any llama.cpp at http://localhost:8080/v1 by default

2. Install and run

Pick one.

From a release · fastest, the client is already built · download

cd server && npm install && cd ..
npm start                 # serves on http://localhost:3001

From source · the stable or dev branch

npm run install:all
npm run build             # builds the client into client/dist
npm start                 # serves on http://localhost:3001

Development · hot reload, for working on Open Quill

npm run install:all
npm run dev               # client :5173 (proxied) to server :3001

3. Create your account

Open the address above. The first account created is the admin.

4. Connect a model

Step Where
Start your model server and load a model llama.cpp, for example
Set the API base URL and key, then save Admin Panel → Providers
Set each model's internal model name to the id your server expects Admin Panel → Models
Add a description, system prompt, icon and reasoning settings Admin Panel → Models

The Admin Panel is in the profile menu, bottom-left of the sidebar.

Note

Open Quill is built and tested primarily against llama.cpp. Other OpenAI-compatible providers generally work, but full feature parity is not guaranteed.


Features

Interface

  • Anthropic-style design with a serif assistant voice (Literata) and Open Sans for your own messages
  • Two complete UI presets, Anthropic and OpenAI, switchable live, plus light/dark modes and selectable palettes
  • Token-by-token streaming with a fade-in reveal, smart autoscroll and a jump-to-bottom control
  • Auto-generated chat titles, hover-to-copy code blocks, branching conversations and side-by-side branch comparison
  • Full keyboard navigation with rebindable shortcuts, a command palette and in-thread search
  • English, Spanish, Chinese, French and Portuguese

Models and reasoning

  • Multiple providers side by side, each with its own base URL, key and sampler set
  • Per-model display name, description, system prompt, icon and sampling parameters
  • Reasoning models get an Extended toggle and a collapsible thought view, supporting both <think> tags and reasoning_content deltas
  • Trigger tokens such as /think and /no_think appended to the system prompt automatically
  • Custom kwargs surfaced to users as toggles, sliders or dropdowns
  • Routers: a model that forwards each turn to whichever of your real models matches first, by keyword, regex, attachment, code content or length
  • Exact context accounting using the model's own tokenizer, with a sliding window and summarization that layer rather than compete

Files and tools

Artifacts The assistant writes real files into a per-chat workspace you can view, diff, restore to any version, preview and download
Code sandbox A real shell and file toolset scoped to that workspace, so the assistant can scaffold, install, build, run and test
Web search Optional, backed by your own SearXNG instance
Connectors (MCP) Model Context Protocol servers as local subprocesses or remote endpoints
Projects and Spaces Group chats, share files and instructions across a body of work
Memory An editable, per-user memory assembled from recent conversations
Voice Speech-to-text and text-to-speech against an endpoint you configure

Documentation

The docs/ folder is a full user guide covering chatting and branching, the composer, models and reasoning, personas and styles, organizing chats, artifacts and the sandbox, settings, keyboard shortcuts, privacy, and a complete admin reference. Start at docs/README.md.

Building on Open Quill instead? AGENTS.md covers the architecture and how versions are cut.


Configuration

Environment variables go in a .env file in the project root. The server writes one on first start, so a fresh clone just works; to set it up ahead of time, copy the example that ships in the root with cp .env.example .env.

Variable Default Purpose
OPEN_QUILL_DB default Which database to load. Read once at startup
PORT 3001 Port the server listens on
HOST 127.0.0.1 Bind address. Set 0.0.0.0 to reach it from other devices on your network
DB_ENCRYPTION_KEY generated Use one key for every database instead of a per-database key

Databases

Open Quill can run multiple fully isolated databases and switch between them with one line in .env. Each keeps its own users, chats, preferences, interface and model configuration, artifacts, uploads, sandbox, project files and memory. Nothing is shared between them.

default uses server/data/, the original location, so existing installs are untouched. Any other name lives in server/data/databases/<name>/ and is created automatically the first time it loads. You can also create, switch and delete them from Admin Panel → Databases. For safety the active database can never be switched while the server is running. Change the value and restart.

Full details, including how the selector is resolved and how per-database encryption keys work, are in docs/databases.md.

To reset a database, stop the server and delete its folder.


Privacy

Open Quill is built to run entirely on your own machine, and by default nothing leaves it.

  • No telemetry, analytics, crash reporting or update checks. The "Analytics" in the admin panel is your own local token and cost accounting, computed from the local database.
  • The client only talks to its own backend. No third-party scripts; fonts, KaTeX and highlight.js are bundled rather than fetched from a CDN, and npm run build fails if anything remote creeps into the bundle.
  • Outbound requests are blocked by default. Loopback and private addresses still work, so a model backend on this machine or your LAN is unaffected; anything pointed at a public address is refused before a packet leaves. Allow specific hosts under Admin → Safety.
  • Secrets stay local. The database encryption key and the auth token secret are generated on your machine and never transmitted. The database is encrypted at rest.
  • The server binds to 127.0.0.1 unless you change HOST.

Outbound connections happen only for features you explicitly enable, and only to destinations you specify: your model provider, your voice endpoint, your own SearXNG instance for web search (which then fetches result pages from the web, that being the point of the feature), any MCP connectors you add, and the code sandbox, which runs code with the same network access as the host.

See docs/privacy-security.md for incognito chats, 2FA, sessions and account deletion.


Releases & versioning

From Open Quill 27 onward the project uses year-based versioning: the major number increments annually.

Most people want a release: packaged with the client already built, and what Settings → Version reports you are running.

If you want changes as they land, run the dev branch instead and pull every so often to pick up the latest:

git checkout dev
git pull
npm run install:all
npm run build

Expect the occasional rough edge, and quote a commit hash rather than a version when you report something.


Community & contributing

  • GitHub Discussions: questions, setup help and feature requests. The best place to influence what gets built next.
  • Issues: bugs. Include the version from Settings → Version, or a commit hash if you are on dev.
  • X: release notes, previews and development updates.

Pull requests target dev, never stable. Before opening one, run npm run lint, npm test in server/, and npm run build. CI runs all three and must stay green.

Important

Open Quill is not enterprise software and is not trying to be. It is a community-built interface meant to be customized, modified and configured however you prefer.


Background

This project started because I was fascinated by Anthropic's interface and colour work. Plenty of apps recreate the look of other interfaces; I wanted to contribute one openly, for others to build on. The front end aims to balance genuine functionality against a clean, aesthetically pleasing experience.

It was developed in collaboration with my local agents, with additional design, refinement and implementation performed by me. In the interest of transparency and community collaboration, it will remain fully open-source and freely available in perpetuity.


License

Released under the MIT License. By downloading, using or modifying this project you agree to its terms. Forever free. Built by the community, for the community.

Open Quill stands on a great deal of excellent open-source work. See CREDITS.md.

About

A fully open-source chat interface featuring Anthropic inspired theming.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages