# Button Stealer collects the buttons from every site you visit

> Button Stealer is a Chrome extension that removes the buttons from the pages you browse and keeps them in a local stash, so you end up with a collection of buttons from sites you visited. It is a joke with a real implementation behind it, and the author's stated point is that it is fun, useless and free, and that nothing leaves your machine.

**anatolyzenkov/button-stealer** — A Chrome extension that “steals” a button from every website you open.

- Repository: https://github.com/anatolyzenkov/button-stealer
- Website: https://anatolyzenkov.com/stolen-buttons/button-stealer
- Stars: 729 · Forks: 28
- Language: JavaScript
- License: not declared
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/anatolyzenkov-button-stealer

## The joke is that the buttons survive the page

Button Stealer is a Chrome browser extension that steals buttons from the websites you visit. The instruction is to do your usual everyday online stuff and watch the collection of your stolen buttons grow. It is fun, useless and free.

The premise is a small inversion. A button on a web page is a piece of interface, not content, and almost every site has more of them than the layout needs. The extension takes them away, and the taken buttons accumulate somewhere you can look at them. The screenshots in the documentation show a stash of collected buttons, the extension popup, and an edit mode described as how you remove ugly buttons.

That last part is the detail that makes it more than a joke. The extension can also put buttons back, and the edit mode is where you decide which of the stolen buttons were worth keeping. So the mechanism is not only removal, it is a selection interface over the interface elements of the web, and that is a slightly more interesting idea than it first appears.

The author explains the origin of the name and the intent in the closing section. Hi, my name is Anatoly Zenkov. I'm the author of Button Stealer, and he describes himself as a Hamburg-based multidisciplinary designer with a career spanning over 20 years in creating digital products and experiences, brands, and marketing communications.

That background explains the approach. This is a designer's side project, built with an eye to how the collected objects are presented, not a utility that solves a task. The homepage is at anatolyzenkov.com under stolen-buttons, and the project is written in JavaScript and the repository declares no licence, with releases v1.0.6.1 and v1.0.6 both from 2026-04-10 and v1.0.5 from 2026-01-21. The last push was on 2026-04-10.

## It runs locally and the author says so

The privacy claim is stated directly and in bold: Button Stealer works locally and doesn't send data anywhere, so your data remains private.

This is worth reading as a claim to verify rather than a guarantee to accept, because an extension that touches every page you open is exactly the shape of thing people are trained to be suspicious of, and the reassurance is a sentence rather than an architecture note. The source is small enough to read, which is the honest way to satisfy yourself: the repository top level contains a.gitignore, an AGENTS.md, the README, a _locales/ directory, an images/ directory, a manifest.json, an offscreen/ directory, a popup/ directory, a scripts/ directory, a stolen-buttons/ directory and a styles/ directory.

That listing is itself informative about the implementation. A Chrome extension that needs to manipulate the DOM of every page has a content script, which would live in scripts/. A popup/ directory is the browser action interface. An offscreen/ directory is the newer Chrome offscreen document API, which exists for cases where a background service worker needs DOM access it does not have. A stolen-buttons/ directory is where the collected data is presumably kept, and it being a top-level directory rather than something inside the popup suggests the stash is shared state that the popup reads rather than a per-popup variable.

The manifest.json at the root is the extension's declaration: its permissions, its background script, its content script registration, its action popup and its localisation. The _locales/ directory means the extension's user-facing strings are internationalised, which is consistent with a project where the author is the kind of person who ships a decorative extension in more than one language.

The dedicated homepage, the presence of a v1.0.x line rather than a 0.x line, and the pair of releases an hour apart on the same day in April suggest a project that was actively finished, though it has not seen a push in some months.

## Install from the store, or load the repository unpacked

There are two ways to get it, and the choice matters for anyone who wants to read the code.

The first is to install Button Stealer directly from the Chrome Webstore. The second is to use the code of this repository to load it unpacked, which the documentation links to the Chrome extension tutorial for a hello world extension.

That is a small distinction with a meaningful consequence. The store listing and the repository code are two separate artifacts, and the second is a copy that you can read line by line before running. For an extension whose whole point is that it modifies every page you open, the unpacked route is the one to take if you care what you are running, and the store route is the one to take if you just want the buttons.

The project is also a public piece of the author's portfolio, so the store listing and the site are how it reaches an audience. The homepage is a subpage of a longer site, and the extensions are grouped under a stolen-buttons section, which suggests there are siblings in the same series.

The version numbering gives a rough release history. v1.0.5 came out on 2026-01-21, and v1.0.6 and v1.0.6.1 both landed on 2026-04-10 within about half an hour of each other, the second being a patch on the same day. A patch release thirty-six minutes after the minor one is the signature of a small fix that was needed immediately.

