The Slow Collapse of MkDocs

How personality clashes, an absent founder, and a controversial redesign fractured one of Python's most popular projects.

Florian Maas by Florian Maas · · 15 minutes read

On March 9, 2026, one of the former maintainers of MkDocs took over control of the PyPI repository and removed the rights of the original author. The original author quickly responded:

What the actual fuck? I’m the author and license holder.

lovelydinosaur @lovelydinosaur · Mar 9, 2026

Now please revert the PyPI changes and fuck off.

lovelydinosaur @lovelydinosaur · Mar 9, 2026

They then regained control of the PyPI repository by filing a PyPI support ticket.

MkDocs powers documentation for over 90,000 GitHub projects, and most of them depend on Material for MkDocs, a theme by @squidfunk so popular it has more stars than MkDocs itself.

But the PyPI takeover was just the most visible symptom of a deeper problem. Anyone who uses Material for MkDocs today gets the following warning displayed in their terminal:

 WARNING MkDocs 2.0 is incompatible with Material for MkDocs

 MkDocs 2.0 introduces backward-incompatible changes:

 [...]

MkDocs has not seen any real development for over 18 months. Material for MkDocs is in maintenance mode. And where there were once two dominant tools working together, there are now several competing to replace them: ProperDocs, MaterialX (“the next generation of mkdocs-material”), and Zensical (“A modern static site generator built by the creators of Material for MkDocs”).

How did we end up here? To understand the full story, we need to go back in time a little bit…

Jan 11, 2014
The birth of MkDocs

On January 11, 2014, Mia Kimberly Christie (then known as Tom Christie, using the GitHub handle @tomchristie, now @lovelydinosaur) pushes the first commit to what would become MkDocs, with the message “Hell yeah”. A flurry of commits follow in the next few months.

The burst of activity doesn’t last very long. By mid-2014, their activity in the repo stops completely.

lovelydinosaur's commit history in 2014. a flurry of activity early in the year, then silence

Others join the project, like @d0ugal and @waylan. @lovelydinosaur remains inactive, and for the period between July 2016 and July 2021 @waylan seems to be the sole maintainer of the project.

waylan's commit history to the project.

The project becomes more and more popular, and by mid-2022 the project accumulates well over 14,000 stars on GitHub.

Apr 27, 2020
oprypin joins the project

On Apr 27th of 2020 a new contributor @oprypin, makes their first contribution to the project; a proposed bugfix. @waylan agrees with the changes

Seems like this was an oversight. Thanks for the report and the work.

waylan @waylan · Apr 27, 2020

and merges the PR. After his first contribution, @oprypin isn’t involved with the project for about half a year, after which a long period of frequent activity follows; bugfixes, features, you name it.

There seems to be quite some friction between @oprypin and @waylan. For example, here when @oprypin does not get a response on the changes he made to his Pull Request:

I have done everything you’ve asked for and everything at all possible. Please work with me on this. I don’t know at all why you dismiss this.

oprypin @oprypin · Feb 13, 2021

Or a scenario where @waylan disagrees with a potential proposed performance improvement by @oprypin:

This pull request now 100% exactly matches the implementation at master.

Which means it adds more maintenance burden for no gain.

This change, now compared to master, still cuts off 9% of build times for a site with 142 pages.

Meh. Not a priority. The amount of gain is not worth the extra burden.

waylan @waylan · Apr 4, 2021

I don’t know how I deserve this — you really just shrug away everything I say. My words, even perfectly backed up by facts, are instantly overridden just by your opinion, feeling, even.

oprypin @oprypin · Apr 24, 2021
May 16, 2021
waylan steps down

The frustration of @oprypin grows, eventually culminating in him opening a discussion thread titled “Concerns about maintainership of MkDocs”. In this lengthy message, he accuses @waylan of gatekeeping the project and dismissing contributions without technical justification, and proposes an alternative maintainership model where there is less responsibility for a single maintainer.

[…] I am coming here out of frustration that MkDocs as a project is stalled purely because its maintainer’s main activity seems to be to respond to every request with “you shouldn’t want MkDocs to let you do this”. […]

