Celebrating Discourse 3.2

Discourse 3.2 is complete! This release includes significant improvements to chat, new AI powered features, and many updates for admins and moderators. 

We’re making it easier to participate in meaningful conversations on the go with Discourse Chat, including an improved mobile experience. You can now see all the threads you’re following in a single place and discover new conversations to join in any channel. It’s also now effortless to start chats among small groups, and to add people and name the group chat as the conversation grows.

AI makes finding relevant conversations effortless by enhancing search and automatically surfacing related topics. Configurable AI personas enable your members to interact with the AI bot for tasks tailored to your community. Custom prompts for the AI assistant can be used for specific requests for help when writing posts. Integrations with Discourse Automation open up possibilities like automatic classification of posts and periodic summaries of activity across the community.

Along with numerous other updates to the admin section, we’ve overhauled the way permissions are managed in site settings. Admins now have greater flexibility to enable access to different features for different groups in their community.

Get a Free Trial
:hugs:
Are you interested in starting a community of your own? Start a free trial today or follow these instructions to install Discourse yourself.

Read on for more details about all the new features and updates included in this release.

Stay connected to your community with chat 

We focused on improving the reading and writing experience in chat  while expanding chat’s usefulness in your communities. We’ve also introduced improvements that will help your members participate in more meaningful conversations, without the frenetic pace common amongst other chat platforms. 

Start a discussion with a small group

