Rails main (e3d5c569) moves Campfire's pin forward ten months. Because Campfire loads the 8.2 framework defaults, the ones added since then take effect too, among them header-only forgery protection, Herb as the HTML template engine, strict Accept headers and immediate blob analysis. Changes it needed: - Minitest 6 has no minitest/unit; the test helper no longer requires it. - Rack::Sendfile is no longer in the middleware stack; DebugLocks goes before ActionDispatch::Executor, as the Rails guide now says. - Time::DATE_FORMATS is deprecated; :epoch is registered through ActiveSupport::TimeFormats. - Channel test subscriptions expose stream_names; streams is private. - sentry-rails declares its Action Cable handle_open and handle_close wrappers private, which Rails 8.2 calls from outside the connection, so no /cable connection succeeded. An initializer makes them public until getsentry/sentry-ruby#2972 ships (issue #2975). - Lexxy renders editor content through Rails' editor adapter when Rails has one, which asks a mention for its editor partial. It is the same users/mention partial the mention prompt already inserts. - redis-client moves to 0.30.1: Rails main's Redis cache store, which production uses, requires 0.28.0 or later, and assets:precompile (the Docker build) aborted on 0.25.2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit b4d3880a3d88059dd5b0b884f1f5f1a6f82aa95c)
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:
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:
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.
Other implementations
Campfire also has implementations in Django, Laravel, Express, Elixir, Go and Rust:
| HTTP workload (requests/sec) | Rails | Django | Laravel | Express | Elixir | Go | Rust |
|---|---|---|---|---|---|---|---|
| Room page | 241 | 170 | 164 | 559 | 722 | 3,860 | 36,260 |
| Messages page | 413 | 196 | 175 | 777 | 1,053 | 5,573 | 40,872 |
| Sidebar | 552 | 615 | 715 | 4,125 | 1,275 | 19,753 | 34,672 |
| Search | 435 | 315 | 305 | 1,294 | 1,156 | 7,053 | 33,299 |
| Post a message | 273 | 154 | 137 | 256 | 801 | 4,767 | 6,896 |
Measured with 16 concurrent clients on an AMD Ryzen AI MAX+ 395, with four hardware threads allocated to each app.
Development
You are welcome - and encouraged - to modify Campfire to your liking. Please see our development guide for how to get Campfire set up for local development.
Security
See SECURITY.md for how to report a vulnerability and a description of our trust model.