扔掉浏览器书签:用 JumpKey 键盘一键跳到任意服务

简介

什么是 JumpKey ?

JumpKey 是一个开源的极简、键盘驱动的本地优先 PWA 起始页(startpage)。它可以帮助用户通过键盘快捷键快速分类、搜索并跳转至自建的各种服务。

主要特点

  • 键盘驱动导航:通过顺序快捷键(如 A-Z 选分类,A-ZA-Z 启动服务)实现全程无鼠标操作
  • 分类组织与收藏:可将服务分组到可配置的分类中,并标记常用服务为收藏或最近使用,便于快速访问
  • 即时搜索:输入时实时过滤服务,并支持配置多个搜索引擎(GoogleWikipedia 等)进行快速网络检索
  • 内置配置编辑器:可直接在 Web 界面中编辑、校验、导入/导出 services.json 配置,无需手动改文件
  • 轻量静态架构:基于 Lit 构建,无后端、无数据库,镜像仅约 8MBamd64/arm64
  • 多主题与多语言:内置 6 款深色与 3 款浅色主题,支持 DEENFRES 等语言自动检测
  • 开源免费:基于 MIT 协议开源,可免费使用和修改

应用场景

  • 家庭实验室(Homelab)导航:将群晖、Home AssistantGrafanaPortainer 等自建服务集中到一个起始页,键盘一点即达
  • 团队内网服务入口:配合 AutheliaAuthentik 等认证代理,作为内网统一服务门户
  • 键盘效率控:习惯快捷键操作的用户,可利用顺序热键在几十个服务间秒级切换
  • 移动端快速访问:响应式 UI 适配桌面与移动设备,手机上也能便捷打开常用链接

JumpKey界面截图

JumpKey 是一个把分散在浏览器书签里的各种服务,重新整合成一个干净、高效、键盘优先的导航面板。

安装

在群晖上以 Docker 方式安装。

本文写作时, latest 版本对应为 1.9.1

提示JumpKey 的镜像托管在 ghcr.io,群晖 Docker 套件无法直接搜索,需要通过命令行拉取镜像;此外本项目为单容器部署,建议通过 docker-composedocker cli 安装。

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 新建文件夹 jump-key 和 子目录
mkdir -p /volume1/docker/jump-key/{config,icons}

# 进入 jump-key 目录
cd /volume1/docker/jump-key

# 一键启动
docker run -d \
--name=jump-key \
--restart=unless-stopped \
-p 8872:8080 \
-v $(pwd)/config:/app/config \
-v $(pwd)/icons:/app/icons \
ghcr.io/desirevolution/jump-key:latest

docker-compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
version: '3.8'

services:
jump-key:
image: ghcr.io/desirevolution/jump-key:latest # ghcr.io 官方镜像
container_name: jump-key
restart: unless-stopped
ports:
- "8872:8080" # 主机端口:容器端口
volumes:
- ./config:/app/config # 配置文件目录(services.json)
- ./icons:/app/icons # 自定义图标目录

然后通过 SSH 登录到您的群晖,执行下面的命令:

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 jump-key 和 子目录
mkdir -p /volume1/docker/jump-key/{config,icons}

# 进入 jump-key 目录
cd /volume1/docker/jump-key

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中访问 http://<群晖IP>:8872 即可进入 Web 界面

键盘快捷键

快捷键 操作
A-Z 选择一个分类
A-Z → A-Z 从所选分类中启动一个服务
1-0 打开一个收藏
Shift + 1-0 打开一个最近使用的服务
- 循环切换最近使用的服务(在启动前再次按 - 可选择下一个)
Space 打开搜索
# 切换分组视图和网格视图
Esc 取消当前输入或待启动的操作
Shift + Click / Shift + Enter 在当前标签页中打开
Ctrl + 1-0 将收藏分配到指定槽位
Ctrl + , 打开配置
? 显示键盘帮助

配置

应用程序通过 config/services.json 文件进行配置

可选项

