What ESP-KVM does

Everything in the firmware today, in one list. Where something is new and not tried on hardware yet, or needs a part you may not have, it says so.

ESP-KVM is open-source firmware for an ESP32-P4 board with an HDMI capture chip: the target computer's screen, keyboard and mouse in a browser tab, from the BIOS up. There is no Linux and no cloud. Anything a board cannot do, the console shows switched off with the reason.

Video

Follows the target's resolutionFrom an 800×600 firmware screen to a 1080p desktop, with nothing to set.
MJPEG and H.264Both encoded by the chip's hardware. H.264 uses far less bandwidth on a screen that barely changes, and needs HTTPS in the browser.
Adapts to a slow linkOver WiFi or a VPN the stream lowers its quality instead of stuttering.
Measured delay"Measure the delay" times the whole round trip, mouse to picture: about 155 ms at 1080p H.264.
Several viewersAnyone signed in can watch; one is in control at a time, and control can be taken over.
A viewing token for dashboardsOpens the stream and the figures, and nothing that can touch the target. Off until you make one.
EDID presetsThe device tells the target which modes to offer, so a BIOS picks one that is easy to capture.

Keyboard and mouse

Keyboard, mouse and media keysThe device is a USB keyboard and mouse to the target. Works in a BIOS, with no drivers.
Absolute and relative pointerAbsolute: the click lands where you aimed, whatever the target's mouse acceleration. Relative for the few programs that need it.
Alt+Tab, Ctrl+W, the Windows keyReach the target in Chrome and Edge, in full screen with control taken. Firefox and Safari give a page no way to catch them.
Paste textTyped out as key presses, with a keyboard layout: US English, Russian, Czech, Ukrainian, Lithuanian.
Phone and tabletA touch trackpad and an on-screen keyboard, with a short tick under the finger on Android.
Key macrosYour own buttons for key sequences. The commands.
Wake from the keyboardOver USB, if the machine allows it. Otherwise Wake-on-LAN or the ATX power button.
GamepadThe device can be a controller for a Nintendo Switch; a pad on your own computer drives it through the console. An original Xbox pad (XID) was tried on a real Xbox in a fork. The Xbox 360 pad mode for Windows and a Steam Deck is not tried on hardware yet.

Text screens

Copy text off a BIOS screenA BIOS, a boot loader or a console: select it with the mouse, or copy the whole screen. Not OCR - the characters are matched against the fonts these screens draw with, so text comes back exactly or not at all.
Text instead of videoOn a character screen the device can send the text instead of a picture: a couple of kilobytes a screen, for a link too slow for video.
Watch for wordsGive it phrases; it alerts when one appears, with nobody looking. Off by default.
A screen of one colourA stop screen or a blank output is noticed, and can raise an alert or save a clip.

Virtual media

Boot from a disk imageAn image handed to the target as a USB drive it can boot from, from a microSD card (FAT32 or exFAT, MBR or GPT).
An image with no cardA small rescue image kept in the device's own flash. netboot.xyz goes there in one click.
Download onto the cardPaste a link and the device downloads the image itself.
The whole card as a diskThe target sees the card itself, read-write.

Recording

Record the screen and take screenshotsTo the microSD card. The stream the viewers already get is saved, so nothing is encoded twice. A panel lists, plays and downloads them.
DashcamThe last minutes kept, in memory or on the card. Saved as an MP4 with chapters on a stop screen, a watched phrase, the power going off or a button - and sent to Telegram.
TimelapseA frame every few seconds, played back at 25 fps.
Search a recordingThe screen's text is saved beside the video; search it and play from that moment. Character screens only.

Automation

RunbooksA macro that waits for words on the screen: wait Press F2, then key f2. Runs on the device, with the browser closed. Character screens only.
SchedulerActions on a cron timetable: Wake-on-LAN in the morning, a runbook overnight, a reset every Sunday.
NotificationsTo Telegram, with a screenshot or a clip, or to a webhook: a watched phrase, a blank screen, a panic in the target's log.
Home AssistantOver MQTT, found by itself: sensors, buttons for each runbook, an update entity, and a camera with a still of the screen. Off by default.
REST APIEverything the console does, for scripts. An AI agent can use it too, behind a switch that is off by default.
Guess the target's OSFrom the way it talks to the USB keyboard.

Power and the target

ATX power controlPower, reset and the power LED, wired to the motherboard's front-panel header. Wiring.
Wake-on-LANFrom the console, a schedule, a button or Home Assistant.
A button on the boxA push button on a free pin, with one action for a short press and one for a hold.
Serial console newTwo pins to the target's UART give a terminal in the browser that keeps the boot messages. For a NAS, a router or a server with no screen. Not tried on hardware yet.
The target's log over the network newnetconsole or syslog over UDP, kept and shown live, with an alert on "Kernel panic". No wiring. Not tried on hardware yet.
HDMI-CECThe device acts as a TV: see the source's name, send it remote keys, standby and wake. Media boxes, consoles and a Raspberry Pi speak CEC; an ordinary PC does not. Boards with a TC358743 chip.

Network and VPN

Ethernet, PoE on some boardsWith IPv6 and a local name, espkvm.local.
WiFiOn boards with an ESP32-C6, or an ESP32-C5 for 5 GHz. Joins a network or makes its own, with a rescue hotspot and a captive portal.
Ethernet with WiFi as the backupPull the cable and the device moves to WiFi, then back, with no restart.
Tailscale, built inThe device joins your tailnet itself: no port forward, no gateway, no cloud of mine.
WireGuardA split tunnel to your own hub. The key is made on the device.

Security

HTTPS from the first bootThe device is its own certificate authority. Import its CA once and the browser trusts it, which also opens H.264.
Let's Encrypt over Tailscale newA real certificate for the device's tailnet name, got and renewed on the device. No warning, nothing to import. How it works.
Your own certificateFrom an internal CA or any other, in Settings or with PUT /api/v1/tls/cert from a renewal hook.
Login and two-factor sign-inA password, and optionally a TOTP app with eight recovery codes.
Password reset by handThe board button, held after a reset, clears a lost password and the second factor. No reflash.

It is still not meant for the public internet: secure boot and signed updates are not on. Reach it over a VPN.

The device

Updates from the browserOne click, two firmware slots, and a bad update goes back to the one that worked by itself. Any older release can be installed too.
Flash from the browserThe first install needs only a USB cable and Chrome or Edge: the flasher.
Settings to a file, and backNo secrets in the file, and a device's own identity is left alone.
Thermal protectionHalves the frame rate when the chip is warm, and stops encoding when it is hot until it cools.
A clock that survives a restartOptional: a DS3231 or a similar chip on the capture board's I2C bus, found by itself.
A small status displayOptional: an I2C OLED or a round GC9A01 with the address, the link and the capture.
Diagnostics and a live logMemory, temperatures, the network and the capture, and the device's own log as it happens.

Not yet

HDMI audio missingThe capture chip offers it, but the wires and the code are missing.
Frame rateNot 60 fps at 1080p: 20-30 fps is what a microcontroller does. Fine for a BIOS and a desktop, not for a game.

What comes next is in the roadmap, and how it stands next to PiKVM, JetKVM and the others is on the comparison page. Or try the live demo.