oprypin @oprypin · May 16, 2021

He posts a copy of the thread in his own fork of the repository. There isn’t too much activity in both threads, but the consensus seems to be that although it is hard to distinguish between facts and opinions, the post is unnecessarily personal, as is also mentioned by the original - and mostly inactive - author of the project:

So, this seems a unneccessarily personal. It would have been enough simply to raise a discussion under MkDocs suggesting that you’d like to see some new maintainership to help push the project forward. Anyways.

lovelydinosaur @lovelydinosaur · May 17, 2021

The same day @oprypin creates the discussion, @waylan announces his departure from the project:

Everything I have done [..] has been to help make it better for others. […] I will discontinue contributing to this project once 1.2 is out-the-door. If things change for me personally in the future, I may come back, but that does not seem likely at this point.

waylan @waylan · May 17, 2021
Jun 7, 2021
oprypin takes over

Now that @waylan is no longer the maintainer of the project, new maintainers are needed. @lovelydinosaur opens a discussion asking for suggestions on the maintainership situation. @oprypin jumps in to announce that he is willing to take over maintenance of the project.

I had already offered to take over maintenance of MkDocs on 7 Apr to @waylan. I will offer it again here.

oprypin @oprypin · Jun 7, 2021

@lovelydinosaur does not immediately take him up on that offer, but @oprypin wants to continue development on the project, so a few weeks later he returns to the thread:

Again… Would you please let me work on MkDocs? There’s actually nothing happening and people are just waiting for the fixes.

oprypin @oprypin · Jun 21, 2021

After a while @lovelydinosaur of seeming a bit reluctant to grant @oprypin write access to the project, and being on the slow side with their responses, @squidfunk, the original author and maintainer of Material for MkDocs, jumps in;

PRs are piling up and there are some issues with 1.2.1 which we need to get fixed. I’d be all for giving @oprypin write access so he can go ahead and push MkDocs forward.

squidfunk @squidfunk · Jul 3, 2021

after which @lovelydinosaur invites a group of maintainers to MkDocs:

@oprypin @squidfunk @ultrabug I’ve sent you all team invites.

lovelydinosaur @lovelydinosaur · Jul 5, 2021

About a year later, @oprypin asks for elevated permissions on the Github repository and the PyPI project:

Could I please get “Owner” rights for the MkDocs organization? […] Additionally and possibly more importantly, I probably should be added to the PyPI project.

oprypin @oprypin · Jun 2, 2022

After getting Owner rights, @oprypin becomes the primary maintainer of MkDocs. For the next two years he steadily works on the project alongside the other maintainers and contributors. Bug fixes, dependency updates, a handful of new features, the project keeps moving.

Feb 25, 2024
Tensions spill into the open

A routine documentation issue turns into something else when @squidfunk uses the thread to call out Read the Docs for profiting from MkDocs without contributing back. @oprypin seizes the moment:

@squidfunk getting a taste of his own medicine, what a day 😂

[…]

And if you would like to talk about this, you can reach out to me privately in Element/Gitter chat where you had blocked me 😂

oprypin @oprypin · Feb 26, 2024

@squidfunk responds:

I’m not sure if its clever to open this can of worms here. Yes, I blocked you on Gitter, and you precisely know why.

squidfunk @squidfunk · Feb 29, 2024

What follows is a lengthy public airing of their history: @oprypin insisting he did nothing wrong, @squidfunk recounting how he had once been @oprypin‘s first sponsor, vouched for him joining the MkDocs team despite their differences, and eventually chose to limit their communication to public channels after repeated personal conflicts.

The issue is marked as completed when the minor documentation fix is applied.

Mar 16, 2024
oprypin removes squidfunk from the organisation

We’re circling back to the thread in which @lovelydinosaur announced that they added @oprypin, @squidfunk and @ultrabug as maintainers to the project.

On March 16th, @squidfunk posts:

Today I received an email that I was removed from the MkDocs organization. […] There was no point of contact by a maintainer prior to this action. Could somebody offer an explanation why this happened? […]

squidfunk @squidfunk · Mar 16, 2024

It turns out that @oprypin had single-handedly made that decision:

