# Documentation

**URL:** https://meta.discourse.org/c/documentation/10.md

[Latest](https://meta.discourse.org/latest.md) · [Categories](https://meta.discourse.org/categories.md) · [Tags](https://meta.discourse.org/tags.md)

---

## [Creating and managing polls](https://meta.discourse.org/t/creating-and-managing-polls/77548)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 26\
**Last updated:** [September 22, 2026, 6:02am UTC](https://meta.discourse.org/t/creating-and-managing-polls/77548 "2026-09-22T06:02:19Z")

</div>

:bookmark: This guide explains how to create polls in Discourse to gather votes from users on any topic. :person\_raising\_hand: Required user level: All users :information\_source: By default, polls are enabled in Di…

---

## [Developer Guides Index](https://meta.discourse.org/t/developer-guides-index/308036)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [May 15, 2024, 6:05am UTC](https://meta.discourse.org/t/developer-guides-index/308036 "2024-05-15T06:05:51Z")

</div>

Documentation about extending Discourse with plugins, themes, and theme components, working with the core code, and using the Discourse API. Introduction Introduction: Introduction to Discourse Development Development…

---

## [Using the AI bot via the Discourse API](https://meta.discourse.org/t/using-the-ai-bot-via-the-discourse-api/412826)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 0\
**Last updated:** [September 19, 2026, 5:45am UTC](https://meta.discourse.org/t/using-the-ai-bot-via-the-discourse-api/412826 "2026-09-19T05:45:35Z")

</div>

Overview Discourse AI exposes an admin/API endpoint for streaming an AI Agent reply over a raw chunked HTTP response. Protocol: Raw chunked HTTP transfer encoding (NOT Server-Sent Events). Implementation: Hijacks the…

---

## [Configure your hosted Discourse site to run at the root or apex domain (e.g. example.com)](https://meta.discourse.org/t/configure-your-hosted-discourse-site-to-run-at-the-root-or-apex-domain-e-g-example-com/60951)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 2\
**Last updated:** [March 18, 2025, 6:16pm UTC](https://meta.discourse.org/t/configure-your-hosted-discourse-site-to-run-at-the-root-or-apex-domain-e-g-example-com/60951 "2025-03-18T18:16:01Z")

</div>

:bookmark: This guide explains how to configure a hosted Discourse site to run at the root or apex domain (for example, example.com instead of forum.example.com). The general process for changing your site’s domain name…

---

## [Understanding user statuses, roles, and permissions](https://meta.discourse.org/t/understanding-user-statuses-roles-and-permissions/35171)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [November 2, 2015, 3:36am UTC](https://meta.discourse.org/t/understanding-user-statuses-roles-and-permissions/35171 "2015-11-02T03:36:48Z")

</div>

:bookmark: This is a guide for understanding the various user statuses, roles, and permissions within Discourse, including how they affect user capabilities and how they are stored in the database. …

---

## [Configure your domain name for hosted Discourse](https://meta.discourse.org/t/configure-your-domain-name-for-hosted-discourse/21827)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [November 4, 2014, 10:08pm UTC](https://meta.discourse.org/t/configure-your-domain-name-for-hosted-discourse/21827 "2014-11-04T22:08:46Z")

</div>

:bookmark: This guide explains how to change the domain name of your Discourse-hosted site, whether you want to switch to a different discourse.group address or configure a custom domain you own. …

---

## [Using Workflows to send a Slack message when a topic or post is assigned](https://meta.discourse.org/t/using-workflows-to-send-a-slack-message-when-a-topic-or-post-is-assigned/412464)

<div class="topic-metadata">

**Author:** [@lindsey](https://meta.discourse.org/u/lindsey)\
**Replies:** 0\
**Last updated:** [September 15, 2026, 3:39pm UTC](https://meta.discourse.org/t/using-workflows-to-send-a-slack-message-when-a-topic-or-post-is-assigned/412464 "2026-09-15T15:39:42Z")

</div>

You can use Workflows, Assign, and Chat Integration to automatically send a Slack message whenever a topic or post is assigned or unassigned on your site. This makes it easier to keep your teammates informed when somethi…

---

## [Use a glossary with Discourse AI translations](https://meta.discourse.org/t/use-a-glossary-with-discourse-ai-translations/412433)

<div class="topic-metadata">

**Author:** [@nat](https://meta.discourse.org/u/nat)\
**Replies:** 0\
**Last updated:** [September 15, 2026, 7:34am UTC](https://meta.discourse.org/t/use-a-glossary-with-discourse-ai-translations/412433 "2026-09-15T07:34:21Z")

</div>

A translation glossary gives your AI translators the preferred names for products, features, and terms used in your community. For example, you can specify that a feature called “Launchpad” should be translated as “Start…

---

## [Configure an S3 compatible object storage provider for uploads](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 267\
**Last updated:** [September 15, 2026, 1:04am UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916 "2026-09-15T01:04:57Z")

</div>

:information\_source: This topic covers how to configure some common S3 compatible Object Storage providers (S3 clones). See Set up file and image uploads to S3 for more details about Amazon AWS S3 configuration, whic…

---

## [Developer's guide to Markdown extensions](https://meta.discourse.org/t/developers-guide-to-markdown-extensions/66023)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 1\
**Last updated:** [June 1, 2026, 8:45am UTC](https://meta.discourse.org/t/developers-guide-to-markdown-extensions/66023 "2026-06-01T08:45:53Z")

</div>

Discourse uses a Markdown engine called Markdown-it. Here are some dev notes that will help you either fix bugs in core or create your new plugins. The Basics Discourse only contains a few helpers on top of the engine,…

---

## [Composer Popup Messages Guide](https://meta.discourse.org/t/composer-popup-messages-guide/317734)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 9\
**Last updated:** [September 11, 2026, 2:16pm UTC](https://meta.discourse.org/t/composer-popup-messages-guide/317734 "2026-09-11T14:16:40Z")

</div>

:bookmark: This guide explains the various composer messages that can appear, their relevant site settings, and how to disable them. :person\_raising\_hand: Required user level: Administrator In Discourse, certain popu…

---

## [Adding a new 'managed' authentication method to Discourse](https://meta.discourse.org/t/adding-a-new-managed-authentication-method-to-discourse/106695)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 2\
**Last updated:** [November 29, 2023, 7:48am UTC](https://meta.discourse.org/t/adding-a-new-managed-authentication-method-to-discourse/106695 "2023-11-29T07:48:14Z")

</div>

Continuing from Future Social Authentication Improvements… We are now in the process of moving all ‘associated account’ information into a single database table. This will help to significantly reduce duplicated logic, …

---

## [Theme Developer Tutorial: 7. Wrapping up](https://meta.discourse.org/t/theme-developer-tutorial-7-wrapping-up/357802)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 0\
**Last updated:** [March 18, 2025, 3:59pm UTC](https://meta.discourse.org/t/theme-developer-tutorial-7-wrapping-up/357802 "2025-03-18T15:59:12Z")

</div>

This tutorial has been a whistle-stop tour through the process of creating a Discourse theme and experimenting with a few of the most common APIs. Of course, there’s plenty more to learn, so let’s map out some more place…

---

## [Theme Developer Tutorial: 6. Using the JS API](https://meta.discourse.org/t/theme-developer-tutorial-6-using-the-js-api/357801)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 3\
**Last updated:** [April 14, 2025, 11:16pm UTC](https://meta.discourse.org/t/theme-developer-tutorial-6-using-the-js-api/357801 "2025-04-14T23:16:42Z")

</div>

In the last couple of chapters, we’ve explored how to use the JavaScript API to render content into outlets. renderInOutlet is the most commonly-used API, but there are a ton more! In this chapter we’ll try out a few of …

---

## [Add settings to your Discourse theme](https://meta.discourse.org/t/add-settings-to-your-discourse-theme/82557)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 6\
**Last updated:** [July 8, 2025, 7:43pm UTC](https://meta.discourse.org/t/add-settings-to-your-discourse-theme/82557 "2025-07-08T19:43:17Z")

</div>

Discourse has the ability for themes to have “settings” that can be added by theme developers to allow site owners to customize themes through UI without having to change any line of code and worry about losing their cha…

---

## [Theme Developer Quick Reference Guide](https://meta.discourse.org/t/theme-developer-quick-reference-guide/110448)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 2\
**Last updated:** [June 28, 2021, 5:13pm UTC](https://meta.discourse.org/t/theme-developer-quick-reference-guide/110448 "2021-06-28T17:13:16Z")

</div>

As themes grow more powerful, there’s more to remember about how they work. We have loads of detailed documentation under #theme-guides, but if you just need something to jog your memory, this guide may help. General Re…

---

## [Designing for Responsive Widths (Breakpoints, Viewport & Containers)](https://meta.discourse.org/t/designing-for-responsive-widths-breakpoints-viewport-containers/409279)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 0\
**Last updated:** [August 4, 2026, 3:57pm UTC](https://meta.discourse.org/t/designing-for-responsive-widths-breakpoints-viewport-containers/409279 "2026-08-04T15:57:20Z")

</div>

This document outlines the APIs used to adapt Discourse’s user interface to different widths — both the browser viewport, and individual containers on the page. We design “mobile first” and then add customizations for l…

---

## [Designing for Different Devices (Touch & Hover)](https://meta.discourse.org/t/designing-for-different-devices-touch-hover/367810)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 14\
**Last updated:** [January 25, 2026, 9:34pm UTC](https://meta.discourse.org/t/designing-for-different-devices-touch-hover/367810 "2026-01-25T21:34:26Z")

</div>

This document outlines the APIs used to adapt Discourse’s user interface for different devices. Touch & Hover Some devices only have touchscreens, some only have a traditional mouse pointer, and some have both. Importan…

---

## [Guidelines for CSS classes using BEM](https://meta.discourse.org/t/guidelines-for-css-classes-using-bem/361851)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 0\
**Last updated:** [April 15, 2025, 5:48am UTC](https://meta.discourse.org/t/guidelines-for-css-classes-using-bem/361851 "2025-04-15T05:48:23Z")

</div>

Background When writing CSS classes for Discourse components, themes, or plugins, we follow a modified variant of Block Element Modifier (BEM). Following these guidelines will make it much less likely for CSS conflicts t…

---

## [Customizing the topic list](https://meta.discourse.org/t/customizing-the-topic-list/350411)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 0\
**Last updated:** [February 4, 2025, 10:40am UTC](https://meta.discourse.org/t/customizing-the-topic-list/350411 "2025-02-04T10:40:33Z")

</div>

The topic-list is one of the most-used and most-customized user-interfaces in Discourse. There are many different tools available to theme and plugin developers to achieve this customization, each with their own advantag…

---

## [Using the DModal API to render Modal windows (aka popups/dialogs) in Discourse](https://meta.discourse.org/t/using-the-dmodal-api-to-render-modal-windows-aka-popups-dialogs-in-discourse/268304)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [July 3, 2023, 9:52am UTC](https://meta.discourse.org/t/using-the-dmodal-api-to-render-modal-windows-aka-popups-dialogs-in-discourse/268304 "2023-07-03T09:52:06Z")

</div>

Discourse 3.1.0.beta6 ships with a brand new \<DModal\> component-based API. DModal is part of the UI kit and is imported from discourse/ui-kit/d-modal. :information\_source: This supersedes the old controller-based API, …

---

## [The UI kit of shared Discourse components, helpers, and modifiers](https://meta.discourse.org/t/the-ui-kit-of-shared-discourse-components-helpers-and-modifiers/411319)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 0\
**Last updated:** [August 31, 2026, 5:34pm UTC](https://meta.discourse.org/t/the-ui-kit-of-shared-discourse-components-helpers-and-modifiers/411319 "2026-08-31T17:34:16Z")

</div>

ui-kit is the layer of reusable, domain-free building blocks that core, plugins, and themes compose their interfaces from. It lives under frontend/discourse/app/ui-kit/ and ships three kinds of primitive: Components:…

---

## [Set up Discourse for development on Fedora Linux](https://meta.discourse.org/t/set-up-discourse-for-development-on-fedora-linux/163348)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 13\
**Last updated:** [June 19, 2026, 5:20am UTC](https://meta.discourse.org/t/set-up-discourse-for-development-on-fedora-linux/163348 "2026-06-19T05:20:22Z")

</div>

This guide has been tested against a fresh install of Fedora 31 and 33, but may work on older versions that also use dnf as the package management tool. This is not an official guide but may be useful for other developer…

---

## [Install Discourse on Windows for development](https://meta.discourse.org/t/install-discourse-on-windows-for-development/75149)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 16\
**Last updated:** [April 22, 2026, 10:18am UTC](https://meta.discourse.org/t/install-discourse-on-windows-for-development/75149 "2026-04-22T10:18:42Z")

</div>

:information\_source: This tutorial has been tested on Windows 10 and 11. To set up a development environment for Discourse on Windows, you can do it using Windows Subsystem for Linux feature. This setup requires the …

---

## [Install Discourse on Ubuntu or Debian for Development](https://meta.discourse.org/t/install-discourse-on-ubuntu-or-debian-for-development/14727)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 83\
**Last updated:** [June 22, 2025, 12:31am UTC](https://meta.discourse.org/t/install-discourse-on-ubuntu-or-debian-for-development/14727 "2025-06-22T00:31:14Z")

</div>

:warning: This guide covers installation instructions in a development environment. For a production guide see: Install Discourse in production with the official supported instructions So you want to set up Discour…

---

## [Install Discourse on macOS for development](https://meta.discourse.org/t/install-discourse-on-macos-for-development/15772)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 102\
**Last updated:** [April 24, 2026, 6:38pm UTC](https://meta.discourse.org/t/install-discourse-on-macos-for-development/15772 "2026-04-24T18:38:20Z")

</div>

:warning: This guide covers installation instructions for a macOS development environment, for production guides see: Install Discourse in production with the official supported instructions So you want to set up Disc…

---

## [Bundle splitting for plugins](https://meta.discourse.org/t/bundle-splitting-for-plugins/411886)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 0\
**Last updated:** [September 8, 2026, 11:07am UTC](https://meta.discourse.org/t/bundle-splitting-for-plugins/411886 "2026-09-08T11:07:29Z")

</div>

By default, every javascript module in a plugin is loaded when Discourse boots. This guide describes the staticModules system, which allows code to be automatically loaded on-demand, thereby improving initial boot times. …

---

## [Available settings within the category edit page](https://meta.discourse.org/t/available-settings-within-the-category-edit-page/248435)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 1\
**Last updated:** [May 7, 2026, 1:49pm UTC](https://meta.discourse.org/t/available-settings-within-the-category-edit-page/248435 "2026-05-07T13:49:19Z")

</div>

:bookmark: This is a reference guide on the settings for parent and child categories. :person\_raising\_hand: Required user level: Administrator (or moderator if the moderators manage categories setting is enabled) The…

---

## [How to back up and restore your hosted Discourse site](https://meta.discourse.org/t/how-to-back-up-and-restore-your-hosted-discourse-site/404408)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [September 7, 2026, 12:33pm UTC](https://meta.discourse.org/t/how-to-back-up-and-restore-your-hosted-discourse-site/404408 "2026-09-07T12:33:46Z")

</div>

:bookmark: This guide explains the difference between the automated backups Discourse manages for its hosting infrastructure and the site-level backups you create and download for your Discourse-hosted site. It covers h…

---

## [Using Transformers to customize client-side values and behavior](https://meta.discourse.org/t/using-transformers-to-customize-client-side-values-and-behavior/349954)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 2\
**Last updated:** [September 5, 2026, 2:53am UTC](https://meta.discourse.org/t/using-transformers-to-customize-client-side-values-and-behavior/349954 "2026-09-05T02:53:05Z")

</div>

Discourse core includes a number of “transformer” hooks which can be used to customize client behavior. These fall into two categories: Value Transformers take an output from Discourse core, and optionally modify it, …

[Next page](https://meta.discourse.org/c/documentation/10.md?page=1)
