Forem 🌱 For Empowering Community Welcome to the Forem codebase, the platform that powers dev.to. We are so excited to have you. With your help, we can build out Forem’s…
Forem 🌱
For Empowering Community
Welcome to the Forem codebase, the platform that powers
dev.to. We are so excited to have you. With your help, we can
build out Forem’s usability, scalability, and stability to better serve our
communities.
What is Forem?
Forem is open source software for building communities. Communities for your
peers, customers, fanbases, families, friends, and any other time and space
where people need to come together to be part of a collective.
See our announcement post
for a high-level overview of what Forem is.
dev.to (or just DEV) is hosted by Forem. It is a community of
software developers who write articles, take part in discussions, and build
their professional profiles. We value supportive and constructive dialogue in
the pursuit of great code and career growth for all members. The ecosystem spans
from beginner to advanced developers, and all are welcome to find their place
within our community. ❤️
Table of Contents
- [What is Forem?](#what-is-forem)
- [Table of Contents](#table-of-contents)
- [Contributing](#contributing)
- [Getting Started](#getting-started)
- [Developer Documentation](#developer-documentation)
- [Deployment with Kamal](#deployment-with-kamal)
- [Vulnerability Disclosure](#vulnerability-disclosure)
- [Acknowledgements](#acknowledgements)
- [License](#license)
Contributing
We welcome pull requests on any issue, regardless of its current status, if it provides a fix or improvement. While we cannot guarantee that every PR will be merged, we value legitimate suggestions and contributions.
All pull requests should include appropriate tests. Our current focus is primarily on backend-related regression tests, while frontend changes may require more extensive user review.
We welcome AI-assisted pull requests but will turn away "slop"—all submissions must maintain high standards of code quality and meaningful utility.
🤖 AI Agents should check out AGENTS.md for more instructions. For specific IDEs and environments, Forem also synchronizes these rules across .cursorrules, .windsurfrules, and .github/copilot-instructions.md.
Please also check out the Contributing to Forem guide for more detailed guidelines.
Getting Started
This section provides a high-level quick start guide. If you're looking for a
more thorough installation guide (for example
with macOS),
you'll want to refer to our complete
Developer Documentation.
We run on a Rails backend, and we are currently
transitioning to a Preact-first frontend.
Prerequisites Note: Forem now utilizes advanced AI embeddings for feed generation. You must ensure your PostgreSQL installation has the pgvector extension (version 0.8.0 or higher) installed to support HNSW indexing. This database extension is a hard requirement to migrate the database and run the app.
To install pgvector:
- macOS (Homebrew):
brew install pgvector - Linux (Debian/Ubuntu):
sudo apt install postgresql-15-pgvector(adjust15to match your installed PostgreSQL version), or compile from source following the pgvector installation guide.
However, providing a Gemini API key (
GEMINI_API_KEY) to actually generate the embeddings is completely optional; if omitted, the app will continue to function normally without semantic recommendations.
A more complete overview of our stack is available in
our docs.
To launch Forem in Gitpod, please navigate to
https://github.com/{your_github_username}/forem" rel="noopener nofollow" target="_blank">https://gitpod.io/#https://github.com/{your_github_username}/forem.
To launch Forem in Ona (formerly Gitpod), the project is fully configured for Ona development environments. Simply open the project in Ona and the environment will be automatically configured with all necessary services and dependencies.
Installation Documentation
Please see our installation guides:
Developer Documentation
Check out our dedicated docs page for more technical documentation. Please note that while the documentation is a great place to start, some parts may be out of date as the project evolves.
Deployment with Kamal (Beta)
Forem is equipped with Kamal 2 to allow you to easily deploy the application to any cloud provider or bare metal server.
For a comprehensive guide, including cloud provider setups (AWS, DigitalOcean, Hetzner, GCP), secrets management, and Forem-specific production gotchas, see the [Kamal Deployment Guide](docs/kamal-deployment.md).
Prerequisites
Before deploying, ensure you have:
1. SSH access to your target server(s).
2. Docker installed on your local machine and target server(s).
3. A Docker container registry account (e.g., GitHub Container Registry, Docker Hub).
Configuration
1. Deployment Configuration: Open [config/deploy.yml](config/deploy.yml) and update:
- Your registry username/credentials.
- Your domain name in the proxy section.
2. Environment & Secrets Configuration: Set the following environment variables on your local machine:
- KAMAL_WEB_IP / KAMAL_JOB_IP / KAMAL_DB_IP / KAMAL_REDIS_IP: The IP addresses of your servers (default to 192.168.0.1).
- KAMAL_REGISTRY_PASSWORD: Access token for your Docker container registry.
- RAILS_MASTER_KEY: Your Rails master key.
- DATABASE_URL: Connection string for PostgreSQL. This is always required. If you are using the Kamal postgres accessory, set it to the accessory hostname (e.g. postgresql://postgres:password@forem-postgres:5432/forem_production).
- POSTGRES_PASSWORD: Root password for the PostgreSQL accessory (if using it).
Deploying the Application
Run the following commands to set up and deploy the application:
bash
# 1. Verify your configuration is valid
bundle exec kamal config
# 2. Boot accessories, build & push the docker image, and deploy the application
bundle exec kamal setup
# 3. Subsequent deploys (rolling updates)
bundle exec kamal deploy
For more options, refer to the Kamal documentation.
Vulnerability Disclosure
Forem is the open source software which powers DEV.
We welcome security research on DEV under the terms of our
vulnerability disclosure policy.
Acknowledgements
Thank you to the Twemoji project for the
usage of their emojis.
License
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option) any
later version. Please see the [LICENSE](./LICENSE.md) file in our repository for
the full text.
Like many open source projects, we require that contributors provide us with a
Contributor License Agreement (CLA). By submitting code to the Forem project,
you are granting us a right to use that code under the terms of the CLA.
Our version of the CLA was adapted from the Microsoft Contributor License
Agreement, which they generously made available to the public domain under
Creative Commons CC0 1.0 Universal.
Any questions, please refer to our
license FAQ doc or email
[email protected].
Happy Coding ❤️
[⬆ Back to Top](#table-of-contents)
Members
-
forem ★ PINNED
For empowering community 🌱
Ruby ★ 23k 2d agoExplain → -
forem-docs ★ PINNED
No description.
JavaScript ★ 50 2y agoExplain → -
admin-docs ★ PINNED
Empowering Forem Creators
JavaScript ★ 33 2y agoExplain → -
selfhost ★ PINNED
Selfhost your Forem Community on your own infrastructure 🎉
Jinja ★ 1.5k 4mo agoExplain → -
DEV-Android
DEV Community Android App
Kotlin ★ 424 4mo agoExplain → -
DEV-ios
DEV Community iOS App
Swift ★ 368 4mo agoExplain → -
DevTwitter
Bringing dev.to headlines to your Twitter browsing experience.
JavaScript ★ 76 5y agoExplain → -
IRL.DEV
There's nothing better than meeting your internet friends, IRL.
HTML ★ 49 5y agoExplain → -
forem-browser-extension ▣
The Forem browser extension which allows users to seamlessly navigate between communities.
JavaScript ★ 30 4y agoExplain → -
ForemWebView-ios
Forem core interface SDK
Swift ★ 21 2y agoExplain → -
udl-server ⑂
This is a server that bounces traffic to better leverage Deep Linking in mobile apps.
Ruby ★ 16 2y agoExplain → -
code-snippets
No description.
HTML ★ 13 4y agoExplain → -
ForemWebView-android
Forem core interface SDK for Android
Kotlin ★ 10 2y agoExplain → -
forem-admin-guide ▣
No description.
★ 6 5y agoExplain → -
forembot ▣
No description.
CoffeeScript ★ 5 5y agoExplain → -
forem-platformsh-template ▣
A Platform.sh template for Forem
★ 5 4y agoExplain → -
cfp-app ⑂
Rails app for managing a conference CFP
Ruby ★ 4 4y agoExplain → -
acts_as_follower ⑂
A Gem to add Follow functionality for models
★ 3 6y agoExplain → -
2020-DEV
No description.
JavaScript ★ 3 5y agoExplain → -
shecoded
No description.
HTML ★ 1 5y agoExplain →
No repos match these filters.