Hi. I removed you from the GitHub organization. I am not comfortable with having it appear like you represent MkDocs. […]

oprypin @oprypin · Mar 16, 2024

This is frowned upon by community members, and later @lovelydinosaur joins the conversation and reinstates @squidfunk‘s membership to the MkDocs organisation. In addition, they remove @oprypin‘s ownership rights to the repository.

Apr 6, 2024
oprypin steps down

On April 6th, @lovelydinosaur writes:

Okay, I can see some communication issues all round here. As it stands I don’t think there’s any issues currently blocked by existing team members requiring “ownership” permissions, so I’m going to hold onto the ownership keys at this point in time. […]

lovelydinosaur @lovelydinosaur · Apr 6, 2024

Three hours later, @oprypin announces that he is stepping down from MkDocs. In his post, he elaborates on his disagreements with @squidfunk, his frustration with @lovelydinosaur‘s intervention, and the loneliness of maintaining the project:

Maintaining MkDocs has been really lonely, which, sure, for the most part is my fault, but still.

[…]

Then all of a sudden, after 7 years of doing exactly nothing for MkDocs, @tomchristie stepped in without having any context, declared that there are “communication issues” (yeah, you bet…), removed me as admin, added @squidfunk back, and thus forced me to negotiate my status.

[…]

I’ve been literally losing sleep over this for weeks, but ultimately I think there’s nothing for me to say there, and nothing to be gained.

oprypin @oprypin · Apr 6, 2024

He decides to help the team with releasing 1.6.0 on April 20th 2024, which, except for a 1.6.1 release on August 30th that year, is still the last release at the time of writing.

Apr 8, 2024
The community rallies, briefly

Two days after @oprypin stepped down, @pawamoy, an active community member and author of mkdocstrings, invites roughly 25 plugin and theme authors to help maintain MkDocs in a thread with the ambitious title “Taking MkDocs to the next level”. The response is warm. @squidfunk wrote that he was “really psyched to see this happening.” He also added:

I’d love to put Material for MkDocs on more shoulders and I’ve started to build a team lately to pull that off that I financially compensate.

squidfunk @squidfunk · Apr 22, 2024

On April 23, a few days after @oprypin‘s last release, @lovelydinosaur posts that they will be returning as lead maintainer. By this time, it has been eight full years since their last Pull Request to the repository was merged. Their stated goal: MkDocs should have “strong and independent leadership distinct from Material for MkDocs.” They tag 28 community members and schedule a Saturday call.

The call happens. @squidfunk declines to join. Two people show up. That’s the last visible activity in the thread for the eighteen months that follow.

May 17, 2024
lovelydinosaur returns

@lovelydinosaur is back to actively contributing to the project for the first time in many years.

lovelydinosaur's complete commit history on the MkDocs project.

In this period @squidfunk seems to be the only other active maintainer. While @lovelydinosaur is making some contributions to MkDocs, they also start working on a redesign of MkDocs in the mkdocs/sketch repository.

Aug 1, 2024
A redesign without plugins

@lovelydinosaur shares a demo of their proposed MkDocs redesign to the MkDocs core team. While MkDocs currently builds the whole site at once, the proposed redesign builds pages on-the-fly when requested. There are concerns from the maintainers and core contributors:

Concerns were raised about maintenance and migration efforts of plugins in the light of impending changes to the API. Tom stressed the need to first develop the new core and build the version that allows for safe rendering. A definition of an API and a migration path will then follow.

alexvoss @alexvoss · Aug 1, 2024

In an unrelated thread, @lovelydinosaur shares that they are working towards a redesign of MkDocs that does not require plugins at all:

So… counter-intuitively this is actually a really good example of why I’m looking towards a future iteration of MkDocs that doesn’t require or support plugins in order to customise the page generation.

lovelydinosaur @lovelydinosaur · Aug 20, 2024

The downvotes on the post signal that this is not really what the community is hoping for.

Aug 30, 2024
MkDocs' last release

MkDocs 1.6.1 is released. Up until today, this is still the latest release and the repository has not seen any active development other for one or two fixes in the documentation and an updated CI badge.

