• Nov. 26, 2024, 10:25 p.m.

    I've decided to post new progress update for Misago 0.40 since previous one was almost half a year ago.

    What is Misago 0.40?

    Misago 0.40 is next feature release that will bring rewrite of threads list, thread pages, posting and editing flows, messages editor, posts and attachments, permission system, moderation tools, message parser, read content tracker, forum search, account settings, users lists, profile pages and user signatures. It will also greatly raise number of plugin hooks available to the developers (85 at the time of writing).

    It will also remove React.js from those pages, making them MUCH easier to customize for Django developers using Misago to run their communities.

    When will Misago 0.40 be released?

    Sometime late in 2025. No promises or anything but judging by current pace, November is most optimistic deadline, but I wouldn't be surprised if I miss it and only release after new year of 2026.

    What's the progress?

    Most of foundational work for Misago 0.40 release has been completed. New permissions system is in place, new message parser is almost ready, a lot of logic previously limited to React.js has been moved to Django views with remaining making a small set of JavaScript utilities. "Forum options" section has been replaced with new "accounts settings" page. New threads list is missing only moderation tools. Thread pages display lists of posts, allow editing of posts or posting replies via quick reply. There is also a new process for posting new threads, and there is an option to reply to thread or edit post via separate page, for users without JS.

    What’s left

    • New message parser
    • Threads features:
      • Attachments (done in February 2025)
      • Message parser (done in June 2025)
      • Quote reply
      • Select to quote (done in May 2025)
      • Reply to post
      • Polls
      • Manage private threads members
      • Thread updates (done in July 2025)
      • Message editor (done in February 2025)
      • Likes
      • Edits history
      • Select post as solution
      • Watch/un watch thread
      • Templates: thread header and post
      • Moderation
    • New forum search
    • Rewrite users lists to don't use React.js, use new permissions system and user groups instead of roles
    • Rewrite and redesign "active users" page
    • Rewrite and redesign user profile pages
    • Add user signatures
    • Add breadcrumbs to pages missing them
    • Add metatags for search engines and social sites to pages missing them

    Speaking from knowledge of Misago's codebase, I am expecting first two positions on the list to make the 80% of work left to do.

    Wrapping up

    While scope of changes remains large, I am making a steady progress, constantly removing things from the todo list and while I am not happy with 0.40 taking so long to ship, I am optimistic that Misago's users will find all the improvements to the project making it worth the wait.

    Cheers!

  • Nov. 26, 2024, 10:29 p.m.

    I am leaving this thread open for people to discuss. I will also post future small updates to whats happening in 0.40 here for those who don't want to follow GitHub and my Discord spam for news.

  • Jan. 5, 2025, 1:32 p.m.

    Just two screenshots of Misago 0.40 running this forums database:

    Zrzut ekranu 2025-01-5 o 13.30.00.png

    Zrzut ekranu 2025-01-5 o 13.32.06.png

    Please note that thread view is still very much work in progress.

    Zrzut ekranu 2025-01-5 o 13.32.06.png

    PNG, 323.5 KB, uploaded by rafalp on Jan. 5, 2025.

    Zrzut ekranu 2025-01-5 o 13.30.00.png

    PNG, 449.2 KB, uploaded by rafalp on Jan. 5, 2025.

  • Feb. 25, 2025, 8:37 p.m.

    I was thinking about making those progress updates a quarterly thing, but I'll post an update on every large milestone instead.

    Attachments update

    95% of Misago's attachments feature has been rewritten from scratch for the 0.40 release. The remaining 5% consists of the old attachments model code, which served as the basis for the new model, and the attachments list in the admin panel, which was updated to work with the new model. But don't worry—your old attachment data will be automatically migrated to the new database table during the update.

    New editor

    The first step on the attachments journey is the message editor. Misago 0.40 completely transforms the posting experience, bringing it in line with popular forum solutions like Invision Community and XenForo. This includes a new attachments UI:

    misago-editor-attachments.png

    Uploaded files appear below the upload message:

    misago-editor-uploaded-attachments.png

    A fallback upload method is available for users without JavaScript:

    misago-editor-attachments-noscript.png

    Misago 0.40 introduces a new syntax for embedding attachments in posts:

    <attachment=readme.md:1215>
    

    This new syntax is much clearer than the current one. It is also supported by the editing actions. The editor is also context-aware: pasting files into the text field or dragging them onto it will automatically insert <attachment> entries for those attachments. Deleting an attachment will also remove the correct <attachment> tag from the text field.

    Attachments in posts

    Embedded images are displayed in posts:

    misago-post-with-attachment.png

    Regular files:

    misago-post-with-files.png

    New in Misago 0.40: MP4 and WebM videos are now supported:

    misago-post-with-video.png

    Please note that there is no video streaming feature in Misago 0.40. For large videos, users should upload files to a video site like YouTube or Vimeo, or use a plugin for a third-party service like CloudFront video streaming.

    Embedded attachments are no longer displayed under the post's body, reducing clutter:

    misago-post-with-attachments-list.png

    Posted media is now opened in a lightbox instead of a separate tab:

    misago-lightbox.png

    Attachments also have dedicated 'details' pages that do not require JavaScript to access:

    misago-attachment-details-page.png

    Browsing your attachments

    Forum members can now use the dedicated "Your Attachments" page in account settings to view (and delete) all their attachments and see how much attachment storage they have left for new files.

    misago-attachment-settings.png

    Attachment servers

    Misago 0.40 introduces configurable attachment servers. These "servers" are functions that implement the attachment serving logic. For sites running behind NGINX, Misago includes the X-Accel-Redirect server, which uses NGINX's reverse proxy to serve attachments while keeping their /media/ locations hidden from the users, improving security. All misago-docker sites will use this feature once Misago 0.40 is released.

    misago-attachment-settings.png

    PNG, 378.0 KB, uploaded by rafalp on Feb. 25, 2025.

    misago-attachment-details-page.png

    PNG, 2.2 MB, uploaded by rafalp on Feb. 25, 2025.

    misago-lightbox.png

    PNG, 2.0 MB, uploaded by rafalp on Feb. 25, 2025.

    misago-post-with-attachments-list.png

    PNG, 216.7 KB, uploaded by rafalp on Feb. 25, 2025.

    misago-post-with-video.png

    PNG, 874.6 KB, uploaded by rafalp on Feb. 25, 2025.

    misago-post-with-files.png

    PNG, 208.6 KB, uploaded by rafalp on Feb. 25, 2025.

    misago-post-with-attachment.png

    PNG, 940.0 KB, uploaded by rafalp on Feb. 25, 2025.

    misago-editor-attachments-noscript.png

    PNG, 85.4 KB, uploaded by rafalp on Feb. 25, 2025.

    misago-editor-uploaded-attachments.png

    PNG, 533.2 KB, uploaded by rafalp on Feb. 25, 2025.

    misago-editor-attachments.png

    PNG, 83.5 KB, uploaded by rafalp on Feb. 25, 2025.

  • June 3, 2025, 11:04 p.m.

    I've finished work on the new message parser for Misago 0.40, so...

    Messages update

    Currently, Misago uses the library named Python Markdown for parsing messages, but this library has some problems:

    • It's not compliant with the CommonMark standard.
    • It has a dependency on a third-party library called Beautiful Soup for some features.
    • It parses markup directly to HTML, making it tricky to run additional steps against user messages.
    • Its design is not very plugin-friendly for third-party developers.

    I've really wanted to replace it with something else. While working on the abandoned v4 GraphQL rewrite, I used another library named Mistune for parsing messages. This library was great because it parsed them into an abstract syntax tree ("AST"), which could then be converted into either HTML or plain text for the search engine. It was also a breeze to manipulate this AST from plugins to do things like count outgoing links in user-posted messages or replace YouTube links with video players. Since then, this library has developed in a direction that made it unsuitable for Misago's use.

    After that, I attempted to implement my own message parser. While I made significant progress, even a year after its implementation, I kept running into bugs and issues that freaked me out and eventually made me lose confidence in it.

    Eventually, I decided to change the message parser one more time—to a Python port of the markdown-it library, named markdown-it-py.

    This parser has a bunch of advantages:

    • It's relatively stable and battle-tested.
    • CommonMark compliant.
    • Configurable, with presets that fit Misago's use.
    • Represents parsed documents as a "token stream," which is very similar to AST.
    • Friendly for plugin developers.

    Work on the new message parser for Misago 0.40 using this library is now complete. Let's share the good stuff!

    New parser process

    Misago 0.40 uses a multi-step process for parsing messages. First, the original message is converted into a "token stream," which represents the structure of the parsed document. Next, this token stream is processed in several steps, like replacing YouTube links with video players. It is then scanned for metadata and converted into an HTML representation (that others see when browsing the site) and a search document (used by the search engine).

    After being posted, a "second pass" is run against the parsed message to perform additional operations that are too slow to run during the original posting process, like syntax highlighting code blocks or (in the future) expanding posted links.

    Plugins have access to the document at every step. If you want to implement a custom limit of outgoing links new users can post, you can write a plugin that counts link tokens and raises a validation error. If you want custom or extra HTML in the parsing result, or want to swap some words in search documents, that’s also possible.

    Better quotes

    Misago 0.40 introduces new quotes, which are aware of which post they apply to and whether that post belongs to the current thread.

    Here's a quote of an earlier post in the same thread:

    Zrzut ekranu 2025-06-3 o 22.25.37.png

    Here's the same post quoted in another thread:

    Zrzut ekranu 2025-06-3 o 22.27.31.png

    And here's the same quote viewed by a user without permission to access the original thread:

    Zrzut ekranu 2025-06-3 o 22.29.39.png

    Quotes can still be used for other content and have custom titles:

    Zrzut ekranu 2025-06-3 o 22.38.52.png

    Code blocks

    Code blocks now include a "copy" button to enable quick copying of their contents:

    Zrzut ekranu 2025-06-3 o 22.41.22.png

    Misago 0.40 uses Python's Pygments library for code highlighting. The Highlight.js library has been removed, improving load times, performance, and battery usage for mobile clients.

    Code blocks also support custom labels, so you can describe what code is being shared instead of relying on the post body.

    Spoilers

    Spoilers have been redesigned too, now using semantic HTML markup, making them work without JavaScript and with assistive technologies:

    Zrzut ekranu 2025-06-3 o 22.46.54.png

    Zrzut ekranu 2025-06-3 o 22.47.52.png

    Tables

    Misago 0.40 adds out-of-the-box support for tables:

    Zrzut ekranu 2025-06-3 o 22.49.02.png

    Tables can be posted, quoted, and are responsive so they don't break the layout on small displays. Markdown can also be used inside their cells.

    Quote selection

    The quote selection feature has been rewritten from scratch. It produces 1:1 markup for the selection, and in addition to inserting a quote into the quick reply form, it also allows you to copy the quote if you want to start a new thread or are working on a more complex message. It also works on iOS and Android.

    Zrzut ekranu 2025-06-3 o 22.51.03.png

    Zrzut ekranu 2025-06-3 o 22.51.03.png

    PNG, 29.3 KB, uploaded by rafalp on June 3, 2025.

    Zrzut ekranu 2025-06-3 o 22.49.02.png

    PNG, 19.5 KB, uploaded by rafalp on June 3, 2025.

    Zrzut ekranu 2025-06-3 o 22.47.52.png

    PNG, 53.6 KB, uploaded by rafalp on June 3, 2025.

    Zrzut ekranu 2025-06-3 o 22.46.54.png

    PNG, 20.7 KB, uploaded by rafalp on June 3, 2025.

    Zrzut ekranu 2025-06-3 o 22.41.22.png

    PNG, 136.0 KB, uploaded by rafalp on June 3, 2025.

    Zrzut ekranu 2025-06-3 o 22.38.52.png

    PNG, 117.2 KB, uploaded by rafalp on June 3, 2025.

    Zrzut ekranu 2025-06-3 o 22.29.39.png

    PNG, 31.1 KB, uploaded by rafalp on June 3, 2025.

    Zrzut ekranu 2025-06-3 o 22.27.31.png

    PNG, 37.9 KB, uploaded by rafalp on June 3, 2025.

    Zrzut ekranu 2025-06-3 o 22.25.37.png

    PNG, 31.7 KB, uploaded by rafalp on June 3, 2025.

  • June 19, 2025, 4:29 p.m.

    Thread updates

    A thread update (previously known as a "thread event") is a small snippet of information about changes made to the thread itself, displayed between posts. Changing a thread's title is one such change that is recorded in Misago's database:

    Zrzut ekranu 2025-06-19 o 15.03.10.png

    For Misago 0.40, these updates were almost completely rewritten.

    The new thread updates are much smaller and take up much less space in the UI:

    Zrzut ekranu 2025-06-19 o 16.20.29.png

    The new thread updates are separated from read tracking, so new updates no longer mark the thread as having new posts for other users.

    Plugin authors will also be interested to learn that every element of this feature is exposed to Misago's plugin system.

    Zrzut ekranu 2025-06-19 o 16.20.29.png

    PNG, 268.3 KB, uploaded by rafalp on June 19, 2025.

    Zrzut ekranu 2025-06-19 o 15.03.10.png

    PNG, 29.4 KB, uploaded by rafalp on June 19, 2025.