Forem: The Open Source Platform Powering dev.to
For empowering community 🌱
At a glance
- What is it?
- Forem is an open source Rails application for building developer communities with article publishing, social profiles, and discussion threads. It powers dev.to and is deployable to any server via Kamal 2, but it requires PostgreSQL with the pgvector extension as a hard dependency for its AI-powered feed generation.
- Who is it for?
- Forem is the right choice for teams that want to run a developer community platform with the full feature set that dev.to demonstrates, and are willing to accept the AGPL-3.0 license terms, which require sharing modifications when running the software as a network service. It is the wrong tool for teams looking for a lightweight discussion board or for organizations that need a simpler stack than Ruby on Rails plus PostgreSQL plus pgvector plus Redis.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Ruby, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Forem Builds and Who Runs It
Forem is open source software for building online communities. It provides the full feature set that dev.to runs on: article publishing, social profiles, tags and series, comments, reactions, and a feed. The README describes dev.to as a community of software developers who write articles, take part in discussions, and build their professional profiles. Forem makes that infrastructure available to anyone who wants to run a similar community for their peers, customers, or fan base.
The platform is aimed at community operators who need a self-hosted alternative to managed community tools and who want to control their own data and customize the product. Forem is not a minimal forum package; it is a full Rails application with a significant dependency footprint and an active codebase. The last push was on 2026-09-25.
Technical Stack: Rails, Preact, PostgreSQL, and pgvector
The README describes a Rails backend currently transitioning to a Preact-first frontend. The `package.json` file identifies the project name as `dev.to` and targets Node 20.x with Yarn 1.22.18. The backend is Ruby 3.3.0, as specified in the Dockerfile base image.
The most notable recent addition is a hard dependency on pgvector. The README states that Forem now uses advanced AI embeddings for feed generation, and that the PostgreSQL installation must have the pgvector extension at version 0.8.0 or higher with HNSW indexing support. The README calls this a hard requirement to migrate the database and run the app. A Gemini API key (`GEMINI_API_KEY`) is optional; if omitted, the app continues to function but without semantic recommendations. This dependency means any deployment or local development setup must include a pgvector-enabled PostgreSQL instance before the database can be migrated.
Setting Up a Development Environment
The README offers two cloud-based quick starts. To use Gitpod, navigate to `https://gitpod.io/#https://github.com/{your_github_username}/forem` in a browser. The project also supports Ona (formerly Gitpod), which the README describes as automatically configuring all necessary services and dependencies when the project is opened.
For local setup, the README links to platform-specific guides at developers.forem.com. Installing pgvector is the prerequisite most developers are likely to miss. On macOS with Homebrew:
brew install pgvectorOn Debian or Ubuntu, adjusting the version number to match the installed PostgreSQL:
sudo apt install postgresql-15-pgvectorThe Docker Compose file at the repository root provides a development environment. The `DATABASE_URL` in the compose configuration defaults to `postgres://postgres:postgres@localhost:5432`. The compose file also includes a Chrome container at `CHROME_URL: http://chrome:3333` for Cypress end-to-end tests, and Redis at `REDIS_URL: redis://localhost:6379/`. The `.ruby-version` and `.nvmrc` files pin the runtime versions for local setups.
Deploying with Kamal 2
Forem ships with Kamal 2 configuration for deploying to any cloud provider or bare metal server. The README links to a deployment guide at `docs/kamal-deployment.md` that covers AWS, DigitalOcean, Hetzner, and GCP setups including secrets management and Forem-specific production details.
Before deploying, open `config/deploy.yml` and update the registry credentials and the domain name in the proxy section. The deployment requires several environment variables on the local machine:
- `KAMAL_WEB_IP`, `KAMAL_JOB_IP`, `KAMAL_DB_IP`, `KAMAL_REDIS_IP` for server addresses - `KAMAL_REGISTRY_PASSWORD` for the container registry access token - `RAILS_MASTER_KEY` for the Rails credentials - `DATABASE_URL` for the PostgreSQL connection string - `POSTGRES_PASSWORD` for the PostgreSQL accessory root password
To verify the configuration is valid before any deployment attempt:
bundle exec kamal configThe Kamal deployment is currently labeled beta in the README, so teams using it in production should monitor the `docs/kamal-deployment.md` file for updates.
AI Agents, Copilot Rules, and the Contributor Experience
Forem maintains contributor instructions across several IDE-specific files: `AGENTS.md` for AI coding agents, `.cursorrules` for Cursor, `.windsurfrules` for Windsurf, and `.github/copilot-instructions.md` for GitHub Copilot. The README notes that the project synchronizes these rules across all four files. This is relevant to teams planning to use AI-assisted development: each tool gets the same rule set so that generated code follows the project's conventions regardless of which IDE a contributor uses.
The README explicitly welcomes AI-assisted pull requests but states the team will reject submissions described as slop, requiring high standards of code quality and meaningful utility. All pull requests must include appropriate tests. The current testing focus is on backend regression tests, while frontend changes may require more extensive user review. This is a practical constraint for contributors: frontend-only pull requests may take longer to merge because they need human review beyond automated test coverage.
The repository also includes a `CLAUDE.md` file at the root, which provides additional context for Claude-based AI coding agents. The `.devcontainer/` and `.ona/` directories configure cloud-based development environments alongside the Gitpod integration, giving contributors multiple ways to run a full Forem stack without a local Ruby installation.
Where Forem Is Not the Right Tool
Forem is a large Rails application. The Gemfile, Gemfile.lock, and dependency list in `package.json` reflect years of feature additions. Teams that need a fast-to-deploy, lightweight discussion board will find the infrastructure requirements (Rails, PostgreSQL with pgvector, Redis, Node.js 20) disproportionate to the need. The pgvector dependency specifically means you cannot use a vanilla PostgreSQL hosted instance without first confirming pgvector is available; many managed database providers do not include it by default.
The README notes that documentation at developers.forem.com may be out of date as the project evolves. Teams relying on the documentation for production deployments should compare it against the current repository state, particularly for the Kamal deployment guide and the pgvector setup steps, since those are recent additions not reflected in older documentation.
Forem has no GitHub releases. The release process is not documented in the README.
License: AGPL-3.0 and What It Requires
Forem is released under the AGPL-3.0 license. The practical implication for community operators is that if you modify Forem and run it as a network service, you must make the modified source code available to users of that service. This is a stronger copyleft requirement than the MIT or Apache licenses; it applies to running the software over a network, not only to distributing binaries. Organizations that need to keep their modifications proprietary cannot use Forem under the AGPL-3.0 without a commercial license arrangement. The `LICENSE.md` file in the repository contains the full license text.
Editorial conclusion
Forem is the right choice for teams that want to run a developer community platform with the full feature set that dev.to demonstrates, and are willing to accept the AGPL-3.0 license terms, which require sharing modifications when running the software as a network service. It is the wrong tool for teams looking for a lightweight discussion board or for organizations that need a simpler stack than Ruby on Rails plus PostgreSQL plus pgvector plus Redis. Before starting, verify that your PostgreSQL installation has pgvector 0.8.0 or higher with HNSW indexing support, because the README calls this a hard requirement to migrate the database.
Frequently asked questions
What is Forem?
Forem is an open source software platform for building online communities. It is the codebase that powers dev.to and provides article publishing, social profiles, comments, and a feed system. It runs on a Ruby on Rails backend with a Preact frontend.
What is the Forem app?
The Forem app is the open source Rails application available at github.com/forem/forem. It is the same codebase that runs the dev.to developer community platform, and it can be self-hosted by anyone who wants to run their own community with the same feature set.
Can Forem be self-hosted?
Yes. The README documents a Kamal 2 deployment path that supports AWS, DigitalOcean, Hetzner, GCP, and bare metal servers. Local development is also supported via Gitpod, Ona, or platform-specific guides for macOS and Linux at developers.forem.com.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/forem-forem)
Community notes