Skip to content

Repository files navigation

logo

JumpKey

JumpKey — A minimalist, keyboard-driven local first PWA startpage for your services.

Grid dashboard

demo.mp4

Features

  • 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.

Screenshots

Keyboard Shortcuts

Shortcut Action
A-Z Select a category
A-ZA-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

Quick Start

standalone executable

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 ./icons

docker compose setup

Copy/adjust compose.yml and /config/services.json and put all your custome icon images in /icon.

Then run:

docker compose up -d

Configuration

The application is configured through the config/services.json file.

Available Options

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

Sample services.json

{
  "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"
    }
  ]
}

Icons

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/

Security Notice

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.

Multi-user support (Authelia etc.)

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

Ideas/Todos

  • 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)

Disclaimer

Project was build with AI support. I am a lazy dev...

About

JumpKey — A minimalist, keyboard-driven local first PWA startpage for your services.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages