Open Source

I fix the projects I use myself. Everything below is counted straight from GitHub.

Languages

52merged PRs
Language Merged PRsReposCommitsLines added %
PHP 151523784 28.8
Go 131322652 25
C# 86134 911 15.4
Rust 549182 9.6
JavaScript 536130 9.6
Other (3) 6611330 11.5

Where these pull requests come from

upstream fork

It starts with a bug

I'm working on something of my own and suddenly a thing doesn't behave the way it should. Often it isn't my code at all, but a library I'm building on. I could work around it and move on, but I'd rather fork the project, fix the bug at the source and send the fix upstream. Then it works for everyone who uses that library, not just for me.

Usually it's the easy-to-miss problems

Most of the time it's an easy-to-miss problem: nothing crashes, one thing just quietly does the wrong thing. ILSpy didn't recognise the type test in a Visual Basic exception filter, sonic leaked a client slot after a failed channel read, and Scramble split PhpDoc summaries wrong in files with CRLF line endings. Sometimes I only fix the docs, like the write_buffer_size option in sonic or which proxy schemes actually work in email-verifier.

PR review merge 52 merged after review

Every change gets a maintainer's review

Sending code is only half of it. Every PR is read by someone who knows the project inside out, and they decide whether the change is right and fits. Since 5 September 2026, maintainers have merged 52 PRs from me. Some of them went into 11 projects that have over 10,000 GitHub stars each. A merge usually takes 38 hours from opening (median).

PHP 15 Go 13 C# 8 Rust 5 JavaScript 5

The project picks the language

My merged code lives in 47 repositories with 307 525 stars on GitHub between them. The biggest are ILSpy, PHPMailer, autoprefixer, monolog, and sonic. I write in whatever the project is written in, so my merged changes now span 8 languages, mostly PHP, Go, and C#.

Where my changes landed

Repositories that merged my code (47), largest first.

  1. icsharpcode/ILSpy .NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform! 26 149 2 merged PRs
  2. PHPMailer/PHPMailer The classic email sending library for PHP 22 299 1 merged PR
  3. postcss/autoprefixer Parse CSS and add vendor prefixes to rules by Can I Use 22 226 1 merged PR
  4. Seldaek/monolog Sends your logs to files, sockets, inboxes, databases and various web services 21 403 1 merged PR
  5. valeriansaliou/sonic 🦔 Fast, lightweight & schema-less search backend. An alternative to Elasticsearch that runs on a few MBs of RAM. 21 353 2 merged PRs
  6. briannesbitt/Carbon A simple PHP API extension for DateTime. 16 596 1 merged PR
  7. PuerkitoBio/goquery A little like that j-thing, only in Go. 14 996 1 merged PR open: 1
  8. App-vNext/Polly Polly is a .NET resilience and transient-fault-handling library that allows developers to express policies such as Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. From version 6.0.1, Polly targets .NET Standard 1.1 and 2.0+. 14 235 1 merged PR
  9. hajimehoshi/ebiten A dead simple 2D game engine for Go 13 512 1 merged PR
  10. filp/whoops PHP errors for cool kids 13 231 1 merged PR
10 of 47

Latest pull requests

Newest submissions, merged ones and those waiting for review.

  1. properties-window: Fix permission checkboxes needing two clicks with multiple files linuxmint/nemo waiting for review 25 Sept
  2. fix(downloader): allow remote downloads without a Content-Length pelican/wings waiting for review 25 Sept
  3. Fix plugin update crashing after the rows are refreshed pelican/panel merged 25 Sept
  4. docs: clarify write_buffer_size valeriansaliou/sonic merged 24 Sept
  5. Treat 's before a copula as possessive spencermountain/compromise waiting for review 24 Sept
  6. Keep the case in toSingular spencermountain/compromise waiting for review 24 Sept
  7. Keep "never" when going to the infinitive spencermountain/compromise waiting for review 24 Sept
  8. Give "be" a past participle spencermountain/compromise waiting for review 24 Sept
8 of 50