TapTapPaw is an interactive desktop companion inspired by the Bongo Cat meme, turning your everyday computer activity into a cute, living desk experience.
When you type on your keyboard, tiny paw taps animate on the screen. When you move your mouse, the character reacts playfully. Soft sound effects respond to clicks and keystrokes, making your workflow feel alive.
Behind the cuteness is a real-time hardware bridge, designed for boards like the recommended ESP32 2.8" purple capacitive touch screen. It streams system stats, clock data, and media information directly from your computer.
TapTapPaw is not just a monitor. Itβs a tiny animated desk buddy that reacts to you in real time.
- π Live Clock β Analog or digital clock with animated hands
- π±οΈ Input Awareness β Reacts to keyboard and mouse activity
- π System Telemetry β CPU, RAM, battery level, charging status
- π΅ Music Status β Displays current playback state and track info (Youtube/Spotify/Music)
- βοΈ Weather Condition β Displays current weather condition by current geolocation
- π§Έ Cute UI β Designed with playful animations using LVGL
- π Low-Latency Serial Link β Efficient binary protocol over USB
- π Auto backlightβ Shifts brightness based on ambient light levels.
- π Screen Rotation βΒ Swtichable screen rotation 180 degree
- π Auto sleep β Display will be automatically turned off after disconnected for 5 minutes
TapTapPaw/
βββ app/ # Desktop tray application (Electron + Node.js)
βββ sketch/ # ESP32 firmware (PlatformIO + LVGL)
See changelog
The desktop app runs quietly in the system tray (Windows) or menu bar (macOS). It listens for global events and streams structured data to the ESP32 over USB serial.
- Global keyboard & mouse monitoring
- System stats polling (CPU, RAM, Battery, Time)
- Media playback detection (title / artist / state)
- Automatic serial port discovery
- Cross-platform support (macOS & Windows)
-
Download the latest
.dmgfrom Releases -
Drag TapTapPaw.app into Applications
-
Grant Accessibility and Input Monitoring permissions:
- System Settings β Privacy & Security
-
Launch the app and select the ESP32 serial port
-
In case there is pop-up (βTapTapPaw.appβ is damaged and canβt be opened. You should move it to the Trash.")
To fix this , open the terminal and run this command
"sudo xattr -rd com.apple.quarantine /Applications/TapTapPaw.app"
- Download the latest
.exeinstaller from Releases - Run the installer
- Launch TapTapPaw from the system tray
- Select your ESP32 serial port
cd app
npm install
npm run devBuild binaries:
npm run build:mac # macOS
npm run build:win # WindowsThe firmware runs on an ESP32 and renders visuals using LVGL. It parses incoming binary packets and updates animations in real time.
-
Recommended Board ESP32 2.8" purple capacitive touch screen

-
Speaker 1 Watt 9x22 mm. β https://s.click.aliexpress.com/e/_c3fTkgxl
-
Screw M2.3 x 4 = 4 pcs
-
USB C Cable: To connect to your PC/Mac.
- Install VS Code
- Install the PlatformIO IDE extension
- Open the
sketch/folder - Connect ESP32 via USB
- Click Upload in PlatformIO
(For resistive touch screen only) Touch screen calibration will be displayed during the first run, but can also be manually entered by pressing the RESET button and releasing, then pressing the BOOT (GPIO_0) button within one second and holding it for a second.
Communication uses a lightweight binary protocol optimized for embedded devices.
- Baud rate: 115200
- Start byte:
0xFF - Length-prefixed payloads
Host sends a 2-byte ping to query the firmware version. The device responds with a plain-text version string over serial (e.g. 1.0.3).
Request
| Byte | Field | Description |
|---|---|---|
| 0 | START | 0xFF |
| 1 | TYPE | 0x00 (Version) |
Response
- ASCII text line: firmware version string (no binary framing)
| Byte | Field | Description |
|---|---|---|
| 0 | START | 0xFF |
| 1 | TYPE | 0x01 (Status) |
| 2 | LEN | Payload length |
| 3 | EVT | Input bitmask |
| 4 | CPU | CPU usage (%) |
| 5 | MEM | RAM usage (%) |
| 6 | BAT | Battery (%) |
| 7 | CHG | Charging (1/0) |
| 8 | HOUR | Hour (0β23) |
| 9 | MIN | Minute (0β59) |
| 10 | SEC | Second (0β59) |
| 11 | MEDIA | Media state |
| Byte | Field | Description |
|---|---|---|
| 0 | START | 0xFF |
| 1 | TYPE | 0x02 (Music) |
| 2 | LEN | Total payload length |
| 3 | T_LEN | Title length |
| β¦ | TITLE | UTF-8 title |
| β¦ | A_LEN | Artist length |
| β¦ | ARTIST | UTF-8 artist |
| Byte | Field | Description |
|---|---|---|
| 0 | START | 0xFF |
| 1 | TYPE | 0x03 (Weather) |
| 2 | LEN | Payload length (5) |
| 3 | W_GROUP | Weather group ID (0-4) |
| 4 | TEMP_C | Temperature in Celsius |
| 5 | HUMID | Humidity (%) |
| 6 | OBSERVED_H | Observation time hour (0-23) |
| 7 | OBSERVED_M | Observation time minute (0-59) |
The weather group ID corresponds to conditions like Clear (0), Clouds (1), Rain (2), etc. The device firmware uses this ID and the observation time to display the correct icon (e.g., sun or moon for clear skies).
- Electron β Desktop application framework
- Node.js β System telemetry & serial transport
- uiohook-napi β Global input hooks
- node-serialport β USB serial communication
- ESP32 β Embedded controller
- LVGL β UI and animation engine
TapTapPaw is designed to be:
- Open-source
- Hardware-friendly
- Cute but technically solid
- Easy to extend (new widgets, new animals, new data sources)
This project includes a custom-designed 3D printable case. Its foldable style and adjustable tilt angle make it portable and easy to position on your desk.
Code: MIT License (Non-Commercial)
3D Designs: CC BY-NC-SA 4.0
Commercial use is strictly prohibited. For licensing inquiries, contact Va&Cob



