| Summary | A self-hosted, open-source Discord alternative: turn Discourse into a channel-based community with text, voice, and forum channels. | |
| Repository | github.com/awesomerobot/concord | |
| Install Guide | How to install a theme or theme component | |
| 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.
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
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 groupssetting)
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!






