# \#tutorial

**URL:** https://meta.discourse.org/tag/tutorial/484.md

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

---

## [Creating Routes in Discourse and Showing Data](https://meta.discourse.org/t/creating-routes-in-discourse-and-showing-data/48827)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [August 18, 2016, 8:18pm UTC](https://meta.discourse.org/t/creating-routes-in-discourse-and-showing-data/48827 "2016-08-18T20:18:49Z")

</div>

Over time Discourse has grown in complexity and it can be daunting for beginners to understand how data gets all the way from the back end Ruby on Rails application to the Ember.js application in front. This tutorial is…

---

## [Write acceptance tests and component tests for Ember code in Discourse](https://meta.discourse.org/t/write-acceptance-tests-and-component-tests-for-ember-code-in-discourse/49167)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 3\
**Last updated:** [February 23, 2024, 12:42pm UTC](https://meta.discourse.org/t/write-acceptance-tests-and-component-tests-for-ember-code-in-discourse/49167 "2024-02-23T12:42:10Z")

</div>

Automated tests are a great way to protect your code against future regressions. Many people are familiar with how to do this in our Rails codebase with rspec, but the Javascript side can be somewhat of an enigma to some…

---

## [Developing Discourse Plugins - Part 6 - Add acceptance tests](https://meta.discourse.org/t/developing-discourse-plugins-part-6-add-acceptance-tests/32619)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 32\
**Last updated:** [June 2, 2022, 11:06am UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-6-add-acceptance-tests/32619 "2022-06-02T11:06:38Z")

</div>

Previous tutorial: Developing Discourse Plugins - Part 5 - Add an admin interface Did you know that Discourse has two large test suites for its code base? On the server side, our Ruby code has a test suite that uses rs…

---

## [Developing Discourse Plugins - Part 5 - Add an admin interface](https://meta.discourse.org/t/developing-discourse-plugins-part-5-add-an-admin-interface/31761)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 46\
**Last updated:** [September 24, 2024, 11:10am UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-5-add-an-admin-interface/31761 "2024-09-24T11:10:58Z")

</div>

Previous tutorial: Developing Discourse Plugins - Part 4 - Setup git Sometimes site settings aren’t enough of an admin interface for your plugin to work the way you want. For example, if you install the discourse-akism…

---

## [Developing Discourse Plugins - Part 4 - Setup git](https://meta.discourse.org/t/developing-discourse-plugins-part-4-setup-git/31272)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 10\
**Last updated:** [January 30, 2024, 11:12am UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-4-setup-git/31272 "2024-01-30T11:12:28Z")

</div>

Previous tutorial: Developing Discourse Plugins - Part 3 - Add custom site settings Now that your plugin is getting more sophisticated, it’s time to get more sophisticated about how you develop it. We suggest that you…

---

## [Developing Discourse Plugins - Part 1 - Create a basic plugin](https://meta.discourse.org/t/developing-discourse-plugins-part-1-create-a-basic-plugin/30515)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 32\
**Last updated:** [July 8, 2025, 8:52pm UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-1-create-a-basic-plugin/30515 "2025-07-08T20:52:10Z")

</div>

Building a plugin in Discourse can be really simple, once you learn a couple of quirks. The goal of this post is to create a skeleton plugin and introduce you to the basics. Your development environment Make sure you ha…

---

## [Developing Discourse Plugins - Part 7 - Publish your plugin](https://meta.discourse.org/t/developing-discourse-plugins-part-7-publish-your-plugin/101636)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 4\
**Last updated:** [July 29, 2021, 2:01pm UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-7-publish-your-plugin/101636 "2021-07-29T14:01:04Z")

</div>

Previous tutorial: Developing Discourse Plugins - Part 6 - Add acceptance tests You’ve created your plugin, you’ve uploaded it to GitHub and you’ve added tests. Great! Problem is, no one else knows about it. Documenti…

---

## [Developing Discourse Plugins - Part 2 - Connect to a plugin outlet](https://meta.discourse.org/t/developing-discourse-plugins-part-2-connect-to-a-plugin-outlet/31001)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 38\
**Last updated:** [November 23, 2025, 9:35am UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-2-connect-to-a-plugin-outlet/31001 "2025-11-23T09:35:13Z")

</div>

Previous tutorial: Developing Discourse Plugins - Part 1 - Create a basic plugin Getting Started: Templates Discourse’s client application is written using the Ember.js Javascript framework. Ember uses Templates to gen…

---

## [Customize Your Site Branding](https://meta.discourse.org/t/customize-your-site-branding/258307)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 6\
**Last updated:** [September 30, 2025, 11:39pm UTC](https://meta.discourse.org/t/customize-your-site-branding/258307 "2025-09-30T23:39:59Z")

</div>

:bookmark: This is a non-technical tutorial that will guide you through customizing the branding and appearance for your Discourse site. :person\_raising\_hand: Required user level: Administrator Want to customize your…

---

## [Set up structured tagging with tag groups and category tag restrictions](https://meta.discourse.org/t/set-up-structured-tagging-with-tag-groups-and-category-tag-restrictions/48260)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [August 5, 2016, 3:25pm UTC](https://meta.discourse.org/t/set-up-structured-tagging-with-tag-groups-and-category-tag-restrictions/48260 "2016-08-05T15:25:43Z")

</div>

Tag support is a core feature of Discourse. In this How-To I’ll go through setting up a tag schema like Car Talk uses. We’ll want to achieve these things: Tags for car makes and car models. Only allow the car make and…

---

## [Adding a table to your post using markdown](https://meta.discourse.org/t/adding-a-table-to-your-post-using-markdown/66544)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 26\
**Last updated:** [June 9, 2025, 7:09pm UTC](https://meta.discourse.org/t/adding-a-table-to-your-post-using-markdown/66544 "2025-06-09T19:09:30Z")

</div>

:bookmark: This guide explains how to add tables to your Discourse posts using Markdown. :person\_raising\_hand: Required user level: All users Adding tables to your posts can help present data in a structured and easy…

---

## [Sync DiscourseConnect user data with the sync\_sso route \[JavaScript\]](https://meta.discourse.org/t/sync-discourseconnect-user-data-with-the-sync-sso-route-javascript/260841)

<div class="topic-metadata">

**Author:** [@GregorSondermeier](https://meta.discourse.org/u/GregorSondermeier)\
**Replies:** 0\
**Last updated:** [April 6, 2023, 2:21pm UTC](https://meta.discourse.org/t/sync-discourseconnect-user-data-with-the-sync-sso-route-javascript/260841 "2023-04-06T14:21:51Z")

</div>

Hello, for my company I needed to make use of this feature from our Node.js backend, so here is a reference implementation in JavaScript using Node.js’s cypto and Buffer if anyone is interested: Note: For consistency …

---

## [Developing Discourse Themes & Theme Components](https://meta.discourse.org/t/developing-discourse-themes-theme-components/93648)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 14\
**Last updated:** [March 18, 2025, 11:33pm UTC](https://meta.discourse.org/t/developing-discourse-themes-theme-components/93648 "2025-03-18T23:33:05Z")

</div>

Discourse Themes and Theme Components can be used to customize the look, feel and functionality of Discourse’s frontend. This section of the developer guides aims to provide all the reference materials you need to develo…

---

## [Developing Discourse Plugins - Part 3 - Add custom site settings](https://meta.discourse.org/t/developing-discourse-plugins-part-3-add-custom-site-settings/31115)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 39\
**Last updated:** [March 15, 2025, 11:08pm UTC](https://meta.discourse.org/t/developing-discourse-plugins-part-3-add-custom-site-settings/31115 "2025-03-15T23:08:09Z")

</div>

Previous tutorial: Developing Discourse Plugins - Part 2 - Connect to a plugin outlet Site Settings If you visit /admin/site\_settings on a Discourse you have administrator capabilities on, you’ll see a list of configur…

---

## [Discourse Data Explorer Power BI integration](https://meta.discourse.org/t/discourse-data-explorer-power-bi-integration/159577)

<div class="topic-metadata">

**Author:** [@loginerror](https://meta.discourse.org/u/loginerror)\
**Replies:** 24\
**Last updated:** [February 24, 2025, 7:58pm UTC](https://meta.discourse.org/t/discourse-data-explorer-power-bi-integration/159577 "2025-02-24T19:58:33Z")

</div>

Discourse Data Explorer Power BI integration I recently made a cool Power BI function which fetches Data Explorer data directly to Power BI with minimal overhead. Thus, if you are like me, and you wanted to have the dat…

---

## [Sync DiscourseConnect user data with the sync\_sso route](https://meta.discourse.org/t/sync-discourseconnect-user-data-with-the-sync-sso-route/84398)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 1\
**Last updated:** [May 7, 2024, 6:26am UTC](https://meta.discourse.org/t/sync-discourseconnect-user-data-with-the-sync-sso-route/84398 "2024-05-07T06:26:16Z")

</div>

Single Sign On can be used to handle Discourse user authentication from a separate site. The Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso) topic has details about how to implement DiscourseConnect …

---

## [Designer's Guide to getting started with themes in Discourse](https://meta.discourse.org/t/designers-guide-to-getting-started-with-themes-in-discourse/152002)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 9\
**Last updated:** [April 8, 2024, 9:32pm UTC](https://meta.discourse.org/t/designers-guide-to-getting-started-with-themes-in-discourse/152002 "2024-04-08T21:32:15Z")

</div>

So you’re interested in in designing your own theme for Discourse? You’ve arrived at the right topic :smile: This guide will be more focused on the SCSS/CSS aspects of working with themes in Discourse. If you are also k…

---

## [Use Screen To Bootstrap A Development Install (Ubuntu)](https://meta.discourse.org/t/use-screen-to-bootstrap-a-development-install-ubuntu/62678)

<div class="topic-metadata">

**Author:** [@sulliops](https://meta.discourse.org/u/sulliops)\
**Replies:** 1\
**Last updated:** [May 14, 2017, 1:26pm UTC](https://meta.discourse.org/t/use-screen-to-bootstrap-a-development-install-ubuntu/62678 "2017-05-14T13:26:49Z")

</div>

This tutorial was posted on discourse.sulliops.co on May 14, 2017. When installing Discourse for development using this tutorial, the last step is to run bundle exec rails server --binding=0.0.0.0 to bootstrap the serve…
