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
  • Size1,223,292 KB
  • Stars47,989
  • Forks9,033
  • Watchers47,989

Language Usage

Language Usage

Project Health

Top Contributors

Recent Commits

  • Renato Atilio(17 Oct 26)

    FIX: Decorate composer preview oneboxes once they load (#44710) The markdown preview ran cooked-element decorators before oneboxes loaded and never again, so anything decorating a onebox, such as the event card for event topics, only appeared after the next keystroke. The preview now re-cooks once a onebox or inline onebox loads, so decorators and inline titles show up immediately. Re-cooking rebuilds links that are still loading, which would queue them again, so the onebox queue now skips fetching a URL an earlier entry has already resolved.

  • Renato Atilio(17 Oct 26)

    FIX: Keep rich editor tables that hold only images or emoji (#44684) Previously, a table whose cells held only emoji, images or mentions was silently removed from the post as soon as the rich editor serialized it, and the same happened when quoting such a table. Dropping an empty table also merged the paragraphs around it into one. This change only skips tables with no content beyond whitespace and line breaks, and skips them without disturbing the surrounding blocks.

  • Renato Atilio(17 Oct 26)

    FIX: Preserve table structure during keyboard editing (#43741) Previously, pressing Enter or Backspace/Delete at cell boundaries could unexpectedly add table columns. This change keeps Enter line breaks inside cells and prevents deletion from joining neighboring cells, preserving table structure during everyday editing. Arrow keys keep moving directly between cells.

  • Bannon Tanner(16 Oct 26)

    SECURITY: Prevent RSS CDATA termination via user-controlled post content [pt-f01cfe0b3534fc49352d] (#44709) ## Summary Prevent RSS feed injection by safely splitting XML CDATA terminators in all user-controlled RSS fields. A CDATA-boundary splitter is now applied to post descriptions and user display names across list, topic, posts, and badge RSS templates, ensuring attacker-controlled content cannot forge feed items or corrupt the XML document. ## Source - Patch Triage: https://patch.discourse.org/patch-triage/2697 Co-authored-by: discourse-patch-triage <272280883+discourse-patch-triage[bot]@users.noreply.github.com> <!-- patch-triage-lifecycle:0542ec914956e56b181d9c0f9d31d6bcb41170930f32a25819c9b8115ef2c09d -->

  • Gerhard Schlager(16 Oct 26)

    MT: Update the IntermediateDB schema config for new core and plugin tables - Ignore `dsa_statement_of_records`. Those are moderation records of the destination site, like the reviewable tables. - Ignore `user_associated_accounts.avatar_upload_id`. Core downloads the provider avatar from `info.image` on the next login. - Regenerate the plugin manifest for the new AI and workflow tables.

  • Gerhard Schlager(13 Oct 26)

    MT: Import closed flag, image and allowed groups of events The intermediate database now has events.closed, events.image_upload_id and events.allowed_group_ids. All three are reserved event options, so they can't go through custom fields either. - closed and the image are written to the event and to the [event] BBCode. The image also gets an upload reference and is copied to the post and topic like the plugin does, so topic lists show it before a rebake. - Allowed groups become raw_invitees and the allowed-groups option, but only for private events. The plugin replaces them with everyone for public events and with nobody for standalone events, so groups on those are logged as import issues. Groups that weren't imported are logged too. - Invitees of private events are imported when they are in one of the allowed groups. The plugin removes everyone else. - Group names and image URLs are loaded before the rows are copied, because the connection can't run queries during COPY.

  • Gerhard Schlager(13 Oct 26)

    MT: Set topic tracking for imported event invitees An RSVP in the events plugin makes the user watch the event's topic when going, track it when interested and sets it to normal when not going. Imported invitees now get the same tracking. It runs after the topic users are imported, so an explicit subscription from the source wins, and before update_topic_users. The rows use the user_changed reason like TopicUser.change does, so posting history doesn't overwrite them.

  • Gerhard Schlager(13 Oct 26)

    MT: Import event locations and invitees in generic bulk import The intermediate database now has events.location and an event_invitees table. Location can't go through custom fields, because the events plugin reserves the name and rejects the allowed custom fields setting. - The location is written to the event and to the [event] BBCode, so it survives a rebake. Line breaks are collapsed and it's cut to the 1000 characters the plugin stores. - BBCode attributes with free text (name, url, location, custom fields) now use the first quote pair from the parser's list that doesn't occur in the value, like the composer does. A quote in a value used to break the tag. - Invitees are imported as already notified, so future events don't send invitations during the import. - Only invitees of public events are imported. The plugin removes invitees from standalone events and from private events without invited groups, so others are logged as import issues instead. - Older intermediate databases without the column or table still work.

  • Gerhard Schlager(08 Oct 26)

    MT: Import event timezones in generic bulk import Events were always imported with the UTC timezone, so they showed up at the wrong local time when the source had a real timezone. The importer now reads the new events.timezone column of the intermediate database. - Values accepted by ActiveSupport::TimeZone are used as they are. That's the same check the events plugin does when it validates an event. Anything else (e.g. "+01:00") falls back to UTC and gets logged as an import issue, so we never write a timezone the plugin rejects. - The event BBCode now writes start and end as local times in the event's timezone, because the plugin reads them that way. Writing UTC times next to a different timezone would move the event when the post is rebaked. - Intermediate databases without the column still import with UTC. - A post with an event placeholder no longer raises a TypeError when the events plugin isn't installed.

  • Jarek Radosz(16 Oct 26)

    DEV: Convert 10 components to glimmer (#44687) Done with the help of our glimmer conversion skill. * AdminPenaltyPostAction, AdminPenaltyReason, DDocument, GroupMembershipButton, GroupsFormInteractionFields, ScreenedIpAddressForm, UserNotificationSchedule, UserNotificationScheduleDay * UserDateOfBirthInput (discourse-cakeday) * PaymentOptions (discourse-subscriptions) AdminPenaltyPostAction takes `@onChangePostAction` and `@onChangePostEdit` callbacks and no longer takes `@postId`. AdminPenaltyReason takes `@onChangeReason` and `@onChangeMessage` callbacks and no longer takes `@reason`. PaymentOptions takes an `@onSelectPlan` callback, and the subscribe route now preselects a single plan. Fixed PaymentPlan's button, which did nothing since #43540.

  • Arpit Jalan(16 Oct 26)

    DEV: Allow plugins to scope user searches before ranking and limits (#44693) Previously, the user search modifier ran after ranking and result limits and lacked mention context, making scoped autocomplete difficult to implement reliably. This change adds an earlier scope modifier with category, topic, guardian, and search context, and identifies composer mention searches so plugins can restrict suggestions while preserving core search behavior.

  • Renato Atilio(16 Oct 26)

    FIX: Keep the anchor in the URL when routing to another topic (#44498) Clicking a link with an anchor into another topic dropped the fragment from the URL, even though the page still scrolled to it. Slugless links like `/t/123#anchor` were worse: the redirect to the slugged URL aborted the original transition, so neither the fragment nor the scroll happened. The anchor is now restored once the transition and any redirects have settled, before scrolling to it. Context: https://meta.discourse.org/t/408505 (the editor half landed in #44487).

  • Renato Atilio(16 Oct 26)

    DEV: Reuse the event card for composer onebox previews (#43847) Composer previews of event topics rendered a hand-written copy of the event card's header, dates and location, fetched separately and overriding core's onebox rendering in both composer modes. The card component gains a read-only mode that drops the RSVP controls, invitees, more menu and message-bus subscription, and previews render that instead, so both composer modes show the same card readers get on the published post. All-day events that start and end on one date no longer render that date twice in excerpts.

  • David Taylor(16 Oct 26)

    FIX: Disable chat "Show all channels" button while the filter saves (#44707) When you pick a channel list filter, the list changes at once but the preference saves in the background. While that save runs, `showAllChannels` does nothing, so a click on the empty state's "Show all channels" button was silently lost. The header filter toggle is already disabled during the save, but the empty state button was not. This also made the "temporarily shows all channels from the empty state" system spec in `list_channels/drawer_spec.rb` flaky. The filter menu waits for its close animations before it starts the save, so the test could click the button while the save was still running. - `DEmptyState` takes a new `@ctaDisabled` argument and passes it to its button. - The chat filter empty state disables its button while the filter saves. Playwright waits for the button to be enabled before it clicks, so the spec no longer races the save.

  • David Taylor(16 Oct 26)

    DEV: Normalize `pnpm-lock.yaml` for pnpm 12 (#44706) This is the output of `pnpm install --lockfile-only --fix-lockfile`. No package versions are added or removed. This diff is caused by changes in pnpm 12 which weren't properly included in the upgrade PR. - `debug`, `@babel/core` and other packages with an optional `supports-color` peer now link the `[email protected]` that is already in the lockfile. - The `@volar/*` packages now link their optional `typescript` peer. - An orphaned `@discourse/lint-configs` snapshot that still pointed at TypeScript 6 is removed. - `@typescript-eslint/project-service` now uses the `tsconfig-utils` and `types` versions that match its own version, which were already in the lockfile. - Three package entries get their missing `peerDependencies`, and two malformed `engines` fields are dropped.

  • David Taylor(16 Oct 26)

    FIX: Keep AI error replies as whispers (#44701) When an AI reply should be a whisper, such as from the "Triage posts using AI agent" automation with "Reply as whisper" turned on, it was posted publicly if it ended with an error. The normal path passes the whisper post type to `PostCreator`, but the three error handlers in `Playground#reply_to_unlocked` did not, so they always created a regular post. The error post often holds the full reply with the error text at the end. For example, if the user edits their post while the agent is still working, the history check fails with `history_changed` after the model has finished, and the whole reply was posted publicly. - The context preparation, credit limit and unexpected error handlers now use the same `post_type` as a normal reply. - New specs cover each of the three handlers.

  • Régis Hanol(16 Oct 26)

    DEV: Remove duplication from AI helper assistant specs Previously, the `Assistant` and `AssistantController` specs repeated a lot of setup and coverage: two copies of the 40-line image-generating PostIllustrator setup, two copies of the streamed-completion stub, the same agent fabricated inline twice, three `available_prompts` examples making the same call, a disabled-image-tool example that couldn't fail because no image tool existed, and expected values restating their `let` fixtures. Every auto group was also refreshed before each example. This change extracts a shared context and a stub helper, shares the plain-text agent, merges or drops the redundant examples, and refreshes auto groups only for the user that needs it, keeping the same branch coverage with less code and a faster run.

  • Régis Hanol(16 Oct 26)

    DEV: Simplify `DiscourseAi::AiHelper::Assistant` Previously, `Assistant` had accumulated duplicated and dead code: the same locale resolution in two methods, `all_prompts` rebuilding the agent map once per agent and guarding against a `nil` it could never see, a schema lookup thrown away on every streamed image-caption chunk, an always-true `if` in `agents_prompt_map`, and long `case` ladders for icons and locations. This made the file harder to follow than its behaviour warranted. This change removes the dead code, extracts the shared locale resolution, replaces the icon `case` with a `PROMPT_ICONS` constant, groups the location branches, and flattens `generate_and_send_prompt` into early returns. There are no behaviour changes.

  • Régis Hanol(16 Oct 26)

    FIX: Return no title suggestions instead of a 500 when the reply isn't a list Previously, title suggestions called `flatten` on whatever `generate_prompt` returned, assuming an Array. The shape actually depends on the agent picked in `ai_helper_title_suggestions_agent` (any agent is accepted, and one without an array response format replies with plain text) and on the provider honouring the schema. Any non-Array reply made `suggest_title` fail with `undefined method 'flatten' for an instance of String`, surfaced as a generic 500 by the hijacked request. This change normalizes the reply where a list is expected, keeping only non-blank string suggestions, so a reply that isn't a list shows "No suggestions available" instead of erroring. It also drops the array clean-up in `generate_prompt`, which this now covers. Reported in https://meta.discourse.org/t/414790

  • Juan David Martínez Cubillos(16 Oct 26)

    DEV: Use the Content-Type charset when encoding is missing from the document metadata when parsing companion topic pages (#44695) Previously, companion topics created from embedded articles got mojibake titles (and body text) whenever the article only declared its character encoding via the HTTP Content-Type header, since the importer parsed the raw bytes with Nokogiri's Windows-1252 fallback. This change makes embed imports and title retrieval decode the response using its declared charset, prefer the page's own UTF-8 declaration when the header misdeclares one, and fall back to parser sniffing when the declared charset can't be applied.

  • David Taylor(16 Oct 26)

    DEV: Update pnpm to v12 (#44690) Introduces a workflow which works around https://github.com/dependabot/dependabot-core/issues/15904 by submitting the dependency graph to GitHub manually. This can be dropped once the upstream issue is resolved. `bin/dev`, `bin/qunit` and `PrecompiledBundle` now compare `node_modules/.pnpm/lock.yaml` with the last document of `pnpm-lock.yaml`, because pnpm doesn't copy the first document into `node_modules`. Drops the manually-pinned pnpm version for playwright in CI.

  • David Taylor(16 Oct 26)

    DEV: Replace `@babel/standalone` with `@babel/core` in asset-processor (#44694) The asset-processor bundle already ships `@babel/core` for its rollup pipeline, so `transpile` can use it too, instead of carrying a second, standalone copy of Babel. The bundle gets 4MB smaller, the mini-racer context boots about 30% faster, and it uses about 15MB less heap. - `transpile` now calls `transformSync` with the AMD plugin and `preset-env` imported directly. `moduleId` is a top-level option again, because `@babel/core` is Babel 7. - Babel's module transform calls `assert()`, so `assert` now maps to a small shim that throws, instead of an empty object. - `@babel/standalone` is also removed from `frontend/discourse/package.json`, where nothing used it. Transpiling 1,910 core and plugin files gives the same code before and after. The source maps lose no mappings and gain some extra detail.

  • Jarek Radosz(16 Oct 26)

    DEV: Convert 10 components to glimmer (#44660) Done with the help of our glimmer conversion skill. * Bool, CategoriesOnly, Category, CategoryList, Filter, Group, Groups, List, NavigationItem * Patreon (discourse-patreon)

  • Sérgio Saquetim(16 Oct 26)

    DEV: Reuse the shared SelectableTheme typedef in theme site settings (#44659) `theme-site-settings` declared its own copy of the theme shape that `listThemes` now exports as `SelectableTheme`. It reuses that typedef instead.

  • Discourse Translator Bot(16 Oct 26)

    I18N: Update translations (#44683)

  • David Taylor(16 Oct 26)

    DEV: Fix broken pnpm lockfile after source-map-js bump (#44692) Merging #44322 left `pnpm-lock.yaml` broken. `frontend/playwright-runner` started depending on `source-map-js@^1.2.1` after the Dependabot branch was created, and the bump removed the 1.2.1 entry that it still pointed at. Git merged the two cleanly, but `pnpm install --frozen-lockfile` now fails on main with `ERR_PNPM_LOCKFILE_MISSING_DEPENDENCY`. This bumps the playwright-runner range to `^1.2.2` so it matches the other packages, and regenerates the lockfile.

  • Rafael dos Santos Silva(16 Oct 26)

    FEATURE: Add daily credits to seeded decision models (#44662) Previously, decision models had no credit system, so hosted sites could run classification workflows on our self-hosted decision models with no daily limit. This change gives each seeded decision model (negative id, read-only in admin) its own daily credit allocation with per-feature `credits_per_token` costs, mirroring seeded LLMs. Calls are refused with `DiscourseAi::Decisions::CreditLimitExceeded` once the day's credits are used up. Notes for review: - Usage counts live in Redis, which answers every limit check. A job copies the daily totals into `decision_model_credit_daily_usages` at most once a minute. The flush writes absolute totals with `GREATEST`, so it is idempotent. A missing Redis total is reloaded from the DB row, so losing Redis never hands out a fresh allowance. - The System One engine evaluates the state once per question, so cost scales with the number of questions. When a provider omits `usage`, the client estimates tokens the same way. Against our internal d3 model, the estimate matched the reported count exactly. - The admin list shows the credit bar for seeded models. The bar and its warnings are extracted from the LLM list into a shared `AiCreditAllocationStatus` component. - `db/structure.sql` was edited by hand, because `db:dump_structure` does not run against PostgreSQL 18 locally.

  • dependabot[bot](16 Oct 26)

    DEPS: Bump ember-cli from 7.2.0 to 7.3.0 (#44171) Bumps [ember-cli](https://github.com/ember-cli/ember-cli) from 7.2.0 to 7.3.0. - [Release notes](https://github.com/ember-cli/ember-cli/releases) - [Changelog](https://github.com/ember-cli/ember-cli/blob/master/CHANGELOG.md) - [Commits](https://github.com/ember-cli/ember-cli/commits) --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: discoursebot <[email protected]>

  • dependabot[bot](16 Oct 26)

    DEPS: Bump playwright from 1.62.1 to 1.64.0 (#44607) Bumps [playwright](https://github.com/microsoft/playwright) from 1.62.1 to 1.64.0. - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.62.1...v1.64.0) Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

  • dependabot[bot](16 Oct 26)

    DEPS: Bump ember-qunit from 9.1.0 to 9.2.0 (#44345) Bumps [ember-qunit](https://github.com/emberjs/ember-qunit) from 9.1.0 to 9.2.0. - [Release notes](https://github.com/emberjs/ember-qunit/releases) - [Commits](https://github.com/emberjs/ember-qunit/compare/v9.1.0...v9.2.0) Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

Discourse Security

4.2/10

Repo Security Summary

Updated 24 Aug 26

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

Security Advisories (100)

  • highPatchedCVSS 7.7

    CVE-2026-91159Stored oEmbed HTML injection via allowed iframe

  • highPatchedCVSS 7.5

    CVE-2026-91157Media uploads remain publicly accessible after category permissions are restricted

  • 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

    CVE-2026-84302Non-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 6.5

    CVE-2026-91133Escape LIKE metacharacters in upload paths to prevent disclosure

  • mediumPatchedCVSS 5.4

    CVE-2026-91134Block post iframes whose encoded userinfo bypasses the allowed_iframes allowlist

  • highPatchedCVSS 7.2

    CVE-2026-91123Reject literal backslash path separators in iframe src traversal guard

  • mediumPatchedCVSS 6.4

    CVE-2026-91119Encode action_code_who in mention URLs

  • mediumPatchedCVSS 4.3

    CVE-2026-91132Wildcard iframe origin allowlist bypass via authority separators

  • mediumPatchedCVSS 5

    CVE-2026-91121Chat upload filenames rendered as raw HTML in excerpts

  • highPatchedCVSS 8.7

    CVE-2026-91122Stored XSS via video placeholder attribute breakout

  • mediumPatchedCVSS 5.4

    CVE-2026-91120Stored HTML injection in video notification emails

  • highPatchedCVSS 7.5

    CVE-2026-91156Chat MessageBus delivers read-restricted messages to unauthorized users

  • 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

Discourse Website

Website

Discourse | One platform. Any community.

Discourse is the customizable, scalable community platform powering more than 22,000 communities that create knowledge through conversation.

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address13.32.179.23
  • Hostnameserver-13-32-179-23.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%

Trackers

Loads 1 third-party tracker

  • googletagmanager.comGoogle Ads

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!