demo.mp4
- NEW: standalone executable: No docker needed anymore. Just download and run JumpKey directly on your pc/server. (Linux x86/arm64/arm6, Darwin arm64 and Windows x86 supported)
- Keyboard-Centric Navigation: Navigate categories and launch services using sequential keyboard shortcuts.
- Category Organization: Group services into configurable categories.
- Favorites: Mark frequently used services as favorites for quick access.
- Last Used: Mark last used services for quick access.
- Instant Search: Filter services in real time while typing.
- Search Engine Integration: Configure multiple search engines for quick web searches.
- Built-in Configuration Editor: Edit the configuration directly from the web interface.
- Configuration Import/Export: Create/restore local configuration backup.
- Configuration Validation: Validate JSON before applying changes.
- Responsive User Interface: Optimized for desktop and mobile devices.
- Localization Support: Automatic language detection with internationalization support. Currently DE, EN, FR, ES included.
- Icons: Lucide icon name, local hosted images and urls.
- Themes: 6 dark and 3 light themes included.
- Docker Ready: Deploy using the included Docker Compose configuration. (amd64/arm64 ~8 mb image)
- Lightweight Architecture: Built with Lit for fast rendering and minimal resource usage.
- Static Deployment: No backend or database required. (Caddy + WebDav plugin)
- Simple Multi-User Support: Map Remote-User header as part of the saved config file.
| Shortcut | Action |
|---|---|
A-Z |
Select a category |
A-Z → A-Z |
Launch a service from the selected category |
1-0 |
Open a favorite |
Shift + 1-0 |
Open a recent service |
- |
Cycle through recently used services (press - again before launch to select the next one) |
Space |
Open search |
# |
Toggle between grouped and grid view |
Esc |
Cancel the current input or pending launch |
Shift + Click / Shift + Enter |
Open in the current tab |
Ctrl + 1-0 |
Assign a favorite to a slot |
Ctrl + , |
Open configuration |
? |
Show keyboard help |
Download and extract the version matching your architecture.
Create directories for the config and icons, add your config file (services.json) and run:
jump-key --host 0.0.0.0 -port 8080 -config-dir ./config -icons-dir ./iconsCopy/adjust compose.yml and /config/services.json and put all your custome icon images in /icon.
Then run:
docker compose up -dThe application is configured through the config/services.json file.
| Key | Type | Description |
|---|---|---|
categories |
Array |
List of category objects grouping your web services. |
categories[].category |
String |
The visible display name of the category block. |
categories[].categoryKey |
String |
(Optional) The keyboard hotkey character to activate this category. Auto-assigned if omitted. |
categories[].icon |
String |
Jump to Icons |
categories[].services |
Array |
Array of links belonging inside this group. |
categories[].services[].name |
String |
Title of the specific web application or website. |
categories[].services[].url |
String |
Full destination URL (e.g., https://github.com). |
categories[].services[].key |
String |
(Optional) Specific hotkey to launch this item once its category is open. |
categories[].services[].icon |
String |
Jump to Icons |
searchEngines |
Array |
Custom query shortcuts available inside the unified search bar using the : indicator. |
searchEngines[].name |
String |
Display name of the external search provider. |
searchEngines[].prefix |
String |
The keyword trigger text (e.g., g maps to searching via :g <query>). |
searchEngines[].url |
String |
Search engine query URL string containing %s as the search term placeholder. |
searchEngines[].icon |
String |
Jump to Icons |
{
"categories": [
{
"category": "Development",
"categoryKey": "d",
"icon": "code",
"services": [
{
"name": "GitHub",
"url": "https://github.com",
"key": "g",
"icon": "github.png"
},
{
"name": "Local Host",
"url": "http://localhost:8080",
"key": "l",
"icon": "globe"
}
]
},
{
"category": "Monitoring",
"categoryKey": "m",
"icon": "activity",
"services": [
{
"name": "Grafana",
"url": "https://grafana.example.com",
"key": "g",
"icon": "trending-up"
}
]
}
],
"searchEngines": [
{
"name": "Google",
"prefix": "g",
"url": "https://www.google.com/search?q=%s",
"icon": "iconify:logos:google-icon"
},
{
"name": "Wikipedia",
"prefix": "w",
"url": "https://en.wikipedia.org/wiki/Special:Search?search=%s",
"icon": "lucide:book-open"
}
]
}| Icon value | Type | Description |
|---|---|---|
hammer |
Lucide | Backwards-compatible shorthand. Equivalent to lucide:hammer. |
lucide:hammer |
Lucide | Dynamically loaded Lucide icon. |
iconify:mdi:home |
Iconify | Dynamically loaded icon from any Iconify icon set. |
https://example.com/icon.svg |
Remote image | Loads an icon from an external image URL.(may also contain query parameters) |
my-service.svg |
Local image | Loads an icon from the local ./icons directory. (.svg, .png, .webp, .jpg, .jpeg, .gif supported) |
If a dynamic icon cannot be loaded, JumpKey displays the built-in fallback icon.
You can find all available iconify/lucide icons here: https://icon-sets.iconify.design/
JumpKey is intended for trusted environments only. It is designed to run on a local network or behind an authentication proxy such as Authelia, Authentik, or a similar SSO solution. Therefore, I don't plan to spend extra effort hardening it for Internet-facing deployments. If you expose it publicly, you are responsible for providing appropriate authentication and security.
Remote-User header if detected is used as a part of the expected local config name:
| "Remote-User" header | expected config file | (automatic) backup file |
|---|---|---|
| not set | services.json | services.backup-2026-07-25T06-54-03-332Z.json |
| arthur | services.arthur.json | services.arthur.backup-2026-07-25T06-54-03-332Z.json |
- Workspaces: Work/private separation. (functional)
Iconify Icons: Add https://icon-sets.iconify.design/ support. (functional)Standalone server: golang wrapper server, replaces the caddy setup. (technical)

