4,823
stars
829
forks
24
watchers
287
prs
38
issues
19
releases
99
discussions
README
Campfire Campfire is a web-based chat application. It supports many of the features you'd expect, including: - Multiple rooms, with access controls - Direct messages - File attachments with previews - Search - Notifications (via Web Push) - @mentions - API, with support for bot integrations Running your own Campfire instance Campfire's Docker image contains everything needed for a fully-functional, single-machine deployment. This includes the web app, background jobs, caching, file serving, and SSL. You can use our pre-built image at ghcr.io/basecamp/once-campfire:latest, or build your own from this repo. Deploying with ONCE The easiest way to self-host Campfire is with ONCE. It will guide you through the initial set up and then keep your instance up to date automatically. If you don't already have once installed, run this on the machine you want to run Campfire on: sh curl https://get.once.com | sh once will launch as soon as the install is finished. Choose Campfire from the list of applications, follow the instructions, and ONCE will take care of the rest. If you prefer the command line to the dashboard, you can deploy directly: sh once deploy ghcr.io/basecamp/once-campfire --host chat.example.com Deploying with Docker If you'd rather run the Docker image yourself, you can read more about that in the self-hosting guide. [!TIP] When you start Campfire for the first time, you'll be guided through a wizard to create an admin account. The email address that you enter for the admin account will be visible on the sign-in page, it's there so that people have someone to contact if they need help with their account. If that bothers you, put in any email address you want and create yourself a new admin account. Authenticated room, message, sidebar and search pages use a bounded 64 MiB cache per worker. Set CAMPFIRE_RESPONSE_CACHE_MB=0 to disable it. Every request still checks authentication and room access; commits from any SQLite writer invalidate complete cached HTML and gzip bodies. Native HTML, JSON and stream fragments have a separate 64 MiB memory limit per worker; shared rate limits retain their existing store. Other implementations Campfire also has implementations in Django, Laravel, Express, Elixir, Go, Rust and C: | HTTP workload (requests/sec) | Rails | Django | Laravel | Express | Elixir | Go | Rust | C | |---|---:|---:|---:|---:|---:|---:|---:|---:| | Room page | 4,101 | 1,507 | 3,872 | 42,636 | 5,350 | 53,060 | 106,494 | 137,524 | | Messages page | 4,115 | 1,596 | 3,995 | 74,362 | 5,712 | 54,800 | 102,697 | 144,642 | | Sidebar | 4,333 | 1,873 | 4,493 | 94,329 | 5,949 | 59,144 | 120,294 | 152,002 | | Search | 4,282 | 1,862 | 4,172 | 84,665 | 5,848 | 60,509 | 121,378 | 149,487 | | Post a message | 330 | 262 | 794 | 2,155 | 1,278 | 9,021 | 8,037 | 7,530 | | Backend KLOC | 5.5 | 5.3 | 4.1 | 6.8 | 11.6 | 23.2 | 30.7 | 94.8 | KLOC counts backend code plus executable code in templates; excludes plain HTML, frontend
Top issues
#107Removing a bot has some odd behaviour4 comments · 2025-11-15#80Exctract Action Web Push4 comments · 2025-09-23#71Add the ability to ban people4 comments · 2025-09-19#186Avatar and account logo rendering fails with S3-backed Active Storage3 comments · 2026-03-21#72Add *optional* email-based password reset flow3 comments · 2025-09-19#70Replace Trix with Lexxy2 comments · 2025-09-19#404A message deleted while a room page is disconnected stays on it after it reconnects1 comments · 2026-10-24#272Bot key is still written to the log in the clear — Thruster's access log isn't covered by #2691 comments · 2026-09-10
Discussions
#428Forgotten Password1 comments · 2026-11-10#416Push notifications go missing on the macOS web app0 comments · 2026-10-25#415Message missed live isn't restored by refresh if an older message was edited after it0 comments · 2026-10-25#386What an idle Campfire spends: job polling, checkpoint retries and a one-worker cluster0 comments · 2026-10-24#363OAUTH integration1 comments · 2026-10-14#333The README's benchmark on a 2M-message database: Rails, the open performance PRs, the Spinel binary, Rust and Go0 comments · 2026-10-06#286Dokploy Template for Campfire0 comments · 2026-10-01#278Bot webhook attachments + TTL typing/thinking indicators (self-hosted bot API)0 comments · 2026-09-16
Latest release
v1.5.8 v1.5.8 2026-11-06What's Changed Security and stability backports to 1.5.x by @flavorjones in https://github.com/basecamp/once-campfire/pull/424 Note that v1.5.7 was yanked due to it being built from the wrong commit SHA. Full Changelog: https://github.com/basecamp/once-campfire/compare/v1.5.6...v1.5.8