llama.cpp/tools/server/webui
Pascal b1846f1c8e
webui: add rehype plugin to restore HTML in Markdown table cells (#17477)
* webui: add rehype plugin to restore HTML in Markdown table cells

The remark/rehype pipeline neutralizes inline HTML as literal text
(remarkLiteralHtml) so that XML/HTML snippets in LLM responses display
as-is instead of being rendered. This causes <br> and <ul> markup in
table cells to show as plain text.

This plugin traverses the HAST post-conversion, parses whitelisted HTML
patterns (<br>, <ul><li>) from text nodes, and replaces them with actual
HAST element nodes. For lists, adjacent siblings must be combined first
as the AST fragmentation breaks pattern matching.

Strict validation rejects malformed markup, keeping it as raw text.

* chore: update webui build output
2025-11-25 08:01:02 +01:00
..
.storybook Update packages + upgrade Storybook to v10 (#17201) 2025-11-12 19:01:48 +01:00
e2e SvelteKit-based WebUI (#14839) 2025-09-17 19:29:13 +02:00
scripts webui: Remove running `llama-server` within WebUI `dev.sh` script (#16363) 2025-10-01 08:40:26 +03:00
src webui: add rehype plugin to restore HTML in Markdown table cells (#17477) 2025-11-25 08:01:02 +01:00
static SvelteKit-based WebUI (#14839) 2025-09-17 19:29:13 +02:00
.gitignore webui: Add a "Continue" Action for Assistant Message (#16971) 2025-11-19 14:39:50 +01:00
.npmrc SvelteKit-based WebUI (#14839) 2025-09-17 19:29:13 +02:00
.prettierignore SvelteKit-based WebUI (#14839) 2025-09-17 19:29:13 +02:00
.prettierrc SvelteKit-based WebUI (#14839) 2025-09-17 19:29:13 +02:00
README.md SvelteKit-based WebUI (#14839) 2025-09-17 19:29:13 +02:00
components.json SvelteKit-based WebUI (#14839) 2025-09-17 19:29:13 +02:00
eslint.config.js SvelteKit-based WebUI (#14839) 2025-09-17 19:29:13 +02:00
package-lock.json webui: Add a "Continue" Action for Assistant Message (#16971) 2025-11-19 14:39:50 +01:00
package.json Update packages + upgrade Storybook to v10 (#17201) 2025-11-12 19:01:48 +01:00
playwright.config.ts Enable per-conversation loading states to allow having parallel conversations (#16327) 2025-10-20 12:41:13 +02:00
svelte.config.js feat(webui): improve LaTeX rendering with currency detection (#16508) 2025-11-03 00:41:08 +01:00
tsconfig.json SvelteKit-based WebUI (#14839) 2025-09-17 19:29:13 +02:00
vite.config.ts feat(webui): improve LaTeX rendering with currency detection (#16508) 2025-11-03 00:41:08 +01:00
vitest-setup-client.ts SvelteKit-based WebUI (#14839) 2025-09-17 19:29:13 +02:00

README.md

llama.cpp Web UI

A modern, feature-rich web interface for llama.cpp built with SvelteKit. This UI provides an intuitive chat interface with advanced file handling, conversation management, and comprehensive model interaction capabilities.

Features

  • Modern Chat Interface - Clean, responsive design with dark/light mode
  • File Attachments - Support for images, text files, PDFs, and audio with rich previews and drag-and-drop support
  • Conversation Management - Create, edit, branch, and search conversations
  • Advanced Markdown - Code highlighting, math formulas (KaTeX), and content blocks
  • Reasoning Content - Support for models with thinking blocks
  • Keyboard Shortcuts - Keyboard navigation (Shift+Ctrl/Cmd+O for new chat, Shift+Ctrl/Cmdt+E for edit conversation, Shift+Ctrl/Cmdt+D for delete conversation, Ctrl/Cmd+K for search, Ctrl/Cmd+V for paste, Ctrl/Cmd+B for opening/collapsing sidebar)
  • Request Tracking - Monitor processing with slots endpoint integration
  • UI Testing - Storybook component library with automated tests

Development

Install dependencies:

npm install

Start the development server + Storybook:

npm run dev

This will start both the SvelteKit dev server and Storybook on port 6006.

Building

Create a production build:

npm run build

The build outputs static files to ../public directory for deployment with llama.cpp server.

Testing

Run the test suite:

# E2E tests
npm run test:e2e

# Unit tests
npm run test:unit

# UI tests
npm run test:ui

# All tests
npm run test

Architecture

  • Framework: SvelteKit with Svelte 5 runes
  • Components: ShadCN UI + bits-ui design system
  • Database: IndexedDB with Dexie for local storage
  • Build: Static adapter for deployment with llama.cpp server
  • Testing: Playwright (E2E) + Vitest (unit) + Storybook (components)