Concord: a Discord-alternative theme for Discourse

:information_source: Summary A self-hosted, open-source Discord alternative: turn Discourse into a channel-based community with text, voice, and forum channels.
:hammer_and_wrench: Repository github.com/awesomerobot/concord
:question: Install Guide How to install a theme or theme component
:open_book: New to Discourse Themes? Beginner’s guide to using Discourse Themes

Install this theme

When you use Discourse to run your own independent site you can choose your policies, allow your site to be publicly viewable, and publish content to be indexed by search engines and crawlers. Plus you can extend it and restyle it however you’d like!

Concord makes everything a channel and shows all channels in a custom sidebar:

  • Categories are forum channels
  • Chat channels are text channels
  • Voice rooms (from the voice plugin) are voice channels
  • Tags can optionally be tag channels too

The custom header contains a dropdown menu with site-wide pages (about, groups, badges, admin, etc) which is next to the current channel’s name, description and actions. Direct messages live in their own view, and there’s a member list right sidebar showing who’s online.

:warning: This dramatically changes the layout of Discourse, so it won’t be compatible with every plugin or theme component. It also depends on some very recent changes in core, so make sure you’ve updated Discourse before installing it (you’ll need a build from October 15, 2026 or later).

Setting it up

Concord requires a few site setting changes, so here’s what to check in your Discourse site settings after you install it.

As an admin, you can view all these settings simultaneously by pasting this to the end of your Discourse URL:

/admin/site_settings/category/all_results?filter=any:navigation_menu|default_homepage|chat_enabled|chat_allowed_groups|enable_public_channels|voice_allowed_groups|voice_create_room_allowed_groups|enable_user_status|tagging_enabled

:information_source: Note that you need to enable voice from upcoming changes to see the relevant settings, /admin/config/upcoming-changes

Site Setting What to set it to
navigation menu sidebar (required, the channel list is the sidebar)
chat enabled enabled if you want text channels and DMs
chat allowed groups whoever should be able to chat, include anonymous_users for logged-out viewing
enable public channels enabled so staff can create text channels
voice enabled enabled if you want voice channels
voice allowed groups whoever should be able to join voice channels
voice create room allowed groups whoever should be able to create voice channels
enable user status optional, statuses show up on avatars in the user panel and header
tagging enabled optional, only needed if you turn on the theme’s include tags setting
default homepage optional, but you can now set this to a chat channel of your choosing

Creating channels

The + next to your site name opens a “create channel” modal. It only offers the channel types you’re allowed to create:

  • Forum creates a category (anyone who can create categories)
  • Text creates a chat channel (staff)
  • Voice creates a voice room (the voice create room allowed groups setting)

Each type can be made private to a set of groups. You can change this later from Privacy in the channel’s … menu from the sidebar.

In Discourse, chat channels get their permissions from a category, so each text channel you create in this theme gets an empty “backing” category, nested inside a chat-channels parent category. These categories are hidden from the channel list, so you shouldn’t need to think about them… but don’t post topics in them (regular users aren’t allowed to)! When you delete a text channel from its … sidebar menu, its backing category is deleted too.

Organizing sidebar channels

Channels can be grouped into collapsible sections. Admins can create, rename, reorder and delete sections from the … menu on a section heading, and move channels between them from the … menu on each channel. Anything not in a section is listed at the top, alphabetically.

Sections are site-wide, so everyone sees the same layout. Changes show up for other people the next time they load the page.

Theme settings

Name Description
include tags List the user’s sidebar tags as channels (off by default)
include chat channels List chat channels as text channels (on by default)
ai conversations link Show a button for AI bot conversations next to the site name, for people who can use them (requires Discourse AI with Chatbot enabled)
remember last channel Reopen the channel someone was last in when they come back to your site
chat container category Slug of the category that holds the backing categories for text channels, defaults to chat-channels
sidebar sections The sections and the channels in each, you can manage these from the sidebar, this is just where the data is stored
member list roles Groups shown as roles at the top of the member list, in order (admins and moderators by default)

Other things to note

  • Everyone sees every channel they have access to, there’s no way (yet) for people to hide individual channels from their own list. Muting a channel still works as usual for notifications.
  • Opening a text channel joins it, just like Discord. If someone leaves a channel it’ll still be listed, so muting is the better option for quieting one down.
  • Subcategories don’t get their own spot in the channel list, instead they’re shown as boxes at the top of their parent’s forum channel. The theme generally suggests a flat structure, but you can choose a parent category for a forum channel by editing it after creation.
  • Deleting a text channel from chat’s own settings page is hidden for channels with a backing category, so they’re always deleted from the channel’s … menu (which also cleans up the category). If a channel gets deleted some other way, like through the API, the backing category is left behind and you’ll want to remove it yourself.
  • Chat always opens full page, never in the drawer.
  • “Online” in the member list means active anywhere on the site in the last few minutes, not just in chat. People who hide their presence stay hidden.
  • On sites with a very large number of channels, only the first 500 text channels are loaded into the list. Similarly, a private chat channel’s member list loads its first 250 members up front, and the rest as you scroll.
  • Making a voice channel private adds the current members of the groups you pick (up to 200). People who join those groups later won’t get access automatically, since voice rooms don’t have group permissions. You’ll have to invite additional members manually.
  • If you switch away from Concord later, the backing categories for your text channels will still be there (and visible on /categories), so you may want to delete those.

There’s still so much we can do here, but this is a solid foundation if you’re looking for a Discord alternative you can self-host (or use on our paid discourse.org hosting!).

As always, feedback and thoughts are welcome!

18 Likes