I live out in the countryside, so the internet isn’t something I can reliably treat as “always on.” It only takes one violent thunderstorm or a power outage that outlasts the backup batteries in the local cell tower to take me back to the Stone Age. It’s frustrating to say the least, and a solution was needed to fill the gap while I waited for the internet to return.
So, I decided to build an offline mini-internet on my laptop. The project started as a way to have access to useful Linux commands and reading materials when I was forced offline by whatever nature had in store for me. But of course, it soon ballooned into a serious project that deserved its own operating system and virtual machine.
So my “OfflineNet” was created, and I built it inside a Debian Trixie VM, with an Apache web server, Kiwix for free offline wiki files, a large local library, and Recoll for indexed and fast local search. After it was finished, I had turned a few thousand disorganized files into a fully offline mini-internet that worked from both the VM and my host machine.
I rebuilt a real offline music library — and it’s better than streaming
With the right sources and apps, owning your music beats streaming.
I kept the build lightweight and boring on purpose
Debian and XFCE aren’t glamorous, but they’re fast and practical
I used VMWare Workstation rather than VirtualBox for this build because I already have guests running on ESXi and wanted an appliance I could migrate. For the operating system, I chose Debian Linux with an XFCE desktop because I needed something boring and fast rather than pretty and resource-intensive.
The Debian XFCE combination is certainly never going to win a beauty contest, but for a survival VM, its boringness is definitely a feature. It’s lightweight enough for 4GB of memory, familiar, and easy enough to make slightly less ugly with a dark theme and some nice fonts.
The only real update to the distro itself after spinning up the VM and installing Debian was that it needed VMware integration, so I installed OpenVMware tools to enable desktop resizing and clipboard support:
sudo apt install open-vm-tools open-vm-tools-desktopThe last step before installing the required software was to create a folder in the /home directory where the initial files would live before being transferred to /var/www/html:
mkdir ~/OfflineNet
To feel like a mini internet, it first needed a local homepage
A simple Apache web server and a quick HTML page tied it all together
To stop the project from just being a massive directory full of files and folders, it needed a front page. I installed an Apache web server, built a simple local homepage, and used it as the dashboard and landing page for the rest of the project:
- Kiwix for downloading and serving educational content such as Wikipedia, StackExchange, and Gutenberg.
- The reference library of PDF files.
- Recovery Notes.
- Recoll search.
- Startup scripts.
To make it feel a bit more legit, I added a hostname to my Windows hosts file with PowerShell:
Add-Content -Path "$env:windir\System32\drivers\etc\hosts" -Value "`n192.168.226.134 myofflinenet.local"And also to my Linux hosts file:
echo "127.0.0.1 myofflinenet.local" | sudo tee -a /etc/hostsThis way, I could open myofflinenet.local from inside both the VM and from my Windows browser. This one setting made it feel nice and polished, plus it now acts like a tiny local network service.
Kiwix was the key to creating an offline wiki without having to download the entire internet
I found the trick was being selective, because some ZIM files are massive
Kiwix was the platform that was integral in making the project feel like an actual mini-internet, but I had to be sensible about it. Kiwix allowed me to download compressed ZIM files that store huge amounts of web content designed to be viewed offline.
As you can imagine, these files can get massive, and since the VM was to be self-contained, I needed to be selective about what I downloaded. I gave myself a 20GB limit and picked out useful ZIM files like medicine, offline maps, DIY, and some Linux cheat sheets from the Kiwix library’s website.
Installing Kiwix was refreshingly simple:
sudo apt install kiwix-tools After installation, I copied the ZIM files into my ~/OfflineNet/zim folder. Since Kiwix serves the files locally, I could just open them once I started Kiwix on port 8080:
kiwix-serve --port=8080 ~/OfflineNet/zim/*.zimThat created a local wiki at http://myofflinenet.local:8080, and I added that link to my local home page and republished it on Apache.
I kept the library folders simple for a good reason
When there’s no internet, you need well-organized folder structures so you don’t lose your mind
The Kiwix wiki was super flashy, but the plain folders were just as important because they held important information as well. I created /library, /notes, and /downloads in /var/www/html and created static HTML pages in each directory that listed the contents.
The key was to keep everything simple, no flashy HTML effects, and a folder structure that made sense to me and was easy to navigate without the use of optimization tools. The folder structure was basic on purpose:
mkdir -p ~/OfflineNet/{zim,library,web,notes,scripts}Apache then served the directories through those simple local paths:
- http://myofflinenet.local/library/
- http://myofflinenet.local/notes/
- http://myofflinenet.local/downloads/
Since Apache’s default directory listings still look like an FTP server from 1998, I replaced these with static index pages with some CSS for the library, notes, and downloads folders. They still had the same simplicity, just a bit nicer to look at.
Recoll turned 1000s of unruly files into a searchable offline platform
Even with the best intentions, it’s hard to keep track of 1000s of PDFs without some indexation
Saving files is easy. Organizing them so you can still find them six months later, with no internet, while already being annoyed, is another story. I decided the project needed indexation and a way to search through files with keywords. Recoll fits this project perfectly because it can find and organize files even if you delete the folder structure altogether.
I installed Recoll with:
sudo apt install recollThen I ran it from the Applications menu and pointed it straight at ~/OfflineNet and let it find all the notes, PDFs, saved pages, and local documents. Recoll also creates keyword lists and can autocomplete your search query, even when offline. After that, I could just search for whatever I needed, and Recoll dragged up any file containing the keyword(s).
Recoll basically gave my offline internet project its own search engine, and all without a single database server, web app, or anything that needed babysitting. At this point, the VM was ready to be exported to OVF for future use and stashed on an external hard drive for the next inevitable prolonged internet outage.
The first chance to test it out offline came sooner than expected
The internet disappeared, but my local knowledge hub saved the day
No sooner than I had finished the final build for the project, I was hit with an internet outage. Not because of any severe weather event, but just boring old scheduled maintenance. It was the perfect opportunity to test out the mini internet project, and what better way than to use it to find me something to cook for dinner?
I booted up the VM, waited for the automated scripts to spin up Kiwix, and started looking for a recipe to try. The homepage loaded instantly, and Kiwix was ready to go within seconds of logging in. This was a great test because it showed the project was robust, and better yet, it was lightning-fast. Recoll could still search through the local documents I indexed earlier. And unlike the Windows Start menu search, which still relies on internet connectivity, the system didn’t even notice the internet was missing.
I soon found a recipe for air-fried zucchini in one of my public-domain recipes on Kiwix, and enjoyed a lovely evening just reading a book. It wasn’t the whole World Wide Web, but it was just what I needed anyway.
I’d definitely build it differently next time, but I’m still keeping this version
Small, boring, and searchable is the winning combo for a mini offline project, but I want something bigger
This version of the project worked well as a proof of concept, mainly because it was small and agile. While it’s working great, I definitely feel the need to improve on it and take it further. Next time, I’d give the VM some attached storage and add an offline chatbot via a dedicated private LLM.
For now, I’ll keep adding smaller files and building a better offline library while patiently awaiting the next internet outage due to a thunderstorm, maintenance, or someone forgetting to use the call-before-you-dig number.

