An open-source, pocket-sized speed reader built on ESP32.
Open the web companion | Releases | v0.0.9 notes | Discord
RSVP Nano is a small standalone reader that presents text one word at a time using Rapid Serial Visual Presentation. It also supports page reading when you want surrounding context. Books, articles, settings, fonts, themes, languages, and reading progress live on a microSD card.
The project includes:
RSVP Nano is under active development. The current release line is 0.x, so back up important SD
card content before testing new firmware.
You need a supported RSVP Nano board, a USB-C data cable, and a FAT32 microSD card. An 8 GB to 32 GB card is the safest choice.
Chrome or Edge is required for browser flashing and USB companion access because those features use Web Serial. The site still supports local-network management in browsers that can reach the reader.
The web installer uses the firmware bundled with the latest published release. You can also choose a
compatible full-image .bin file manually. Firmware already installed on a Nano can update through
the device's OTA flow.
| Board | PlatformIO environment | Distribution |
|---|---|---|
| Waveshare ESP32-S3 Touch LCD 3.49 rev1 | waveshare_esp32s3_touch_lcd_349_rev1 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch LCD 3.49 rev2 | waveshare_esp32s3_touch_lcd_349_rev2 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch AMOLED 1.8 V1 | waveshare_esp32s3_touch_amoled_18_v1 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch AMOLED 1.8 V2 | waveshare_esp32s3_touch_amoled_18_v2 | Web installer, OTA, source; still experimental |
| Waveshare ESP32-S3 Touch AMOLED 2.06 | waveshare_esp32s3_touch_amoled_206 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch AMOLED 2.16 | waveshare_esp32s3_touch_amoled_216 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch AMOLED 2.41 V1 | waveshare_esp32s3_touch_amoled_241 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch AMOLED 2.41 V2 | waveshare_esp32s3_touch_amoled_241_v2 | Web installer, OTA, source; hardware validation pending |
| Waveshare ESP32-C6 Touch LCD 1.47 | waveshare_esp32c6_touch_lcd_147 | Web installer, OTA, source |
Most LCD 3.49 readers use rev1. Try rev2 when the display works but backlight control does not.
For AMOLED 2.41, choose V2 only for a Rev2.0 PCB or V2 QC label. Reset/interrupt wiring is different; V1 and V2 firmware are not interchangeable. Both use the regular UI.
The following purchase links are affiliate links. A purchase may support RSVP Nano at no extra cost to you:
| Companion | UI | Status |
|---|---|---|
| Web | Compose Multiplatform on Kotlin/Wasm | Hosted setup, flashing, conversion, USB, and LAN management |
| Android | Jetpack Compose | Build from source |
| iOS | SwiftUI | Build from source |
The companions share device models, API contracts, conversion, persistence formats, and workflows. Their layouts remain platform-specific.
To connect over Wi-Fi, open Companion Sync on the Nano. The apps prefer a reader discovered on the
same local network and can fall back to the Nano's direct RSVP-Nano-xxxxxx network or a manual
address. The web companion can also connect directly over USB on supported desktop browsers.
The firmware creates its standard folders when writable storage is available. The main layout is:
/library/books
/library/articles
/config
/fonts
/locales
/themes
Older cards using /books are migrated to /library without overwriting existing files. The same repair and validation pass is available from the Nano's Device screen and from the web or mobile companion while connected.
Books and articles may be uploaded by a companion or copied directly to the card. The reader creates
rebuildable .ridx and .rdat index files plus hidden .rstate.toml files for durable progress and
per-book typography.
Always eject USB mass storage before disconnecting it. Run the on-device SD card check if the library is missing, read-only, or using an unexpected filesystem layout.
Configuration is stored as versionless TOML. See Configuration for settings, RSS, focus timers, themes, NVS mirroring, and recovery behavior.
Clone submodules first:
git clone --recurse-submodules https://github.com/ionutdecebal/rsvpnano.git
cd rsvpnano
Install PlatformIO, then build one target:
pio run -e waveshare_esp32s3_touch_lcd_349_rev1
Upload to a connected board:
pio run -e waveshare_esp32s3_touch_lcd_349_rev1 -t upload
Run native firmware tests:
pio test -e native_test
Companion builds require JDK 17. Android also requires the Android SDK; iOS requires macOS and Xcode.
# Browser tests and staged Pages distribution
./gradlew checkWeb
# Shared tests and Android release build
./gradlew checkAndroid
# Shared iOS compilation and simulator tests
./gradlew checkIos
The staged website is written to build/webSite. Detailed native setup is in the
Android and
iOS guides.
| Path | Purpose |
|---|---|
src/ | Firmware application, board ports, reading engine, UI, storage, networking, and companion API |
companion/shared/ | Shared companion models, API clients, persistence, and workflows |
companion/conversion/ | Shared Kotlin Multiplatform document conversion |
companion/apps/ | Android, iOS, and web applications |
fonts/, themes/, locale-packs/ | Installable catalogs |
localization/ | Locale and UI-font generation |
test/ | Native firmware tests |
docs/ | Protocol, configuration, hardware, and release documentation |
Issues and focused pull requests are welcome. Before opening a change:
For questions, hardware reports, and development discussion, join the RSVP Nano Discord.
RSVP Nano is distributed under the MIT license. Bundled fonts and third-party libraries retain their own licenses in their respective directories.
545 followers · starred May 2026
662 followers · starred Apr 2026
48 followers · starred May 2026
157 followers · starred Jul 2026
An open-source, pocket-sized speed reader built on ESP32.
Open the web companion | Releases | v0.0.9 notes | Discord
RSVP Nano is a small standalone reader that presents text one word at a time using Rapid Serial Visual Presentation. It also supports page reading when you want surrounding context. Books, articles, settings, fonts, themes, languages, and reading progress live on a microSD card.
The project includes:
RSVP Nano is under active development. The current release line is 0.x, so back up important SD
card content before testing new firmware.
You need a supported RSVP Nano board, a USB-C data cable, and a FAT32 microSD card. An 8 GB to 32 GB card is the safest choice.
Chrome or Edge is required for browser flashing and USB companion access because those features use Web Serial. The site still supports local-network management in browsers that can reach the reader.
The web installer uses the firmware bundled with the latest published release. You can also choose a
compatible full-image .bin file manually. Firmware already installed on a Nano can update through
the device's OTA flow.
| Board | PlatformIO environment | Distribution |
|---|---|---|
| Waveshare ESP32-S3 Touch LCD 3.49 rev1 | waveshare_esp32s3_touch_lcd_349_rev1 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch LCD 3.49 rev2 | waveshare_esp32s3_touch_lcd_349_rev2 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch AMOLED 1.8 V1 | waveshare_esp32s3_touch_amoled_18_v1 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch AMOLED 1.8 V2 | waveshare_esp32s3_touch_amoled_18_v2 | Web installer, OTA, source; still experimental |
| Waveshare ESP32-S3 Touch AMOLED 2.06 | waveshare_esp32s3_touch_amoled_206 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch AMOLED 2.16 | waveshare_esp32s3_touch_amoled_216 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch AMOLED 2.41 V1 | waveshare_esp32s3_touch_amoled_241 | Web installer, OTA, source |
| Waveshare ESP32-S3 Touch AMOLED 2.41 V2 | waveshare_esp32s3_touch_amoled_241_v2 | Web installer, OTA, source; hardware validation pending |
| Waveshare ESP32-C6 Touch LCD 1.47 | waveshare_esp32c6_touch_lcd_147 | Web installer, OTA, source |
Most LCD 3.49 readers use rev1. Try rev2 when the display works but backlight control does not.
For AMOLED 2.41, choose V2 only for a Rev2.0 PCB or V2 QC label. Reset/interrupt wiring is different; V1 and V2 firmware are not interchangeable. Both use the regular UI.
The following purchase links are affiliate links. A purchase may support RSVP Nano at no extra cost to you:
| Companion | UI | Status |
|---|---|---|
| Web | Compose Multiplatform on Kotlin/Wasm | Hosted setup, flashing, conversion, USB, and LAN management |
| Android | Jetpack Compose | Build from source |
| iOS | SwiftUI | Build from source |
The companions share device models, API contracts, conversion, persistence formats, and workflows. Their layouts remain platform-specific.
To connect over Wi-Fi, open Companion Sync on the Nano. The apps prefer a reader discovered on the
same local network and can fall back to the Nano's direct RSVP-Nano-xxxxxx network or a manual
address. The web companion can also connect directly over USB on supported desktop browsers.
The firmware creates its standard folders when writable storage is available. The main layout is:
/library/books
/library/articles
/config
/fonts
/locales
/themes
Older cards using /books are migrated to /library without overwriting existing files. The same repair and validation pass is available from the Nano's Device screen and from the web or mobile companion while connected.
Books and articles may be uploaded by a companion or copied directly to the card. The reader creates
rebuildable .ridx and .rdat index files plus hidden .rstate.toml files for durable progress and
per-book typography.
Always eject USB mass storage before disconnecting it. Run the on-device SD card check if the library is missing, read-only, or using an unexpected filesystem layout.
Configuration is stored as versionless TOML. See Configuration for settings, RSS, focus timers, themes, NVS mirroring, and recovery behavior.
Clone submodules first:
git clone --recurse-submodules https://github.com/ionutdecebal/rsvpnano.git
cd rsvpnano
Install PlatformIO, then build one target:
pio run -e waveshare_esp32s3_touch_lcd_349_rev1
Upload to a connected board:
pio run -e waveshare_esp32s3_touch_lcd_349_rev1 -t upload
Run native firmware tests:
pio test -e native_test
Companion builds require JDK 17. Android also requires the Android SDK; iOS requires macOS and Xcode.
# Browser tests and staged Pages distribution
./gradlew checkWeb
# Shared tests and Android release build
./gradlew checkAndroid
# Shared iOS compilation and simulator tests
./gradlew checkIos
The staged website is written to build/webSite. Detailed native setup is in the
Android and
iOS guides.
| Path | Purpose |
|---|---|
src/ | Firmware application, board ports, reading engine, UI, storage, networking, and companion API |
companion/shared/ | Shared companion models, API clients, persistence, and workflows |
companion/conversion/ | Shared Kotlin Multiplatform document conversion |
companion/apps/ | Android, iOS, and web applications |
fonts/, themes/, locale-packs/ | Installable catalogs |
localization/ | Locale and UI-font generation |
test/ | Native firmware tests |
docs/ | Protocol, configuration, hardware, and release documentation |
Issues and focused pull requests are welcome. Before opening a change:
For questions, hardware reports, and development discussion, join the RSVP Nano Discord.
RSVP Nano is distributed under the MIT license. Bundled fonts and third-party libraries retain their own licenses in their respective directories.
545 followers · starred May 2026
662 followers · starred Apr 2026
48 followers · starred May 2026
157 followers · starred Jul 2026