Top Related Projects
Quick Overview
Lobsters is a self-hosted link aggregation and discussion website, similar to Reddit or Hacker News. It is designed to be a high-quality community for discussing technology, programming, and other related topics.
Pros
- Focused Community: Lobsters aims to maintain a high-quality, focused community of users interested in technology and programming.
- Customizable: The Lobsters codebase is open-source, allowing users to self-host and customize the platform to their needs.
- Moderation: The platform has a strong focus on moderation, with users earning "karma" points that influence their moderation abilities.
- Privacy-Focused: Lobsters does not track user data or display advertisements, prioritizing user privacy.
Cons
- Self-Hosting Complexity: Setting up and maintaining a self-hosted Lobsters instance can be technically challenging for some users.
- Limited Reach: As a self-hosted platform, Lobsters has a smaller user base compared to larger, centralized social media platforms.
- Steep Learning Curve: The platform's focus on high-quality discussions and moderation can have a steep learning curve for new users.
- Limited Functionality: Lobsters is designed to be a focused link aggregation and discussion platform, which may limit its appeal for users seeking a more feature-rich social media experience.
Getting Started
To get started with Lobsters, you can follow the detailed installation instructions provided in the project's README. The instructions cover setting up a development environment, configuring the necessary dependencies, and deploying the application.
Here's a brief overview of the steps involved:
-
Clone the Repository: Start by cloning the Lobsters repository from GitHub:
git clone https://github.com/lobsters/lobsters.git
-
Install Dependencies: Lobsters is built using Ruby on Rails, so you'll need to install Ruby, Rails, and other required dependencies. The README provides detailed instructions for setting up the development environment on various operating systems.
-
Configure the Database: Lobsters uses a PostgreSQL database. You'll need to create a new database and update the database configuration in the
config/database.yml
file. -
Run the Application: Once you've set up the development environment and configured the database, you can start the Lobsters application using the following command:
rails server
-
Create an Account: After the application is running, you can visit the local development URL (usually
http://localhost:3000
) and create a new user account. -
Customize and Deploy: If you plan to use Lobsters in a production environment, you'll need to configure the necessary deployment settings, such as web server, caching, and email settings. The README provides guidance on these topics.
For more detailed instructions and troubleshooting, please refer to the Lobsters README and the project's wiki.
Competitor Comparisons
historical code from reddit.com
Pros of Reddit
- Larger Community: Reddit has a much larger user base and community compared to Lobsters, which can be beneficial for content discovery and engagement.
- Diverse Topics: Reddit covers a wide range of topics, from news and entertainment to niche interests, making it a more comprehensive platform.
- Customizable Subreddits: Reddit's subreddit structure allows for more specialized and tailored communities within the larger platform.
Cons of Reddit
- Less Focused: The broad scope of Reddit can also lead to a less focused and more chaotic environment compared to the more curated Lobsters community.
- Moderation Challenges: With a larger user base, Reddit faces greater challenges in maintaining consistent moderation and content quality across the platform.
- Potential for Toxicity: The open nature of Reddit can sometimes lead to more toxic or abusive behavior, which may not be as prevalent in the Lobsters community.
Code Comparison
Lobsters:
class User < ApplicationRecord
has_many :stories
has_many :comments
has_many :sent_messages, class_name: "Message", foreign_key: "author_id"
has_many :received_messages, class_name: "Message", foreign_key: "recipient_id"
has_many :votes
has_many :tagged_stories, through: :votes, source: :story
has_many :authored_tags, class_name: "Tag", foreign_key: "author_id"
has_many :subscriptions
has_many :subscribed_tags, through: :subscriptions, source: :tag
end
Reddit:
class Redditor(models.Model):
username = models.CharField(max_length=20, unique=True)
password = models.CharField(max_length=100)
email = models.EmailField(unique=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
karma = models.IntegerField(default=1)
is_admin = models.BooleanField(default=False)
A platform for community discussion. Free, open, simple.
Pros of Discourse
- Discourse is a feature-rich forum software with a modern and responsive design, making it suitable for a wide range of online communities.
- The project has a large and active community, with regular updates and a strong focus on security and performance.
- Discourse provides a range of advanced features, such as real-time notifications, user reputation systems, and integration with various third-party services.
Cons of Discourse
- Discourse has a steeper learning curve compared to Lobsters, which may be a barrier for some users.
- The software can be resource-intensive, requiring more powerful hardware to run efficiently, especially for larger communities.
- Discourse's flexibility and feature set may be overkill for smaller or more specialized online communities that prefer a simpler forum solution.
Code Comparison
Lobsters:
class StoriesController < ApplicationController
def index
@stories = Story.active.order('id DESC').page(params[:page])
@new_story = Story.new
end
def show
@story = Story.find(params[:id])
@comments = @story.comments.order('id ASC')
@new_comment = @story.comments.build
end
Discourse:
class TopicController < ApplicationController
def show
topic = Topic.find_by(slug: params[:slug])
if topic.blank?
raise Discourse::NotFound
end
guardian = Guardian.new(current_user)
topic_view = TopicView.new(topic, guardian, params)
render_topic_view(topic_view)
end
For empowering community 🌱
Pros of forem/forem
- Forem provides a more feature-rich and customizable platform for building online communities, with support for various content types, user profiles, and moderation tools.
- The project has a larger and more active community, with more contributors and a more extensive ecosystem of plugins and integrations.
- Forem's codebase is more actively maintained and updated, with regular releases and bug fixes.
Cons of forem/forem
- Lobsters has a more focused and minimalist approach, with a smaller and more tightly-knit community that values simplicity and privacy.
- The Lobsters codebase is generally more lightweight and easier to understand, making it more accessible for contributors.
- Lobsters has a more robust and reliable invitation-only system, which helps maintain the quality and exclusivity of the community.
Code Comparison
Lobsters/Lobsters:
class StoriesController < ApplicationController
before_action :require_logged_in_user, except: [:index, :show, :suggest]
def index
@page = (params[:page].to_i <= 0) ? 1 : params[:page].to_i
@stories = Story.active.order('id DESC').offset((@page - 1) * 25).limit(25)
respond_to do |format|
format.html { render :index }
format.rss { render :index, layout: false }
end
end
Forem/Forem:
class ForumsController < Forem::ApplicationController
load_and_authorize_resource :forum, parent: false
def index
@forums = @forums.includes(:category).order('forem_categories.position, forem_forums.position')
@categories = Forem::Category.all.includes(:forums)
end
def show
@topics = @forum.topics.includes(:user, :last_post).page(params[:page]).per(Forem.per_page)
end
For empowering community 🌱
Pros of forem/forem
- Forem provides a more feature-rich and customizable platform for building online communities, with support for various content types, user profiles, and moderation tools.
- The project has a larger and more active community, with more contributors and a more extensive ecosystem of plugins and integrations.
- Forem's codebase is more actively maintained and updated, with regular releases and bug fixes.
Cons of forem/forem
- Lobsters has a more focused and minimalist approach, with a smaller and more tightly-knit community that values simplicity and privacy.
- The Lobsters codebase is generally more lightweight and easier to understand, making it more accessible for contributors.
- Lobsters has a more robust and reliable invitation-only system, which helps maintain the quality and exclusivity of the community.
Code Comparison
Lobsters/Lobsters:
class StoriesController < ApplicationController
before_action :require_logged_in_user, except: [:index, :show, :suggest]
def index
@page = (params[:page].to_i <= 0) ? 1 : params[:page].to_i
@stories = Story.active.order('id DESC').offset((@page - 1) * 25).limit(25)
respond_to do |format|
format.html { render :index }
format.rss { render :index, layout: false }
end
end
Forem/Forem:
class ForumsController < Forem::ApplicationController
load_and_authorize_resource :forum, parent: false
def index
@forums = @forums.includes(:category).order('forem_categories.position, forem_forums.position')
@categories = Forem::Category.all.includes(:forums)
end
def show
@topics = @forum.topics.includes(:user, :last_post).page(params[:page]).per(Forem.per_page)
end
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Lobsters Rails Project 
Lobsters is a Rails codebase and uses a SQL (MariaDB in production) backend for the database. The code is open source as part of our commitment to transparency. It's been used to run sister sites, but mostly we want people to be able to understand and improve what's happening on Lobsters itself.
(Despite the site being a ghost town running on a quite sad codebase, at least we have no relation to the self-help guru.)
Contributing bugfixes and new features
We'd love to have your help. Please see the CONTRIBUTING file for details. If you have questions, there is usually someone in our chat room who's familiar with the code.
Lobsters is a volunteer project with limited development time and a long time horizon, we hope to be running for decades. So our design philosophy is a little different than a typical commercial product:
- We started with Rails 3.2.2 in 2012, so we have a few dusty corners and places where we don't take advantage of features that were introduced since we started.
- We lean into using Rails features instead of custom code, and we'll write a couple dozen lines of narrow code for a feature rather than add a dependency that might require maintenance.
- We are especially reluctant to add new production services like queues, caches, databases, or SAAS services.
- We test to ensure functionality, but testing is a lot lighter for moderator and other non-core features. We're trying to maximize the return on investment of testing rather than minimize errors.
- We're willing to take downtime for big code changes rather than try to make them seamless.
Development setup
We have a Docker setup guide if you use that for development, but you can also set up directly on your machine:
-
Install and start MariaDB. On Linux use your package manager. On MacOS you can install with brew. On Windows there's an installer.
-
Start the mariadb server using one of the methods mentioned in the mariadb knowledge base.
-
Open the console using
mariadb
, and set theroot
user password (typectrl-d
to exit afterwards)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'localdev';
-
Install the Ruby version specified in .ruby-version
-
Checkout the lobsters git tree from Github
$ git clone git@github.com:lobsters/lobsters.git $ cd lobsters lobsters$
-
Run
rails credentials:edit
to create and edit your encrypted credentials file. This is where you store API keys for external services and features like linking accounts. Copy and paste the contents ofconfig/credentials.yml.enc.sample
in. On setup, Rails will give you new random value forsecret_key_base
and you can userails secret
any time you need to generate another. -
Run
bin/setup
to install dependencies and set up dblobsters$ bin/setup
-
On your production server, copy
config/initializers/production.rb.sample
toconfig/initalizers/production.rb
and customize it with your site'sdomain
andname
. (You don't need this on your dev machine). -
On your personal computer, you probably want to add some sample data.
lobsters$ rails fake_data
-
Run the Rails server in development mode. You should be able to login to
http://localhost:3000
with your newtest
user:lobsters$ rails server
Production
You are free to use this code to start your own sister site because the code is available under a permissive license (3-clause BSD). We welcome bug reports and code contributions that help use improve lobste.rs. As a volunteer project we're reluctant to take on work that's not useful to our site, so please understand if we don't want to adopt your custom feature. These instructions assume you know the basics of web development with Ruby on Rails on a Linux server.
Important: the hard part about starting an online community is not the codebase. A new social site has to solve a chicken-and-egg problem: nobody will want to participate on a new site until other people are participating. Before you start working with the code, make a plan for how you'll reach potential community members and what they'll find engaging about the early days. If you don't attract enough early users to reach a self-sustaining level of activity, the code doesn't matter!
As of February 2025 we have a Zulip-based chat room to discuss the codebase and offer limited support to owners of sister sites like warnings about breaking changes and vulnerability announcements. If you run a site using the codebase, you will benefit from joining.
Setup:
-
Fork the repo, clone it to your local computer. You should add lobsters as a git remote so you can continue to pull our changes.
-
Edit
config/application.rb
to put in your site's name and domain name. -
We use a paid service called Hatchbox to set up and deploy the server. Reusing this config will be much easier than Heroku/Render/etc. ...Hatchbox has a clever wizard-style flow for getting started. I'm going to explain what our final settings are rather than try to stay current with the wizard setup. This should be all the info you need, just in a slightly different order.
-
Follow the Hatchbox Docs to create an account and connect a Hosting Provider. We use DigitalOcean because I was already familiar with it.
-
Create a Cluster, ours is called
lobsters
. We don't have any Cluster settings customized. -
In your Cluster, create a Server. There's a DO limitation that the server name must match your domain name for them to create a reverse DNS PTR record that you'll need for email. We don't have any Server settings customized.
-
When a server is created, check if its IP address is blacklisted for sending email. Email spammers constantly try to create servers on every hosting provider. The providers ban them, but the IP address gets a bad reputation and may be on blocklists when it's assigned to you. Check your server's IP ASAP; it's much easier to delete and recreate than get off the blocklists, especially because outsiders don't have any insight into the internal blocklists of big email providers like Google, Apple, and Microsoft.
-
You'll need to create a Database. We use MariaDB in prod but are working to migrate to SQLite.
-
Create an App. Running through the Settings sections:
-
Processes: Add a
solid_queue
process, commandbundle exec rails solid_queue:start
. -
Activity: This is logs, nothing to change.
-
Repository: Connect your GitHub repo.
-
Domains & SSL: Add your domain names, include both
example.org
andwww.example.org
. -
Environment:
BUNDLE_WITHOUT development:test DATABASE_URL trilogy://[username]:[password]@[1.2.3.4]/lobsters INGRESS_PASSWORD [random generated key] PORT 9000 RACK_ENV production RAILS_ENV production RAILS_LOG_TO_STDOUT true RAILS_MAX_THREADS 10 SECRET_KEY_BASE [random generated key]
Search the codebase for uses of the
ENV
global for more that can be easily configured. -
Databases: We manage this independely of Hatchbox for historic reasons, see
#539
. -
Cron Jobs:
expire_page_cache * * * * * script/expire_page_cache script/lobsters-cron */5 * * * * bundle exec script/lobsters-cron
-
Settings: We have tweaks of production config files and we want those tracked in our git repo. We have rigged up settings to run an (unfortunately) clever hook to update those on deploy, see below.
Pre-build script:
hatchbox/pre-build
Custom build script: blank Post-build script: blank Post-deploy script:hatchbox/post-deploy
Failed deploy script: blank Caddyfile: copy the text of the filehatchbox/Caddyfile
from this repo. As it says, you have to manually paste it in on changes and click 'Update Caddy'.
-
-
Make a deployment with Hatchbox. Whew!
-
SSH into your server as the
root
user to set up the deploy hook.ln -s /home/deploy/lobsters/current/hatchbox/root-deploy.service /etc/systemd/system ln -s /home/deploy/lobsters/current/hatchbox/root-deploy.path /etc/systemd/system systemctl daemon-reload systemctl enable --now root-deploy.service # first backup takes 10ish min systemctl enable --now root-deploy.path
-
Deploy again with Hatchbox to run the hook and finish the server provisioning.
-
SSH into your server as the
deploy
user- Run
rails credentials:edit
to set up credentials there, like you did for development. Useconfig/credentials.yml.sample
for a template. On setup, Rails will give you new random value forsecret_key_base
and you can userails secret
any time you need to generate another. Nevergit commit
or share yourconfig/credentials.yml.enc
orconfig/master.key
. - Test your mail config for spamminess.
Run
echo "Test Postfix email, visit scnenic https://example.com" | mail -s "Postfix Test" test-whatever@srv1.mailtester.com
- Run
rails console
and create aUser
for yourself, setis_admin = true
. You'll probably also have to create aCategory
and oneTag
for the site to run at all. - See logs in
~deploy/sitename/shared/log
.
- Run
If everything worked, you should have a running instance now.
Administration
Basic moderation happens on-site, but some administrative tasks require use of the rails console in production.
Administrators can create and edit tags at /tags
, the mod dashboard is at /mod
.
Top Related Projects
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot