



Nomad: The Worlds Smallest Media Server with Movies, Books, Music, Maps, Games, and Offline Wikipedia (Open Source, 1k Stars on Github)
(posted under software as its mostly software.. but keep in mind this is a hardware project too... its a doohicky there isnt a flare for that lol. I checked with the mods before posting the project)
Howdy folks!
I'm back (again lol) to show off a new major update on Nomad. I posted a few months ago with general improvements, but this time I have a bunch of major changes that improve the system's abilities and features (alongside more optimizations, as usual).
This is Jcorp Nomad. It's a pocket-sized open-source media server built around an ESP32-S3. It makes its own Wi-Fi hotspot and serves a browser-based library, so you can stream movies, shows, music, books, comics, and files with no internet, no app, and no server stack. It's about the size of a thumbdrive and runs off any USB power source, with no apps or downloads needed on the client device.
I run a Jellyfin server at home and I'm not trying to replace it. If you already have a media library sitting on your NAS, this is just a way to throw a slice of it in your pocket and take it with you, no rack, no network, no internet required. I travel a lot for school and work, and I got tired of carrying a router, a mini PC, and a pile of software just to have a library with me. I also road trip with friends pretty often, and as the host of all my friends' online services I wanted a good travel solution. Like many people I started with a mini PC, then a Pi, and kept looking for smaller solutions, which led me to the pretty insane idea of seeing how small I could get the system. Turns out pretty small.
I never planned on publishing it. Really glad I did, because most of the features it has now came from people's feedback and ideas. (This project is a year old now, and like 90% of the features are stuff people on Reddit asked me to add lol. It's gone wayyy beyond what I originally needed it for.)
What it does:
- Creates its own Wi-Fi hotspot with a captive portal. Connect and the UI just shows up in your browser.
- Streams movies, shows, music, books, comics, images, and general files off a microSD card.
- Works on anything with a browser. Phones, tablets, a Steam Deck, a work laptop you can't install anything on.
- Multiple people can connect at once and each pull their own separate streams.
- Remembers playback position on movies and shows, as well as some other media.
- Full offline Wikipedia and ZIM archive support, with fast on-device search.
- Lightweight admin panel for files, settings, indexing, and themes/custom CSS.
- Runs entirely offline once it's set up. Extremely low power.
- 3D printable case files included.
Offline Wikipedia / ZIM support
You use the Nomad Tools app on your PC to process ZIM files (you can do multiple, and add more later) from Kiwix or similar, then browse and search full offline Wikipedia, Gutenberg, TED talks, whatever else comes in that format. Images, GIFs, video, and EPUB books inside those archives all work in the browser. It's not perfect yet, but it works for 90% of general uses.
The hard part was search. You can't scan a 140GB file on a microcontroller with a couple hundred KB of usable RAM. So that work moved off the device entirely. A companion PC tool prebuilds a compact index next to the archive, and Nomad only ever does small seeks into a prepared structure. Search on the full 140GB Wikipedia-with-images build is fast, which I still think is a little ridiculous (it's mostly instant even for the full wiki).
New stuff on the experimental branch
Main is the stable branch. Experimental is where things are a bit rougher. I try to keep it all functional and I appreciate any testing anyone wants to do, since the fun features end up there first. Worth noting that assuming your setup is the same as mine, everything in experimental will be functional, just not finished usually.
exFAT support. This is the big one and it's what people have asked for since day one. FAT32 has been Nomad's oldest limitation, cards over 32GB needed a reformat first and no single file could go over 4GB, which is why large ZIMs need to be split into parts and movies need to stay small. Both of those are gone now. Cards mount as exFAT, FAT32 or FAT16, auto-detected at boot, nothing to configure. An SDXC card works exactly as it comes out of the package.
The reason it took so long is really stupid. The Arduino ESP32 core ships a prebuilt filesystem library with exFAT compiled out of it, and there's no flag or define to turn it back on from a sketch. The only real fix was to stop using it and swap the whole thing over to SdFat, which brings its own filesystem code. Everything above that layer talks to it the same way it always did, but it was a lot of plumbing. I knew this was the fix for a while, but it only works if you fully disable the stock system. I couldn't get it working initially because I was trying to keep the old one for FAT32 support instead of just using SdFat for both.
Offline maps. Map regions go in /Maps and you get a real browsable map based on map tiles. Right now it's not very fleshed out, but eventually I'll be improving it with navigation on the map tiles, and I want to hook in StreetZim (this project is insane, everyone should check it out).
Games. Drop ROMs in /Games and play them in the browser through EmulatorJS. GB, GBC, GBA, NES, SNES, Genesis and others. It also ships with Chess, Go, Connect Four, Tic-Tac-Toe and a shared whiteboard as plain HTML files. Adding games works the same as media pages like Movies, with image/cover support as well.
Local multiplayer. Two-player game rooms over the Nomad's own Wi-Fi. One person makes a room, shares a 4-character code, the other joins from their own phone. Chess, Go, Connect Four and Tic-Tac-Toe all support it. Still very open to ideas for games that would work well with three or four players. I also want to add a computer opponent at some point, but I have literally no idea how to do that yet.
Key limitations, to be blunt:
- It is not trying to replace Jellyfin or Plex. This is the thing you throw in your bag, not your home server.
- It's still a microcontroller. It works best with web-optimized media and sensible bitrates. No live transcoding, no flawless 4K. Encode your stuff to 480p and you can comfortably run many devices at once. It supports better quality (even 1080p), but I still recommend modest encodes.
- Storage is microSD. Great for portability, not a permanent archive. KEEP A BACKUPPPPP.
- Initial setup takes some work. Once it's configured the goal is that you connect, open the page, and it's just there.
- This project trusts the user. It gives you direct filesystem access and doesn't hide the technical bits behind guardrails. If you like tinkering that's a feature. If you delete something important, well, that's on you. 😅 I've added the option to lock down a lot of these features so it's safer for kids to watch media on, but still keep it in mind.
- It's a student-built open-source project. There will be bugs and the occasional questionable design decision. If you find something broken please tell me.
Other things in progress
Nomad Lite, a stripped-down version targeting a wider range of boards. And Voyager, which is the same experience running on Linux/SBC hardware for people who want more headroom than a microcontroller can give. That one's basically done, just polishing.
I'm a mechanical engineering student, so software isn't my specialty. This has been by far the biggest programming project I've taken on and it's basically been my excuse to learn embedded, web dev, and networking. Parts are cheap and off the shelf, the build takes well under an hour, and I'd genuinely rather people build their own. I do offer prebuilts since people ask, but it's the same open-source code either way and you can always flash the latest yourself.
- GitHub: https://github.com/Jstudner/jcorp-nomad
- Build guide: https://www.instructables.com/Jcorp-Nomad-Mini-WIFI-Media-Server/
- Project site / prebuilts: https://nomad.jcorptech.net
- Support: https://ko-fi.com/jcorptech
Thanks for reading! Happy to answer anything, hardware, the ZIM indexing, why exFAT was such a pain, whatever you've got. Anything to yap about my project lol.
-Jackson
TLDR: Tiny media server, works with multiple users at the same time just like a real one, uses very little power, while still having a ton of features and file support. Runs entirely in the browser over a wifi connection. doesnt need any installs or apps on the client, just a browser. works great for camping and stuff.
*edited to markdown