Discourse

discourse.org
Discourse

A fully open-source, self-hostable discussion platform usable as a mailing list, discussion forum, or long-form chat room.

Open Source

Discourse Privacy Policy

Privacy Policy Summary

  • You can opt out of promotional communications
  • This Service provides a list of Third Parties involved in its operation.
  • This service gives your personal data to third parties involved in its operation
  • If you are the target of a copyright holder's take down notice, this service gives you the opportunity to defend yourself
  • This service is a subsidiary of Civilized Discourse Construction Kit, Inc.
  • Information is provided about how your personal data is collected
  • Your personal data is not sold
  • Information is provided about what kind of personal information is collected
  • Logs are deleted after a finite period of time
  • You must create an account to use this service
  • Your private content may be accessed by people working for the service
  • Private messages can be read
  • Extra data may be collected about you through promotions
  • First-party cookies are used
  • A list of all cookies set by the website is provided
  • Third parties are involved in operating the service
  • Two factor authentication is provided for your account
  • Third-party cookies are used for advertising
  • Your personal data may be used for marketing purposes
  • Your data is processed and stored in a country that is less friendly to user privacy protection
  • Third party cookies are employed, but with opt out instructions
  • Do Not Track (DNT) headers are ignored and you are tracked anyway even if you set this header
  • You can request access, correction and/or deletion of your data
  • Your data may be processed and stored anywhere in the world
  • The service will resist legal requests for your information where reasonably possible
  • The service will try to inform and/or notify you regarding government inquiries that may involve your personal information
  • The service claims to be CCPA compliant for California users
  • You have the right to leave this service at any time
  • This service will continue using anonymized user-generated content after erasure of personal information
  • Third-party cookies are used for statistics
  • A complaint mechanism is provided for the handling of personal data
  • There is a date of the last update of the agreements
  • The terms may be changed at any time, but you will receive notification of the changes
  • Your personal data is aggregated into statistics
  • The service is open-source
  • Your personal data will not be used for an automated decision-making
  • The service claims to be GDPR compliant for European users
  • You can retrieve an archive of your data
  • Many third parties are involved in operating the service

Score

B

Documents

Domains Covered by Policy

  • discourse.org
  • rubytalk.org

About the Data

This data is kindly provided by tosdr.org. Read full report at: #1340

Discourse Source Code

Author

discourse

Description

A platform for community discussion. Free, open, simple.

#discourse#ember#forum#javascript#postgresql#rails#ruby

Homepage

https://www.discourse.org

Repository

  • LicenseGPL-2.0
  • Created12 Jan 13
  • Primary languageRuby
  • Size981,357 KB
  • Stars47,665
  • Forks8,986
  • Watchers47,665

Language Usage

Language Usage

Project Health

Top Contributors

