The topic I built this tiny offline internet and now I can get answers during an outage is currently the subject of lively discussion — readers and analysts are keeping a close eye on developments.
This is taking place in a dynamic environment: companies’ decisions and competitors’ reactions can quickly change the picture.
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.
With the right sources and apps, owning your music beats streaming.
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:
The 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:

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:
To make it feel a bit more legit, I added a hostname to my Windows hosts file with PowerShell:
This 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 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.
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:
That created a local wiki at http://myofflinenet.local:8080, and I added that link to my local home page and republished it on Apache.
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:
Apache then served the directories through those simple local paths:
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.
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.
Then 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.
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.
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.