Turn a Raspberry Pi Zero 2 W into a portable offline WiFi hotspot serving Wikipedia, medical guides, cooking recipes, TED talks, repair manuals and more β straight to any phone or laptop browser. No internet required. No apps. No subscriptions.
Built for campers, travellers, and anyone who wants knowledge without connectivity.
| Tool | URL | Description |
|---|---|---|
| BASE CAMP | 192.168.4.1 |
Offline knowledge portal powered by Kiwix |
| DEPOT | 192.168.4.1:81 |
File manager with USB drive support |
Connect any phone or laptop to the JayCamp WiFi hotspot, open a browser, and everything works. No setup needed on the client device.
- Raspberry Pi Zero 2 W (~$15)
- 64GB micro SD card (recommended β ~15GB for a solid ZIM library, rest for files)
- Micro USB OTG adapter (for USB drives with DEPOT)
- Power bank or 5V USB power supply
Total cost: ~$25 one time. Zero ongoing costs.
These are the ZIM content packs included in the default portal UI. Download from library.kiwix.org:
| Content | Size | Category |
|---|---|---|
| Wikipedia Top (100k articles) | ~7GB | Encyclopedia |
| MedlinePlus | ~500MB | Health & Medicine |
| Military Field Medicine | ~200MB | Survival & First Aid |
| FOSS Cooking | ~200MB | Recipes |
| Anonymous Planet | ~100MB | Privacy & Security |
| Restarters Wiki | ~300MB | Repair Guides |
| FreeCodeCamp | ~8MB | Coding |
| WikiVoyage (no pics) | ~230MB | Travel Guides |
| TED Talks (7 categories) | ~300MB each | Ideas |
All stored directly on the SD card. A 64GB card comfortably holds all of the above with plenty of room to spare.
Requirements: Raspberry Pi Zero 2 W with Raspberry Pi OS Lite 32-bit (Bookworm) installed.
# SSH into your Pi, then clone the repo
git clone https://github.com/SanjayKotabagi/jaycamp.git
cd jaycamp
# Run the one-command installer
chmod +x scripts/install.sh
sudo ./scripts/install.shThe installer will:
- Install all dependencies (nginx, kiwix, flask, dnsmasq)
- Set up the WiFi hotspot with a password you choose
- Deploy the BASE CAMP portal and DEPOT file manager
- Configure all services to auto-start on boot
- Set up USB drive auto-mounting
After install, copy your ZIM files to /home/pi/library/, run sudo ./scripts/add-zim.sh to index them, then reboot.
Download ZIM files on your computer from library.kiwix.org, copy to the Pi via SCP:
# From your computer:
scp yourfile.zim pi@basecamp.local:/home/pi/library/
# Then on the Pi β index and restart:
sudo ./scripts/add-zim.shAfter adding new ZIMs, add a card in portal/index.html and a location block in nginx/basecamp.conf, then:
sudo ./scripts/deploy-portal.sh
sudo systemctl reload nginxTested on: Raspberry Pi OS Lite 32-bit (Bookworm) on Pi Zero 2 W.
β οΈ Bookworm uses NetworkManager instead of dhcpcd. The installer handles this correctly. Do not follow older tutorials that use hostapd or dhcpcd β they will not work on Bookworm.
jaycamp/
βββ README.md
βββ depot_server.py β DEPOT Flask backend
βββ portal/
β βββ index.html β BASE CAMP portal UI
β βββ files.html β DEPOT file manager UI
βββ nginx/
β βββ basecamp.conf β Nginx config (add ZIM locations here)
βββ systemd/
β βββ kiwix.service
β βββ depot.service
β βββ usb-mount@.service
βββ scripts/
β βββ install.sh β Full one-command installer
β βββ add-zim.sh β Index ZIM files after copying them
β βββ deploy-portal.sh β Push portal UI updates
βββ docs/
βββ MANUAL_SETUP.md β Step-by-step manual setup guide
Edit portal/index.html to add or remove library cards matching your ZIM files. Each card just needs the ZIM book ID (filename without .zim) in the href pointing to http://192.168.4.1:8080/YOUR_ZIM_ID.
Add a matching location block in nginx/basecamp.conf:
location /your_zim_id_here {
proxy_pass http://127.0.0.1:8080;
}Then deploy:
sudo ./scripts/deploy-portal.sh
sudo systemctl reload nginx| Task | Command |
|---|---|
| Add new ZIM files | Copy to /home/pi/library/ then sudo ./scripts/add-zim.sh |
| Update portal UI | sudo ./scripts/deploy-portal.sh |
| Restart Kiwix | sudo systemctl restart kiwix |
| Restart DEPOT | sudo systemctl restart depot |
| Check Kiwix logs | journalctl -u kiwix -n 50 |
| Check disk space | df -h |
| List drives | lsblk |
Prefer doing it step by step? See docs/MANUAL_SETUP.md for the full detailed guide.
MIT β free to use, modify, and share.
Kiwix Β· Flask Β· Nginx Β· NetworkManager
ZIM content from Kiwix Library