Recent Commits

  • Sérgio Saquetim(17 Aug 26)

    DEV: Migrate composer and Ace resizing to shared separator (#42591) Previously, the composer and Ace editor used the legacy `grippie-drag-resize` modifier with separate resize behavior. This change migrates both consumers to `DResizeSeparator`, preserves lifecycle and persistence behavior, and removes the legacy modifier after its final consumers move.

  • Sam(17 Aug 26)

    FIX: Return accurate group user counts (#42645) Rely on group membership counter updates instead of manually restoring the count, which could overwrite persisted changes. Reload newly created groups before serialization so the response includes the current user count.

  • Discourse Translator Bot(17 Aug 26)

    I18N: Update translations (#42648)

  • Natalie Tay(17 Aug 26)

    DEV: Add user options for discoveries (#42646) User options to power the AI Discoveries feature.

  • Alan Guo Xiang Tan(17 Aug 26)

    PERF: Precompute browsers for Site Traffic Explorer (#42617) Previously, Site Traffic Explorer carried raw user-agent strings through the capped pageview dataset and classified them during every query. This increased the intermediate data size and repeated browser detection on each request. This change classifies supported browser families during ingestion, stores a compact enum, and backfills retained rows in bounded batches. The explorer groups and filters on the stored value; rows awaiting backfill appear as Unknown. Also expand browser detection to detect more popular browsers based on the browsers listed in https://caniuse.com/.

  • Alan Guo Xiang Tan(17 Aug 26)

    PERF: Lower the Site Traffic Explorer event limit (#42640) The Site Traffic Explorer could analyze up to one million pageviews by default, which can make the page time out on lower-resource database servers. This change lowers `site_traffic_explorer_event_limit` to 200,000 while retaining the one-million maximum. It exposes the setting in the Reports area so administrators with more database capacity can raise the limit deliberately, and migrates existing `admin_site_traffic_event_cap` overrides to the new name. ## Benchmark On a low-end DigitalOcean droplet with 2 vCPUs, 2 GB RAM, and PostgreSQL `work_mem` set to 10 MB, the unfiltered Site Traffic Explorer query produced these median timings: | Pageview limit | Median query time | | ---: | ---: | | 100,000 | 0.76 s | | 200,000 | 2.60 s | | 300,000 | 3.97 s | | 400,000 | 28.99 s | | 500,000 | 27.14 s | | 1,000,000 | 32.56 s | The 200,000 default stays comfortably below the query timeout on this machine, while still allowing better-provisioned sites to raise the limit.

  • Martin Brennan(17 Aug 26)

    UX: Do not center reddit onebox in chat message (#42641) This takes up way too much space, everything else is over to the left in chat too. Give a bit more spacing on top as well. **Before** <img width="1080" height="604" alt="image" src="https://github.com/user-attachments/assets/c16e8a9a-8e47-4468-be04-11bb75f82bd9" /> **After** <img width="1066" height="618" alt="image" src="https://github.com/user-attachments/assets/cf6b27e2-d098-4695-be79-9842df7d2353" />

  • Alan Guo Xiang Tan(17 Aug 26)

    UX: Update section headlines and summaries for new admin dashboard (#42563) Previously, the Engagement, Search, and Support sections used server-selected headline states, so their API payloads mixed KPI facts with presentation decisions and each section applied different narrative rules. This change updates all three sections to derive the PM-defined localized headline and summary from their KPI values on the client. For example, the Search API changes from: ```json { "headline_state": "content_gaps", "kpis": { "total_searches": { "value": 120 }, "no_result_rate": { "value": 20 } } } ``` to: ```json { "kpis": { "total_searches": { "value": 120, "previous_value": 100 }, "no_result_rate": { "value": 20, "previous_value": 10 } } } ``` Engagement likewise drops `headline.key`, and Support drops its derived `headline` object. Translation keys stay client-owned so copy changes do not alter the API contract and other clients can localize the same KPI facts differently. Headlines, summaries, and CTAs remain complete translatable sentences. Previous periods without activity use a zero baseline. Partially measurable sections describe the available KPIs; sections with no measurable headline KPI show their no-data message.

  • Martin Brennan(16 Aug 26)

    FIX: Handle new pseudogroups in message bus group IDs (#42610) For logged in users, MessageBus needs to be able to handle publish directives with group_ids including the new anonymous_users and logged_in_users pseudogroups. This commit updates the message bus configuration to recognize these pseudogroups and ensures that they are correctly processed when publishing messages to the bus. If granular_anonymous_and_logged_in_groups_permissions is disabled, then the everyone pseudogroup will also be used for logged in users. The use case for this was Kanban boards publishing card updates, some board permissions have logged_in_users (group ID 5) in the board permissions which we use for MessageBus group_ids.

  • Régis Hanol(14 Aug 26)

    FIX: Keep workflow connections from a node named `__proto__` (#42628) Previously, `serializeConnections` accumulated into a plain object literal keyed by node name, so a node named `__proto__` routed the write to the prototype accessor instead of an own property: the node's connections silently vanished from the save payload and `Object.prototype` gained a stray `main` property for the rest of the session. This change accumulates into a null-prototype object, so a node name can never resolve to an inherited property. Node names are user supplied — typed in the rename field, or arriving via paste and file import — so nothing upstream constrains them to safe keys.

  • Gabriel Grubba(14 Aug 26)

    FIX: Link to the right automation page from triage reviewables (#42635) When an LLM triage automation flags a post, the reviewable's score reason says: > **Triggered by the [My automation](/admin/plugins/automation/1) rule.** That link is broken — it leads to a page that does not exist. The automation admin UI is nested under the plugin show route (`/admin/plugins/:plugin_id`), and registers its own `automation` child route. So its edit page lives at `/admin/plugins/automation/automation/:id` — the plugin id, then the nested route. The link only had one of the two segments. This was originally broken when automation moved to the new show route and the URL changed from `/admin/plugins/discourse-automation/:id`. #35434 dropped the `discourse-` prefix but missed the extra segment, so the link stayed broken. Reported by a customer who landed on `/admin/plugins/automation/1` from their review queue. The translated locale files carry the same URL but are managed by Crowdin, so they are left to re-sync from `en`.

  • Sérgio Saquetim(14 Aug 26)

    DEV: Return a portaled float to the tab order beside its trigger (#42565) Sequential focus follows document order, so portaling a float out of its trigger's subtree moves where Tab goes. Nothing leads into the content from the trigger, and stepping off the end of it lands wherever the portal happens to sit, which is usually the end of the document. A float whose content holds focus is therefore reachable only by tabbing through the rest of the page, and leaving it drops the reader somewhere unrelated. `inlineTabOrder` opts a menu into the order it would have had if its content were rendered inline after the trigger. `FloatKitTabOrderInline` lets the browser walk the float's own stops natively and takes over only the press that would step off the end of them: forward continues from the stop after the trigger, backward returns to the trigger's own last stop. A float with nothing focusable in it is declined, so a content-only panel still lets Tab pass over the widget and keeps its rows on the arrow keys. This is the alternative to `trapTab`, not a companion to it. Containment belongs to a genuinely modal surface that owns the screen until dismissed; a non-modal float shows nothing to say that Tab has stopped meaning "move on", so trapping strands a reader whose only other way out is Escape. The two are mutually exclusive and `DFloatBody` now asserts when both are set, because `dTrapTab` is applied first and would otherwise win silently. The option also reaches `DFloatBody` on the headless and inline paths, which previously forwarded `trapTab` alone. Covered by component tests that force the portal on and drive real Tab presses through it: entering the content, leaving it for the trigger's neighbour, Shift+Tab back to the trigger, the fall-through when a float offers no stop, and the conflicting configuration asserting. Defaults to off, so no existing float changes behaviour. The first consumer is the ui-kit select in #41534, whose panel holds a filter and an optional footer action.

  • Kris(14 Aug 26)

    A11Y: make like and reaction count menus keyboard accessible (#42631) Currently it's very difficult to access this content in the "who liked" menu with keyboard navigation, because the menu doesn't auto-focus and it's rendered at the end of the document in a portal (which is absolutely positioned) <img width="200" alt="image" src="https://github.com/user-attachments/assets/073aece3-b5e8-4cba-bbd5-2301f2fdae4b" /> The fix is to focus the menu when it's opened, and trap the focus until the menu is closed and re-focus the trigger. I've also excluded a duplicate username link for screenreaders, as the link is the same on both name and username and is redundant when read. There are various surrounding changes as well, including making float kit menus return focus to the triggering element and making the like/reaction count a proper button.

  • Kris(14 Aug 26)

    A11Y: make chat reactions reachable by keyboard and read by screenreaders (#42633) Currently you can't reach the reaction counts in chat via keyboard because it only appears on hover. This change allows the menu containing the "who reacted" info to open on keyboard focus as well. An aria-description is also added for screenreader users so they can have the list of who reacted read.

  • Sérgio Saquetim(14 Aug 26)

    DEV: Drive the developer tools toolbar from a tool table (#41891) Adding a developer tool meant editing `toolbar.gjs` in two places, its import block and its template, naming each of the five buttons individually. A new tool was a core edit in a file that has nothing to do with the tool itself. `discourse/static/dev-tools/tools` now holds `CORE_TOOLS`, an ordered list of id and component pairs, and the toolbar renders that list. Adding a tool is one entry plus its component. Identifiers match the directory each tool lives in and serve as the render key. The toolbar and the developer tools entrypoint move to `.gts` and `.ts` along the way. Coverage renders the real toolbar and reads back the DOM order of every shipped button together with the gripper and the disable button, rather than asserting against stand-in components. The expected order is spelled out in the test rather than derived from `CORE_TOOLS`, so a reordered table and a toolbar rendering something other than the table fail separately.

  • Régis Hanol(14 Aug 26)

    UX: Preserve copied node names when pasting workflow nodes (#42627) Previously, pasting a node in the workflow editor threw away its name and regenerated one from the node type, so a node named "Fetch topic" came back as "HTTP request 1". This change keeps the copied name and appends a counter only on collision. Because a pasted name can now be anything the user typed, node naming also reserves the name sticky notes serialize under — the server rejects a graph where an executable node shares it, and that reservation has to hold before the workflow has any sticky note, not just once one exists. https://meta.discourse.org/t/copy-workflow-step-names/409410

  • Régis Hanol(14 Aug 26)

    UX: Let icon pickers search the full icon set (#42554) Previously, the icon pickers for badges and group flair only offered icons already in the site's SVG sprite: `only_available` arrived as a query-string value where both `"false"` and `""` are truthy in Ruby, so every picker had been silently restricted since 2023 — and even unrestricted, the endpoint capped results at the first 500 of 2,000+ icons alphabetically. A badge could not use a new icon until it was manually added to `svg_icon_subset` (https://meta.discourse.org/t/discourse-fa-seeding/409783). This change lets the pickers search the entire icon set: browsing lists the sprite's icons first, search covers everything, and the grid loads pages of 100 as it scrolls. The server reports `has_more` so clients carry no page-size knowledge, ships `<symbol>` markup only for icons the viewer's theme sprite cannot render, and browsed symbols stay scoped to the picker — only a picked icon is added to the page sprite, so it keeps rendering until saving adds it to the sprite for everyone. ### Before / after **Searching an icon outside the subset** <img width="990" height="165" alt="01-search-non-subset-icon" src="https://github.com/user-attachments/assets/d35562f0-66e6-49c7-b584-497a24cae9e1" /> **Scrolling past the old 500-icon cap** <img width="990" height="395" alt="02-infinite-scroll" src="https://github.com/user-attachments/assets/73fd724f-ee0e-47b8-930d-7d2cefa08797" /> **A picked non-subset icon rendering in the trigger** <img width="602" height="160" alt="03-picked-icon-in-trigger" src="https://github.com/user-attachments/assets/8d41d1be-8aeb-48f7-b9bc-d00a1f33dfb5" /> --------- Co-authored-by: David Taylor <[email protected]>

  • Joffrey JAFFEUX(14 Aug 26)

    FEATURE: allows to set style/icon on chat approval buttons (#42630)

  • David Taylor(14 Aug 26)

    FEATURE: `type: icon` support for theme settings (#42626) Mirrors site-setting support added in 802fa4c3562. Also updates the sprite-sheet logic so that it includes all site/theme settings with `type: icon`, in addition to the existing logic which looked for setting names ending in `_icon`.

  • Sérgio Saquetim(14 Aug 26)

    DEV: Add an accessible resize separator (#42595) Previously, one-dimensional resizing lacked a shared semantic wrapper and consistent pointer, keyboard, and lifecycle behavior. This change introduces `DResizeSeparator`, expands `dResizeEdge`, and migrates `DockedComposer` while preserving its existing resize behavior.

  • Seori Konno(14 Aug 26)

    FIX: Hide git signature output when reading commit date (#42613) ## What does this change? Disables `log.showSignature` when `GitUtils.last_commit_date` reads the latest commit timestamp. When `log.showSignature=true` is configured, `git log -1 --format="%ct"` may include GPG signature verification output in addition to the Unix timestamp. This causes `DateTime.strptime` to raise `Date::Error`, which can make `/admin/dashboard/general.json` return a 500 error. Using `git -c log.showSignature=false` ensures the command returns only the timestamp expected by `GitUtils`. ## Tests Added a regression test for `.last_commit_date`. Tested with: `RAILS_ENV=test bundle exec rspec spec/lib/git_utils_spec.rb` 8 examples, 0 failures.

  • Sérgio Saquetim(14 Aug 26)

    DEV: Add a shared pointer drag primitive (#42590) Previously, pointer-driven surfaces relied on legacy mouse and touch handling through `dDraggable`. This change introduces `dPointerDrag` with pointer capture, cancellation, nested ownership, touch handling, and deterministic teardown, then migrates the topic timeline and developer toolbar.

  • Sérgio Saquetim(14 Aug 26)

    DEV: Guard the similar-topics lookup against absent form template ids (#42612) `_findSimilar` reads `this.composer?.category?.form_template_ids.length`, stopping the optional chain one link short of the property it dereferences. Every other frontend reader of `form_template_ids` guards it, and the attribute ships only from `SiteCategorySerializer`, so a category that reached the composer any other way throws.

  • Kris(14 Aug 26)

    UX: confirm user deletion step in review queue (#42605) We've received feedback that it's too easy to delete a user accidentally from the review queue. This adds a confirmation step to avoid this, which is our general pattern for destructive actions that are difficult to reverse. <img width="1570" height="614" alt="image" src="https://github.com/user-attachments/assets/339459f6-b8fe-449a-a3c8-5a4853295998" />

  • Régis Hanol(14 Aug 26)

    FIX: Persist form fields that are cleared (#42541) Previously, clearing a field could silently do nothing: form controls represented "cleared" as `undefined`, which `JSON.stringify` drops, so the key never reached the server and any endpoint that treats an absent key as "leave this column alone" kept the old value. It stayed hidden because it only bites JSON bodies — jQuery's `$.param` encodes both `null` and `undefined` as `key=`, so form-encoded requests always transmitted the clear correctly. This change has the form controls emit `null`, which survives serialization, and repairs the places where a clear was being discarded or was crashing on arrival. The category case is the one that prompted this: setting "Topic list sort by" or "Default topic list" back to **Default** went dirty, reported success, then snapped back. It regressed when those controls moved off select-kit's ComboBox (which emitted `null`) onto the FormKit select; the read path was taught to normalize both at the time, the write path was not. Commits, each independently reviewable: - `DEV:` form controls emit `null` — `fk/control/input.gjs` already did, so this brings the stragglers in line - `FIX:` category appearance settings — plus the dangling sort direction, stored values no option provides, and a `nil` guard for subcategory list style - `FIX:` a category's minimum required tags — `nil&.blank?` is `nil`, so the guard skipped the case that reached the NOT NULL column - `FIX:` a tag's custom slug - `FIX:` a topic's featured link — client rename plus `PostRevisor`, which rejected a write that only removes one - `FIX:` edit conflict detection for topic titles and tags — the payload was built from wire names, so both fields were always `undefined` - `FIX:` permission check when a topic's category is cleared — API-reachable only - `FIX:` AI tool RAG chunk sizes — 500 instead of a validation error One caveat for bisecting: between the first two commits there is a window where selects emit `null` but the subcategory-list-style `nil` guard has not landed, so clearing that one field would error. The series is correct as a whole. Happy to squash the first two if preferred.

  • Régis Hanol(14 Aug 26)

    FIX: Make an event's `url` reachable again (#42503) Previously, an event that already carried a `url` kept rendering it on the card while offering no field to edit or clear it, because the URL input was removed without migrating the stored values or dropping them from the generated BBCode. This change restores an editable URL field — always shown when a value exists, added on demand from the advanced screen — validates it as a URI since it also feeds the ICS `URL:` property and webhook payloads, and stops the card and email rendering the same link twice when `url` only restates `location`. Following review feedback: the livestream checkbox now keys off the same effective URL the server validates — `location || url`, with a blank location counting as absent — so a livestream link carried by the `url` field is recognized when no location is set. The location keeps precedence when both are set, and the card treats a url-carried Zoom livestream like a location-carried one: the join UI replaces the plain link row. <img width="1520" height="554" alt="card-both" src="https://github.com/user-attachments/assets/3fa7384f-4972-4bfa-a365-60c204089350" /> <img width="1520" height="520" alt="card-markdown-link" src="https://github.com/user-attachments/assets/a4293036-d094-488b-aabb-f047f4335795" /> <img width="1520" height="520" alt="card-same-link" src="https://github.com/user-attachments/assets/c0a794c8-ec5e-47a5-8e4d-7ac12331cca1" /> <img width="1520" height="520" alt="card-venue" src="https://github.com/user-attachments/assets/445d683e-f460-4854-8cd1-2c8a7b0d7be4" /> <img width="1360" height="700" alt="editor-advanced" src="https://github.com/user-attachments/assets/f7447c37-2ba4-4b04-a58e-817befb4fa65" /> <img width="1360" height="640" alt="editor-legacy" src="https://github.com/user-attachments/assets/12802673-710e-4df1-ae93-90fd82c71199" />

  • Régis Hanol(14 Aug 26)

    FIX: Stop the event builder from clearing typed custom fields (#42624) Previously, values typed into the event builder's custom fields were cleared as soon as another field changed (location, image, name, …), and toggling between the compact and advanced screens could permanently revert them to stale values. This change commits custom field values through the form's `set` (a field's `@onSet` replaces FormKit's default write, so skipping it left the typed value out of the form data), replaces the `customFields` reference on every write (mutating inside the object never invalidated `compactInitialState`, so the compact screen served stale values back), and tracks `formData` (untracked, the advanced screen always reinitialized from the modal's construction-time snapshot). Reported in https://meta.discourse.org/t/potential-bug-where-data-in-custom-fields-is-cleared-if-certain-fields-change/410050

  • Joffrey JAFFEUX(14 Aug 26)

    FEATURE: allows to assign a post (#42623) In the past the node could only assign a topic.

  • chapoi(14 Aug 26)

    Ai suggest toolbar menu (#42480) The composer showed a standalone AI title-suggestion button using the after-composer-title-input connector. A second Ask AI toolbar menu that houses every other composer AI action was already present but, the `generate_titles` prompt was explicitly filtered out of that menu. This commit removes that standalone composer button and moves it to the existing `generate_titles` prompt as an Ask AI menu option instead. Selecting it opens the same suggestions dropdown, anchored to the toolbar trigger, rendering a new content-only component (ai-title-suggestions-menu). The option only appears when a title is actually editable (canEditTitle and not disableTitleInput) and the body exceeds the 40-character minimum (= the same gates from the old button). - The fetch and the results list are extracted into shared pieces (fetchTitleSuggestions in ai-helper-suggestions, AiTitleSuggestionsList) consumed by both the new menu flow and the untouched edit-topic-title suggester, so the two can't drift. - Empty results now render an in-panel "No suggestions available" state with a retry button instead of a toast (why: the toast's retry action relied on a dMenu reference that was no longer there) - Server-side fix: deal with NIL items => now skipped <img width="1740" height="1282" alt="CleanShot 2026-08-14 at 11 11 26@2x" src="https://github.com/user-attachments/assets/0c73236f-8e4b-46e9-8ae9-c25310151f2d" /> List: <img width="1906" height="1268" alt="CleanShot 2026-08-14 at 11 15 21@2x" src="https://github.com/user-attachments/assets/32b9cf2c-c63d-494d-b437-8c82d2b2b311" /> Retry: <img width="1906" height="1268" alt="CleanShot 2026-08-14 at 11 16 08@2x" src="https://github.com/user-attachments/assets/269670ed-e045-4ffb-ad74-8a4e8eaae537" /> Note: Update the settings copy to clarify title suggestion now also needs context menu to work <img width="1344" height="248" alt="CleanShot 2026-08-14 at 11 13 14@2x" src="https://github.com/user-attachments/assets/90ffa34e-c364-40c3-9f6c-38b00fdb26ae" /> --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]>

  • Joffrey JAFFEUX(14 Aug 26)

    FEATURE: chat approval node v2, custom buttons (#42587) Allows to define custom buttons on the node. This is implemented as a V2 version to avoid breaking this existing V1.

Discourse Security

4.2/10

Repo Security Summary

Updated 27 Jul 26

  • Maintained10/10
  • Code-Review10/10
  • Dangerous-Workflow0/10
  • CII-Best-Practices0/10
  • PackagingN/A
  • Security-Policy10/10
  • Token-Permissions0/10
  • Signed-Releases0/10
  • License10/10
  • Branch-Protection5/10
  • Binary-Artifacts10/10
  • Pinned-Dependencies0/10
  • Fuzzing0/10
  • SAST0/10

Security Advisories (100)

  • mediumPatchedCVSS 4.3

    CVE-2026-44779Bot debug endpoints disclose whisper translation audit logs

  • mediumPatchedCVSS 6.5

    CVE-2026-46413Regular users can route multipart uploads into the admin backup store

  • mediumPatchedCVSS 4.3

    CVE-2026-44782GroupPostSerializer leaks hidden full names through reaction post association

  • mediumPatched

    CVE-2026-49256Hidden tag names leaked via category serializers

  • mediumPatchedCVSS 5.4

    CVE-2026-44783Replying to a whisper lets non-whisperers create staff-only whisper posts

  • highPatchedCVSS 7.5

    CVE-2026-44786Public chat MessageBus broadcasts are not restricted to chat-eligible users

  • mediumPatchedCVSS 5.3

    CVE-2026-45085Chat misauthorization and information disclosure

  • mediumPatchedCVSS 6.5

    CVE-2026-44784Non-staff group owners can see email password in plaintext through group history

  • mediumPatchedCVSS 4.3

    CVE-2026-44785Hidden reply-to post raw can be disclosed through AI explain prompts

  • highPatchedCVSS 8.2

    CVE-2026-44787Signup-time primary_group_id assignment grants whisperer access

  • mediumPatched

    CVE-2026-45788Secure uploads exposed by hotlinked image copying

  • mediumPatchedCVSS 5.3

    CVE-2026-45780Private event sample invitees are serialized to non-invited event viewers

  • mediumPatchedCVSS 6.8

    CVE-2026-45775Cross-site backup access via path traversal in multisite local backups

  • mediumPatchedCVSS 5.3

    CVE-2026-53960Hidden first-post excerpt is emitted in Q&A schema JSON-LD

  • mediumPatchedCVSS 5.3

    CVE-2026-59828Hidden post revisions leak through adjacent visible diffs

  • mediumPatchedCVSS 6.5

    CVE-2026-53961Forged AWS SNS bounce notifications can disable a targeted user's email (missing TopicArn binding)

  • highPatchedCVSS 8.8

    CVE-2026-32882RCE via malformed HEIF file

  • highPatchedCVSS 7.5

    CVE-2026-55420Remote code execution via pdf uploads

  • mediumPatchedCVSS 5.4

    CVE-2026-53962Insufficient SVG sanitization logic

  • criticalPatchedCVSS 9.3

    CVE-2026-55674Cache poisoning/XSS via color scheme cookies

  • mediumPatchedCVSS 4.3

    CVE-2026-55704Shared-draft titles and excerpts leak through group post serialization

  • highPatched

    CVE-2026-55424Topic featured link susceptible to stored XSS

  • highPatchedCVSS 7.3

    CVE-2026-53963Stored-XSS in 2FA delete confirmation modal

  • mediumPatchedCVSS 5.4

    CVE-2026-59830Stored XSS via unescaped actor name in post actions

  • mediumPatchedCVSS 4.3

    CVE-2026-59829Review queue exposes flag-related private message excerpts to category group moderators

  • mediumPatchedCVSS 4.3

    CVE-2026-72724Private Chat Threat Message Disclosure via Chat Onebox Channel/Threat ID Mismatch

  • mediumPatchedCVSS 5.4

    CVE-2026-72725Stored XSS in staff action logs injects staff UI

  • highPatchedCVSS 8.7

    CVE-2026-72730Stored XSS chat-transcript username unescaped in Rich Text Editor

  • mediumPatched

    CVE-2026-72727Stored XSS in the moderation review queue

  • lowPatched

    CVE-2026-72729Stored XSS in discourse-local-dates plugin

  • mediumPatchedCVSS 5.3

    CVE-2026-72721Onebox Domain Blocklist Bypass via Case-Sensitive Comparison

  • mediumPatchedCVSS 5.3

    CVE-2026-72723Anonymous sidebar serialization exposes descriptions of category-restricted tags

  • mediumPatchedCVSS 4.3

    CVE-2026-72722Duplicate lookup reveals restricted topic titles through canonicalized URLs

  • mediumPatchedCVSS 4.3

    CVE-2026-72732Templates endpoint exposes hidden tag names

  • mediumPatchedCVSS 6.5

    CVE-2026-72726Unauthorized eavesdropping on private AI bot conversations.

  • mediumPatchedCVSS 4.2

    GHSA-3rx9-fqgh-wfpcNon-participant moderators can read, edit, and delete PM content through Discourse AI reviewables

  • highPatchedCVSS 7.1

    CVE-2026-72731Strip SQL comments and use non-recursive parameter interpolation in Data Explorer

  • mediumPatchedCVSS 6.3

    CVE-2026-72728Onebox allowlist bypass

  • mediumPatchedCVSS 6.4

    CVE-2026-72720HTML injection in PrettyText.format_for_email from cooked-attribute reparsing

  • mediumPatchedCVSS 5.3

    CVE-2026-47264Don't leak restricted tag group names via tag info

  • lowPatched

    CVE-2026-34154Subscription access bypass in discourse-subscriptions plugin

  • mediumPatchedCVSS 4.3

    CVE-2026-32951Authorization bypass in oneboxer via user-controlled category id

  • lowPatched

    CVE-2026-33415Improper Access Control in discourse-ai Allows Unauthorized Category Content Exposure

  • lowPatched

    CVE-2026-33073discourse-subscriptions plugin leaking stripe API key in multisite environment

  • mediumPatched

    CVE-2026-33074Vulnerability in discourse-subscriptions plugin allowing users to self-grant to higher tier subscriptions

  • mediumPatched

    CVE-2026-33300Hidden group names and access metadata are exposed to moderators through the `category-chatables` endpoint

  • mediumPatched

    CVE-2026-33185Group SMTP test endpoint susceptible to SSRF

  • mediumPatched

    CVE-2026-33514Information Disclosure in Form Template API Due to Missing Authorization

  • mediumPatchedCVSS 4.3

    CVE-2026-44780Category queue reviewers can read raw incoming emails from queued posts

  • lowPatched

    CVE-2026-34947Staged user custom fields are exposed on public invite pages

  • mediumPatchedCVSS 4.3

    CVE-2026-47263Prevent webhook payload disclosure on event redelivery

  • mediumPatchedCVSS 5.3

    CVE-2026-31805Poll authorization bypass via post_id array parameter

  • mediumPatched

    CVE-2026-31869Composer mentions endpoint leaks hidden group membership through PM `allowed_names` check

  • mediumPatched

    CVE-2026-32620Missing post-level authorization allows whisper metadata disclosure

  • mediumPatched

    CVE-2026-32619Insufficient topic visibility check allows unauthorized poll manipulation in private categories

  • lowPatched

    CVE-2026-33427Discourse Authorization Page Displays Unvalidated Redirect Domain

  • mediumPatched

    CVE-2026-32113Open redirect via `sso_destination_url` cookie in `enter`

  • mediumPatched

    CVE-2026-32143Admin-only report can be exported by moderators

  • mediumPatched

    CVE-2026-32243Stored XSS in discourse-ai shared conversations onebox

  • mediumPatched

    CVE-2026-32615Category group moderators can perform actions on topics in restricted categories without read access

  • lowPatched

    CVE-2026-32607 Stored XSS via unescaped assignee name

  • mediumPatchedCVSS 4.3

    CVE-2026-32618Unauthorized channel membership inference via excluded_memberships_channel_id

  • mediumPatchedCVSS 5.4

    CVE-2026-33410Harden chat DM channel creation and expansion

  • mediumPatchedCVSS 6.5

    CVE-2026-33355Filter whisper posts from private-posts feed

  • mediumPatchedCVSS 4.3

    CVE-2026-32099Prevent hidden profile data leak via user onebox

  • lowPatchedCVSS 2.7

    CVE-2026-33394Do not leak PM post edits to moderators

  • mediumPatchedCVSS 4.3

    CVE-2026-33393Fix loose hostname matching in spam host allowlist

  • mediumPatchedCVSS 5.3

    CVE-2026-27454Check revision visibility on posts endpoint

  • mediumPatched

    CVE-2026-27154XSS when editing a malicious post

  • mediumPatched

    CVE-2026-27153Prevent moderators from exporting user Chat DMs

  • mediumPatched

    CVE-2026-27151Validate destination topic when moving posts

  • mediumPatched

    CVE-2026-27162Prevents whispers to leak in excerpts

  • mediumPatched

    CVE-2026-27152DM communication-preference bypass when adding members

  • mediumPatched

    CVE-2026-27150Ensure guardian check when creating QueryGroupBookmark

  • highPatched

    CVE-2026-27149SQL injection in PM tag filtering

  • mediumPatchedCVSS 5.4

    CVE-2026-26207Lack of post access check in discourse-policy

  • highPatchedCVSS 7.5

    CVE-2026-26265IDOR vulnerability in the directory items endpoint

  • mediumPatchedCVSS 4.3

    CVE-2026-26973Scope reviewable notes to user-visible reviewables

  • lowPatchedCVSS 2.2

    CVE-2026-33408Improper Authorization in "Post Edits" Report For Moderators

  • mediumPatchedCVSS 4.1

    CVE-2026-27166HTML injection via prohibited iframe URLs

  • mediumPatchedCVSS 4.4

    CVE-2026-33395Stored click‑based XSS via Graphviz SVG javascript: links

  • mediumPatched

    CVE-2026-27491Bypass of official warnings messages by non-staff users

  • mediumPatched

    CVE-2026-27021Poll voters endpoint lacked post visibility checks

  • mediumPatched

    CVE-2026-27481Hidden tag visibility bypass on tag routes

  • mediumPatched

    CVE-2026-27740Stored XSS in AI Triage Automation

  • mediumPatched

    CVE-2026-27570Stored XSS via Shared AI Conversation Onebox

  • mediumPatched

    CVE-2026-27936Restricted post-action counts are disclosed to non-privileged users

  • highPatched

    CVE-2026-27934Private topic title and post excerpt leaked via user action API endpoint

  • mediumPatched

    CVE-2026-27935Private topic metadata leaked to non-authorised users

  • lowPatched

    CVE-2026-28282Group membership addition permission bypass via discourse-policy plugin

  • highPatched

    CVE-2026-29072Missing permission check for policy creation in discourse-policy

  • mediumPatched

    CVE-2026-33291User can create zendesk tickets even when it does not have access to topic

  • mediumPatched

    CVE-2026-32114Unscoped status lookups leak restricted metadata

  • mediumPatchedCVSS 5.3

    CVE-2026-32244Cached outdated summaries can leak removed content

  • mediumPatchedCVSS 5.4

    CVE-2026-32273XSS on category description update via API

  • mediumPatched

    CVE-2026-33425Private group membership or existence inferable via exclude_groups parameter

  • highPatched

    CVE-2026-33428Unauthorized Access to Deleted Posts Index via Group Membership

  • mediumPatched

    CVE-2026-30891Unauthorized Exposure of Private User Action Types

  • mediumPatched

    CVE-2026-30889Unauthorized Post Data Exposure in discourse-user-notes

  • mediumPatchedCVSS 5.4

    CVE-2026-33411Solved topic stream has potential stored XSS in topic title

Discourse Website

Website

Discourse | Where Tech Companies Build Communities

The customizable, scalable community platform powering over 22,000 communities. Create knowledge through conversation.

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address13.32.179.27
  • Hostnameserver-13-32-179-27.atl59.r.cloudfront.net
  • LocationAtlanta,Georgia,United States of America,NA
  • ISPAmazon.com Inc.
  • ASNAS16509

Associated Countries

  • USUS
  • CACA

Safety Score

Website marked as safe

100%

Blacklist Check

www.discourse.org was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

Discourse Reviews

More Social Networks

About the Data: Discourse

Edit Discourse Data

You can edit Discourse's entry in this section of awesome-privacy.yml by submitting a PR to our GitHub repo.
Note that some of the information shown above has been aggregated from external sources, a list of these can be found data documentation.

Origin Data

Modify Data

API

You can access Discourse's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/discourse

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share Discourse

Help your friends compare Social Networks, and pick privacy-respecting software and services.
Share Discourse and Awesome Privacy with your network!