Jul 17, 2025
Is this project abandoned?

Plugin author @facelessuser opens a discussion with a direct question:

Is this project being actively maintained, or has it been abandoned?

[…]

Please let the community know whether or not this project is being maintained, as it is starting to appear that maybe it is not.

facelessuser @facelessuser · Jul 17, 2025

He notes that bug fix PRs have been sitting unreviewed for months despite active sponsors.

The response from @pawamoy paints a very clear picture of what had happened since April 2024. He describes trying to build a collaborative maintenance model around @lovelydinosaur‘s return, finding that @lovelydinosaur showed little interest in the current codebase and was focused instead on a redesign. While @pawamoy was working on grooming the backlog and trying to maintain the project, @lovelydinosaur went silent when tagged on PRs.

[…] I then slowly stopped triaging issues, answering questions, etc.. So, essentially, nothing much happened since last year, and today MkDocs seems unmaintained.

pawamoy @pawamoy · Jul 23, 2025

@lovelydinosaur replies that they had been focused on httpx 1.0, now in early prerelease, and was considering whether they had time to free up for MkDocs. The response:

I think the general concern is less about the redesign, but more about basic maintenance to address real, current bugs.

facelessuser @facelessuser · Jul 24, 2025

On August 3rd, about ten days later, @oprypin resurfaces in the thread for the first time since his departure. His offer to return comes with one condition:

I can return to maintaining MkDocs as it was. This is on one condition: that @tomchristie [now @lovelydinosaur] fully transfers admin rights to all resources regarding MkDocs and then leaves completely. We cannot afford a repeat of this situation.

oprypin @oprypin · Aug 3, 2025

@lovelydinosaur did not respond.

Oct 15, 2025
Work continues behind the scenes

While the users of MkDocs were asking for bugfixes, @lovelydinosaur continues working on a redesign of MkDocs in yet another repository: encode/mkdocs. At that time, the repository is not yet public.

Nov 11, 2025
squidfunk announces Zensical

On November 11th, 2025, mkdocs-material 9.7.0 is released, and it is announced that Material for MkDocs is entering maintenance mode. Alongside it comes the announcement of Zensical: a modern static site generator, rewritten from scratch by the Material for MkDocs team. It reads existing mkdocs.yml files natively, rebuilds 5x faster, and ships with a completely redesigned search engine.

In the maintainership thread from April 2024, which had been quiet for months, a link to the blogpost is posted alongside the question if Material for Mkdocs going into maintenance mode meant that MkDocs required a fresh start. @oprypin resurfaces and points out that Zensical is the fresh start. With regards to MkDocs, he says:

Just maintain it in a decent shape to not force existing users to worry.

[…]

For this, please start a community petition to bring me back as the main maintainer of MkDocs.

oprypin @oprypin · Nov 7, 2025
Jan 14, 2026
MkDocs 2.0

On January 14, 2026, @lovelydinosaur mentions that they are open to others creating a 1.6.2 release of MkDocs, while they are working on MkDocs v2 in private.

Then on January 21, @lovelydinosaur opens a discussion announcing MkDocs version 2:

I’ve got some preliminary documentation available for the version 2 release.

The repository is currently private… I’m taking my time in opening this up, invites and discussions might or might not be available on request. If you’d like to see how the initial first pass is looking… https://www.encode.io/mkdocs/

lovelydinosaur @lovelydinosaur · Jan 21, 2026

The reactions are overwhelmingly negative. The major disadvantage of the proposed MkDocs 2.0 according to the community is the lack of support for plugins. It’s what made MkDocs great in the first place;

Before MkDocs Material, MkDocs was a toy.

[…]

The version 2 announcements and code suggest that MkDocs is going back to its roots — becoming a toy again.

twardoch @twardoch · Feb 18, 2026

@facelessuser puts into words what many in the community are thinking:

I almost feel like it should have been given a new name, as I feel like it is very far removed from v1.

I’m not sure exactly what the v2 project is aiming for, but I do wish it all the best. I’m not sure it needed a restart.

facelessuser @facelessuser · Feb 3, 2026

