Skip to content

Back to the catalog

Socket: fsnotify Maintainer Dispute
socket.devarticle

Socket: fsnotify Maintainer Dispute

Socket.dev covers a maintainer access dispute in fsnotify, the widely-used Go filesystem-notification library (10.7k stars, 321k dependents), after contributor mattn (Yasuhiro Matsumoto) publicly accused maintainer arp242 (Martin Tournoij) of removing access and the original author from the GitHub org. No malicious code was found — Tournoij says the removals were a trust/quality-control decision over rushed merges and an undiscussed sponsorship-file change — but the ambiguity around release authority triggered supply-chain alarm, including a Kubernetes issue evaluating forks like gofsnotify. The piece frames the incident alongside xz-utils as an example of how governance ambiguity in low-level dependencies can look indistinguishable from an early-stage takeover.

TL;DR A maintainer-access dispute in the widely-used Go library fsnotify (no evidence of compromise) shows how governance ambiguity in a low-level dependency can trigger supply-chain panic downstream, including at Kubernetes.
Document

What it is

A maintainer-access dispute in fsnotify (Go cross-platform filesystem-notification library; GitHub shows 10.7k stars, 321k dependent projects). Martin Tournoij (@arp242) removed commit access from Yasuhiro Matsumoto (mattn) and others; mattn's since-deleted X post alleging a hijack triggered supply-chain fears. The Socket writeup adds the concrete resolution and the specific releases involved.

What actually happened

The alarm was a false positive, and the page gives the details the summary omits:

  • Tournoij says the removed accounts held commit rights for historical reasons, not active maintenance ("In any other project they never would have had commit rights"). He frames the removal as a trust/quality decision after rushed, cross-platform-unreviewed merges.
  • The stated trigger was a FUNDING.yml/sponsorship change committed directly to main early in the work with no discussion — Tournoij noted mattn had withdrawn funds from thanks.dev over the years before doing work here.
  • Matsumoto retracted and apologized: he conceded his claim that original maintainers were also removed was wrong, and that the FUNDING.yml edit was a mistake. He said he stepped in only because the project had gone >1 year without a release.

The scanner-pressure angle (the reusable lesson)

The maintenance burst was itself provoked by tooling. An April issue noted automated scanners flag projects as unmaintained after 12 months without a release; fsnotify crossed that on April 4, 2026. That pressure prompted the rushed releases that then looked suspicious — a feedback loop worth recognizing when triaging your own dependencies.

Preconditions / Affected

Matters only if you depend on fsnotify (directly or transitively — likely, given 321k dependents underneath CLIs, dev servers, and infra tooling). No release was found compromised.

What to do

  • No incident response required — there is no evidence any release was tampered with. Do not pin away from recent versions out of the takeover rumor.
  • If you want current behavior, note v1.10.0 and v1.10.1 (May 4, 2026) are the recent releases. v1.10.1 fixed an inotify bug where sibling watches sharing a path prefix could be removed or renamed incorrectly — relevant if you watch multiple paths under a common prefix on Linux.

Caveats

The takeover narrative was explicitly disputed by the maintainer ("the commit log isn't a secret") and partially retracted by the accuser. The mattn quotes are AI-translated from a deleted Japanese post, so treat exact wording as approximate. The page is one vendor's (Socket) synthesis of a public GitHub thread, not an independent audit of the releases.

Organisations named here

  • arp242 (Martin Tournoij)
  • mattn (Yasuhiro Matsumoto)
  • xz-utils

Technologies named here

  • fsnotify
  • gofsnotify/fsnotify
  • Dependabot
  • Go
  • GitHub
  • Kubernetes

Techniques named here

  • Maintainer access/governance dispute
  • Social engineering-based supply chain compromise