Discourse (software)
View on WikipediaThis article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
| Discourse | |
|---|---|
| Developers | Civilized Discourse Construction Kit, Inc. |
| Initial release | August 26, 2014[1] |
| Stable release | 3.5.2[2] |
| Repository | |
| Written in | Ruby, JavaScript |
| Operating system | Linux |
| Available in | Albanian, Arabic, Bosnian, Chinese, Czech, Danish, Dutch, English, Estonian, Finnish, French, Galician, German, Greek, Hebrew, Indonesian, Italian, Japanese, Korean, Norwegian, Persian, Polish, Portuguese, Romanian, Russian, Slovak, Spanish, Swedish, Telugu, Turkish, Ukrainian, Urdu, Vietnamese |
| Type | |
| License | GNU GPL version 2 (or later) |
| Website | www |
Discourse is an open source Internet forum system released on August 26, 2014. It was founded by Jeff Atwood, Robin Ward, and Sam Saffron.
The client side application is written in EmberJS. The server side is written in Ruby on Rails and backed by a PostgreSQL database and Redis cache. The source code is distributed under the GNU General Public License version 2.

Features
[edit]This section needs additional citations for verification. (April 2023) |
Categorization
[edit]Similar discussions can be organized under categories. Admins can create categories, add category descriptions and logos, and control access to topics in the category. Discourse provides granular control over read/write permissions.
Discourse also supports sub-categorization or nested categories. Subcategories are categories in themselves so they can be controlled in the same manner as parent categories. The only difference is the parent-child relationship.
Tagging
[edit]Tags are a lightweight alternative to categories, but they can also be used in conjunction.
Topics
[edit]Conversations in Discourse are organized into topics. Users are able to create new topics or reply to existing ones. Categories and tags can be assigned to topics which makes them follow the security rules for those if applicable.
A topic consists of the initial post as well as any subsequent replies to it. Replies in Discourse follow a flat chronological order as opposed to being threaded. The Discourse core developers believe that threading replies is detrimental to the health of the overall discussion.[citation needed] Users can interact with each post independently. They can take actions such as reply, like, bookmark, quote or flag for moderation.
Trust levels
[edit]The user trust system is a "fundamental cornerstone of Discourse".[3] Discourse's trust levels sandbox new users so that they cannot accidentally hurt themselves or other users, while granting experienced users more rights over time so that they can help maintain and moderate the community.
The five trust levels are New, Basic, Member, Regular, and Leader.
As users become more experienced, their trust level is raised, granting more rights and access to more features.
Discourse narrative bot
[edit]Discobot is a customizable bot that introduces new users to many of the platform's features like bookmarking a topic, embedded link previews ("oneboxing"), emojis, mentions, basic formatting, uploading images, flagging posts, and searching.
Personal messages
[edit]In addition to public and private topics, users on Discourse have the ability to send personal messages to other members in the community. Users receive notifications for personal messages and can add or remove members to a message at any time. Each user has a personal inbox that contains all of their sent and received messages.
Groups
[edit]Admins can create groups and add members to them. Groups can be used to manage access to certain categories, and for group mentions and group messages.
When Discourse is installed, it creates automatic groups for administrators, moderators, staff, and the five trust levels. Custom groups can set to either public or private. Users can add themselves to a group or request to be added by the group owners. Users can also be automatically added to a group during signup based on their email address.
Editor
[edit]
Discourse features a rich-text editor (the "composer"). It supports plain text, markdown, and HTML. The composer features a toolbar which includes formatting, quoting, and upload buttons. The preview panel in the composer allows users to see a live preview of the post. It supports drag and drop image and file uploads. The composer supports OpenGraph and oEmbed. URLs from external websites that support those standards will automatically expand to provide a summary of the URL. One of the key features of the composer is its ability to save drafts prior to publishing them.
Certain actions in the composer are triggered based on user input. The "@" character brings up a panel for mentioning other users. The "#" character brings up a similar panel for categories and tags. The composer also features configurable JIT educational panels with the goal of promoting civilized discussion.
Admin interface
[edit]The administration dashboard's settings section allows control of appearance and behavior of the software, including fields for information about the community.
The dashboard also provides an overview of the health of the community, via charts showing signup numbers and other health metrics.
The localization section allows admins to change any text used in the interface.
User directory
[edit]The "Users" page in Discourse serves as a leader-board with search functionality. It includes statistics such as posts created, posts read, likes received, and days visited for a given time frame. Users can be sorted according to any of those metrics. Admins can optionally add more metrics.
Plugins
[edit]Discourse is extendable via plugins. Plugins create the ability to modify both the server and client sides of the application. Some examples of plugins include
- Discourse Math, which adds support for math rendering.
- Chat integrations, which integrate Discourse with popular chat platforms.
- BBCode, which adds support for BBtags.
The Discourse team maintains a list of both official and community contributed plugins on the official support forum.

