## 1. Project Overview & Quickstart (jetkvm/kvm) JetKVM is a high-performance, open-source KVM over IP (Keyboard, Video, Mouse) solution designed for efficient remote management of computers, servers, and workstations. Whether you're dealing with boot failures, installing a new operating system, adjusting BIOS settings, or simply taking control of a machine from afar, JetKVM provides the tools to get it done effectively. ## Features - **Ultra-low Latency** - 1080p@60FPS video with 30-60ms latency using H.264 encoding. Smooth mouse and keyboard interaction for responsive remote control. - **Free & Optional Remote Access** - Remote management via JetKVM Cloud using WebRTC. - **Optional Tailscale Networking** - Built-in Tailscale status and control-server configuration, including custom [Headscale](https://headscale.net/)-compatible endpoints. - **Open-source software** - Written in Golang on Linux. Easily customizable through SSH access to the JetKVM device. ## Contributing We welcome contributions from the community! Whether it's improving the firmware, adding new features, or enhancing documentation, your input is valuable. We also have some rules and taboos here, so please read this page and our [Code of Conduct](/CODE_OF_CONDUCT.md) carefully. ## I need help The best place to search for answers is our [Documentation](https://jetkvm.com/docs). If you can't find the answer there, check our [Discord Server](https://jetkvm.com/discord). ## I want to report an issue If you've found an issue and want to report it, please check our [Issues](https://github.com/jetkvm/kvm/issues) page. Make sure the description contains information about the firmware version you're using, your platform, and a clear explanation of the steps to reproduce the issue. # Development JetKVM is written in Go & TypeScript. with some bits and pieces written in C. An intermediate level of Go & TypeScript knowledge is recommended for comfortable programming. The project contains two main parts, the backend software that runs on the KVM device and the frontend software that is served by the KVM device, and also the cloud. For comprehensive development information, including setup, testing, debugging, and contribution guidelines, see **[DEVELOPMENT.md](DEVELOPMENT.md)**. For quick device development, use the `./dev_deploy.sh` script. It will build the frontend and backend and deploy them to the local KVM device. Run `./dev_deploy.sh --help` for more information. ## Backend The backend is written in Go and is responsible for the KVM device management, the cloud API and the cloud web. ## Frontend The frontend is written in React and TypeScript and is served by the KVM device. It has three build targets: `device`, `development` and `production`. Development is used for development of the cloud version on your local machine, device is used for building the frontend for the KVM device and production is used for building the frontend for the cloud. ## 2. Official Technical Reference & Guides (jetkvm/docs) ## File: README.md JetKVM is a high-performance, open-source KVM over IP (Keyboard, Video, Mouse) solution designed for efficient remote management of computers, servers, and workstations. Whether you're dealing with boot failures, installing a new operating system, adjusting BIOS settings, or simply taking control of a machine from afar, JetKVM provides the tools to get it done effectively. ## Contributing We welcome contributions from the community! Whether it's improving the firmware, adding new features, or enhancing documentation, your input is valuable. We also have some rules and taboos here, so please read this page and our [Code of Conduct](/CODE_OF_CONDUCT.md) carefully. --- ## File: content/docs/getting-started/faq.mdx --- title: "FAQ" order: 4 --- ### Does it come with Tailscale? Tailscale is not pre-installed on the device. However, tailscale has added out of the box support for JetKVM, which means that you can easily install Tailscale on the device. [Install Tailscale](../networking/remote-access#tailscale) ### How do I power the device? Please see the [Power Options page](../peripheral-devices/alternative-power-sources). ### Is there/will there be a PoE version? The current JetKVM device does not accept Power over Ethernet, though you may be able to use a USB-C PoE splitter cable, or a PoE extension board. A PoE-capable version of JetKVM is on the roadmap. ### Can I use the device without the Cloud features? **Yes,** the device is primarily designed to be accessed locally. **The cloud access feature is entirely opt-in.** Simply point your browser at the IP address shown on the display to access the KVM. You can bring your own VPN solution to access it remotely, if you'd rather not use the cloud. ### Can I self-host the Cloud features? **Absolutely!** The JetKVM project is open sourced, please see [the Open Source](https://github.com/jetkvm/kvm) page for more information. ### Does it work with KVM Switches? KVM switches haven't been tested yet, but there's no outstanding reason why they won't work. ### Does it work with _[device]_? The JetKVM works independently of the operating system, meaning it doesn't interact directly with the operating system. It works by connecting through HDMI for video and USB for keyboard and mouse input, making it compatible with any system that supports these interfaces. So yes, it's fully compatible with _[device]_. No additional configuration or drivers are needed—simply plug it in, and you're good to go! ### Does the interface work on mobile? **Yes!** The web interface is written in React and works well on mobile devices; you'll be able to use JetKVM's built in virtual keyboard to control your computer. ### Is the UI available in any languages other than English? **Not yet.** But don't worry, there isn't much text in the UI itself. There's an open feature request for UI localisation, the community will be able to contribute translations. ### Can JetKVM control power to the computer? **JetKVM has a number of ways to control power to the device it's connected to:** - [Wake-on-LAN](../networking/wake-on-lan): If your computer is on the same subnet, JetKVM can send it a Wake on LAN Magic Packet to power it up. The computer must support WoL, and it needs to be enabled in the UEFI/BIOS settings. - [DC Extension Board](../peripheral-devices/extension-port#dc-power-control): The DC extension board can control power-flow to a computer that has a DC input, as well as extracting power for itself. - [ATX Extension Board](../peripheral-devices/extension-port#atx-power-control): The ATX extension board can switch on a PC by triggering its power-switch ATX pins, in the same way the button on the front of your case does! **More to Come:** The extension port on JetKVM allows the community to create their own novel ways of controlling power to target devices. --- ## File: content/docs/getting-started/quick-start.mdx --- title: "Quick Start" order: 1 --- ## JetKVM ### Installation Getting your JetKVM up and running is easy. Follow these steps to start controlling your target computer remotely. 1. Attach the **USB-C port** on the back of the JetKVM to a USB port on the computer you wish to control. 2. Plug a **Mini HDMI cable** from the **HDMI port** on the JetKVM to the target computer's HDMI port. 3. Insert an **Ethernet cable** into the **Ethernet port** on the JetKVM to connect it to your network. 4. Plug in the JetKVM. Once powered, the front display will show the device's **IP address**. 5. Open a browser and enter the **IP address** displayed on the JetKVM screen. You can now control your target computer remotely. ### Front Display Overview The front display of the JetKVM provides key information at a glance. Here’s what each section of the display shows: - **Device IP**: The IP address assigned to your device by the network, allowing you to access the web UI. - **Device MAC**: The unique MAC address of the device. - **Active Connections**: Displays the number of active connections currently in use. - **HDMI Cable Status**: Shows whether the HDMI connection to the target computer is active. - **USB Cable Status**: Indicates whether the USB connection to the target computer is active. This information helps you quickly verify if your JetKVM is properly connected and ready for remote management. --- ### Ports Overview Here's a look at the available ports on your JetKVM device: - **USB-C**: For connecting to the target computer. - **HDMI Mini**: For receiving the video signal from the target computer. - **Ethernet - RJ45**: For network connectivity. - **Extension Port - RJ11**: For additional features like ATX power control, Serial Console access, or AC/DC power control. ## ATX Power Control Extension The JetKVM ATX Power Control Extension allows you to remotely power on, reset, and monitor your PC - without losing your front panel buttons and LEDs. This guide walks you through installing it safely and clearly. - **ATX Extension Board** - Extension board with USB-C and RJ12 ports that mounts inside PC case like a slot card - **RJ12 Cable** - Links ATX board to JetKVM device - **PCIe Slot Cover Brackets** - Brackets for routing in different case sizes (standard and small options) - **Ribbon Cables** - Female-to-female connectors used to link the ATX board to your motherboard’s `F_PANEL` header. ### Installation **1. Power Down and Prepare Your PC** Let's make sure everything's safe before working inside your case. 1. **Shut down your PC** completely through the operating system 2. **Flip the PSU switch to OFF** (usually located on the back of the power supply) 3. **Unplug the power cable** from the wall or power strip 4. **Ground yourself** by touching something metal (like the case frame) 5. **Set up your workspace** with tools and lighting nearby - you'll mainly need a Phillips screwdriver **2. Mount the ATX board in the case** Let’s physically install the board in a free slot. We include two bracket sizes, choose the one that fits your case the best. 1. **Pick any empty PCI/PCIe slot opening** (it doesn’t use electrical contacts, just mounting space). 2. **Slide the board in** and secure the metal bracket with a screw. #### 3. Connect ATX Extension to motherboard Locate the `F_PANEL` header on your motherboard. It’s usually a small white or black 9- or 10-pin block labeled `F_PANEL`, `PANEL1`, or `FP1`. If you've previously connected your front panel controls to your motherboard, disconnect them from the motherboard now (we'll reconnect them later). Using your motherboard manual as a reference, **identify the specific layout and polarity of your motherboard pins** to match and connect it with the labels on the JetKVM ATX Board. **This step is a common source of installation errors**, so take extra care to match both the pin layout and polarity (+/-) with the labels on the JetKVM ATX Board. If you don't have your motherboard manual handy, you can usually find it by searching for your motherboard model number followed by "manual" online. > Make sure that you get the layout & polarity(+/-) on all the pins. It matters. **4. Connect the Case Front Panel Cables (Optional)** If you want to have control of your computer from the front panel, you'll need to connect them to the JetKVM, which will forward the signals to the motherboard. These cables are typically soldered directly to the case and terminate in female ATX pin connectors, usually labeled for power, reset, and LED indicators. In the previous step, we likely disconnected these cables from the motherboard. Now, connect them to the corresponding pins on the JetKVM ATX board using the pinout guide below. Be sure to match the polarity(+/-) on the LED Pins - proper polarity is essential for it to work correctly. | JetKVM ATX Board Label | Front Panel ribbon cable Label | Polarity(+/-) Matters? | | ---------------------- | ------------------------------ | ------------------------------ | | BTN PWR + / – | Power SW | No | | BTN RST + / – | Reset SW | No | | LED HDD + / – | HDD LED | Yes, check manual for polarity | | LED PWR + / – | Power LED | Yes, check manual for polarity | > Make sure that you get the layout & polarity(+/-) for LED HDD & LED PWR. It matters. --- Now that everything is connected, head over to the JetKVM web interface by entering the device’s IP address in your browser. In the JetKVM toolbar, click on “Extension” to access the ATX controls. If everything is configured correctly, you should now be able to power on, reset, or shut down your PC remotely - directly from the JetKVM interface. --- ## File: content/docs/getting-started/troubleshooting.mdx --- title: "Troubleshooting" order: 1 --- ## Loading Video Stream Issue The most common issue with JetKVM is getting stuck at "Loading video stream..." when trying to connect to your device. This problem is typically caused by WebRTC connection issues between your browser and the JetKVM device. ### 1. Update JetKVM Firmware - Navigate to the IP address displayed on your JetKVM device - Go to Settings → Check for Updates - If an update is available, apply it and check if the issue is resolved ### 2. Verify WebRTC Functionality - Temporarily disable all browser extensions that might block or alter WebRTC connections - If using a VPN or corporate network, try temporarily disconnecting as these can block WebRTC traffic ### 3. Browser-Specific Settings **For Chromium:** - Navigate to `chrome://flags/#webrtc-ip-handling-policy` in your address bar - Look for "WebRTC IP Policy" - If it's set to "Disable non proxied UDP", change it to "Default" - Restart your browser for the changes to take effect **For Microsoft Edge:** - In your address bar, enter `edge://settings/content/mediaAutoplay` - Ensure your JetKVM URL is in the Allow list, as Edge may block autoplay by default **For Vivaldi:** - Navigate to `vivaldi://flags/#ignore-gpu-blocklist` - Enable "Override software rendering list" (ignore the GPU blocklist) - Go to Vivaldi Settings → Webpages and ensure "Use hardware acceleration when available" is enabled - Make sure "Broadcast IP for best WebRTC Performance" is enabled - Restart the browser after making these changes **For Firefox:** - Navigate to `about:config` - Search for `media.peerconnection.enabled` - Set it to `true` - Also search for `media.webrtc.hw.h264.enabled` and ensure it is set to `true` - Make sure the OpenH264 plugin is enabled under `about:addons > Plugins` - Restart the browser after making these changes ### 4. Check Browser Autoplay Settings - As noted by some users, browsers may block video autoplay by default - Ensure autoplay settings for video/audio are enabled for the JetKVM site ### 5. Linux users: Try Flatpak Firefox If you're on Linux (especially Fedora), try installing Firefox via **Flatpak from Flathub** instead of using the system package. This version has better media codec support and resolves video stream issues in many cases. ### Still Having Issues? Head over to our GitHub repo and create an issue, https://github.com/jetkvm/kvm. Our team is actively working to resolve these connection issues with each firmware update. ## ATX Power Control Not Working If your ATX Power Control Extension isn't responding when you try to power on, reset, or shut down your PC remotely, follow these troubleshooting steps to identify and resolve the issue. ### 1. Check Motherboard `F_PANEL` Connection **Motherboard `F_PANEL` Connection:** - Verify the ribbon cables are properly connected to your motherboard's `F_PANEL` header - Double-check the pin layout matches your motherboard manual - this is the most common source of issues - Ensure polarity (+/-) is correct for all connections, especially LED pins ### 2. Test Manual Power Button - Test that your PC can still be powered on manually using the front panel power button - If the front panel power button doesn't work, there may be an issue with your `F_PANEL` connections ### 3. Verify Front Panel Cable Connections Ensure your front panel cables are properly connected to the correct pins on the ATX board: - **Power SW** connects to **BTN PWR + / –** - **Reset SW** connects to **BTN RST + / –** - **Power LED** connects to **LED PWR + / –** (polarity matters) - **HDD LED** connects to **LED HDD + / –** (polarity matters) ### Still Having Issues? If your ATX power control still isn't working after following these steps, please contact us at contact@jetkvm.com with: - Your motherboard model and manual reference - Photos of your wiring setup - Description of which specific functions aren't working ## Connecting to Device (Safari) If the JetKVM gets stuck at "Connecting to Device" in Safari 26 (macOS/iOS), this can be caused by a Safari/WebKit regression where Safari may doesn't start the initial WebSocket connection when using a raw LAN IP address. See: https://github.com/jetkvm/kvm/issues/1098#issuecomment-3878012741 for workarounds. --- ## File: content/docs/advanced-usage/3d-model.mdx --- title: "3D Model" order: 3 --- We've made the 3D model of the JetKVM device available for download. This file is useful for customizing the physical hardware, or just exploring the device design in detail. You can download the STP file of the JetKVM device [here](/jetkvm-device-3d-model.stp). ### Join the 3D Design Showcase We encourage community members to share their 3D designs and modifications in our **#3d-showcase** channel on Discord. Whether you're modifying the JetKVM or building creative extensions, we'd love to see what you come up with! Join our Discord community at [jetkvm.com/discord](https://jetkvm.com/discord) to share your designs and connect with other JetKVM enthusiasts! --- ## File: content/docs/advanced-usage/developing.mdx --- title: "Developer Tools" order: 2 --- JetKVM is built with developers in mind, providing tools and modes that allow you to explore, modify, and extend the functionality of the device. If you're interested in tinkering, testing new firmware, or contributing to JetKVM, here's an overview of the key development features. ## Developer Mode Developer Mode unlocks SSH access to the JetKVM device, allowing you to customize or modify the system. When you enable Developer Mode, you must provide an **SSH public key**, as JetKVM uses key-based authentication. **For security reasons, you can not use your JetKVM password for SSH logins.** ### Generating an SSH Key Before you can enable Developer Mode, you need to generate an SSH key pair. **On macOS and Linux:** 1. Open a terminal window. 2. Run the following command to generate a new SSH key pair: ```sh ssh-keygen -t rsa -b 4096 ``` 3. You will be prompted to enter a file in which to save the key. Press **Enter** to accept the default location (`~/.ssh/id_rsa`). 4. You will be asked to enter a passphrase. This is optional but recommended for extra security. 5. Your public key will be saved to `~/.ssh/id_rsa.pub`. **On Windows:** 1. Open PowerShell. 2. Run the following command to generate a new SSH key pair: ```powershell ssh-keygen -t rsa -b 4096 ``` 3. You will be prompted to enter a file in which to save the key. Press **Enter** to accept the default location (`C:\\Users\\YourUsername\\.ssh\\id_rsa`). 4. You will be asked to enter a passphrase. This is optional but recommended for extra security. 5. Your public key will be saved to `C:\\Users\\YourUsername\\.ssh\\id_rsa.pub`. ### Adding Your SSH Key to JetKVM 1. Navigate to the JetKVM settings page. 2. Go to the **Advanced** tab. 3. Check the box to **Enable Developer Mode**. 4. Open your public key file (`~/.ssh/id_rsa.pub` or `C:\\Users\\YourUsername\\.ssh\\id_rsa.pub`) with a text editor and copy the entire content. 5. Paste the public key into the input box and save the changes. ### Connecting to JetKVM Once you have enabled Developer Mode and added your SSH public key, you can connect to the JetKVM device using an SSH client. 1. Open a terminal (on macOS/Linux) or PowerShell (on Windows). 2. Use the following command to connect to your JetKVM device: ```sh ssh root@ ``` Replace `` with the IP address of your JetKVM device. 3. If you set a passphrase for your SSH key, you will be prompted to enter it. The system runs on a lightweight Linux environment using **BusyBox** as the core user space and **DropBear** as the SSH server. For a full, in-depth guide on how to develop and contribute to the JetKVM, please see the [DEVELOPMENT.md](https://github.com/jetkvm/kvm/blob/dev/DEVELOPMENT.md) file on our GitHub. ## DFU Mode (Device Firmware Update) DFU Mode allows you to update the firmware of your JetKVM device, especially when standard access methods like SSH are not available or when testing new firmware. DFU mode provides a way to recover or upgrade the firmware without relying on the standard boot process. ### How to Enter DFU Mode: 1. Unplug the USB cable from the device. 2. Locate the small hole on the right side of the device. 3. Insert a needle into the hole and press & hold the button inside before reconnecting the USB cable. 4. Hold the needle for three seconds, then release. Your device is now in DFU Mode. ### Flashing New Firmware: 1. Download the firmware update tool from [Factory Reset](/docs/advanced-usage/factory-reset) 2. Compile your firmware into an `.img` file. 3. Run the following command in your terminal: ```sh sudo ./upgrade_tool uf your_firmware.img ``` 4. The tool will display progress, and once completed, the JetKVM device will boot with the new firmware. ## Serial Console A serial console provides direct access to system logs, boot messages, and other low-level interactions. It is essential for debugging and monitoring the device during the boot process or when testing new features. Since modern computers no longer include traditional serial ports, JetKVM uses a UART splitter to provide serial console access. The UART signal is multiplexed over the SBU (Sideband Use) pins of the USB cable, so you'll need a UART splitter to connect to the serial console. --- ## File: content/docs/advanced-usage/factory-reset.mdx --- title: "Factory Reset" order: 1 --- A factory reset reflashes JetKVM with the latest official firmware. Use it when you can't reach the device over SSH, want a clean slate, or are recovering from a failed boot. ## Pick your recovery method There are two JetKVM hardware variants. Look at the right side of your device: - If it has a removable **microSD** slot, use **microSD recovery**. - If it has no card slot, use **DFU recovery** over USB. The microSD slot is a small spring-loaded slot on the right side of the case. The device only boots from a card if it has the slot - if you don't see one, use DFU recovery.