The AGENTS.md file in the repository root suggests the project is worked on with an AI coding assistant, which is a small piece of context for anyone reading the commit history.

## The stash is the product, not the removal

Almost any extension can remove a button from a page, and doing that alone would be a nuisance rather than a project. What makes this one worth looking at is that the removed things are kept.

The documentation describes the interaction as watching the collection of your stolen buttons grow, and the screenshot of the stash shows a growing pile rather than an empty page. So the visible artefact of the extension is a gallery, and the side effect is that the page you are looking at has had a set of familiar affordances quietly taken away from it.

That inversion is the whole joke and it is also the mechanic. A button labelled Sign in or Buy now or Subscribe is a promise the site makes to you, and taking them all away leaves a page that still works but no longer asks for anything. The collection then becomes a record of what the web was trying to sell you that day.

The popup screenshot in the documentation is the second half of that loop, since it is the interface through which the stash is viewed and the edit mode is entered. And the edit mode screenshot, with its caption about removing ugly buttons, shows the part where the user gets to be picky about which of the collected elements were worth keeping.

The stolen-buttons/ directory at the top of the repository is where that collection lives, and its presence as a separate directory rather than a subfolder of the popup says it is shared state that the extension builds up across pages and sessions, not something the popup holds in memory while it is open.

For a project with no business model and no network, the collected set is the entire value, and the design of how it is presented is the difference between a curiosity and something you would actually keep installed.

## What this teaches about browser extensions, and what it does not

The honest evaluation of a project like this is in two parts, and the second part is longer than the first.

What it teaches is the shape of a Chrome extension that has to run against pages it did not author. The directory listing gives the whole architecture in miniature. A content script injected into every page to find and remove the buttons, a popup for the user interface and the stash view, an offscreen document for the DOM work a service worker cannot do, a manifest tying them together, and a directory for the collected data. That is a real, complete extension, not a mock-up, and the code is small enough to read in an afternoon.

The edit mode is the most interesting part to study, because it is where a destructive transformation becomes reversible. Removing a button is easy and slightly rude. Removing it while keeping the ability to bring it back, and letting the user judge which of the removed things were worth keeping, is a different piece of software.

What it does not teach is anything about the harder problems. There is no network code to get wrong, no authentication, no data model, no server, no rate limiting, nothing that has to survive a hostile input in the way a real extension with a backend has to. The buttons it collects are structured data from a DOM, and the interesting failure modes of that data are the ones the extension mostly sidesteps by being local and being about a single element type.

The privacy claim also deserves the scepticism it would get from any extension, but the reason to extend it is specific rather than general. The extension runs on every page, including your email and your bank, and it removes elements from them. That is a large surface even when nothing is transmitted, and the fact that the author is a designer with a portfolio at stake and says plainly that it is useless and free is a reasonable signal that the intent is not to gather anything.

Taken as a whole, this is a well-executed joke with a clean privacy story, and a compact reference for the Chrome extension APIs it happens to use.

## Conclusion

Adopt Button Stealer if you want a small, well-built piece of browser extension that demonstrates content scripts, an offscreen document and a popup working together on a deliberately frivolous idea, since the code is a readable reference for those Chrome extension APIs. Skip it if you need a production extension, because this one exists to be fun and useless, and check the privacy claim yourself rather than taking it on trust, since the assertion that nothing is sent anywhere is the project's own and the source is short enough to read. Verify first that you are comfortable with an extension that modifies every page you open, since that is the entire mechanism, and that the store listing you install matches the repository code you read.

## FAQ

### What does the Button Stealer Chrome extension do?

It is a Chrome browser extension that steals buttons from the websites you visit. You do your usual everyday online stuff and watch the collection of your stolen buttons grow, and the author describes it as fun, useless and free.

### Does Button Stealer send my data anywhere?

The project states that it works locally and doesn't send data anywhere, so your data remains private. The repository is small enough to read directly, with a manifest.json, a scripts/ directory, a popup/ directory, an offscreen/ directory and a stolen-buttons/ directory at the top level.

### How do I install Button Stealer?

You can install it directly from the Chrome Webstore, or you can use the code of the repository to load it unpacked following the Chrome extension tutorial for a hello world extension. The last releases are v1.0.6.1 and v1.0.6, both published on 2026-04-10.

## Sources

- [anatolyzenkov/button-stealer on GitHub](https://github.com/anatolyzenkov/button-stealer)
- [Issues](https://github.com/anatolyzenkov/button-stealer/issues)
- [Project website](https://anatolyzenkov.com/stolen-buttons/button-stealer)
- [README](https://github.com/anatolyzenkov/button-stealer/blob/main/README.md)
- [Releases](https://github.com/anatolyzenkov/button-stealer/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/anatolyzenkov-button-stealer