Themes
[edit]The Discourse theme system allows admins to customize the client side application. Themes can modify the layout of pages, add new functionality, and add additional styles to any element in the interface.
API
[edit]Discourse has a REST API. The developers maintain a getting-started guide on the support forum as well as documentation for the API endpoints.
Security
[edit]The developers welcome peer audits of the open source code and encourage reporting security issues. They maintain a vulnerability disclosure program at Hacker One.
DiscourseHub
[edit]DiscourseHub is the official, open source Discourse application for Android and iOS devices. It allows users to keep track of new and unread posts and notifications across multiple Discourse sites. Real-time push notifications are native for officially hosted Discourse forums.
History
[edit]Co-founder Jeff Atwood announced in 2013 that Civilized Discourse Construction Kit, Inc. had obtained initial venture capital funding from First Round, Greylock, and SV Angel.[4]
In May 2017, he said in an interview that the company was generating approximately $120,000 per month.[5] With the money, the company pays salaries for its full-time employees who maintain the software and develop new features. This is an example of an open source software business model where a company sells professional services to willing customers. As of March 2022, the developers shared that more than 3000 businesses or instances have chosen the official Discourse hosting which CDCK provides as software as a service.
In August 2021, Civilized Discourse Construction Kit announced it had secured US$20 million in Series A Investment by Pace Capital and First Round Capital.
On February 1, 2023, Jeff Atwood stepped down as CEO and assumed the role of Executive Chairman. He was succeeded by Sam Saffron and Sarah Hawk.[6]
Development and support
[edit]The Discourse project is developed and maintained by the developers at Civilized Discourse Construction Kit, Inc. (CDCK).
See also
[edit]References
[edit]- ^ Atwood, Jeff (2014-08-26). "Introducing Discourse 1.0". blog.discourse.org. Archived from the original on 2020-07-04. Retrieved 2020-07-04.
- ^ "Release 3.5.2". 28 October 2025. Retrieved 28 October 2025.
- ^ "Understanding Discourse Trust Levels". Discourse. 2018-06-25. Retrieved 2023-06-21.
- ^ "Stack Exchange Co-Founder Jeff Atwood Launches Forums Startup Discourse, With Funding From First Round, Greylock, And SV Angel". TechCrunch. 6 February 2013. Retrieved 2022-03-31.
- ^ "Jeff Atwood on Growing Discourse to $120,000/mo". Indie Hackers. Retrieved 2022-03-31.
- ^ "Sam Saffron and Sarah Hawk named Discourse Co-CEOs". Discourse. 2023-01-31. Retrieved 2023-02-09.
External links
[edit]Discourse (software)
View on GrokipediaOverview
Description and purpose
Discourse is an open-source Internet forum software designed as a modern alternative to legacy bulletin board systems such as phpBB and vBulletin.[4] It provides a platform for building online communities, emphasizing real-time interaction and structured discussions over traditional threaded forums.[1] The core purpose of Discourse is to foster meaningful discussions, support, and teamwork within various communities, including public forums, internal teams, and customer support sites.[9] By prioritizing civilized discourse, it aims to create engaging environments that encourage participation while minimizing disruptions.[1] Key principles guiding its development include a mobile-first design to ensure accessibility across devices, gamification elements like trust levels to boost user engagement, and structured interactions supported by moderation tools and AI to reduce toxicity.[1] Discourse was initially released on August 26, 2014, as a free, open-source project under the GNU General Public License version 2 (GPL v2).[10][3] It is developed and hosted by Civilized Discourse Construction Kit, Inc., which offers managed services alongside the self-hosted option.[4][5]Technical foundation
Discourse is built primarily on Ruby on Rails for its backend, which handles the API in a RESTful manner and responds with JSON data.[3] The frontend is powered by Ember.js, enabling a single-page application architecture that facilitates dynamic user interactions without full page reloads.[3] The software relies on PostgreSQL as its primary database for storing structured data such as posts, users, and topics.[3] Redis serves as the caching layer to improve performance by storing frequently accessed data in memory, while Sidekiq manages background jobs like email notifications and scheduled tasks using Redis as its queue backend.[11][3] Discourse employs custom CSS within its Ember.js framework to achieve responsive design, ensuring compatibility across devices including modern browsers (Safari, Chrome, Edge, Firefox), tablets (iPadOS, Android), and smartphones (iOS, Android), with support targeted at iOS 16.7+ for Safari, following the drop of iOS 15 support in July 2025.[3][12] For deployment, Discourse uses a Docker-based installation process for self-hosting, bundling all components into containers for simplified setup on 64-bit Linux systems compatible with Docker.[13] Minimum requirements include a modern single-core CPU (dual-core recommended), 1 GB RAM (with swap enabled), and 10 GB disk space.[14] In 2025, Discourse proposed a new versioning strategy to enhance predictability, featuring monthly releases (e.g., v2026.0, v2026.1) and six-monthly Extended Support Releases (ESR) with overlapping support periods for stability and security updates.[15] This system aligns with semantic versioning principles by structuring versions as major.minor.patch and automating releases via GitHub actions.[15]Core Features
Discussion structure
Discourse organizes conversations around topics as the fundamental unit of discussion. A topic begins with an original post that initiates the conversation, followed by sequential replies that build upon it, forming a threaded structure where users can quote and respond to specific posts for clarity.[16] This design promotes focused, ongoing dialogues rather than fragmented threads, allowing participants to follow the flow chronologically while linking related replies.[17] Topics are placed within a hierarchical categorization system to facilitate navigation and organization. Categories serve as broad containers for related discussions, with support for subcategories that nest under parent categories, enabling up to three levels of hierarchy via custom server setup.[18] Administrators define categories with permissions controlling visibility and participation, ensuring topics are grouped logicallyโfor instance, a main category for "Technology" might include subcategories like "Software" and "Hardware." This structure helps users discover relevant content quickly without overwhelming the interface.[17] Complementing categories, tagging provides flexible, user-driven labeling for enhanced filtering and discovery. Users with appropriate permissions apply tags to topics during creation or editing, selecting from a dynamic chooser that suggests existing options; tags are created on first use and can be limited to specific categories.[19] Features like tag synonyms merge similar labels (e.g., "AI" and "artificial-intelligence") into one canonical tag to maintain consistency, while category settings can enforce required tags or minimum numbers, such as mandating at least one tag from a predefined group.[20][21] Tags enable advanced searching and sorting, allowing users to view all topics under a label like "tutorial" across categories. To encourage participation, Discourse automatically awards badges based on user actions within topics, such as creating the first reply or reaching participation milestones.[22] These badges, visible in user profiles, recognize contributions like consistent posting or helpful replies, with the system granting them via predefined queries without manual intervention. Users receive notifications for earned badges, alongside alerts for topic activity: email summaries for new replies, push notifications via the mobile app for real-time updates, and in-site bells for mentions or watches.[22][23] Notification levels (watching, tracking, normal, muted) can be set per topic, category, or tag, balancing engagement with inbox management. User trust levels further influence posting capabilities, such as the ability to create topics or apply tags, ensuring structured participation.[24]User engagement tools
Discourse provides several built-in mechanisms for users to interact with and acknowledge content, fostering greater participation in discussions. The likes feature allows users to express agreement or appreciation for a post by clicking a heart icon, which is public and visible on the user's profile; this action notifies the post author and influences post rankings in topic lists based on like counts.[25] Built-in reactions enable administrators to configure multiple emoji options beyond the default heart, permitting users to select from a customizable set of reactions to convey nuanced sentiments without adding new comments.[26] In July 2025, the Reactions feature was bundled into core. Additionally, bookmarks permit users to save specific posts or entire topics for later reference, with bookmarked items appearing in a dedicated /bookmarks page; a bookmark icon highlights saved topics in lists, and recent updates have improved performance for managing large bookmark collections.[27][28] To facilitate referencing and sharing content, Discourse supports inline quoting and media embeds. Users can quote selected text from any post by highlighting it and clicking the quote button (or pressing 'q'), which inserts a formatted excerpt with a link back to the original post, enabling contextual replies without full reproduction.[29] For embeds, the Onebox system automatically generates rich previewsโknown as oneboxesโfor pasted URLs from supported providers, such as embedded videos from YouTube or images from Imgur, reducing the need for external links and enhancing readability within topics.[30] Search functionality in Discourse is designed for efficient content discovery, offering full-text search across posts, topics, users, and tags via a global search bar. Advanced filters allow precise queries, such as "in:category-name" to limit results to specific categories, "from:username" for user-specific posts, or "hashtag:#tag" for tagged content, with options to sort by recency, relevance, or activity; this supports complex searches like combining terms with quotes for exact phrases.[31] Gamification elements encourage ongoing participation through built-in features that award points (or "karma") for actions such as posting, liking, or replying, and displays leaderboards ranking users by total score. In July 2025, the Gamification plugin was bundled into core. Administrators can customize scoring rules and contests to highlight top contributors, promoting sustained engagement without relying solely on traditional metrics like post count.[26][32]Communication features
Discourse provides personal messaging functionality that enables private one-on-one or group conversations separate from public discussion topics. Users access their messages through the user menu by clicking the envelope icon or navigating directly to the/my/messages endpoint, where they can view options such as New Message for initiating chats, Inbox for received messages, Sent for outgoing messages, and Archive for organized storage.[33] These messages support direct communication, including the ability to send private messages to email addresses even if the recipient is not yet registered on the site, which can prompt account creation upon response.[34] While suitable for short-term private exchanges, personal messages have limitations, such as automatic closure after reaching the default limit of 500 replies to encourage transitioning to dedicated chat systems for prolonged discussions.[35]
Users can directly address others in posts using the @username mention system, which notifies the mentioned individual and highlights their involvement in the conversation. To use it, a user types @ followed by the desired username in a post composer, selecting from an autocomplete list to ensure accuracy, thereby sending an immediate notification visible as a blue indicator on the recipient's profile picture.[36] This feature facilitates targeted engagement within public topics, allowing for quick replies or invitations to contribute without disrupting the broader discussion flow. Notifications from mentions can be managed through user preferences, including options to enable or disable alerts for specific topics, categories, or tags.[36]
The platform supports saving drafts of unfinished posts and topics to allow users to resume work later, with enhancements in version 3.4 enabling the storage of multiple drafts accessible directly from the composer menu for seamless continuation across sessions or devices.[37] Scheduling functionality is integrated via topic timers, which permit administrators and users to set draft topics for automatic publication at a specified future date and time, ensuring content appears in the designated category without manual intervention.[38]
Multilingual support in Discourse is facilitated through plugins that handle translation and language management, enabling communities to accommodate diverse linguistic needs. The official Discourse Translator plugin integrates with APIs from providers like Google, Microsoft, or Yandex to automatically translate individual posts on demand, with server-side caching to optimize performance and a configurable rate limit of up to three translations per minute.[39] Complementing this, the Multilingual plugin provides administrative tools for defining site languages, filtering content by language tags, and translating static elements such as category names and tags, while supporting guest users with a language switcher in the footer or menu.[40] It also manages interface locales, including right-to-left text direction for languages like Arabic and Hebrew, ensuring proper rendering and user experience across global audiences.[40]
User Management
Trust levels and moderation
Discourse implements a tiered trust level system to progressively grant permissions to users based on their demonstrated activity and behavior, helping to protect communities from abuse while encouraging participation. There are four primary trust levels, ranging from 0 to 3, which are automatically assigned based on user engagement metrics, with a fifth level (4) reserved for manual promotion by staff. This system sandboxes new users with restrictions to prevent accidental or malicious disruptions, gradually unlocking features as users contribute positively. Trust levels are tied to implicit groups (e.g., trust_level_0), allowing administrators to customize permissions further.[41] Trust Level 0, for new users, imposes strict limits such as no private messages, no flagging, a maximum of one image or two hyperlinks per post, and no edits after 24 hours, to mitigate spam risks during onboarding. Progression to Trust Level 1 requires entering at least five topics, reading 30 posts, and spending a total of 10 minutes reading posts. At Trust Level 1, users gain basic privileges like sending private messages, uploading attachments, editing wiki posts, and flagging content. To reach Trust Level 2 (Member), users must visit on 15 different days, give and receive one like, reply to three topics, enter at least 20 topics, read 100 posts, and spend 60 minutes reading. This level allows inviting others to topics or private messages, ignoring users, and editing own posts for up to 30 days, with 1.5 times the standard daily posting limits. Trust Level 3 (Regular) is achieved over the last 100 days by visiting on 50% of days, replying to 10 topics, viewing 25% of topics (capped at 500), reading 25% of posts (capped at 20,000), receiving 20 likes, giving 30 diverse likes, receiving fewer than five spam flags, and avoiding suspensions; demotion is possible with a two-week grace period if criteria lapse. Regulars can recategorize or rename topics, access secure categories, edit wiki posts, and benefit from 2 times the daily limits, with their flags potentially auto-hiding or silencing Trust Level 0 posts. Trust Level 4 (Leader) provides moderator-like abilities, including editing any post, pinning or closing topics, splitting or merging posts, 3 times the daily limits, and immediate flag effects, but requires manual staff promotion.[41][42] Moderation in Discourse relies on community-driven tools and staff actions to enforce standards. Users at Trust Level 1 or higher can flag posts for issues like spam, off-topic content, or inappropriate material, adding them to a review queue for staff review. Single flags allow moderators to agree, disagree, ignore, hide the post, silence the user, suspend them, or delete the content; multiple flags (e.g., three from Trust Level 1 users or two from Trust Level 2) automatically hide the post. Hidden posts prompt the author via private message to edit and unhide; unedited posts are deleted after 30 days. Moderators can also edit posts directly (unhiding if flagged), move posts to appropriate topics, or delete them outright, with topics auto-closing for four hours if five unique users flag multiple posts within it. For persistent spammers, a shadowban plugin enables invisible restrictions, blocking their posts and notifications from public view without alerting the user, facilitating quiet removal of abusive accounts.[43][44] Automated moderation supplements manual efforts through built-in safeguards. Rate limiting applies globally per IP address, capping requests at 200 per minute and 50 per 10 seconds by default, with asset requests limited to 200 per 10 seconds; users at Trust Level 1 or higher shift to per-user limits to avoid over-restricting engaged members. Spam detection integrates with external services like Akismet for machine learning-based filtering of comments and posts, though recent updates have shifted to Discourse AI for default spam flagging with high accuracy and minimal configuration. These tools collectively reduce manual intervention for low-level abuse while scaling with community size.[45][46] Administrators can enhance visual hierarchy by assigning custom user titles and roles tied to trust levels, such as renaming "New User" to "Newbie" or "Regular" to "Veteran," which appear in user profiles and posts. These customizations, configurable via site settings, create a clear progression ladder, fostering recognition of contributions without altering core permissions. Badges and group memberships can further denote roles, but trust levels provide the foundational structure for such assignments.[47]Groups and personal messages
In Discourse, administrators create groups through the admin interface to organize users into collectives with tailored access controls. These groups allow for defining custom permissions, such as read, reply, or create access within specific categories, enabling fine-grained management of site features. Visibility settings determine whether a group is public, logged-in only, or private, with private groups hidden from non-members unless explicitly mentioned via @groupname in posts. Auto-membership rules can be configured based on criteria like email domains or trust levels, automatically adding qualifying users to streamline onboarding for teams or departments.[48][49][50] Groups support private topics by integrating with category permissions, where discussions can be restricted to group members only, displaying a padlock icon to indicate limited access. These private topics function as standard threads but remain invisible to outsiders, fostering secure collaboration for internal teams or support staff without exposing content to the broader community. For instance, a "staff" group might have exclusive read and write access to a dedicated category for sensitive matters.[48][49] Personal messages in Discourse are organized as threaded conversations, mimicking the structure of public topics for coherent exchanges between individuals or groups. Users initiate PMs via the messaging interface, accessible from the user menu, and can address entire groups by using @groupname, ensuring all members receive notifications and participate in the thread. Features include an inbox for received messages, a sent folder, and archiving options to manage conversations efficiently; while read receipts are available in associated chat functionalities, standard PMs rely on notification indicators for tracking engagement.[33][51][52] Email integration enhances group functionality through group inboxes, where incoming emails to a designated address (e.g., [email protected]) are automatically converted into private group messages, complete with threaded replies. This setup supports invite workflows, allowing admins to send group invitations via email that prompt users to join and receive tailored notifications. Group-specific notifications ensure members are alerted to new messages or mentions, with options for email digests to maintain engagement outside the platform.[53][54][55]User directory
The user directory in Discourse provides a centralized way for community members to discover and explore individual profiles, fostering connections within the forum. Accessible via the "/u" endpoint, it displays a paginated list of registered users, emphasizing active participants through sortable columns such as username, join date, post count, and trust level indicators.[56][57] Profile pages serve as customizable personal hubs, allowing users to showcase their identity and contributions. Standard elements include an avatar for visual representation, a bio section (often labeled "About Me") for a short personal description, and fields for location and website links, which can connect to external social accounts or portfolios. Administrators can enable custom user fieldsโsuch as interests, expertise, or pronounsโthat appear on these pages if configured for public visibility, enabling users to tailor their profiles beyond defaults during signup or via preferences.[58][59] The directory supports targeted discovery through a search bar that filters users by username or searchable custom fields, such as location or specific attributes like skills. Users can further refine results by sorting columns (e.g., by join date or activity metrics) or applying basic filters, including by trust level to highlight engaged members. Columns are configurable by site administrators to include or exclude details like custom fields for a tailored view.[60][56][57] Privacy controls empower users to manage their visibility, with an option in preferences to "Hide my public profile and presence features," which conceals the full profile from anonymous viewers and other users while still allowing participation in discussions. Site-wide settings can disable public access to all profiles, restricting them to logged-in members only, though basic stats may remain in the directory unless deactivated. These features balance community transparency with individual autonomy.[61][62][63] Activity streams on profile pages offer detailed views of a user's engagement, organized under tabs like "Activity" with subsections for posts, replies, likes given or received, and topics created. These streams provide chronological summaries of contributions, helping visitors assess a user's involvement without navigating the full forum archive. Custom fields or plugins can extend these views, but core functionality focuses on post-based metrics for straightforward evaluation.[64][65]Customization and Extensibility
Composer and interface
The Composer in Discourse is a Markdown-based text editor designed for creating and editing posts, replies, and other content within the platform. It supports standard Markdown syntax for formatting elements such as bold text (bold), italics (italics), headings, lists, links, and code blocks, allowing users to write in a lightweight, familiar markup language. A key feature is the real-time preview, which provides a WYSIWYG (What You See Is What You Get) rendering of the content as it is typed, enabling immediate visualization of changes without needing to save or switch tabs. This dual-mode approachโcombining Markdown input with live HTML outputโenhances usability for both technical users accustomed to raw markup and those preferring visual editing, and it is built on the ProseMirror framework with custom enhancements for Discourse-specific needs.[66] The Composer's toolbar streamlines content creation by offering intuitive icons and buttons for common actions, including text formatting (e.g., bold, italic, underline), inserting links with options to edit, copy, add titles, or remove them, and embedding images with resizing, captioning, and deletion capabilities. Users can upload files, images, and videos directly into posts, with automatic handling for drag-and-drop operations and inline previews. Additionally, the toolbar includes tools for creating polls, where administrators can configure options like multiple choices and display settings, though editing existing polls remains an area of ongoing refinement. Keyboard shortcuts further accelerate these processes, such as Command + B (or Ctrl + B on Windows/Linux) for bold text, Command + I for italics, and Command + K for links, with a full list accessible by pressing Shift + ? to open the shortcuts menu.[66][67] Discourse's overall user interface incorporates elements like infinite scrolling on topic lists, where additional discussions load automatically as users reach the bottom of the page, reducing the need for manual pagination and improving navigation on long feeds. This is particularly useful for browsing categories or search results, though it can be customized through plugins or theme components to implement alternatives like pagination or load more buttons. The platform also supports dark mode, which can be enabled automatically based on the user's device preferences (e.g., via theprefers-color-scheme media query), providing a low-light theme to reduce eye strain during extended use; users can toggle between light and dark schemes manually through the user menu. Accessibility is prioritized with screen reader compatibility, including proper ARIA labels for interactive elements like avatars and buttons to ensure navigation via tools such as NVDA or VoiceOver, and high-contrast color scheme options that meet WCAG guidelines for better visibility.[68][69][70][71]
As a legacy feature that has evolved into broader modern onboarding experiences, the Narrative Bot (also known as Discobot) automates welcome messages for new users by sending a private message upon registration, introducing platform basics and offering an optional guided tour. This interactive tutorial prompts users to perform simple actions like posting a reply or liking content, rewarding completion with badges to encourage engagement, though it can be disabled or customized via site settings to align with community-specific introductions.[72][73]
Plugins and themes
Discourse provides a robust plugin system that allows administrators to extend the platform's core functionality with additional features, primarily through Ruby on Rails-based extensions integrated with JavaScript for client-side enhancements. Plugins can introduce capabilities such as calendar integrations for event scheduling or single sign-on (SSO) mechanisms to streamline user authentication. Official plugins, like those supporting OAuth providers, are developed and maintained by the Discourse team to ensure compatibility and security with the latest releases.[74] Community-contributed plugins, hosted on GitHub, enable further customization, such as advanced notification systems or content embedding tools, and are reviewed for inclusion in the official repository when they meet quality standards. Development of plugins involves creating a gem structure with initializer files in Ruby to hook into Discourse's Rails application, allowing modifications to models, controllers, and views without altering the core codebase.[75] Themes and theme components offer a way to stylize and enhance the user interface using CSS, JavaScript, and HTML templates, uploaded directly through the admin panel for seamless integration. Theme components are modular elements, such as custom headers or font switchers, that can be reused across multiple themes, while full themes apply broader visual overhauls like color schemes or layout adjustments. These customizations support dynamic elements through seed data in YAML format, which populates settings like theme variables for responsive design or user preferences. In 2024 and 2025, Discourse migrated several UI components to Glimmer-based implementations, improving extensibility but necessitating updates to existing themes and plugins for ongoing compatibility.[76][77][78][79] Installation of plugins on self-hosted instances requires editing theapp.yml configuration file to include Git repository URLs under the hooks:after_code section, followed by rebuilding the Docker container with ./launcher rebuild app to apply changes. Themes, in contrast, are installed via the admin interface at /admin/customize/themes, where administrators can upload a theme archive from their device or import directly from a GitHub repository URL, with automatic updates available for linked repos. This process ensures themes remain synchronized without manual intervention.[80][81]
Core plugins are actively maintained by the Discourse team to align with platform updates, while community contributions on GitHub undergo compatibility checks to prevent conflicts with Discourse's Ember.js frontend or Rails backend. Administrators must verify plugin and theme versions against the current Discourse release to maintain stability, as mismatches can lead to deprecated features or errors.
API and integrations
Discourse provides a comprehensive RESTful API that enables developers to interact programmatically with core elements of the platform, including topics, users, and posts. The API returns data in JSON format and supports standard HTTP methods such as GET, POST, PUT, and DELETE, with endpoints accessible by appending.json to URLs or specifying the Accept: application/json header in requests. Authentication is handled via API keys, which are generated in the admin panel and passed in HTTP headers as Api-Key and Api-Username (often set to "system" for administrative actions), ensuring secure access without embedding credentials in URLs.[82]
Key endpoints include those for managing topics, such as POST /topics to create a new topic, GET /t/:id.json to retrieve topic details, and PUT /t/:id to update topic attributes; for users, POST /users creates accounts, GET /u/:username.json fetches user profiles, and PUT /u/:username modifies user information; and for posts, POST /posts adds new posts, GET /posts/:id.json retrieves post content, and PUT /posts/:id edits existing posts. These endpoints mirror the platform's web interface functionality, allowing external applications to read, create, and modify content while respecting permissions and rate limits.[82]
Webhooks in Discourse facilitate event-driven integrations by sending HTTP POST requests to external URLs upon specific platform events, such as user registrations, post creations, or topic updates, providing real-time notifications without constant polling. Configured through the admin interface under Settings > API > Webhooks, they include a payload in JSON format detailing the event data and are secured with HMAC-SHA256 signatures for verification. This mechanism supports seamless connections to services like Slack for notifications or Zapier for workflow automation, reducing the need for custom polling scripts.[83]
Official integrations include single sign-on (SSO) capabilities via DiscourseConnect, which outsources user authentication to external providers, and supports OAuth2 with Google for streamlined login using Google accounts. Additionally, Discourse offers built-in email importers to migrate content from legacy forum software, such as PHPBB, vBulletin, or Vanilla, by processing email archives or database exports to recreate topics, posts, and user data during site setup. These importers are accessible via Ruby scripts in the platform's codebase and are often used in conjunction with professional migration services for larger transitions.[84][85][86]
Data export features allow administrators and users to generate backups and extracts in JSON or CSV formats for archival, analytical, or migration purposes. Site-wide backups, initiated via the /admin/backups endpoint or admin dashboard, produce downloadable JSON files containing full database snapshots, while users can request personal data exports in CSV through their preferences page, including posts, topics, and profile information. The Data Explorer plugin further enables custom SQL queries with exports limited to 10,000 rows in JSON or CSV, supporting programmatic data retrieval for external analysis.[82][87]
Administration
Admin interface
The admin interface of Discourse is accessible via the/admin URL path and is exclusively available to users with administrator privileges, providing a centralized dashboard for managing site operations, configurations, and monitoring. Introduced with a redesigned sidebar navigation in December 2023, the interface replaces the previous top navigation bar and organizes tools into contextual sections such as Dashboard, Customize, Users, and Logs, allowing administrators to toggle visibility and access features efficiently. This layout emphasizes usability for site owners, enabling quick navigation to essential administrative tasks without requiring command-line access for most operations.[88][89]
The dashboard offers an overview of key site metrics, including statistics on user signups, active users, new topics created, topics without responses, total visits, mobile visits, and pageviews differentiated by logged-in users, anonymous visitors, and crawlers. Administrators can view reports on daily active users (DAU), monthly active users (MAU), trust level progression, and email delivery metrics such as sent, skipped, or bounced messages. These reports are generated from underlying SQL queries accessible via the Data Explorer plugin and can be extended by plugins using the add_report method, with customizable time ranges and filters to focus on trends like user growth or engagement. While not featuring fully draggable widgets, the dashboard supports prioritization of reports through site settings, allowing admins to highlight critical metrics for ongoing monitoring.[90][89]
Site settings form a core component of the admin interface, accessible under the Customize section, where administrators configure global parameters such as email server details (SMTP settings for outgoing mail), login methods (including single sign-on, OAuth providers like Google or GitHub, and local authentication), and rate limiting to prevent abuse (e.g., limits on posts per minute or daily signups). These settings are grouped into categories like Basic, Email, Login, and Security, with search functionality to locate specific options quickly; changes take effect immediately upon saving, and a JSON export/import feature allows for backups or migrations. As of Discourse 3.5 (August 2025), bulk saving enables editing and saving multiple settings in a single action, with a banner indicating the number of modifications. Hidden site settings, for advanced tweaks not visible in the standard interface, require Rails console access but are documented for self-hosted instances.[89][91][92]
Additionally, Discourse 3.5 introduced a comprehensive admin search, allowing unified querying across pages, settings, themes, components, and reports from the sidebar's 'Search' link or via keyboard shortcuts (Ctrl+/ or Cmd+/).[92][93]
User management tools within the admin interface enable administrators to oversee individual or groups of users through the Users section, supporting bulk actions such as selecting multiple accounts for suspension, deletion, or notification level adjustments directly from the users list view. Features include searching users by name, email, or activity, viewing profiles with notes and activity histories, and assigning roles like moderator or admin with confirmation prompts to prevent errors. Category management, found under the Categories tab, allows creation, editing, and ordering of discussion categories, with bulk operations for permissions (e.g., setting read-only access) and embedding configurations such as enabling external embeds from YouTube or Twitter via site-wide toggles in the embedding settings. These tools facilitate scalable oversight, with options to export user lists as CSV for further analysis.[94][95][96]
Logging and reports provide audit trails and performance insights across dedicated tabs in the Logs section, tracking staff actions like user promotions, post edits, or flag resolutions with timestamps, actors, and subjects for accountability. Email logs detail delivery status, including rejects and bounces, while search logs record query patterns to optimize indexing and detect overuse. Performance metrics, such as response times and error rates, are available via the dashboard reports, with full Rails logs accessible for self-hosted sites through server-side tools. These features ensure comprehensive monitoring, helping administrators identify issues like spam patterns or engagement drops without external analytics integrations.[97][98][90]
Security features
Discourse provides robust authentication mechanisms to protect user accounts from unauthorized access. It supports two-factor authentication (2FA) using time-based one-time passwords (TOTP) generated by authenticator apps such as Google Authenticator, which users can enable directly in their preferences without requiring administrative intervention.[2] Administrators can enforce 2FA for staff members via site settings to enhance overall security.[99] For brute-force attack prevention, Discourse integrates rate limiting and IP-based blocking through its underlying Ruby on Rails framework and recommended reverse proxies like HAProxy or nginx, which mitigate distributed denial-of-service (DDoS) attempts and repeated failed login attempts.[100] Secure login audits are facilitated by the admin dashboard, where administrators can review user login history, including IP addresses and timestamps, to detect suspicious activity.[101] Content security in Discourse emphasizes protection against common web vulnerabilities. Cross-site request forgery (CSRF) attacks are prevented through Rails' built-in token validation, which requires unique tokens for all non-GET requests to ensure authenticity.[100] Cross-site scripting (XSS) is mitigated via server-side sanitization using the Sanitize gem for all user-generated content and client-side filtering with xss.js during previews, complemented by Content Security Policy (CSP) enabled by default since version 2.2 to restrict script execution from untrusted sources.[100] For external media, Discourse employs an image proxy that rewrites URLs to route images through its own server, preventing direct tracking by third-party hosts, blocking malicious payloads, and enforcing secure loading without exposing user data.[102] Privacy compliance features in Discourse align with regulations like the General Data Protection Regulation (GDPR) by providing tools for data subject rights. Users can request a personal data export through the admin interface, generating an archive that includes posts, private messages, and profile information in a downloadable format.[103] Administrators handle deletion requests by anonymizing or fully removing user accounts, including associated content, while site settings allow configuration for consent management and data retention policies to support compliance.[104] These built-in capabilities, such as the user archive feature extended for legal purposes, enable operators to fulfill right-to-be-forgotten obligations without external plugins in many cases.[105] Vulnerability handling in Discourse follows open-source best practices with proactive patching and community involvement. The development team issues regular security updates, including urgent releases for critical issues, and encourages reporting through their HackerOne bug bounty program, where vulnerabilities are assessed and rewarded based on impact.[106] Known vulnerabilities are tracked as Common Vulnerabilities and Exposures (CVEs), with fixes committed to the GitHub repository under prefixed "SECURITY" labels for transparency and easy identification.[100] For instance, critical remote code execution flaws, such as CVE-2021-41163, receive immediate patches distributed via official upgrade channels.[107] This process ensures that instances remain secure when maintained up to date, often integrating with trust level restrictions to limit exposure from low-trust users.[101]Backup and maintenance
Discourse provides robust tools for automated backups to ensure data preservation, primarily focusing on daily database dumps. Administrators can configure automatic backups through the admin dashboard under Settings > Backups, where the frequency is set to daily by default. These backups are generated using Rake tasks, such asrake backups:create, which exports the PostgreSQL database into a tarred archive including schema and data.[108] The resulting files can be stored locally within the Docker container's /shared/backups directory or automatically uploaded to Amazon S3-compatible storage for redundancy and off-site accessibility, reducing the risk of data loss from hardware failures.[108] Restoration from these backups is supported via the admin interface or command-line Rake tasks like rake backups:restore, allowing selective recovery to any compatible Discourse instance.[109]
The update process for Discourse emphasizes a streamlined workflow using Git for code pulls and automated migrations for database changes. To upgrade to a new version, administrators navigate to the /var/discourse directory and execute git pull origin main to fetch the latest code from the official repository, followed by ./launcher rebuild app to rebuild the Docker container and apply any pending Rails migrations via rake db:migrate.[110] This process ensures schema compatibility without manual intervention, though it requires a brief downtime during the rebuild phase, typically lasting 1-5 minutes depending on server resources.[110] For major releases, Discourse recommends testing updates on a staging environment first to verify plugin compatibility and migration success.
Performance tuning in Discourse involves optimizing caching layers and database configurations to handle high traffic efficiently. The platform leverages Redis as a primary cache for transient data, sessions, and job queues, with built-in strategies like fragment caching for topic views and full-page caching for guest users to minimize database hits.[111] Database optimization guides recommend tuning PostgreSQL parameters in the app.yml configuration, such as setting db_shared_buffers to 25% of available RAM (e.g., 1GB on a 4GB server) and enabling db_work_mem at 4-40MB per operation to accelerate query sorting and joins.[111] Additionally, Unicorn worker processes are auto-scaled based on RAM, with 1-2GB allocated per worker to balance concurrency and memory usage, preventing out-of-memory errors on scaled deployments.
Troubleshooting common issues in Discourse relies on built-in diagnostics accessible via the admin dashboard and command-line tools. For slow queries, administrators can enable the Database Log in the admin interface to monitor execution times and identify bottlenecks, such as unindexed joins or large table scans, often resolved by running ANALYZE or VACUUM on affected tables.[112] The ./discourse-doctor script provides automated checks for configuration errors, resource limits, and connectivity issues, outputting actionable recommendations like adjusting swap space or verifying Docker health.[113] These tools facilitate rapid resolution of performance degradation without external dependencies, with logs rotatable via logrotate for sustained monitoring.
