• March 27, 2023, 3:10 p.m.

    I am not happy with Misago's current architecture. It sure took me far, but it's showing its limitations and is slowing me down.

    I would like to separate client and API parts completely and have Python part only implement a GraphQL API for internet forum, and client part be TypeScript React.js isomorphic application that renders both on server and then if user has JavaScript enabled, also in client to improve interactivity. Basically what Remix and Next.js deliver. I would also want to have plugin system enabling developers to either extend or plain out replace the parts of site that they don't like.

    This new architecture was initially realized as ambitious v4 rewrite. But this v4 plan was too ambitious and too big to deliver without hurting existing version, so I've decided to scrap it a while ago.

    But I've been thinking a lot about evolving existing codebase into this new architecture in smaller steps. Yesterday I've settled on 10 steps roadmap on getting there:


    This roadmap is still years of work, but now in smaller and saner chunks. So when there's no higher priority work, I will work on items from this roadmap, slowly pushing the cart towards the goal.

    Those items have different complexity and completeness criteria. For example, for filters based plugin system I just have to copy filters abstractions from v4 branch and change them a little to make them work with existing codebase, then setup developer documentation for plugin hooks. At this point this task will be considered completed and closed, but it will only be a beginning of the process for adding extension hooks using those abstractions to existing Misago features. But implementation of GraphQL API will be a months-long process spread over multiple releases as new features are added to the GraphQL API piecemeal and individual parts of the UI are changed to use those instead of old restful API.