A native Reddit client for the Nintendo Switch.
Because somewhere between Mario Kart races, you deserve to know what strangers on the internet are angry about today.
Yes, this is real: a homebrew NRO (C · libnx · SDL2) that turns the world's premier Mario machine into the world's most ergonomic doomscrolling device. The UI copies the official Reddit Android app's dark theme — card feed with thumbnails, fullscreen image viewer with zoom, video/GIF playback via ffmpeg, touch + controller support, and search through the on-screen keyboard.
Browse signed out (public RSS feeds), or sign in to your own account and get the full experience: scores, comments, your home feed, profiles, voting, saving, and posting comments with a Joy-Con. Your typos, now in 720p.
Warning
The boring-but-important part: running homebrew requires a console with CFW (Atmosphère) and carries a real risk of a Nintendo ban. Tools like 90DNS/Incognito reduce the risk but do not eliminate it. Nintendo does not share your enthusiasm for this project.
- Card feed with thumbnails, images, GIFs, and Reddit-hosted video — the full balanced breakfast
- Optional account login (OAuth) — scores, comments, home feed, profiles, vote/save/comment
- QR + phone-helper login — nothing to type on the console, because typing a 30-character OAuth code with a joystick is a war crime
- Fullscreen image viewer with zoom & pan; ffmpeg player with seeking (hardware-decoded, the Tegra finally doing what it was born for)
- TLS certificate verification with a bundled CA — yes, a homebrew app that actually checks certificates. We're as surprised as you are.
- Full controller + touch support. Upvote with L, downvote with R, question your life choices with either.
- Grab the latest release
and unzip
switch-dit-v*.ziponto your SD card (it drops aswitch/folder in place). - Start a companion server:
node server.js. - Tell the app where it lives, in
sd:/switch/switch-dit/config.ini:server=http://192.168.1.11:8080 - Launch switch-reddit from the Homebrew Menu. Congratulations, r/all is now a handheld experience.
That's the signed-out setup. For the deluxe tour, see Signing in below.
Short version: Reddit doesn't want to talk to your Switch, so we hired an interpreter.
Long version: Reddit shut down unauthenticated .json access in May 2026, and its edge
blocks unfamiliar TLS fingerprints on sight — and a game console speaking mbedTLS is
about as familiar to it as a fax machine. The companion server is an ordinary Node
process that Reddit has no beef with. Depending on mode it:
- reads Reddit's public RSS feeds (signed out), politely: one request every 6 s, 20-minute cache, exponential backoff on 429 — basically the world's most patient feed reader;
- proxies the OAuth token exchange and official API when signed in, since Reddit 403s the console's TLS handshake but happily serves the exact same request from Node;
- proxies images and video (HLS) so the console never has to introduce itself to Reddit directly;
- serves a small phone login helper page, sparing you the joystick-keyboard.
Two ways to run it:
- On your home network (a spare PC or a Raspberry Pi). Best for signed-out use —
home IPs can fetch public RSS. Address looks like
http://192.168.1.11:8080. - On a cheap/free cloud VM behind HTTPS (this repo's lives at
https://dit.menaworks.xyz, Caddy + Let's Encrypt). Best signed-in: works from anywhere, no PC humming in the corner. Datacenter IPs can't fetch anonymous RSS, but once you're logged in nobody misses it.
One file, zero dependencies, Node 18+. The package.json industrial complex weeps:
node server.js
It prints the LAN address to use — put that in sd:/switch/switch-dit/config.ini as
shown in Quick start.
For development you can skip the config file and yeet the address over the network:
docker run --rm -v "$PWD/homebrew:/app" devkitpro/devkita64:latest \
nxlink -s -a <switch-ip> /app/switch-reddit.nro server=http://192.168.1.11:8080
Uses OAuth's authorization-code flow: your password never touches this app, and 2FA works because you log in on Reddit's own page like a civilized person.
1. Get a client id. Create an installed app at
https://www.reddit.com/prefs/apps with redirect URI http://localhost:8080, and put
the id in config.ini:
client_id=YOUR_APP_ID
Reddit often denies new app requests these days (they're going through something). If so, you can reuse an open-source client's id (e.g. RedReader) — then its redirect URI and user agent must match exactly:
client_id=REDREADER_APP_ID
redirect_uri=redreader://rr_oauth_redir
user_agent=org.quantumbadger.redreader/1.25.2
2. Sign in on the Switch. Press − in the feed. A QR code appears — scan it with
your phone, tap Allow on Reddit, paste the resulting redreader://…?code=… address
back into the helper page, and walk away. The Switch polls the server, finishes the
login by itself, and greets you by name. Total characters typed on the console: zero.
The session persists (refresh token on the SD card) and auto-refreshes. Log in once, doomscroll forever.
No companion server? The account screen falls back to showing the auth URL and letting
you type the code in manually. It builds character.
For a console app whose main job is showing you cat pictures, this got surprisingly serious:
- Keep the bundled
cacert.pematsd:/switch/switch-dit/cacert.pemand the client verifies TLS certificates. Without it, traffic is still encrypted but the server's identity is taken on faith — like meeting someone from Craigslist. - Use an
https://server address so tokens never travel in plaintext. The cloud deployment terminates TLS with Caddy/Let's Encrypt, exposes only 22/80/443, rate-limits the public relay, and keeps the app port internal. - Secrets (
config.ini,token.txt) are gitignored and never committed. Your refresh token's business is its own.
Feed
| Button | Action |
|---|---|
| Left stick / D-pad | Navigate / scroll |
| A | Open post |
| B | Back / up one level |
| X | Cycle sort (Hot → New → Top) |
| Y | Search posts |
| ZR | Save the selected post's subreddit locally |
| ZL | Local saved subreddits |
| L / R | Home / Popular |
| − | Account screen (login, profile, sign out) |
| + | Exit (there is no algorithm keeping you here — this is a feature) |
| Touch | Cards, bottom tabs |
In a post (signing in unlocks the responsibility buttons)
| Button | Action |
|---|---|
| A | Fullscreen image |
| Y | Play video/GIF |
| X | Open in the Switch browser |
| L / R | Upvote / downvote |
| ZL | Save / unsave on Reddit |
| ZR | Open the author's profile |
| − | Write a comment (with the on-screen keyboard; keep it short, hero) |
| B | Back |
docker run --rm -v "$PWD/homebrew:/app" -w /app devkitpro/devkita64:latest make
Output: homebrew/switch-reddit.nro. If the link order of freetype and harfbuzz ever
changes, light a candle.
server.js— RSS reader + JSON API, OAuth/token & official-API proxy, image/video proxy, phone login helper, disk-backed cache, rate limiting. One file. It's had a life.public/— optional browser UI for the same server (works in the Switch browser)homebrew/source/main.c— UI, navigation, feeds, account screens, image viewerhomebrew/source/net.c— sockets, HTTP(S), OAuth flow, config, TLS, rate limitinghomebrew/source/reddit.c— feed/comment/account parsing (RSS, server, official API)homebrew/source/rss.c— standalone Atom parser (used when no server is set)homebrew/source/player.c— ffmpeg video/GIF playerhomebrew/source/qrcodegen.*— QR generator for login (Nayuki, MIT)homebrew/cacert.pem— Mozilla CA bundle, because trust is earned