▶ Install for Firefox (addons.mozilla.org) · ▶ Install for Edge (Microsoft Store) · Chrome/Brave/Opera: load unpacked
A browser extension — Firefox and Chrome / Chromium (Edge, Brave, Opera) — that rebuilds Reddit's frontend into old Reddit. It fetches each page from Reddit's JSON API and renders old Reddit's real archived HTML + CSS, then layers on RES-style power features.
What it does:
[+] to reveal a post's image / video / gallery /
self-text; galleries have prev/next.j/k move, o/Enter open, x expand.[–] on any comment; comments new since your last visit
are flagged.Earlier versions were a lighter CSS skin of new Reddit (and before that, a redirect to old.reddit.com). Both were superseded by this full rebuild — see the git history / older releases if you want them.
Rendered from the extension's own output (its builders + the bundled old-Reddit stylesheet) with sample data — not a live-Reddit capture (Reddit blocks this build environment). In your browser it looks the same, with your feeds.
Subreddit listing — header, sidebar (search + rules), ranked posts, vote
arrows, and per-post [+] expandos:

Comments — [–] collapse toggles, the sorted by menu, an inline
preview.redd.it image, and the auto-loading "load more comments":

Night mode (optional dark theme):

▶ Install from Firefox Add-ons (addons.mozilla.org)
https://www.reddit.com/r/pics — and it
renders in the classic layout.about:addons → Classic Layout for Reddit → Preferences (all settings + filters).It's reviewed and signed by Mozilla, so it installs permanently and auto-updates.
.xpi (GitHub Releases).xpi from the
Releases page..xpi onto any Firefox window → click Add, orabout:addons → the gear ⚙️ → Install Add-on From File… → pick the .xpi.The .xpi is signed by Mozilla, so it installs permanently on regular Firefox and
survives restarts.
about:debugging → This Firefox → Load Temporary Add-on….manifest.json in the repo.Firefox only installs a permanent add-on if it's signed by Mozilla. To produce
your own signed .xpi with web-ext:
npm install
npm run lint
npm run sign:unlisted # needs AMO API key + secret; produces a signed .xpi
AMO credentials (a JWT issuer + secret) come from
https://addons.mozilla.org/developers/addon/api/key/, passed via the
WEB_EXT_API_KEY / WEB_EXT_API_SECRET environment variables. Then install the
resulting .xpi as in Option 1.
Note: requires Firefox 142+ (set in
manifest.json).
▶ Install from the Microsoft Edge Add-ons store
One-click install, reviewed by Microsoft — it installs permanently and auto-updates, with no Developer mode needed.
https://www.reddit.com/r/pics — and it
renders in the classic layout.edge://extensions → Details → Extension options (all settings + filters).Edge is Chromium-based, so you can alternatively load it unpacked for development (see the Chrome steps below) — but the store is the easy path.
There's no Chrome Web Store listing yet, so install it unpacked from a clone of this repo. All three are Chromium-based, so the same folder loads in every one of them — no separate build.
chrome://extensionsbrave://extensionsopera://extensionsmanifest.json — the folder itself, not a file).https://www.reddit.com/r/pics — it should be restyled. Pin the toolbar
button via the puzzle-piece 🧩 icon to toggle the skin, or use Details →
Extension options.Heads-up: unpacked extensions run in Developer mode. A browser update or profile reload can auto-disable a dev-mode extension — just re-enable it at
chrome://extensionsif that happens.Polished option: publishing to the Chrome Web Store ($5 one-time developer fee) gives one-click installs that survive updates and need no Developer mode. Brave and Opera can install from the Chrome Web Store too. (Edge already has its own one-click store listing — see above.)
A ready-to-upload package is checked in at
dist/old-reddit-skin-chrome-3.7.6.zip (manifest.json at the zip
root, Chrome-validated, Firefox-only manifest keys stripped). To publish:
To rebuild the zip after changes:
npm run build # web-ext build -> web-ext-artifacts/*.zip
# then strip the Firefox key + repackage into dist/ (see the release build for exact steps)
The same zip also uploads to the free Edge Add-ons store if you ever want an Edge listing.
Turn on Rebuild frontend (toolbar/options toggle) and, on a subreddit /
front-page listing, a post's comments page, a user profile, or a
search, the
extension stops skinning new Reddit and instead rebuilds old Reddit's real
frontend: it fetches the data from Reddit's JSON
API and renders old Reddit's actual #siteTable of .thing.link items — ranks,
vote arrows, thumbnails, taglines, comment counts, an expando button (click to
reveal a post's image/video/gallery/self-text inline), sort tabs, next/prev paging, the
time filter (top/controversial: past hour → all time), and the subreddit
sidebar (description + rules, from /about.json + /about/rules.json) — styled by
old Reddit's genuine archived stylesheet (vendor/oldreddit.css, the 2019 desktop
CSS, bundled with its asset URLs rewritten to redditstatic.com).
How the data works: a content script does a same-origin
fetch('…/.json', {credentials:'include'}) that rides your logged-in session.
Honest limitations (please read):
.json in 2026, so
logged-out visitors get 403. On any non-200 the extension falls back to
letting normal Reddit render — it never leaves the page blank./user/{name} renders the profile (overview/submitted/comments
tabs + karma sidebar); /search renders results with sort/time filters. Every
page carries the real old-Reddit header (username, karma, mail badge, the
subreddit bar — from /api/me.json) and old Reddit's search box at the top of
the sidebar, right where it belongs. Modtools, wiki, and settings still fall
through to normal Reddit..json path has no SLA; Reddit could close
it. Media embeds/galleries, awards, and live updates aren't reproduced. Treat
this as a proof-of-concept.With Rebuild off (default), the extension is just the CSS skin described above.
npm install
npm start # web-ext run: live-reloading test profile
npm run lint # web-ext lint
npm run build # distributable .zip in web-ext-artifacts/
Click the toolbar button (or open the add-on's preferences in about:addons):
Keyboard nav, comment collapse, hover cards, user tags, back-to-top and inline
expandos are always on. All settings live in storage.local.
A single content script (common.js + rebuild.js) runs at
document_start on www.reddit.com / sh.reddit.com:
fetch('{path}/.json', {credentials:'include'}) (and
/api/me.json, /about.json, morechildren, …) rides your logged-in session.<body>, styled by
vendor/oldreddit.css (the archived 2019 stylesheet, asset
URLs rewritten to redditstatic.com).403) reveals normal Reddit instead of a blank page.| File | Purpose |
|---|---|
manifest.json | MV3 manifest (Firefox + Chrome), registers the content scripts |
rebuild.js | Content script: rebuilds old Reddit from the JSON API + all RES-style features |
vendor/oldreddit.css | Old Reddit's real archived 2019 stylesheet (source) |
vendor/oldreddit.bundled.css | The above with asset URLs rewritten — the file injected at runtime |
vendor/dash.mediaplayer.min.js | dash.js (BSD-3-Clause) — MSE playback for v.redd.it videos with audio |
scripts/build-css.mjs | Rebuilds oldreddit.bundled.css from the source |
common.js | Shared prefs + listing-route parser (content scripts + settings UI) |
settings.js | Wires the toggles to storage |
popup.html / options.html / settings.css | Toolbar popup and options UI |
icons/icon.svg | Source vector icon |
icons/icon-{16,32,48,128}.png | Extension icons (PNG — required by Chrome) |
No build step. The only third-party runtime dependency is
dash.js, vendored at
vendor/dash.mediaplayer.min.js.
MIT — see LICENSE.
This project also bundles dash.js (BSD-3-Clause) — see dash.js's LICENSE.
JavaScript
92.7%
HTML
5.1%
CSS
2.3%
▶ Install for Firefox (addons.mozilla.org) · ▶ Install for Edge (Microsoft Store) · Chrome/Brave/Opera: load unpacked
A browser extension — Firefox and Chrome / Chromium (Edge, Brave, Opera) — that rebuilds Reddit's frontend into old Reddit. It fetches each page from Reddit's JSON API and renders old Reddit's real archived HTML + CSS, then layers on RES-style power features.
What it does:
[+] to reveal a post's image / video / gallery /
self-text; galleries have prev/next.j/k move, o/Enter open, x expand.[–] on any comment; comments new since your last visit
are flagged.Earlier versions were a lighter CSS skin of new Reddit (and before that, a redirect to old.reddit.com). Both were superseded by this full rebuild — see the git history / older releases if you want them.
Rendered from the extension's own output (its builders + the bundled old-Reddit stylesheet) with sample data — not a live-Reddit capture (Reddit blocks this build environment). In your browser it looks the same, with your feeds.
Subreddit listing — header, sidebar (search + rules), ranked posts, vote
arrows, and per-post [+] expandos:

