Jan 03, 2026

Roaming Library (Port to ESP32)

Porting Project Bookmark to the ESP32 MCU from the ESP12 (ESP8266) MCU

Project Bookmark (stylized as Pr0j3kt B00km4rk) is a simple low cost device consisting of an ESP8266 (AKA ESP12) MCU and an attacked micro SDCard slot. The device sets up a captive wifi portal and allows others to connect to it's network then access a captive portal that serves up text files (.txt, .pdf, .epub, etc) and hosts a simple forum. The idea is to be a modern variation of a sneakernet where data (reading material) can be shared with others without requiring the use of the internet, and without surveillance.

A friend, The Slugnoodle, came up with the idea and created the original Project Bookmark devices. He kindly sent me a couple to play with and I loved getting hands on with the devices. I quickly realized, though, that this could be extended further with a more powerful MCU like the ESP32S3, especially if you got one with an external antenna connector that might extend the range of the wireless network it creates.

An idea was born...

So - with that idea in mind, I set out to port the Project Bookmark code to the ESP32, an MCU I know and love and base many (if not nearly all) of my projects on. I like it because it's cheap, it's powerful, and it's readily available. Many projects use them, so they're very well supported and a known quantity. There are other just as capable MCUs - but this one fit the bill.

The port itself was relatively straightforward - the trickiest part, which wasn't all that tricky, was to identify the pin map so I could correctly set the pins to read from the MicroSD slot, since that's where everything is stored.

I also happened to have an ESP32S3 with an attached TFT display (from Adafruit), and built a customized version of the firmware that utilized the TFT display to display stats about the device. Only ONE of these versions exist (to my knowledge), and that's in the hands of one of my friends.

This updated / ported version (anything based on but not exactly the original) is called Roaming Library.

Further modifications...

My buddy Ben Brown took this one step further and forked my code of the port and modified it extensively to be far more useful by adding an async web server and shrinking the size of the firmware by moving the html code out of the firmware and into storage on the SDCard. This was after we did a field test of the roaming library and found that multiple users at the same time would result in blocking and timeouts. His modifications fixed that problem and he has at least one Roaming Library deployed out in public with people using it.

I used his modified version of roaming library for the version on the hackers.town pager.