# Latest

**URL:** https://meta.discourse.org/latest.md?page=13

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

**Page:** 14

---

## [Zendesk API tokens will be permanently deactivated on April 30, 2027](https://meta.discourse.org/t/zendesk-api-tokens-will-be-permanently-deactivated-on-april-30-2027/409411)

<div class="topic-metadata">

**Author:** [@Vishal\_Ahir](https://meta.discourse.org/u/Vishal_Ahir)\
**Replies:** 3\
**Last updated:** [September 1, 2026, 12:35am UTC](https://meta.discourse.org/t/zendesk-api-tokens-will-be-permanently-deactivated-on-april-30-2027/409411 "2026-09-01T00:35:10Z")

</div>

Zendesk API tokens will be deactivated permanently on April 30, 2027. Is there any update on the use of OAuth tokens?

---

## [Add a quick link to edit Badges](https://meta.discourse.org/t/add-a-quick-link-to-edit-badges/411289)

<div class="topic-metadata">

**Author:** [@satonotdead](https://meta.discourse.org/u/satonotdead)\
**Replies:** 1\
**Last updated:** [September 1, 2026, 12:10am UTC](https://meta.discourse.org/t/add-a-quick-link-to-edit-badges/411289 "2026-09-01T00:10:29Z")

</div>

I am building an internal/customized tier system that is heavily related to badges. I found it very counter-intuitive to need to open a new tab and/or access a new URL to edit a created badge in the Admin GUI. I really …

---

## [Form template composer fields lose their newlines in the edit preview](https://meta.discourse.org/t/form-template-composer-fields-lose-their-newlines-in-the-edit-preview/411146)

<div class="topic-metadata">

**Author:** [@ScaryLarryGames1](https://meta.discourse.org/u/ScaryLarryGames1)\
**Replies:** 1\
**Last updated:** [August 31, 2026, 8:43pm UTC](https://meta.discourse.org/t/form-template-composer-fields-lose-their-newlines-in-the-edit-preview/411146 "2026-08-31T20:43:11Z")

</div>

Editing a post that uses a form template, the composer preview renders any multiline composer field as one run-on line: headings glued to the sentence after them, lists and BBCode as literal text. The saved post cooks co…

---

## [Drag, resize, and gesture primitives](https://meta.discourse.org/t/drag-resize-and-gesture-primitives/410549)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 0\
**Last updated:** [August 20, 2026, 4:44pm UTC](https://meta.discourse.org/t/drag-resize-and-gesture-primitives/410549 "2026-08-20T16:44:52Z")

</div>

ui-kit ships the input-driven gesture primitives: dragging a payload onto a target, resizing a region, and reading a swipe or a pointer drag. This page is the usage reference. Each primitive’s own TSDoc carries the f…

---

## [JavaScript type hinting & validation (typescript)](https://meta.discourse.org/t/javascript-type-hinting-validation-typescript/395136)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 0\
**Last updated:** [February 4, 2026, 10:38am UTC](https://meta.discourse.org/t/javascript-type-hinting-validation-typescript/395136 "2026-02-04T10:38:25Z")

</div>

Discourse ships type information for its JavaScript code. This can provide inline documentation, autocomplete, and other useful IDE features. It can also be used for some basic type validation, using the @ts-check direct…

---

## [AppEvents Triggers Reference](https://meta.discourse.org/t/appevents-triggers-reference/338465)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 0\
**Last updated:** [November 26, 2024, 10:20am UTC](https://meta.discourse.org/t/appevents-triggers-reference/338465 "2024-11-26T10:20:08Z")

</div>

AppEvents The AppEvent system in Discourse provides a pub/sub mechanism for handling UI updates and component interactions - and these events are triggered via calls of AppEvent.trigger. This topic consolidates a list…

---

## [Write end-to-end system specs for the Discourse user interface](https://meta.discourse.org/t/write-end-to-end-system-specs-for-the-discourse-user-interface/325937)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 3\
**Last updated:** [August 28, 2025, 2:51pm UTC](https://meta.discourse.org/t/write-end-to-end-system-specs-for-the-discourse-user-interface/325937 "2025-08-28T14:51:13Z")

</div>

Background Rails system specs are used to simulate the actions of a real user using the app in a browser. We use the Playwright ruby driver which is becoming an industry standard. The tests run locally and in CI out of t…

---

## [Using service objects in Discourse](https://meta.discourse.org/t/using-service-objects-in-discourse/333641)

<div class="topic-metadata">

**Author:** [@system](https://meta.discourse.org/u/system)\
**Replies:** 0\
**Last updated:** [October 30, 2024, 3:56pm UTC](https://meta.discourse.org/t/using-service-objects-in-discourse/333641 "2024-10-30T15:56:38Z")

</div>

Overview A service is a small object that encompasses business logic for a given action. From outside, it should be seen as a sort of black box. You provide it with parameters, it runs (including all the side effects it…

---

## [(not recommended) Overriding Discourse templates from a Theme or Plugin](https://meta.discourse.org/t/not-recommended-overriding-discourse-templates-from-a-theme-or-plugin/247487)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 9\
**Last updated:** [March 7, 2024, 1:20pm UTC](https://meta.discourse.org/t/not-recommended-overriding-discourse-templates-from-a-theme-or-plugin/247487 "2024-03-07T13:20:54Z")

</div>

Ideally, when customizing Discourse via themes/plugins, you should use CSS, the JavaScript Plugin API, or plugin outlets. If none of these work for your use-case, feel free to open a PR to Discourse core or start a Devel…

---

## [Preventing accidental serialization of ActiveRecord models](https://meta.discourse.org/t/preventing-accidental-serialization-of-activerecord-models/314495)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 2\
**Last updated:** [July 23, 2024, 5:59pm UTC](https://meta.discourse.org/t/preventing-accidental-serialization-of-activerecord-models/314495 "2024-07-23T17:59:58Z")

</div>

We’ve introduced a patch to prevent the accidental serialization of ActiveRecord models without specifying the fields to be serialized. This change ensures that we control which fields are included, avoiding potential is…

---

## [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…

---

## [Using modifyClass to change core behavior](https://meta.discourse.org/t/using-modifyclass-to-change-core-behavior/262064)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 6\
**Last updated:** [March 4, 2026, 7:13am UTC](https://meta.discourse.org/t/using-modifyclass-to-change-core-behavior/262064 "2026-03-04T07:13:43Z")

</div>

For advanced themes and plugins, Discourse offers the modifyClass system. This allows you to extend and override functionality in many of core’s javascript classes. When to use modifyClass modifyClass should be a last r…

---

## [Using Plugin Outlet Connectors from a Theme or Plugin](https://meta.discourse.org/t/using-plugin-outlet-connectors-from-a-theme-or-plugin/32727)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 12\
**Last updated:** [October 14, 2024, 10:37am UTC](https://meta.discourse.org/t/using-plugin-outlet-connectors-from-a-theme-or-plugin/32727 "2024-10-14T10:37:16Z")

</div>

Discourse includes hundreds of Plugin Outlets which can be used to inject new content or replace existing contend in the Discourse UI. ‘Outlet arguments’ are made available so that content can be customized based on the …

---

## [Using the JS API](https://meta.discourse.org/t/using-the-js-api/41281)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 18\
**Last updated:** [January 30, 2026, 7:30am UTC](https://meta.discourse.org/t/using-the-js-api/41281 "2026-01-30T07:30:33Z")

</div>

Discourse’s JavaScript API allows themes and plugins to make extensive customizations to the user experience. The simplest way to use it is to create a new theme from the admin panel, click “Edit Code”, and then head to …

---

## [Converting modals from legacy controllers to new DModal component API](https://meta.discourse.org/t/converting-modals-from-legacy-controllers-to-new-dmodal-component-api/268057)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 9\
**Last updated:** [November 7, 2023, 5:05pm UTC](https://meta.discourse.org/t/converting-modals-from-legacy-controllers-to-new-dmodal-component-api/268057 "2023-11-07T17:05:46Z")

</div>

:information\_source: If you’re implementing a new Modal, check out the main docs here. This topic describes how to migrate an existing controller-based Modal to the new Component-based API. In the past, Discourse used…

---

## [Setup Continuous Integration using GitHub Actions](https://meta.discourse.org/t/setup-continuous-integration-using-github-actions/240150)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 8\
**Last updated:** [March 3, 2025, 9:12am UTC](https://meta.discourse.org/t/setup-continuous-integration-using-github-actions/240150 "2025-03-03T09:12:26Z")

</div>

:mag: Overview To build a robust extension for Discourse, it can be wise to include Continuous Integration (CI) into your plugin or theme-component. This will help to detect errors early on and lessen the chances of bugs…

---

## [Using Google's 'tachometer' to measure JS performance changes in Discourse](https://meta.discourse.org/t/using-googles-tachometer-to-measure-js-performance-changes-in-discourse/281158)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [October 5, 2023, 1:57pm UTC](https://meta.discourse.org/t/using-googles-tachometer-to-measure-js-performance-changes-in-discourse/281158 "2023-10-05T13:57:29Z")

</div>

When working on client-side work in Discourse core/plugins/themes, it’s important to consider the performance impact. Google’s ‘Tachometer’ project provides a statistically rigorous benchmarking tool which we can use to …

---

## [Ember object ownership (getOwner, service injections, etc.)](https://meta.discourse.org/t/ember-object-ownership-getowner-service-injections-etc/292080)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [January 19, 2024, 1:28pm UTC](https://meta.discourse.org/t/ember-object-ownership-getowner-service-injections-etc/292080 "2024-01-19T13:28:42Z")

</div>

:warning: Importing getOwner from discourse-common/lib/get-owner is deprecated. To access e.g. services there a couple of methods at your disposal. In components/controllers/routes you should use service injections …

---

## [Pinning plugin and theme versions for older Discourse installs (d-compat branches)](https://meta.discourse.org/t/pinning-plugin-and-theme-versions-for-older-discourse-installs-d-compat-branches/272665)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 6\
**Last updated:** [July 17, 2026, 10:56am UTC](https://meta.discourse.org/t/pinning-plugin-and-theme-versions-for-older-discourse-installs-d-compat-branches/272665 "2026-07-17T10:56:56Z")

</div>

:open\_book: Background Theme and plugin developers generally want to target the latest release of Discourse, without worrying about backwards compatibility. But sites running older Discourse releases still need a version…

---

## [How to run Discourse core, plugin and theme QUnit test suites](https://meta.discourse.org/t/how-to-run-discourse-core-plugin-and-theme-qunit-test-suites/66857)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [July 26, 2017, 2:09pm UTC](https://meta.discourse.org/t/how-to-run-discourse-core-plugin-and-theme-qunit-test-suites/66857 "2017-07-26T14:09:58Z")

</div>

Discourse has extensive frontend tests for core, plugins and themes. Once you have a functioning local development environment, those tests can be run locally in a number of different ways. Running tests in the browser C…

---

## [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…

---

## [Automatically lint and format code before commits](https://meta.discourse.org/t/automatically-lint-and-format-code-before-commits/132947)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [November 8, 2019, 5:16pm UTC](https://meta.discourse.org/t/automatically-lint-and-format-code-before-commits/132947 "2019-11-08T17:16:12Z")

</div>

Discourse uses lefthook for git hooks, and bin/lint as the main CLI entry point for running the same checks manually. If you are working in a local clone, install the hooks once: pnpm install pnpm lefthook install Aft…

---

## [Idea: Chat Posts](https://meta.discourse.org/t/idea-chat-posts/374905)

<div class="topic-metadata">

**Author:** [@Johnny\_McIvor](https://meta.discourse.org/u/Johnny_McIvor)\
**Replies:** 28\
**Last updated:** [August 31, 2026, 4:38pm UTC](https://meta.discourse.org/t/idea-chat-posts/374905 "2026-08-31T16:38:11Z")

</div>

The great thing about having a forum is that you can archive and search all of the material very easily. However, people are turned off by forums because of the lack of spontaneous exchanges. I suggest a hybrid alterna…

---

## [Skills for authoring themes and blocks](https://meta.discourse.org/t/skills-for-authoring-themes-and-blocks/401629)

<div class="topic-metadata">

**Author:** [@manuel](https://meta.discourse.org/u/manuel)\
**Replies:** 20\
**Last updated:** [August 31, 2026, 3:54pm UTC](https://meta.discourse.org/t/skills-for-authoring-themes-and-blocks/401629 "2026-08-31T15:54:08Z")

</div>

A repository of Claude Code skills for building Discourse themes and block components: https://github.com/discourse/discourse-theme-skills :toolbox: What’s included Theme Authoring Skill — covers a comprehensive scope …

---

## [Promotional material for Discourse in de\_DE (and other languages)](https://meta.discourse.org/t/promotional-material-fur-discourse-in-de-de-and-othe-languages/411037)

<div class="topic-metadata">

**Author:** [@Thomas\_Rother](https://meta.discourse.org/u/Thomas_Rother)\
**Replies:** 7\
**Last updated:** [August 31, 2026, 2:01pm UTC](https://meta.discourse.org/t/promotional-material-fur-discourse-in-de-de-and-othe-languages/411037 "2026-08-31T14:01:03Z")

</div>

I am looking for promotional material for Discourse in German. I already had a discussion with @JammyDodger concerning the video he announced in 2023 at Brand-new Discourse video! 🥳 Unfortunately there is no sep…

---

## [Discourse Newsletter Integration](https://meta.discourse.org/t/discourse-newsletter-integration/275509)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 39\
**Last updated:** [August 31, 2026, 1:35pm UTC](https://meta.discourse.org/t/discourse-newsletter-integration/275509 "2026-08-31T13:35:49Z")

</div>

:discourse2: Summary Discourse Newsletter Integration adds customizable newsletter subscription services to your instance. :hammer\_and\_wrench: Repository Link https://github.com/discourse/discourse-newsle…

---

## [Left side hamburger menu on mobile](https://meta.discourse.org/t/left-side-hamburger-menu-on-mobile/164513)

<div class="topic-metadata">

**Author:** [@featheredtoast](https://meta.discourse.org/u/featheredtoast)\
**Replies:** 51\
**Last updated:** [August 31, 2026, 12:51pm UTC](https://meta.discourse.org/t/left-side-hamburger-menu-on-mobile/164513 "2026-08-31T12:51:33Z")

</div>

One thing we never got around to and caused some confusion after our work on Full height, slide out hamburger menu was that the hamburger menu, on the right side, opens a menu from the left side. For those interested in …

---

## [API key scope to limit new topics to just one category?](https://meta.discourse.org/t/api-key-scope-to-limit-new-topics-to-just-one-category/269511)

<div class="topic-metadata">

**Author:** [@packman](https://meta.discourse.org/u/packman)\
**Replies:** 3\
**Last updated:** [August 31, 2026, 12:48pm UTC](https://meta.discourse.org/t/api-key-scope-to-limit-new-topics-to-just-one-category/269511 "2026-08-31T12:48:44Z")

</div>

Is it possible to create a granular API key that limits the key to only post in a specific category (or categories)? There’s a topic\_id parameter against the topics/write scope but I was hoping there might be a category\_…

---

## [Workspace groups](https://meta.discourse.org/t/workspace-groups/399936)

<div class="topic-metadata">

**Author:** [@Anton\_Akhmerov](https://meta.discourse.org/u/Anton_Akhmerov)\
**Replies:** 14\
**Last updated:** [August 31, 2026, 9:52am UTC](https://meta.discourse.org/t/workspace-groups/399936 "2026-08-31T09:52:31Z")

</div>

:information\_source: Summary Prototype plugin for using one Discourse server as a home for multiple teams (slack- or mattermost-like). :hammer\_and\_wrench: Repository Link GitHub - akhmerov/discourse-workspac…

---

## [Problem pasting HTML into Markdown composer on mobile (until pasting once into rich text editor)](https://meta.discourse.org/t/problem-pasting-html-into-markdown-composer-on-mobile-until-pasting-once-into-rich-text-editor/409530)

<div class="topic-metadata">

**Author:** [@sk-or-v1-contents](https://meta.discourse.org/u/sk-or-v1-contents)\
**Replies:** 4\
**Last updated:** [August 31, 2026, 9:26am UTC](https://meta.discourse.org/t/problem-pasting-html-into-markdown-composer-on-mobile-until-pasting-once-into-rich-text-editor/409530 "2026-08-31T09:26:59Z")

</div>

Priority/Severity: Moderate? Platform: Edge on Android, try.discourse.org (can reproduce in safe mode), device in vertical state Cannot reproduce if using browser’s Desktop mode. Description: On mobile, the Markdown…

[Previous page](https://meta.discourse.org/latest.md?page=12)

[Next page](https://meta.discourse.org/latest.md?page=14)