microSD recovery

JetKVM models with a microSD slot.

DFU recovery

JetKVM models without a card slot. Reflash over USB.
--- ## File: content/docs/advanced-usage/factory-reset-dfu.mdx --- title: "DFU recovery" order: 1 parent: factory-reset --- Use this procedure for the original JetKVM, which has no microSD card slot. Recovery happens over USB using DFU (Device Firmware Update) mode and Rockchip's `upgrade_tool`. If your device has a microSD card slot, follow the [microSD recovery](/docs/advanced-usage/factory-reset-microsd) guide instead. ## 1. Download the firmware Download the latest image from: ``` https://api.jetkvm.com/releases/system_recovery/latest?sku=jetkvm-v2 ``` ## 2. Enter DFU mode 1. Unplug the USB cable from the device. 2. Locate the small hole on the right side of the device. 3. Insert a needle into the hole, press and hold the button inside, then reconnect the USB cable. 4. Hold for three seconds, then release. The device is now in DFU mode. ## 3. Flash the firmware Pick the section for your operating system. ### Linux 1. Clone the `rv1106-system` repository: ```sh git clone https://github.com/jetkvm/rv1106-system.git ``` 2. Flash the firmware: ```sh pushd tools/linux/Linux_Upgrade_Tool sudo ./upgrade_tool uf /path/to/your/firmware.img popd ``` ### macOS 1. Download the [upgrade_tool](https://github.com/jetkvm/rv1106-system/releases/download/v0.2.5/upgrade_tool_v2.44_for_mac.zip) for macOS. 2. Flash the firmware: ```sh pushd upgrade_tool_v2.44_for_mac sudo ./upgrade_tool uf /path/to/your/firmware.img popd ``` ### Windows **Install drivers** 1. Download [Driver Assistant](https://github.com/jetkvm/rv1106-system/releases/download/v0.2.5/DriverAssitant_v5.14.zip). 2. Open Driver Assistant and install the drivers. The board does not need to be connected for this step. **Flash the firmware** 1. Download and extract the [SocToolKit](https://github.com/jetkvm/rv1106-system/releases/download/v0.2.5/SocToolKit_v2.5_20250701_01_win.zip) for Windows. 2. Open `SocToolKit.exe` and select `RV1106`. 3. Put the device in DFU mode and connect it to your computer. 4. Open the `Download` tab, select the `USB` radio, and confirm the dropdown reads `Maskroom rockchip`. 5. Click `Firmware...` and choose the firmware file you downloaded. 6. Click `Upgrade` to flash. --- ## File: content/docs/advanced-usage/factory-reset-microsd.mdx --- title: "microSD recovery" order: 2 parent: factory-reset --- Use this procedure for JetKVM models that boot from a removable microSD card (sometimes labelled TF). Recovery means writing a fresh recovery image to a card and booting the device from it. If your device has no card slot, follow the [DFU recovery](/docs/advanced-usage/factory-reset-dfu) guide instead. ## What you need - Any microSD card, 8 GB or larger. Simplest is to use the card that came with your JetKVM - just eject it from the slot on the right side of the device - A card reader connected to your computer. - [Balena Etcher](https://etcher.balena.io/) installed. We recommend it. ## 1. Download the recovery image Download `update_sd.img.zip` from: ``` https://api.jetkvm.com/releases/system_recovery/latest?sku=jetkvm-v2-sdmmc ``` Etcher reads the `.zip` directly, so there is no need to unzip it. ## 2. Write the image with Balena Etcher 1. Insert the microSD card into your card reader. 2. Open Balena Etcher. 3. Click **Flash from file** and select `update_sd.img.zip`. 4. Click **Select target** and pick your microSD card. Double-check the size and label match the card you just inserted - flashing the wrong drive will erase it. 5. Click **Flash** and wait for it to finish. > Etcher may show a `Missing partition table` warning before flashing. This is expected for the JetKVM recovery image; click through to continue. ## 3. Boot from the microSD card 1. Disconnect power from the device. 2. Insert the prepared microSD card into the slot on the right side of the JetKVM. 3. Reconnect power. The device boots from the new image. Recovery is complete when the front display shows the device's IP address as normal. --- ## File: content/docs/advanced-usage/ota-updates.mdx --- title: "Updates" order: 2 --- ## JetKVM JetKVM supports over-the-air (OTA) updates, which automatically install new software versions to keep your device up-to-date with the latest features, bug fixes, and improvements. By default, **JetKVM is set to automatically update**. The device will periodically check for new updates in the background. If a new update is available, it will be installed automatically. However, JetKVM is designed to avoid disruptions during active use. The update system will check for active webRTC connections, and **it will delay updates if you are currently controlling a device**. This ensures that you won't be interrupted in the middle of important tasks. If you have long-running webRTC connections, it's recommended to periodically check for updates manually to ensure your device stays current. If you prefer, you can disable automatic updates and manually check for updates: 1. Go to the Settings in the JetKVM web UI. 2. Click the Check for Update button to see if any new updates are available. 3. If an update is available, you can choose to install it immediately. ### Manual app upgrade If the normal OTA update is not possible, you can manually install the latest stable JetKVM app. Run the following command over SSH or in the **Web Terminal** in the JetKVM web UI. The command asks the release API for the newest app compatible with the device's hardware SKU, then verifies the downloaded binary against the returned SHA-256 checksum before staging the update. **Warning:** A manual upgrade bypasses the staged rollout described below. Use it only when the normal update process is unavailable and you are comfortable using the command line. ```bash JETKVM_SKU="$(cat /etc/jetkvm-sku 2>/dev/null || printf jetkvm-v2)" && \ set -- $(wget -qO - "https://api.jetkvm.com/releases?deviceId=manual-update&sku=$JETKVM_SKU&appVersion=%3E%3D0.0.0" | sed -n 's/.*"appUrl":"\([^"]*\)".*"appHash":"\([^"]*\)".*/\1 \2/p') && \ test "$#" -eq 2 && \ TMPFILE="$(mktemp)" && \ wget "$1" -O "$TMPFILE" && \ printf '%s %s\n' "$2" "$TMPFILE" | sha256sum -c - && \ chmod +x "$TMPFILE" && mv "$TMPFILE" /userdata/jetkvm/jetkvm_app.update && \ reboot ``` Each step runs only if the previous one succeeds. After the download is installed as `jetkvm_app.update`, the device reboots and completes the update. #### Installing a specific version Do not construct app download URLs manually. Ask the release API for the version and SKU you need: ```text https://api.jetkvm.com/releases?deviceId=manual-update&sku=&appVersion= ``` The response provides the compatible `appUrl`, `appHash`, and `appSigUrl`. An exact version such as `0.5.8` or a semantic version range such as `^0.5.0` can be used, and a version-specific request bypasses the staged rollout. Get `` by running `cat /etc/jetkvm-sku`. It is `jetkvm-v2` on the original model and `jetkvm-v2-sdmmc` on models with a microSD card slot. Older devices without this file use `jetkvm-v2`. --- ## DC Extension **The DC Extension does very rarely need firmware updates**, which requires a manual flashing process. Unlike the main JetKVM device, the DC Extension cannot be updated over-the-air and must be flashed directly. New firmware updates can be found [here](https://github.com/jetkvm/dc-extension-firmware/releases). **To update the DC Extension firmware:** 1. **Disconnect all cables** - Remove any cables from the DC Extension. 2. **Enter flash mode** - Press and hold the flash button (located between the DC 9V-20V port and the USB-C port) while connecting the USB-C cable from your DC Extension to your computer. 3. **Device recognition** - The DC Extension will appear as a removable disk drive on your computer. 4. **Flash the firmware** - Simply drag and drop the DC Extension firmware file(a `.uf2` file) onto the disk drive. The flashing process will begin automatically. 5. **Complete the update** - The USB drive will automatically eject when the flashing process is complete, indicating that the DC Extension has been successfully updated and rebooted with the new firmware. **Note:** Make sure to use the correct firmware file specifically designed for the DC Extension, as using the wrong firmware could damage the device. --- ## ATX Extension **The ATX Extension also very rarely needs firmware updates**, which requires a manual flashing process. Unlike the main JetKVM device, the ATX Extension cannot be updated over-the-air and must be flashed directly. New firmware updates can be found [here](https://github.com/jetkvm/atx-extension-firmware/releases). **To update the ATX Extension firmware:** 1. **Disconnect all cables** - Remove any cables from the ATX Extension. 2. **Enter flash mode** - Insert a pin into the small flash-mode hole on the board and hold the button inside while connecting the ATX Extension to your computer over USB. 3. **Device recognition** - The ATX Extension will appear as a removable disk drive on your computer. 4. **Flash the firmware** - Drag and drop the ATX Extension firmware file (a `.uf2` file) onto the disk drive. The flashing process will begin automatically. 5. **Complete the update** - The USB drive will automatically eject when the flashing process is complete, indicating that the ATX Extension has been successfully updated and rebooted with the new firmware. **Note:** Make sure to use the correct firmware file specifically designed for the ATX Extension, as using the wrong firmware could damage the device. ## Release Process JetKVM employs a rolling release system for major updates to ensure stability across all devices. **When a new version is released, it is initially rolled out to only 10% of users**. The rollout gradually expands until 100% of devices are updated. This approach helps mitigate risks by preventing widespread issues in case a release encounters unforeseen problems. If you notice that a new version has been released but your device hasn't updated yet, you can manually trigger the update by checking for updates in the Settings page. However, **if your device is not part of the current rollout group, the "Check for Update" button will not show any available updates**, even if a new version has been released. You will need to wait for your device to be included in the next phase of the rollout or manually check later. ## Development Channel (Dev Channel) JetKVM offers a development channel for users who want early access to updates. By enabling this option in the Settings sidebar, you will receive development builds before they are rolled out to all users. These builds may include new features, bug fixes, or experimental updates that are still being tested. **Be aware that dev channel updates can be less stable than official releases, so enable it with caution.**