Community members note that the MkDocs version 2 repository is placed in the encode organisation instead of the MkDocs organisation. The contributing guidelines of the encode organisation explicitly discourage opening issues or pull requests. They also point out that not opening up the source code goes against the principles of Open Source software development. @lovelydinosaur eventually explains the reason for the repo being private:

So… sharing the source isn’t the problem here. The issue is the GitHub working environment. I’m not interested in the smokey boys-only-club atmosphere, it feels starkly unprofessional.

lovelydinosaur @lovelydinosaur · Feb 3, 2026

On February 13, @lovelydinosaur removes the notice that work is planned to make MkDocs 2.x backwards compatible with MkDocs 1.x.

On February 18, the Material for MkDocs team publishes a detailed blog post with their full analysis of why v2 is incompatible with their work and the broader plugin ecosystem; from the removal of the plugin system to the missing license.

Mar 9, 2026
The PyPI takeover

On February 18, Material for MkDocs starts showing a warning during every mkdocs build, informing users of the potential future incompatibility issues with MkDocs 2 and linking to the blogpost mentioned above.

@oprypin’s earlier request of gaining ownership access to PyPI has been granted sometime in the past. While his rights from the GitHub repository have been stripped after stepping down in 2024, this is not true for his rights on the PyPI repository.

On March 9, in what he describes as a last resort to prevent an unwanted MkDocs 2.0 upgrade from breaking users’ projects, he uses his access to remove all other maintainers from the project, including those of the original author, @lovelydinosaur. He announces the takeover in two GitHub discussions: one in mkdocs (since edited) and one in mkdocs-community (the organisation has since been renamed to ProperDocs). His primary justification is that a silent v2 release would reach users running pip install mkdocs and unexpectedly break their projects. He creates a new repo at mkdocs-community/mkdocs, announces that future PyPI releases will come from there, and calls for community support.

@lovelydinosaur files a PyPI support ticket and blocks @oprypin from the MkDocs GitHub org.

Within 24 hours, @oprypin backs down:

I am backing off completely here. I’m sorry.

[…]

The continuation of the project will need to come from agreement, not disagreement; I was wrong to think any other way.

oprypin @oprypin · Mar 10, 2026

@lovelydinosaur regains PyPI access.

In a separate discussion, @Andre601 voices his worry about the state of the project and asks various questions regarding the future of the maintainership of the project, to which @lovelydinosaur responds:

We’re not having any more conversation in all-male online spaces. Not happening.

lovelydinosaur @lovelydinosaur · Mar 9, 2026
Mar 15, 2026
oprypin launches ProperDocs

Six days after the PyPI takeover, @oprypin publishes the formal launch of ProperDocs: a drop-in replacement for MkDocs 1.x. Replace pip install mkdocs with pip install properdocs, replace mkdocs build with properdocs build. Existing plugins work without code changes. The project ships a warning redirecting users away from MkDocs 2.0.

A few days later, @jaywhj announces MaterialX, a continuation of Material for MkDocs.

So where does that leave things today?

The original MkDocs repository has seen no meaningful development in 18 months. Its original author and sole maintainer, @lovelydinosaur, is pursuing a redesign that lacks community support and would break the existing plugin ecosystem. The encode/mkdocs v2 repo has been inactive since February 19, 2026.

Meanwhile, the people who built the most widely-used parts of the ecosystem have moved on.

@oprypin said that continuation would require agreement, considered that unlikely to succeed, and launched ProperDocs independently. The project does not become immensely popular immediately; a week later it has accumulated 21 stars on Github.

@jaywhj is maintaining MaterialX, which seems to gain some traction in the community because the original project, Material for MkDocs, entered maintenance mode.

@squidfunk’s team, responsible for Material for MkDocs, have stopped its development and is building Zensical from scratch. @pawamoy, one of the most active contributors to the MkDocs ecosystem, has also joined the project. Zensical currently seems the most popular, with over 3,700 stars on Github at the time of writing, and thus it also seems the most likely initiative to succeed and possibly replace MkDocs in the future.

The MkDocs ecosystem is fragmenting in real time. Three successors, three visions, and a community deciding which bet to place.

← All posts