Group chats let your members communicate directly with a small group of people so they can discuss a shared interest, organize around projects, or work through problems together. We’ve made it easier to start a group chat, add members to an existing group chat, and give your group chat a fun or informative name. 

        <div class="kg-video-container">
            <video src="https://blog.discourse.org/content/media/2024/03/Group-Chat.mp4" poster="https://img.spacergif.org/v1/1280x720/0a/spacer.png" width="1280" height="720" loop="" autoplay="" muted="" playsinline="" preload="metadata" style="background: transparent url('https://blog.discourse.org/content/media/2024/03/Group-Chat_thumb.jpg') 50% 50% / cover no-repeat;"></video>
            <div class="kg-video-overlay">
                <button class="kg-video-large-play-icon" aria-label="Play video">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                        <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                    </svg>
                </button>
            </div>
            <div class="kg-video-player-container kg-video-hide">
                <div class="kg-video-player">
                    <button class="kg-video-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                        </svg>
                    </button>
                    <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                            <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                        </svg>
                    </button>
                    <span class="kg-video-current-time">0:00</span>
                    <div class="kg-video-time">
                        /<span class="kg-video-duration">0:24</span>
                    </div>
                    <input type="range" class="kg-video-seek-slider" max="100" value="0">
                    <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1×</button>
                    <button class="kg-video-unmute-icon" aria-label="Unmute">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"></path>
                        </svg>
                    </button>
                    <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"></path>
                        </svg>
                    </button>
                    <input type="range" class="kg-video-volume-slider" max="100" value="100">
                </div>
            </div>
        </div>
        
    </figure><h3 id="keep-up-with-ongoing-conversations-and-discover-new-ones">Keep up with ongoing conversations and discover new ones</h3><p>With the advent of chat threads, conversations are happening in more places. We’ve introduced the “My Threads'' area to make it quick and easy for members to keep up with ongoing conversations — no more hunting around to find the channel where a thread began! Additionally, we're tackling the FOMO by letting members view all active threads — even ones they haven't participated in — through the channel's thread panel.&nbsp;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.discourse.org/content/images/2024/01/Chat-Threads.png" class="kg-image" alt="Celebrating Discourse 3.2" loading="lazy" width="1920" height="1135" srcset="https://blog.discourse.org/content/images/size/w600/2024/01/Chat-Threads.png 600w, https://blog.discourse.org/content/images/size/w1000/2024/01/Chat-Threads.png 1000w, https://blog.discourse.org/content/images/size/w1600/2024/01/Chat-Threads.png 1600w, https://blog.discourse.org/content/images/2024/01/Chat-Threads.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h3 id="participate-in-community-wherever-you-are">Participate in community, wherever you are</h3><p>The mobile experience has been a major focus for the chat team, since the synchronous, faster pace of chat means it's more important to stay connected. Community members want to be able to stay involved even when they're on the go. We've improved the mobile interface with cleaner navigation between channels, threads, and DMs, as well as from within a thread to the main channel and from chat to the forum itself. These seemingly small changes add up to a smoother, more enjoyable mobile experience for your community.&nbsp;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.discourse.org/content/images/2024/01/Chat-Mobile.png" class="kg-image" alt="Celebrating Discourse 3.2" loading="lazy" width="1920" height="1135" srcset="https://blog.discourse.org/content/images/size/w600/2024/01/Chat-Mobile.png 600w, https://blog.discourse.org/content/images/size/w1000/2024/01/Chat-Mobile.png 1000w, https://blog.discourse.org/content/images/size/w1600/2024/01/Chat-Mobile.png 1600w, https://blog.discourse.org/content/images/2024/01/Chat-Mobile.png 1920w" sizes="(min-width: 1200px) 1200px"></figure><h3 id="other-small-but-mighty-chat-improvements">Other small but mighty chat improvements	</h3><ul><li>Chat threads now display images in oneboxes for a cleaner, more consistent look.</li><li>Chats now have an editing grace period so you can quickly fix typos without getting the dreaded (edited) tag.</li><li>Members can change their chat preferences to only show a header notification for @mentions, for more granular control over potential interruptions.&nbsp;</li><li><a href="https://meta.discourse.org/t/enable-automatic-titles-for-chat-threads/285004?ref=blog.discourse.org"><u>Chat threads titles</u></a> can automatically be generated by Discourse AI to make it easier for members to understand what’s happening inside the thread.</li></ul><h2 id="new-in-discourse-ai-%E2%9C%A8">New in Discourse AI ✨&nbsp;</h2><p>Since the launch of <a href="https://blog.discourse.org/2023/04/introducing-discourse-ai/"><u>Discourse AI</u></a>, we’ve added even more features to improve the community experience.&nbsp;</p><h3 id="ai-bot-with-a-personality">AI Bot with a personality&nbsp;&nbsp;&nbsp;</h3><figure class="kg-card kg-video-card kg-width-wide" data-kg-thumbnail="https://blog.discourse.org/content/media/2024/03/AI-Bot_thumb.jpg" data-kg-custom-thumbnail="">
        <div class="kg-video-container">
            <video src="https://blog.discourse.org/content/media/2024/03/AI-Bot.mp4" poster="https://img.spacergif.org/v1/800x452/0a/spacer.png" width="800" height="452" loop="" autoplay="" muted="" playsinline="" preload="metadata" style="background: transparent url('https://blog.discourse.org/content/media/2024/03/AI-Bot_thumb.jpg') 50% 50% / cover no-repeat;"></video>
            <div class="kg-video-overlay">
                <button class="kg-video-large-play-icon" aria-label="Play video">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                        <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                    </svg>
                </button>
            </div>
            <div class="kg-video-player-container kg-video-hide">
                <div class="kg-video-player">
                    <button class="kg-video-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                        </svg>
                    </button>
                    <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                            <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                        </svg>
                    </button>
                    <span class="kg-video-current-time">0:00</span>
                    <div class="kg-video-time">
                        /<span class="kg-video-duration">0:45</span>
                    </div>
                    <input type="range" class="kg-video-seek-slider" max="100" value="0">
                    <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1×</button>
                    <button class="kg-video-unmute-icon" aria-label="Unmute">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"></path>
                        </svg>
                    </button>
                    <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"></path>
                        </svg>
                    </button>
                    <input type="range" class="kg-video-volume-slider" max="100" value="100">
                </div>
            </div>
        </div>
        
    </figure><p>Community members can now chat with <a href="https://meta.discourse.org/t/enable-ai-bot/266012?ref=blog.discourse.org"><u>several built-in AI personas</u></a> tailored to different needs, including the forum helper which is designed to surface content from within your community. You can also <a href="https://meta.discourse.org/t/new-ai-persona-editor-for-discourse/286271?ref=blog.discourse.org"><u>create your own personas</u></a> to suit the specific needs of your community and organization.</p><h3 id="smarter-search">Smarter search</h3><figure class="kg-card kg-video-card kg-width-wide" data-kg-thumbnail="https://blog.discourse.org/content/media/2024/03/AI-Smarter-Search_thumb.jpg" data-kg-custom-thumbnail="">
        <div class="kg-video-container">
            <video src="https://blog.discourse.org/content/media/2024/03/AI-Smarter-Search.mp4" poster="https://img.spacergif.org/v1/847x480/0a/spacer.png" width="847" height="480" loop="" autoplay="" muted="" playsinline="" preload="metadata" style="background: transparent url('https://blog.discourse.org/content/media/2024/03/AI-Smarter-Search_thumb.jpg') 50% 50% / cover no-repeat;"></video>
            <div class="kg-video-overlay">
                <button class="kg-video-large-play-icon" aria-label="Play video">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                        <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                    </svg>
                </button>
            </div>
            <div class="kg-video-player-container kg-video-hide">
                <div class="kg-video-player">
                    <button class="kg-video-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                        </svg>
                    </button>
                    <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                            <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                        </svg>
                    </button>
                    <span class="kg-video-current-time">0:00</span>
                    <div class="kg-video-time">
                        /<span class="kg-video-duration">0:16</span>
                    </div>
                    <input type="range" class="kg-video-seek-slider" max="100" value="0">
                    <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1×</button>
                    <button class="kg-video-unmute-icon" aria-label="Unmute">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"></path>
                        </svg>
                    </button>
                    <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"></path>
                        </svg>
                    </button>
                    <input type="range" class="kg-video-volume-slider" max="100" value="100">
                </div>
            </div>
        </div>
        
    </figure><p><a href="https://meta.discourse.org/t/enable-ai-search/282420?ref=blog.discourse.org"><u>AI Search</u></a> now surfaces the most relevant answers and results using its ability to understand your question instead of just matching keywords.</p><h3 id="your-own-ai-assistant">Your own AI assistant</h3><figure class="kg-card kg-video-card kg-width-wide" data-kg-thumbnail="https://blog.discourse.org/content/media/2024/03/AI-Helper_thumb.jpg" data-kg-custom-thumbnail="">
        <div class="kg-video-container">
            <video src="https://blog.discourse.org/content/media/2024/03/AI-Helper.mp4" poster="https://img.spacergif.org/v1/847x480/0a/spacer.png" width="847" height="480" loop="" autoplay="" muted="" playsinline="" preload="metadata" style="background: transparent url('https://blog.discourse.org/content/media/2024/03/AI-Helper_thumb.jpg') 50% 50% / cover no-repeat;"></video>
            <div class="kg-video-overlay">
                <button class="kg-video-large-play-icon" aria-label="Play video">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                        <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                    </svg>
                </button>
            </div>
            <div class="kg-video-player-container kg-video-hide">
                <div class="kg-video-player">
                    <button class="kg-video-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                        </svg>
                    </button>
                    <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                            <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                        </svg>
                    </button>
                    <span class="kg-video-current-time">0:00</span>
                    <div class="kg-video-time">
                        /<span class="kg-video-duration">0:16</span>
                    </div>
                    <input type="range" class="kg-video-seek-slider" max="100" value="0">
                    <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1×</button>
                    <button class="kg-video-unmute-icon" aria-label="Unmute">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"></path>
                        </svg>
                    </button>
                    <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"></path>
                        </svg>
                    </button>
                    <input type="range" class="kg-video-volume-slider" max="100" value="100">
                </div>
            </div>
        </div>
        
    </figure><p><a href="https://meta.discourse.org/t/enable-ai-helper/283943?ref=blog.discourse.org"><u>AI Helper</u></a> can now assist you as you read. We’ve included buttons for help with translation, explanation, and proofreading. You can even ask the bot for anything else you need by highlighting text and asking for help in your own words.</p><h3 id="everything-else-ai">Everything else AI</h3><ul><li>Add <a href="https://meta.discourse.org/t/enable-sentiment-analysis/259599?ref=blog.discourse.org"><u>Sentiment Analysis</u></a> to your admin reports, and view the evolution of community sentiment over time.</li><li>Use AI with Discourse Automation&nbsp; to manage the process of classifying posts automatically though <a href="https://meta.discourse.org/t/discourse-ai-post-classifier-automation-rule/281227?ref=blog.discourse.org"><u>Discourse AI Post Classifier</u></a> or to get <a href="https://meta.discourse.org/t/introducing-periodic-summary-reports-using-ai-on-discourse/290236?ref=blog.discourse.org"><u>periodic summary reports</u></a> to understand high-level forum activity.</li><li><a href="https://meta.discourse.org/t/introducing-post-illustrations-enhance-your-discourse-content-with-ai-generated-thumbnails/290870?ref=blog.discourse.org"><u>Generate Images</u></a> to represent your posts!</li><li>Choose your own AI provider with a growing set of open source and proprietary options for LLMs and Embeddings.</li></ul><h2 id="admins-and-moderators-get-some-love">Admins and moderators get some love&nbsp;</h2><p>We improved the admin experience to make sure the wide array of Discourse features are discoverable and easy to configure for your community.</p><h3 id="new-%E2%80%9Cwhat%E2%80%99s-new%E2%80%9D-page">New “What’s new” page&nbsp;</h3><figure class="kg-card kg-video-card kg-width-wide" data-kg-thumbnail="https://blog.discourse.org/content/media/2024/03/Whats-New1_thumb.jpg" data-kg-custom-thumbnail="">
        <div class="kg-video-container">
            <video src="https://blog.discourse.org/content/media/2024/03/Whats-New1.mp4" poster="https://img.spacergif.org/v1/846x504/0a/spacer.png" width="846" height="504" loop="" autoplay="" muted="" playsinline="" preload="metadata" style="background: transparent url('https://blog.discourse.org/content/media/2024/03/Whats-New1_thumb.jpg') 50% 50% / cover no-repeat;"></video>
            <div class="kg-video-overlay">
                <button class="kg-video-large-play-icon" aria-label="Play video">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                        <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                    </svg>
                </button>
            </div>
            <div class="kg-video-player-container kg-video-hide">
                <div class="kg-video-player">
                    <button class="kg-video-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"></path>
                        </svg>
                    </button>
                    <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                            <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"></rect>
                        </svg>
                    </button>
                    <span class="kg-video-current-time">0:00</span>
                    <div class="kg-video-time">
                        /<span class="kg-video-duration">0:13</span>
                    </div>
                    <input type="range" class="kg-video-seek-slider" max="100" value="0">
                    <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1×</button>
                    <button class="kg-video-unmute-icon" aria-label="Unmute">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"></path>
                        </svg>
                    </button>
                    <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                            <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"></path>
                        </svg>
                    </button>
                    <input type="range" class="kg-video-volume-slider" max="100" value="100">
                </div>
            </div>
        </div>
        
    </figure><p>Stay on top of updates to Discourse with the newly created “What’s New” page including screenshots and links to documentation. We will now alert you with a 🎁notification when there are new features.&nbsp;&nbsp;</p><h3 id="more-flexible-access-permissions">More flexible access permissions</h3><p>We’ve made access permissions more flexible so you can grant access to individual features to any number of groups.</p><p>Previously permissions could only be granted to moderators, admins, or by trust level. You can now use Discourse groups to granularly decide who has access to a wide range of important features and privileges. As an example, this allows you to give members access to shared drafts, without making them moderators.&nbsp; <a href="https://meta.discourse.org/t/changes-coming-to-settings-for-giving-access-to-features-from-trust-levels-to-groups/283408?ref=blog.discourse.org"><u>Learn more</u></a></p><h2 id="quick-and-safe-login-using-passkeys"><strong>Quick and safe login using passkeys</strong></h2><p>Passkeys authentication is a quick, safe and convenient alternative to traditional passwords, and it is now supported in Discourse. To use it, site members register a passkey in their User Preferences &gt; Security screen. Once that’s done, they can use their passkey to log in (and their browser will automatically suggest the passkey as a way to log in). <a href="https://meta.discourse.org/t/passwordless-login-using-passkeys/285589?ref=blog.discourse.org"><u>Learn more</u></a></p><h2 id="additional-admin-improvements"><strong>Additional admin improvements</strong></h2><ul><li>We’ve improved the layout of the plugins page, providing better information about each plugin, and indicating which plugins are experimental or contributed by the community. Plugins now link directly to documentation.&nbsp;</li><li>We’ve made managing themes and theme components more user-friendly. When more than ten are installed, you can now filter the list by status and select and remove those you don’t need anymore.&nbsp;</li><li>We’ve made it easier for you to set up the different kinds of file uploads that you want to allow for your staff and regular members. You can now select images, videos, audio and documents, and common extensions for each type will be added for you.&nbsp;</li><li>Tags are a great way to organize and bring together related discussions. However, when unused tags pile up they become a distraction. Now unused tags will be removed in a daily task.</li><li>We are taking steps to revamp Discourse's powerful admin area. As a first step we are leveraging the sidebar to replace the top-menu navigation. <a href="https://meta.discourse.org/t/introducing-experimental-admin-sidebar-navigation/289281?ref=blog.discourse.org"><u>Learn more</u></a></li></ul><h2 id="a-better-developer-experience">A better developer experience</h2><p>We’re continuing to invest heavily in improving the developer experience for extending Discourse with themes and plugins or making other contributions.</p><p>Discourse 3.2 now runs with <a href="https://meta.discourse.org/t/preparing-for-discourses-upgrade-to-ember-5/287211?ref=blog.discourse.org"><u>Ember 5 by default</u></a>, enabling developers and designers to use the latest patterns available in the front end JavaScript framework that Discourse is built upon. <a href="https://meta.discourse.org/t/end-to-end-system-testing-for-themes-and-theme-components/281579?ref=blog.discourse.org"><u>Themes now support running system tests</u></a> locally and in CI to ensure that extensions continue working as intended when new features are added or the underlying core product or other dependencies are updated. And <a href="https://meta.discourse.org/t/migrate-discourse-theme-settings/287783?ref=blog.discourse.org"><u>theme settings can now be updated via migrations</u></a> so developers can more easily improve the user experience for configuring their themes over time.</p><h2 id="%F0%9F%93%9D-full-changelog">📝 Full Changelog</h2><p>Every Discourse release is loaded with fun and useful enhancements; and 3.2 brings so much more than what we shared above. Grab some 🍿and head over to view the <a href="https://meta.discourse.org/tags/release-notes?ref=blog.discourse.org"><u>release-notes tag</u></a> to get a detailed account of changes in every beta leading up to this release – or see the <a href="https://meta.discourse.org/t/discourse-version-3-2/278584?ref=blog.discourse.org"><u>full release notes</u></a>.</p><h2 id="upgrade-in-one-click-as-usual-%F0%9F%98%89">Upgrade (in one click as usual 😉)</h2><p>If you are<a href="https://discourse.org/buy?ref=blog.discourse.org"> <u>on our hosting</u></a>, you’re already on 3.2! Otherwise, upgrading is as easy as clicking the Update button linked from your Discourse admin page or by following the email we send reminding you to upgrade.&nbsp;</p><p>As a part of our<a href="https://github.com/discourse/discourse/blob/master/docs/SECURITY.md?ref=blog.discourse.org"> <u>security policy</u></a>, we run a<a href="https://hackerone.com/discourse?ref=blog.discourse.org"> <u>public exploit bounty program at Hacker One</u></a> to strengthen our goal to make every Discourse site secure by default. If any security issues are reported to us, we prioritize them and investigate thoroughly.&nbsp;</p><p>If you’ve made it this far and don’t have a Discourse to upgrade, why not?<a href="https://blog.discourse.org/2014/04/install-discourse-in-under-30-minutes/"> <u>Install it yourself</u></a> in under 30 minutes, or<a href="https://discourse.org/buy?ref=blog.discourse.org"> <strong><u>start an absolutely free, no strings attached 14-day hosting trial today!</u></strong></a></p><div class="kg-card kg-button-card kg-align-center"><a href="https://www.discourse.org/pricing?ref=blog.discourse.org" class="kg-btn kg-btn-accent">Get a Free Trial</a></div><h3 id="thank-you"><strong>Thank You</strong></h3><p>To celebrate this release, we’d like to thank<a href="https://www.discourse.org/customers?ref=blog.discourse.org"> <u>our customers</u></a>. It’s because of your direct financial support that this project exists and is available to everyone; and we’re honored to partner on this open source project that, we hope, makes days for your team just a little bit brighter, in any way.&nbsp;</p><p>Discourse relies on (awesome) outside contributors to be a healthy, functioning open source project! Our sincerest thanks for code contributions in this release from:</p><p><a href="https://github.com/chancancode?ref=blog.discourse.org">chancancode</a>, <a href="https://github.com/angusmcleod?ref=blog.discourse.org">angusmcleod</a>, <a href="https://github.com/Arkshine?ref=blog.discourse.org">Arkshine</a>, <a href="https://github.com/rr-it?ref=blog.discourse.org">rr-it</a>, <a href="https://github.com/byroot?ref=blog.discourse.org">byroot</a>, <a href="https://github.com/PhilippRenner?ref=blog.discourse.org">PhilippRenner</a>, <a href="https://github.com/Canapin?ref=blog.discourse.org">Canapin</a>, <a href="https://github.com/scossar?ref=blog.discourse.org">scossar</a>, <a href="https://github.com/kemitchell?ref=blog.discourse.org">kemitchell</a>, <a href="https://github.com/ikaronen-relex?ref=blog.discourse.org">ikaronen-relex</a>, <a href="https://github.com/KThompson-Lane-Unity?ref=blog.discourse.org">KThompson-Lane-Unity</a>, <a href="https://github.com/yvanzo?ref=blog.discourse.org">yvanzo</a>, <a href="https://github.com/wagner-intevation?ref=blog.discourse.org">wagner-intevation</a>, <a href="https://github.com/tvavrda?ref=blog.discourse.org">tvavrda</a>, <a href="https://github.com/suec78?ref=blog.discourse.org">suec78</a>, <a href="https://github.com/snikch?ref=blog.discourse.org">snikch</a>, <a href="https://github.com/smileBeda?ref=blog.discourse.org">smileBeda</a>, <a href="https://github.com/romanblanco?ref=blog.discourse.org">romanblanco</a>, <a href="https://github.com/pierotofy?ref=blog.discourse.org">pierotofy</a>, <a href="https://github.com/pcallewaert?ref=blog.discourse.org">pcallewaert</a>, <a href="https://github.com/pangbo13?ref=blog.discourse.org">pangbo13</a>, <a href="https://github.com/notz?ref=blog.discourse.org">notz</a>, <a href="https://github.com/nathan-nz?ref=blog.discourse.org">nathan-nz</a>, <a href="https://github.com/michaelshmitty?ref=blog.discourse.org">michaelshmitty</a>, <a href="https://github.com/merefield?ref=blog.discourse.org">merefield</a>, <a href="https://github.com/mdoggydog?ref=blog.discourse.org">mdoggydog</a>, <a href="https://github.com/matiasgarciaisaia?ref=blog.discourse.org">matiasgarciaisaia</a>, <a href="https://github.com/kinduff?ref=blog.discourse.org">kinduff</a>, <a href="https://github.com/karthikb351?ref=blog.discourse.org">karthikb351</a>, <a href="https://github.com/inducer?ref=blog.discourse.org">inducer</a>, <a href="https://github.com/ember-tomster?ref=blog.discourse.org">ember-tomster</a>, <a href="https://github.com/curiousdannii?ref=blog.discourse.org">curiousdannii</a>, <a href="https://github.com/communiteq?ref=blog.discourse.org">communiteq</a>, <a href="https://github.com/billythekid?ref=blog.discourse.org">billythekid</a>, <a href="https://github.com/arturo-seijas?ref=blog.discourse.org">arturo-seijas</a>, <a href="https://github.com/alex-tee?ref=blog.discourse.org">alex-tee</a>, <a href="https://github.com/agilov?ref=blog.discourse.org">agilov</a>, <a href="https://github.com/Yaminyam?ref=blog.discourse.org">Yaminyam</a>, <a href="https://github.com/MichaIng?ref=blog.discourse.org">MichaIng</a>, <a href="https://github.com/Kyle-Ye?ref=blog.discourse.org">Kyle-Ye</a>, <a href="https://github.com/Intrepidd?ref=blog.discourse.org">Intrepidd</a>, <a href="https://github.com/IgnaceMaes?ref=blog.discourse.org">IgnaceMaes</a>, <a href="https://github.com/HeroicEric?ref=blog.discourse.org">HeroicEric</a>, <a href="https://github.com/DukeManh?ref=blog.discourse.org">DukeManh</a>, <a href="https://github.com/DoomDesign?ref=blog.discourse.org">DoomDesign</a>, <a href="https://github.com/BigEd?ref=blog.discourse.org">BigEd</a>, <a href="https://github.com/BettyJJ?ref=blog.discourse.org">BettyJJ</a>, <a href="https://github.com/Benjamin-Loison?ref=blog.discourse.org">Benjamin-Loison</a>, <a href="https://github.com/3-w-c?ref=blog.discourse.org">3-w-c</a></p><p>Huge thanks to our<a href="https://meta.discourse.org/t/thanks-to-our-2023-translators/273341?ref=blog.discourse.org"><u> translators</u></a> who generously contributed their time, effort and love to<a href="https://meta.discourse.org/t/contribute-a-translation-to-discourse/14882?ref=blog.discourse.org"> <u>translate Discourse</u></a> into numerous languages for this release. We pay professional translators on top of volunteer efforts to make sure all our translations are of the highest quality and that Discourse is more accessible with every step forward.</p><p>We’ve come so far since<a href="https://blog.discourse.org/2014/08/introducing-discourse-1-0/"> <u>version 1.0 in 2014</u></a>, and yet there are still so many features and improvements we’re excited to get to! To see what’s coming for future versions of Discourse, visit the<a href="https://meta.discourse.org/c/releases?ref=blog.discourse.org"> <u>releases category</u></a> — we’ll get there together! 👋</p>

这是一个从 https://blog.discourse.org/2024/01/celebrating-discourse-3-2/ 下的原始话题分离的讨论话题