Comments — [–] collapse toggles, the sorted by menu, an inline
preview.redd.it image, and the auto-loading "load more comments":

Night mode (optional dark theme):

▶ Install from Firefox Add-ons (addons.mozilla.org)
https://www.reddit.com/r/pics — and it
renders in the classic layout.about:addons → Classic Layout for Reddit → Preferences (all settings + filters).It's reviewed and signed by Mozilla, so it installs permanently and auto-updates.
.xpi (GitHub Releases).xpi from the
Releases page..xpi onto any Firefox window → click Add, orabout:addons → the gear ⚙️ → Install Add-on From File… → pick the .xpi.The .xpi is signed by Mozilla, so it installs permanently on regular Firefox and
survives restarts.
about:debugging → This Firefox → Load Temporary Add-on….manifest.json in the repo.Firefox only installs a permanent add-on if it's signed by Mozilla. To produce
your own signed .xpi with web-ext:
npm install
npm run lint
npm run sign:unlisted # needs AMO API key + secret; produces a signed .xpi
AMO credentials (a JWT issuer + secret) come from
https://addons.mozilla.org/developers/addon/api/key/, passed via the
WEB_EXT_API_KEY / WEB_EXT_API_SECRET environment variables. Then install the
resulting .xpi as in Option 1.
Note: requires Firefox 142+ (set in
manifest.json).
▶ Install from the Microsoft Edge Add-ons store
One-click install, reviewed by Microsoft — it installs permanently and auto-updates, with no Developer mode needed.
https://www.reddit.com/r/pics — and it
renders in the classic layout.edge://extensions → Details → Extension options (all settings + filters).Edge is Chromium-based, so you can alternatively load it unpacked for development (see the Chrome steps below) — but the store is the easy path.
There's no Chrome Web Store listing yet, so install it unpacked from a clone of this repo. All three are Chromium-based, so the same folder loads in every one of them — no separate build.
chrome://extensionsbrave://extensionsopera://extensionsmanifest.json — the folder itself, not a file).https://www.reddit.com/r/pics — it should be restyled. Pin the toolbar
button via the puzzle-piece 🧩 icon to toggle the skin, or use Details →
Extension options.Heads-up: unpacked extensions run in Developer mode. A browser update or profile reload can auto-disable a dev-mode extension — just re-enable it at
chrome://extensionsif that happens.Polished option: publishing to the Chrome Web Store ($5 one-time developer fee) gives one-click installs that survive updates and need no Developer mode. Brave and Opera can install from the Chrome Web Store too. (Edge already has its own one-click store listing — see above.)
A ready-to-upload package is checked in at
dist/old-reddit-skin-chrome-3.7.6.zip (manifest.json at the zip
root, Chrome-validated, Firefox-only manifest keys stripped). To publish:
To rebuild the zip after changes:
npm run build # web-ext build -> web-ext-artifacts/*.zip
# then strip the Firefox key + repackage into dist/ (see the release build for exact steps)
The same zip also uploads to the free Edge Add-ons store if you ever want an Edge listing.
Turn on Rebuild frontend (toolbar/options toggle) and, on a subreddit /
front-page listing, a post's comments page, a user profile, or a
search, the
extension stops skinning new Reddit and instead rebuilds old Reddit's real
frontend: it fetches the data from Reddit's JSON
API and renders old Reddit's actual #siteTable of .thing.link items — ranks,
vote arrows, thumbnails, taglines, comment counts, an expando button (click to
reveal a post's image/video/gallery/self-text inline), sort tabs, next/prev paging, the
time filter (top/controversial: past hour → all time), and the subreddit
sidebar (description + rules, from /about.json + /about/rules.json) — styled by
old Reddit's genuine archived stylesheet (vendor/oldreddit.css, the 2019 desktop
CSS, bundled with its asset URLs rewritten to redditstatic.com).
How the data works: a content script does a same-origin
fetch('…/.json', {credentials:'include'}) that rides your logged-in session.
Honest limitations (please read):
.json in 2026, so
logged-out visitors get 403. On any non-200 the extension falls back to
letting normal Reddit render — it never leaves the page blank./user/{name} renders the profile (overview/submitted/comments
tabs + karma sidebar); /search renders results with sort/time filters. Every
page carries the real old-Reddit header (username, karma, mail badge, the
subreddit bar — from /api/me.json) and old Reddit's search box at the top of
the sidebar, right where it belongs. Modtools, wiki, and settings still fall
through to normal Reddit..json path has no SLA; Reddit could close
it. Media embeds/galleries, awards, and live updates aren't reproduced. Treat
this as a proof-of-concept.With Rebuild off (default), the extension is just the CSS skin described above.
npm install
npm start # web-ext run: live-reloading test profile
npm run lint # web-ext lint
npm run build # distributable .zip in web-ext-artifacts/
Click the toolbar button (or open the add-on's preferences in about:addons):
Keyboard nav, comment collapse, hover cards, user tags, back-to-top and inline
expandos are always on. All settings live in storage.local.
A single content script (common.js + rebuild.js) runs at
document_start on www.reddit.com / sh.reddit.com:
fetch('{path}/.json', {credentials:'include'}) (and
/api/me.json, /about.json, morechildren, …) rides your logged-in session.<body>, styled by
vendor/oldreddit.css (the archived 2019 stylesheet, asset
URLs rewritten to redditstatic.com).403) reveals normal Reddit instead of a blank page.| File | Purpose |
|---|---|
manifest.json | MV3 manifest (Firefox + Chrome), registers the content scripts |
rebuild.js | Content script: rebuilds old Reddit from the JSON API + all RES-style features |
vendor/oldreddit.css | Old Reddit's real archived 2019 stylesheet (source) |
vendor/oldreddit.bundled.css | The above with asset URLs rewritten — the file injected at runtime |
vendor/dash.mediaplayer.min.js | dash.js (BSD-3-Clause) — MSE playback for v.redd.it videos with audio |
scripts/build-css.mjs | Rebuilds oldreddit.bundled.css from the source |
common.js | Shared prefs + listing-route parser (content scripts + settings UI) |
settings.js | Wires the toggles to storage |
popup.html / options.html / settings.css | Toolbar popup and options UI |
icons/icon.svg | Source vector icon |
icons/icon-{16,32,48,128}.png | Extension icons (PNG — required by Chrome) |
No build step. The only third-party runtime dependency is
dash.js, vendored at
vendor/dash.mediaplayer.min.js.
MIT — see LICENSE.
This project also bundles dash.js (BSD-3-Clause) — see dash.js's LICENSE.
JavaScript
92.7%
HTML
5.1%
CSS
2.3%