# Development

**URL:** https://meta.discourse.org/c/dev/7.md

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

---

## [Discourse GitHub commit prefix convention](https://meta.discourse.org/t/discourse-github-commit-prefix-convention/19392)

<div class="topic-metadata">

**Author:** [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Replies:** 1\
**Last updated:** [January 10, 2026, 9:37pm UTC](https://meta.discourse.org/t/discourse-github-commit-prefix-convention/19392 "2026-01-10T21:37:02Z")

</div>

For those who want to bring changes to Discourse’s code, we require that each GitHub commit have one of the following prefixes: Prefix Definition FIX A bug fix \[1\] PERF A performance improvement UX A user in…

---

## [About the Development category](https://meta.discourse.org/t/about-the-development-category/1026)

<div class="topic-metadata">

**Author:** [@Discourse](https://meta.discourse.org/u/Discourse)\
**Replies:** 0\
**Last updated:** [February 6, 2013, 8:43am UTC](https://meta.discourse.org/t/about-the-development-category/1026 "2013-02-06T08:43:41Z")

</div>

The category for all things Discourse Development. Building a customization for yourself or the community? Then this is the category for you! Learn more…

---

## [Introducing \`@discourse/update-skeleton\`](https://meta.discourse.org/t/introducing-discourse-update-skeleton/412460)

<div class="topic-metadata">

**Author:** [@david](https://meta.discourse.org/u/david)\
**Replies:** 0\
**Last updated:** [September 15, 2026, 12:05pm UTC](https://meta.discourse.org/t/introducing-discourse-update-skeleton/412460 "2026-09-15T12:05:20Z")

</div>

We just published the @discourse/update-skeleton package on npm. This can be used to easily update existing themes and plugins to use the latest recommended config files for GitHub actions and linting. To use it, open y…

---

## [Increase DEditor width to post width?](https://meta.discourse.org/t/increase-deditor-width-to-post-width/411774)

<div class="topic-metadata">

**Author:** [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)\
**Replies:** 1\
**Last updated:** [September 7, 2026, 3:00am UTC](https://meta.discourse.org/t/increase-deditor-width-to-post-width/411774 "2026-09-07T03:00:12Z")

</div>

In the post-content-cooked-html outlet, I have a Form which has a DEditor element. However, the editor element is, for some reason, tiny. Is there a CSS variable or some calculation that can be performed to get the width…

---

## [DEPRECATION NOTICE: Getting timezone property of user object is deprecated. Use user\_option object instead](https://meta.discourse.org/t/deprecation-notice-getting-timezone-property-of-user-object-is-deprecated-use-user-option-object-instead/411227)

<div class="topic-metadata">

**Author:** [@elmuerte](https://meta.discourse.org/u/elmuerte)\
**Replies:** 1\
**Last updated:** [September 6, 2026, 11:26am UTC](https://meta.discourse.org/t/deprecation-notice-getting-timezone-property-of-user-object-is-deprecated-use-user-option-object-instead/411227 "2026-09-06T11:26:02Z")

</div>

You will get this notice when you try to load the user from the store like this api.container.lookup('service:store').find('user', api.getCurrentUser().username).then((user) =\> { }); Hydrating the user form the store a…

---

## [Preset value for composer field for FormKit](https://meta.discourse.org/t/preset-value-for-composer-field-for-formkit/411695)

<div class="topic-metadata">

**Author:** [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)\
**Replies:** 1\
**Last updated:** [September 5, 2026, 5:33am UTC](https://meta.discourse.org/t/preset-value-for-composer-field-for-formkit/411695 "2026-09-05T05:33:36Z")

</div>

How can I preset a value for the composer field in FormKit? The following does not work: \<form.Field @name="content" @validation="required" @title="&nbsp;" @type="composer" @value={{this.rawPost}} as |field|…

---

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

---

## [Deprecating the user of \`user.groups\` in the \`User\` model in JavaScript](https://meta.discourse.org/t/deprecating-the-user-of-user-groups-in-the-user-model-in-javascript/411124)

<div class="topic-metadata">

**Author:** [@martin](https://meta.discourse.org/u/martin)\
**Replies:** 5\
**Last updated:** [August 31, 2026, 1:12am UTC](https://meta.discourse.org/t/deprecating-the-user-of-user-groups-in-the-user-model-in-javascript/411124 "2026-08-31T01:12:56Z")

</div>

This is related to both The road to stable, then permanent, for granular\_anonymous\_and\_logged\_in\_groups\_permissions and Granular group-based permissions for anonymous and logged in users In core as well as many themes a…

---

## [Discourse Bounce Guard plugin](https://meta.discourse.org/t/discourse-bounce-guard-plugin/411196)

<div class="topic-metadata">

**Author:** [@Overgrow](https://meta.discourse.org/u/Overgrow)\
**Replies:** 0\
**Last updated:** [August 29, 2026, 11:05am UTC](https://meta.discourse.org/t/discourse-bounce-guard-plugin/411196 "2026-08-29T11:05:30Z")

</div>

:discourse2: Summary Discourse Bounce Guard detects hard email delivery failures, stops mail to dead addresses, and can deactivate the affected user so they must verify a working address :hammer\_and\_wrench: R…

---

## [RFC: A new versioning strategy for Discourse](https://meta.discourse.org/t/rfc-a-new-versioning-strategy-for-discourse/383536)

<div class="topic-metadata">

**Author:** [@david](https://meta.discourse.org/u/david)\
**Replies:** 60\
**Last updated:** [August 28, 2026, 9:56pm UTC](https://meta.discourse.org/t/rfc-a-new-versioning-strategy-for-discourse/383536 "2026-08-28T21:56:46Z")

</div>

We’re planning to introduce a new versioning system for Discourse. Our goal is to provide more choice & predictability for community administrators, while maintaining our development velocity. We’re also adjusting some t…

---

## [🔥 Roast my Theme Component: Advanced Topic Cards](https://meta.discourse.org/t/roast-my-theme-component-advanced-topic-cards/391984)

<div class="topic-metadata">

**Author:** [@jrgong](https://meta.discourse.org/u/jrgong)\
**Replies:** 4\
**Last updated:** [August 27, 2026, 10:31am UTC](https://meta.discourse.org/t/roast-my-theme-component-advanced-topic-cards/391984 "2026-08-27T10:31:58Z")

</div>

Hey guys Disclaimer: No AI was hurt in building this theme component :smiley: Yes guys, I am guilty of shamelessly vibe-coding a rip off of the Topic Cards theme component. Hence a huge shoutout to the original autho…

---

## [How to embed a button into a Topic Post](https://meta.discourse.org/t/how-to-embed-a-button-into-a-topic-post/256473)

<div class="topic-metadata">

**Author:** [@UnitedFreedom](https://meta.discourse.org/u/UnitedFreedom)\
**Replies:** 5\
**Last updated:** [August 24, 2026, 1:16pm UTC](https://meta.discourse.org/t/how-to-embed-a-button-into-a-topic-post/256473 "2026-08-24T13:16:14Z")

</div>

Introducing the amazing embedded button - the ultimate solution for spicing up your topic posts! With just a click, you can add a whole new dimension to your content and leave your readers in awe. Plus, our embedded butt…

---

## [About standardized guidelines for theme components](https://meta.discourse.org/t/about-standardized-guidelines-for-theme-components/410741)

<div class="topic-metadata">

**Author:** [@satonotdead](https://meta.discourse.org/u/satonotdead)\
**Replies:** 4\
**Last updated:** [August 23, 2026, 11:59pm UTC](https://meta.discourse.org/t/about-standardized-guidelines-for-theme-components/410741 "2026-08-23T23:59:21Z")

</div>

I never thought I’d do this, but here I am, editing CSS and JavaScript, and creating my first simple theme and plugin components. As I’ve read before (though I wasn’t quite ready — one need a certain foundation to get s…

---

## [Recommended replacement for modifyClass("model:composer") when overriding save()](https://meta.discourse.org/t/recommended-replacement-for-modifyclass-model-composer-when-overriding-save/410125)

<div class="topic-metadata">

**Author:** [@jahan\_gagan](https://meta.discourse.org/u/jahan_gagan)\
**Replies:** 7\
**Last updated:** [August 21, 2026, 4:54pm UTC](https://meta.discourse.org/t/recommended-replacement-for-modifyclass-model-composer-when-overriding-save/410125 "2026-08-21T16:54:38Z")

</div>

I’m migrating away from the deprecated api.modifyClass("model:composer", ...). My current override of Composer#save conditionally changes the save behavior, but otherwise needs to call super.save(opts). I see the new a…

---

## [Staff SiteSerializer category\_types performs one DB query per SiteSetting in configuration schemas](https://meta.discourse.org/t/staff-siteserializer-category-types-performs-one-db-query-per-sitesetting-in-configuration-schemas/410304)

<div class="topic-metadata">

**Author:** [@Ethsim2](https://meta.discourse.org/u/Ethsim2)\
**Replies:** 1\
**Last updated:** [August 21, 2026, 11:15am UTC](https://meta.discourse.org/t/staff-siteserializer-category-types-performs-one-db-query-per-sitesetting-in-configuration-schemas/410304 "2026-08-21T11:15:24Z")

</div>

I noticed what looks like an N-per-setting query pattern while investigating initial page-load performance for staff users. On my site, an ordinary non-staff account loads /latest noticeably faster than my admin/staff a…

---

## [Building a Skeleton Layout Loader for Discourse](https://meta.discourse.org/t/building-a-skeleton-layout-loader-for-discourse/410338)

<div class="topic-metadata">

**Author:** [@Don](https://meta.discourse.org/u/Don)\
**Replies:** 0\
**Last updated:** [August 18, 2026, 2:46pm UTC](https://meta.discourse.org/t/building-a-skeleton-layout-loader-for-discourse/410338 "2026-08-18T14:46:57Z")

</div>

Hello :waving\_hand: The basic idea The goal was to build a skeleton loader that is generated from the actual Discourse UI, rather than relying on a hardcoded skeleton template. The builder lets an administrator select …

---

## [The road to stable, then permanent, for granular\_anonymous\_and\_logged\_in\_groups\_permissions](https://meta.discourse.org/t/the-road-to-stable-then-permanent-for-granular-anonymous-and-logged-in-groups-permissions/410178)

<div class="topic-metadata">

**Author:** [@martin](https://meta.discourse.org/u/martin)\
**Replies:** 0\
**Last updated:** [August 17, 2026, 5:43am UTC](https://meta.discourse.org/t/the-road-to-stable-then-permanent-for-granular-anonymous-and-logged-in-groups-permissions/410178 "2026-08-17T05:43:36Z")

</div>

This is a companion topic to Granular group-based permissions for anonymous and logged in users , and is a WIP. There are still a few places in various codebases for core, plugins, and themes that directly reference ev…

---

## [Now in Beta: Plugin to see TL3 Progress for TL2 users](https://meta.discourse.org/t/now-in-beta-plugin-to-see-tl3-progress-for-tl2-users/408543)

<div class="topic-metadata">

**Author:** [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)\
**Replies:** 31\
**Last updated:** [August 17, 2026, 1:43am UTC](https://meta.discourse.org/t/now-in-beta-plugin-to-see-tl3-progress-for-tl2-users/408543 "2026-08-17T01:43:43Z")

</div>

Hi everyone! Over the past few days, I tried my hand at Allow users to see trust level 3 progress on user profile using a plugin. Here is the current plugin: I use the amazing Gauge.js for the gauges. It used t…

---

## [Facebook-style Topic Modal - Is it better?](https://meta.discourse.org/t/facebook-style-topic-modal-is-it-better/408565)

<div class="topic-metadata">

**Author:** [@Damian\_Boon](https://meta.discourse.org/u/Damian_Boon)\
**Replies:** 31\
**Last updated:** [August 10, 2026, 7:15pm UTC](https://meta.discourse.org/t/facebook-style-topic-modal-is-it-better/408565 "2026-08-10T19:15:41Z")

</div>

I have been messing about trying to get a different look to other sites and have built a Facebook style topic modal. It seems to load quicker for me and seems to be more fluent on desktop. What are your thoughts? …

---

## [Deprecating .hbs file extension in themes and plugins](https://meta.discourse.org/t/deprecating-hbs-file-extension-in-themes-and-plugins/398896)

<div class="topic-metadata">

**Author:** [@david](https://meta.discourse.org/u/david)\
**Replies:** 20\
**Last updated:** [August 9, 2026, 6:49pm UTC](https://meta.discourse.org/t/deprecating-hbs-file-extension-in-themes-and-plugins/398896 "2026-08-09T18:49:52Z")

</div>

In the latest version of Discourse, using .hbs files in themes and plugins is deprecated. Support for this file format will be removed after the next ESR release. Handlebars templates should be replaced with the more mo…

---

## [Automating gamification points](https://meta.discourse.org/t/automating-gamification-points/409452)

<div class="topic-metadata">

**Author:** [@satonotdead](https://meta.discourse.org/u/satonotdead)\
**Replies:** 4\
**Last updated:** [August 8, 2026, 12:41am UTC](https://meta.discourse.org/t/automating-gamification-points/409452 "2026-08-08T00:41:01Z")

</div>

I am thinking about Events that will trigger specific points for those who complete them, and also extending this feature to different tasks, like ‘Share your address’ or ‘Show your pet’. I know the points can be awarde…

---

## [Tweaking patterns in email\_reply\_trimmer](https://meta.discourse.org/t/tweaking-patterns-in-email-reply-trimmer/70767)

<div class="topic-metadata">

**Author:** [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Replies:** 4\
**Last updated:** [August 6, 2026, 10:10am UTC](https://meta.discourse.org/t/tweaking-patterns-in-email-reply-trimmer/70767 "2026-08-06T10:10:09Z")

</div>

Hey, @gerhard. I’m still doing an import with a bunch of mailing lists sucked in to nabble. There are a bunch of posts that are announcements and have a line of dashes near the top, so the whole post gets truncated by …

---

## [Inject html only on one page](https://meta.discourse.org/t/inject-html-only-on-one-page/409186)

<div class="topic-metadata">

**Author:** [@Andrew\_Rowe](https://meta.discourse.org/u/Andrew_Rowe)\
**Replies:** 3\
**Last updated:** [August 4, 2026, 2:48pm UTC](https://meta.discourse.org/t/inject-html-only-on-one-page/409186 "2026-08-04T14:48:28Z")

</div>

I have something like this in my JS tab of my theme: import { apiInitializer } from "discourse/lib/api"; export default apiInitializer("0.11.1", (api) =\> { api.renderInOutlet("above-main-container", \<temp…

---

## [Can someone clarify the 'posts read' TL3 promotion logic?](https://meta.discourse.org/t/can-someone-clarify-the-posts-read-tl3-promotion-logic/409057)

<div class="topic-metadata">

**Author:** [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)\
**Replies:** 3\
**Last updated:** [August 2, 2026, 2:16am UTC](https://meta.discourse.org/t/can-someone-clarify-the-posts-read-tl3-promotion-logic/409057 "2026-08-02T02:16:30Z")

</div>

There’s this piece of code that’s been bugging me: For the life of me, I cannot figure out why the posts made in the time period is multiplied by the percentage of required posts read, then taken as the minimum value.…

---

## [New core features system specs in plugins and themes](https://meta.discourse.org/t/new-core-features-system-specs-in-plugins-and-themes/361381)

<div class="topic-metadata">

**Author:** [@loic](https://meta.discourse.org/u/loic)\
**Replies:** 5\
**Last updated:** [August 1, 2026, 4:30pm UTC](https://meta.discourse.org/t/new-core-features-system-specs-in-plugins-and-themes/361381 "2026-08-01T16:30:31Z")

</div>

We’ve just included what we call smoke specs or core features specs in both skeletons for plugins and themes. These specs ensure the plugin or the theme you’re working on doesn’t break the basic functionality of Discour…

---

## [Correct way to style the topic page](https://meta.discourse.org/t/correct-way-to-style-the-topic-page/408912)

<div class="topic-metadata">

**Author:** [@Damian\_Boon](https://meta.discourse.org/u/Damian_Boon)\
**Replies:** 4\
**Last updated:** [July 31, 2026, 8:16am UTC](https://meta.discourse.org/t/correct-way-to-style-the-topic-page/408912 "2026-07-31T08:16:09Z")

</div>

Hi guys I am trying to move these but unsure about the correct way of going about it. Is it just the case of making a component to do it? ( I use the nested topic replies)

---

## [Any way to change at what width the small logo appears?](https://meta.discourse.org/t/any-way-to-change-at-what-width-the-small-logo-appears/408767)

<div class="topic-metadata">

**Author:** [@sb56637](https://meta.discourse.org/u/sb56637)\
**Replies:** 8\
**Last updated:** [July 29, 2026, 4:58pm UTC](https://meta.discourse.org/t/any-way-to-change-at-what-width-the-small-logo-appears/408767 "2026-07-29T16:58:04Z")

</div>

Hi there, I used to inject my forum’s name as text into the header after the the logo, but it was messy to try to make it fit with all the combinations of browser widths and header content possibilities. So now I use a l…

---

## [Automatically retry after low disk space warning](https://meta.discourse.org/t/automatically-retry-after-low-disk-space-warning/408778)

<div class="topic-metadata">

**Author:** [@darkpixlz](https://meta.discourse.org/u/darkpixlz)\
**Replies:** 0\
**Last updated:** [July 28, 2026, 10:43pm UTC](https://meta.discourse.org/t/automatically-retry-after-low-disk-space-warning/408778 "2026-07-28T22:43:21Z")

</div>

Currently, when you are low on disk space and try rebuilding, the launcher script will clean up your images for you to free up space. However, the script will automatically exit afterwards: For quality of life I’ve j…

---

## [Request ESR backport: Allow granular API keys access to about.json](https://meta.discourse.org/t/request-esr-backport-allow-granular-api-keys-access-to-about-json/408619)

<div class="topic-metadata">

**Author:** [@bdfl](https://meta.discourse.org/u/bdfl)\
**Replies:** 2\
**Last updated:** [July 28, 2026, 6:14pm UTC](https://meta.discourse.org/t/request-esr-backport-allow-granular-api-keys-access-to-about-json/408619 "2026-07-28T18:14:05Z")

</div>

@supermathie @awesomerobot Following up on the closed topic API user with granular access cannot read about.json | Discourse MCP ESR users who want to use the Discourse MCP server with least-privilege security on login…

---

## [Correct way to edit CSS for light and dark modes](https://meta.discourse.org/t/correct-way-to-edit-css-for-light-and-dark-modes/408647)

<div class="topic-metadata">

**Author:** [@Damian\_Boon](https://meta.discourse.org/u/Damian_Boon)\
**Replies:** 2\
**Last updated:** [July 27, 2026, 9:33pm UTC](https://meta.discourse.org/t/correct-way-to-edit-css-for-light-and-dark-modes/408647 "2026-07-27T21:33:03Z")

</div>

I need to edit a load of CSS for light and dark modes, i have read a few posts on the forum which say there is no reliable way of doing it. including However a lot of these are old posts. Is there an easy way in 2026?…

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