类型 描述
categories Array 分类对象列表,用于分组你的 Web 服务
categories[].category String 分类块的可见显示名称
categories[].categoryKey String (可选) 激活此分类的键盘快捷键字符。如果省略则自动分配
categories[].icon String 跳转到图标 (#icons)
categories[].services Array 属于此分组的链接数组
categories[].services[].name String 特定 Web 应用或网站的标题。
categories[].services[].url String 完整的目标 URL(例如 https://github.com
categories[].services[].key String (可选) 分类打开后启动该项的特定快捷键
categories[].services[].icon String 跳转到图标 (#icons)
searchEngines Array 自定义搜索快捷方式,在统一搜索栏中使用 : 指示符调用
searchEngines[].name String 外部搜索提供商的显示名称
searchEngines[].prefix String 关键字触发文本(例如 g 映射为通过 :g <query> 搜索)。
searchEngines[].url String 搜索引擎查询 URL 字符串,包含 %s 作为搜索词占位符。
searchEngines[].icon String 跳转到图标 (#icons)

示例 services.json

下面一个完整的示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{
"categories": [
{
"category": "局域网",
"categoryKey": "d",
"icon": "activity",
"services": [
{
"name": "DS367xs",
"url": "http://192.168.0.197:5000",
"key": "m",
"icon": "iconify:mdi:nas"
},
{
"name": "DS918",
"url": "http://192.168.0.199:5000",
"key": "n",
"icon": "iconify:mdi:nas"
}
]
},
{
"category": "开发",
"categoryKey": "m",
"icon": "code",
"services": [
{
"name": "GitHub",
"url": "https://github.com",
"key": "g",
"icon": "iconify:mdi:github"
}
]
}
],
"searchEngines": [
{
"name": "Google",
"prefix": "g",
"url": "https://www.google.com/search?q=%s",
"icon": "iconify:mdi:google"
},
{
"name": "Wikipedia",
"prefix": "w",
"url": "https://en.wikipedia.org/wiki/Special:Search?search=%s",
"icon": "hugeicons:wikipedia"
}
]
}

可以直接将 services.json 上传到 config 目录

或者直接在设置中导入

还可以直接编辑

图标

图标值 类型 描述
hammer Lucide 向后兼容的简写形式。等同于 lucide:hammer
lucide:hammer Lucide 动态加载的 Lucide 图标。
iconify:mdi:home Iconify 从任意 Iconify 图标集动态加载的图标。
https://example.com/icon.svg 远程图片 从外部图片 URL 加载图标。(也可包含查询参数)
my-service.svg 本地图片 从本地 ./icons 目录加载图标(支持 .svg.png.webp.jpg.jpeg.gif

你可以在这里找到所有可用的 iconify/lucide 图标: https://icon-sets.iconify.design/

现在回到主界面会看到我们的两个分类

进入分类可以看到服务

默认无需账号密码。若将服务暴露到公网,请务必置于 AutheliaAuthentik 等认证代理之后。

注意事项

  1. 镜像来源:镜像仅发布在 ghcr.io,群晖图形化界面无法直接搜索,需使用命令行拉取安装
  2. 安全边界:官方明确 JumpKey 仅面向可信内网环境,不要直接暴露到公网,需配合认证代理使用
  3. 配置持久化:务必挂载 ./config./icons 卷,否则容器重建后配置会丢失
  4. 端口冲突:本地 8872 端口若被占用,可在 docker-compose.yml 中修改主机端口(如 9090:8080
  5. 独立运行版:不想用 Docker 的用户,可直接下载对应架构的 standalone executable,用 --host 0.0.0.0 -port 8080 -config-dir ./config -icons-dir ./icons 启动

参考文档

desirevolution/jump-key: A minimalist, keyboard-driven local first PWA startpage for your services.
地址:https://github.com/desirevolution/jump-key

JumpKey Live Demo
地址:https://desirevolution.github.io/jump-key/

desirevolution/jump-key - GitHub Container Registry
地址:https://ghcr.io/desirevolution/jump-key