{"id":51417763,"url":"https://github.com/didrod205/wiki-beef","last_synced_at":"2026-07-04T21:30:37.860Z","repository":{"id":366697250,"uuid":"1277465099","full_name":"didrod205/wiki-beef","owner":"didrod205","description":"The pettiest edit wars on Wikipedia, right now. Crawls the live MediaWiki API for the most-reverted articles, scores the beef, decodes what they're fighting about. No API key, 100% public data. Self-updating leaderboard.","archived":false,"fork":false,"pushed_at":"2026-06-30T04:37:07.000Z","size":165,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-30T06:21:25.893Z","etag":null,"topics":["cli","crawler","data","edit-war","leaderboard","mediawiki","meme","no-api-key","typescript","wikipedia"],"latest_commit_sha":null,"homepage":"https://didrod205.github.io/wiki-beef/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/didrod205.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-22T23:25:11.000Z","updated_at":"2026-06-30T04:37:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/didrod205/wiki-beef","commit_stats":null,"previous_names":["didrod205/wiki-beef"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/didrod205/wiki-beef","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didrod205%2Fwiki-beef","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didrod205%2Fwiki-beef/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didrod205%2Fwiki-beef/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didrod205%2Fwiki-beef/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/didrod205","download_url":"https://codeload.github.com/didrod205/wiki-beef/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didrod205%2Fwiki-beef/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35136712,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","crawler","data","edit-war","leaderboard","mediawiki","meme","no-api-key","typescript","wikipedia"],"created_at":"2026-07-04T21:30:37.275Z","updated_at":"2026-07-04T21:30:37.849Z","avatar_url":"https://github.com/didrod205.png","language":"TypeScript","funding_links":["https://github.com/sponsors/didrod205"],"categories":[],"sub_categories":[],"readme":"# wiki-beef 🥩\n\n**The pettiest edit wars on Wikipedia, right now.** Crawls the live MediaWiki API for the articles being reverted to death, scores the beef, and decodes what people are actually fighting about — borders, birthplaces, “is a hot dog a sandwich.” No API key, 100% public data, nothing uploaded.\n\n### 🌐 [**Live leaderboard →**](https://didrod205.github.io/wiki-beef/) · auto-updated every few hours\n\nThe site crawls Wikipedia straight from your browser (hit **🔄 refresh live** to re-crawl any language edition). Same engine in your terminal:\n\n```bash\nnpx wiki-beef\n```\n\n```\n  🥩 wiki-beef — edit wars on en.wikipedia · last 24h\n\n   1. 🗺️ Nikola Tesla · Borders \u0026 nationality\n      ████████████████ 290 · 21 reverts · 10 editors · 4.2/h · last 12m ago\n      “rv, he was Serbian-American per consensus, see talk”\n   2. ⚽ List of FIFA World Cup top goalscorers · Sports\n      ██████████░░░░░░ 151 · 10 reverts · 8 editors · 2.3/h · last 1h ago\n      “Updated Messi's goals in FIFA world cup”\n   3. 🔥 Shrek the Third · General beef\n      ████████░░░░░░░░ 146 · 9 reverts · 3 editors · 36/h · last 6h ago\n      “you just revert it without explaining why”\n\n  2,000 reverted edits · 1,198 contested pages · live from the MediaWiki API, no key.\n```\n\n## Why\n\nWikipedia is a quiet, never-ending war. Most of it happens in the **revert** — one\neditor undoes another, then it’s undone back, over a birthplace, a date, a flag, a\npronoun, a comma. `wiki-beef` finds the articles where that’s happening *right now*,\nranks them by how hot the fight is, sorts the genuine disputes from plain vandalism\ncleanup, and surfaces the actual edit summaries — the receipts.\n\nIt’s a **window into public data, not a verdict.** A high score means a lot of\nreverts by a lot of editors, fast — not that anyone is wrong. The drama is already\npublic; this just ranks it.\n\n## How it works\n\n```\nMediaWiki recentchanges API  ─crawl→  reverted edits  ─group→  contested pages\n   (mw-reverted tag, no key)              ─score→  reverts × editors × velocity\n                                          ─classify→  nationality / politics / bio / …\n                                          ─→  ranked leaderboard\n```\n\n- **Crawl** (`crawlReverts`) — pulls the edits tagged `mw-reverted` over a time\n  window from any language edition. Browser-safe (no `node:*`), so it runs in the\n  CLI, in CI, and live in the web page (MediaWiki allows anonymous CORS).\n- **Score** (`scoreBeef`) — `reverts × editors × velocity`, **boosted** by\n  real-dispute signals (`per talk`, `POV`, `consensus`, `unsourced`) and\n  **penalized** for vandalism signals (`rvv`, `blanking`) — so genuine fights\n  outrank routine cleanup.\n- **Classify** (`classify`) — a curated lexicon sorts each fight into borders \u0026\n  nationality 🗺️, politics 🏛️, sports ⚽, pop culture 🎬, bios 👤, grammar ✍️,\n  vandalism 🧹, or general beef 🔥.\n- The **live site** is static: a GitHub Action re-crawls every few hours, commits a\n  fresh `beefs.json`, and the page renders it — no server, no database.\n\n## Install \u0026 usage\n\n```bash\nnpm i -g wiki-beef      # then:  wiki-beef\n# or zero-install:\nnpx wiki-beef\n```\n\n```bash\nwiki-beef                          # today's top fights on en.wikipedia\nwiki-beef --lang de                # any edition: de, fr, es, ru, ja, zh, pt…\nwiki-beef --hours 6 --top 25       # tighter window, more results\nwiki-beef --ns all                 # include talk/user pages, not just articles\nwiki-beef --md \u003e beefs.md          # a Markdown table\nwiki-beef --json | jq '.beefs[0]'  # the full report as JSON\n```\n\n`beef` is a shorter alias for the same command.\n\n| Flag | |\n| --- | --- |\n| `--lang \u003ccode\u003e` | Wikipedia language edition (default `en`) |\n| `--hours \u003cn\u003e` | how far back to look (default 24) |\n| `--top \u003cn\u003e` | how many fights to show (default 15) |\n| `--ns \u003c0\\|all\u003e` | namespace — articles only (default) or everything |\n| `--min-reverts \u003cn\u003e` | min reverts to count as a beef (default 2) |\n| `--json [file]` / `--md [file]` | machine-readable / Markdown output |\n\n## Library\n\nThe core is pure and browser-safe — crawl + process anywhere:\n\n```ts\nimport { getBeefs, crawlReverts, processChanges } from \"wiki-beef\";\n\nconst report = await getBeefs({ lang: \"en\", hours: 24, top: 20 });\nreport.beefs[0]; // { title, score, reverts, editors, category, about, quotes, historyUrl, … }\n\n// or split it:\nconst changes = await crawlReverts({ lang: \"fr\", hours: 12 });\nconst beefs = processChanges(changes, { lang: \"fr\" });\n```\n\n## Privacy \u0026 etiquette\n\nAll data comes from Wikipedia’s **public** [MediaWiki API](https://www.mediawiki.org/wiki/API:Main_page) — recent changes that are visible to anyone. No account, no key, nothing about *you* is sent anywhere. The crawler identifies itself with a descriptive `User-Agent` and a polite request cadence. Be a good citizen: don’t crank `--hours` absurdly high in a tight loop.\n\nIt points at *articles*, never at individual editors — usernames are only counted, never ranked or shamed.\n\n## Contributing\n\nThe most useful contribution is **a better classifier** — a keyword that catches a\nkind of fight the lexicon misses, or a score tweak that better separates real\ndisputes from cleanup. See [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\nMIT © [didrod205](https://github.com/didrod205)\n\n---\n\n\u003csub\u003eIt’s public Wikipedia drama — no judgment, just the receipts.\u003c/sub\u003e\n\n## 💖 Sponsor\n\nFind this useful? [**Sponsor on GitHub**](https://github.com/sponsors/didrod205) — it keeps these projects maintained.\n\n[![Sponsor](https://img.shields.io/badge/Sponsor-GitHub-db61a2?logo=githubsponsors\u0026logoColor=white)](https://github.com/sponsors/didrod205)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidrod205%2Fwiki-beef","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdidrod205%2Fwiki-beef","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidrod205%2Fwiki-beef/lists"}