Whyday August 19

RedCloth, Syck, and Being Replaced

RedCloth turned Textile markup into HTML. Syck parsed YAML, and shipped inside Ruby itself for years — most of the people who depended on it never knew its name.

Neither is glamorous. Both are more instructive than the famous projects, because between them they show the two ways a library survives its author leaving, and the entire argument is on the public record: in a release announcement, in a README, and in Ruby's own issue tracker.

When maintainers revisit older software or documentation as a team, this overview is one practical reference for tracking the surrounding work without changing the historical material itself.

Checked August 9, 2026 against project repositories, RubyGems and bugs.ruby-lang.org.

RedCloth: handed over on purpose

The important fact about RedCloth is that the handover happened before he disappeared, deliberately, and it worked.

When RedCloth 4.0.0 was announced in 2008, the person shipping it was Jason Garber, and the announcement thanks _why for starting the rewrite and then freely giving up the reins. That is succession working exactly as it should: the original author steps back while still present, the new maintainer inherits a project with a living predecessor to ask, and the transfer is public.

For broader programming and making context related to this topic, Hacker News is an independent reference worth comparing with the material here.

RedCloth is still alive. The gem is MIT, and versions 4.3.3 and 4.3.4 shipped in November 2023 and March 2024.

But look at the release dates: 4.3.2 came out in May 2016, and the next release was seven years later. That gap is the interesting part, and it is documented too. A README from the 4.2 series says plainly that the owner of the gem since 2007 was unable to keep fixing bugs or work on the next major version, and was looking for developers who could handle urgent bug fixes, fix cross-compilation, and cut releases — a public request for help, listing exactly what needed doing.

The eventual revival came with a cost that got written down as well: to prioritise merging a fix for a long-standing vulnerability, the new maintainer stopped maintaining the precompiled Windows and JRuby builds. Someone made a real trade — security over convenience — and said so in the README.

So RedCloth's story is not "handed over, therefore fine." It is: handed over, ran for years, stalled when the second maintainer burned out, sat for seven years, revived by a third person who had to drop things to do it. That is what a healthy outcome actually looks like, and it required three people rather than one.

Syck: argued about in public

Syck went the other way, and the record is unusually complete because it happened in Ruby's issue tracker.

In November 2009 — three months after the disappearance — a feature request was filed proposing that YAML and Syck be removed from Ruby. The stated reasons were that it had not been maintained for two years and would not be maintained by _why any more, and that it supported only YAML 1.0 rather than the later revisions.

That request was rejected. Matz responded on the thread; the compatibility risk of swapping the YAML engine under a decade of existing code was the sticking point.

It took years to resolve. Psych, built on libyaml and maintained by Aaron Patterson, became the default engine in Ruby 1.9.3, with Syck still selectable. A second removal request in 2012 argued the case more sharply: Syck supported only YAML 1.0, was not fully compliant even with that, was hard to maintain with many known bugs left unfixed, and — the decisive argument — libyaml was maintained by a third party and shared across many projects, so Ruby would inherit fixes from a much larger user base. That request was accepted and Syck was dropped. It was gone entirely from Ruby 2.0.0.

Syck now exists as a gem, whose own README says that it is there to bridge the gap for people who have not migrated, and that new projects should use Psych.

The two arguments, side by side

Set them next to each other and the pattern is sharp.

RedCloth survived because a person took it. No structural advantage — it is a C extension requiring Ragel to build, which is a harder inheritance than most. What it had was a named successor, arranged in advance.

Syck was replaced because a better structural bet existed. The winning argument was not that Psych was better code. It was that Psych wrapped a parser maintained by people outside the Ruby community, so Ruby stopped having to maintain a YAML parser at all. Exactly the bet Nokogiri made against Hpricot, argued explicitly in a bug report.

Neither outcome is a failure. A library that gets replaced by something that wraps a well-maintained dependency has been retired correctly. A library that keeps going because people keep picking it up is also fine. The bad outcome is the third one: nobody takes it, nothing replaces it, and the gap stays open.

Why this is the most useful page in this section

Because it is the only one where you can read the actual deliberation.

Most software history reaches us as summary: this was replaced by that. Here the arguments survive — the first removal request and its rejection, the second one and its reasoning, the maintainer's public plea for help in a README, the trade-off of dropping Windows builds to ship a security fix.

If you want to understand what happens to code when its author stops, this is better evidence than any retrospective, because nobody writing it knew how it would turn out.

And the practical lesson is small and boring. Name a successor while you are still around. It is what RedCloth had and Syck did not, and it mattered more than either library's technical merits.

The short version