Development
Tech Stack
Raft uses:
- Web framework: Ruby on Rails
- Javascript: Turbo & Stimulus
- Presentation: HAML, SASS, Bootstrap 5
- Database: Postgres
- Storage: S3-compatible service (Ceph, MinIO)
- Collaborative Editors: Blocknote and ONLYOFFICE DocumentServer
- Avatars: Dicebear
The Postgres multitool: Typically, a web application might use RabbitMQ for messages, Reddis for session storage & push notifications & caching, and Elastic Search for full text queries. To simplify hosting, Raft uses Postgres for all that. Postgres has fairly robust features that allow it to be used in this way, although for a large installation it is better to reduce load on the database as much as possible.
Traditional web app, with a twist: Raft is a traditional “server-rendered” web app with little rendering of HTML handled by javascript presentation code. However, like many Rails apps these days, it relies heavily Turbo Drive & Turbo Streams, which has the effect of the application really being a single page javascript app that simulates a traditional web app by fetching element updates pre-rendered from the server. The goal with Turbo is to provide the interactivity of a single page javascript app with the easy of development of a traditional web app. Your mileage may vary, but it more or less works as advertised in most cases.
Javascript required: Raft requires that javascript is enabled in the browser, since the webauthn authentication protocol does not work without it.
Modern browser required: Only the most recent browsers correctly support webauthn. For example, Safari did not support it until late 2025.
Git repository & issue tracker
The upstream code for Raft can be found at https://tangled.org/rewire.host/raft