A chat client for your local AI.
Named after a butt joke.
We're not sorry.
ChickenButt is a native Linux desktop app for chatting with local AI models through Ollama.
Website: https://www.chickenbutt.dev/
Source: https://github.com/pixelhackstudios/ChickenButt
It is built with GTK4 and libadwaita, designed to feel at home on GNOME, and focused on making local AI pleasant to use without turning the interface into an aircraft cockpit.
- Chats with local Ollama models
- Streams responses as they are generated
- Keeps multiple conversations in a local SQLite database
- Renders Markdown, tables, links, and syntax-highlighted code
- Lets you copy, expand, and collapse code blocks
- Shows clear health information when Ollama is unavailable
- Lists, inspects, and pulls models from the composer
- Exports conversations as Markdown or JSON
- Includes a native system tray integration
- Offers both WebKit and native GTK transcript renderers
| Multiple conversations | Readable code blocks |
ChickenButt currently targets Linux.
You will need:
- Python 3.10 or newer
- GTK4
- libadwaita
- WebKitGTK 6.0
- PyGObject
- dasbus
- Ollama for running models
These are mostly system packages, not Python packages installed through pip.
See DEPENDENCIES.md for Fedora and Ubuntu installation commands, optional integrations, and explanations of what each dependency does.
Check the current system without installing anything:
python3 scripts/check_dependencies.pyInclude build tools in the check:
python3 scripts/check_dependencies.py --buildClone the repository:
git clone https://github.com/pixelhackstudios/ChickenButt.git
cd ChickenButtStart ChickenButt:
./run.shThis runs the app directly from the checkout without installing anything.
To use the native GTK transcript renderer instead of the default WebKit renderer:
CHICKENBUTT_TRANSCRIPT=native ./run.shChickenButt does not bundle Ollama or any AI models.
Install Ollama using its official Linux documentation, then make sure it is running:
ollama serveCheck your installed models:
ollama listChickenButt will still open when Ollama is unavailable. It will show health and onboarding information instead of simply crashing.
ChickenButt uses Meson for local installation:
python3 scripts/check_dependencies.py --build
meson setup build --prefix="$HOME/.local"
meson install -C buildLaunch the installed app:
chickenbuttThe installation includes:
- The
chickenbuttcommand - The application runtime
- A desktop launcher
- App icons
- AppStream metadata is installed
Make sure this directory is on your PATH:
$HOME/.local/binAdd it when necessary:
export PATH="$HOME/.local/bin:$PATH"To rebuild after pulling new changes:
meson setup --reconfigure build --prefix="$HOME/.local"
meson install -C buildTo uninstall from the retained build directory:
ninja -C build uninstallChickenButt can be built as a Flatpak against org.gnome.Platform so the same
app runs on any Flatpak-capable Linux distribution without host GTK packages.
Requirements: flatpak, flatpak-builder, and a host Ollama
service (not bundled). Details, inventory, and sandbox justifications:
# once: flatpak + flatpak-builder + GNOME Platform/SDK 50 from Flathub
./scripts/build_flatpak.sh
flatpak run io.github.pixelhackstudios.ChickenButtThis repository holds development Flatpak packaging. Publishing to Flathub is a separate step that must follow current Flathub policy (including human-authored submission materials).
ChickenButt keeps its application data on your machine.
| Data | Location |
|---|---|
| Conversation history | ~/.local/share/chickenbutt/conversations.db |
| Settings | ~/.config/chickenbutt/settings.json |
Override the conversation database location with:
CHICKENBUTT_DB=/path/to/conversations.db ./run.shChickenButt/
├── chickenbutt-web/ Project website source
├── data/ Desktop and AppStream metadata
├── icons/ Application icons
├── packaging/ Installed launcher script
├── scripts/ Tests, checks, and development tools
├── vendor/ Vendored Python dependencies
├── web/ Embedded transcript interface
└── *.py Desktop application source
The two web directories serve different purposes:
web/is part of the desktop application and renders conversations inside WebKit.chickenbutt-web/is the public project website built with React and Vite.
The project website lives in chickenbutt-web/.
cd chickenbutt-web
npm ci
npm run devCreate a production build:
npm run buildGenerated node_modules/ and dist/ directories are intentionally excluded from Git.
ChickenButt includes tests covering conversation storage, streaming, cancellation, Markdown sanitization, navigation security, desktop integration, dependency declarations, and installed layouts.
Run individual checks directly from the repository root:
python3 scripts/smoke_gui.py
python3 scripts/test_multichat.py
python3 scripts/test_message_actions.py
python3 scripts/test_ollama_health.py
python3 scripts/test_generation_lifecycle.pyThe authoritative automated test commands are maintained in:
.github/workflows/tests.yml
For the website:
cd chickenbutt-web
npm run buildBug reports, fixes, design improvements, and carefully scoped features are welcome.
Before making agent-assisted changes, read AGENTS.md. It defines the repository’s expectations around scope, verification, Git operations, and reporting.
Please keep changes focused and verify the behavior you touched.
ChickenButt is under active development.
The desktop app is functional and installable from source (Meson) or as a
development Flatpak (packaging/flatpak/). The public website is included in
this repository. Flathub publication remains a separate maintainer step.
It is built primarily for GNOME-style Linux desktops, though other GTK-compatible environments may work.
ChickenButt is licensed under the GNU General Public License v3.0 or later.
Vendored third-party projects retain their original licenses:
- mistune — BSD-3-Clause
- marked.js — MIT
- DOMPurify — Apache-2.0 OR MPL-2.0
- highlight.js — BSD-3-Clause