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.
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 carefully.
The best place to search for answers is our Documentation. If you can't find the answer there, check our Discord Server.
If you've found an issue and want to report it, please check our 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.
This project is built with Node.js, Prisma, and Express.
# Start the database and the S3-compatible store the e2e tests use
docker compose -f compose.development.yaml up -d
# Copy and configure environment variables
cp .env.example .env
# Install dependencies
npm install
# Run database migrations
npm run prisma-dev-migrate
# Seed development data (optional)
npm run seed
# Start the development server with hot reload
npm run dev
# Run tests
npm testnpm run test:e2e builds the API and starts it as the container does, against a
database (jetkvm_e2e) and a bucket that only the e2e run uses. It needs the
services from compose.development.yaml. Override them with E2E_DATABASE_URL
and E2E_S3_ENDPOINT.
npm run compare sends the same requests to two deployments of the API and
reports where the answers differ, grouped by cause. In a terminal it asks you to
mark each group as expected or not, and exits with 0 only when you mark them all:
npm run compare -- --candidate local
npm run compare -- --candidate staging --only releases,redirects
npm run compare -- --helpThe reference defaults to https://api.jetkvm.com. Update checks that depend
on the rollout table differ unless both databases have the same rollout
percentages.
For self-hosting, use the default compose file which runs the complete stack:
# Copy and configure environment variables
cp .env.example .env
# Start everything (database, migrations, and app)
docker compose up -dThe app will be available on port 3000. Configure a reverse proxy (nginx, Caddy, etc.) for TLS termination.
git pull
docker compose up -d --buildDatabase migrations run automatically on startup.