Nyxt:是一个极客的终极上网工具,Emacs 理念照进现代网页浏览器。
Nyxt 是一款极具哲学色彩的网页浏览器,它的核心理念可以被概括为一句话:“如果 Emacs 是一个网页浏览器,它会是什么样子?” 这不是比喻,而是一种设计哲学的彻底贯彻。
Nyxt 并非 Emacs 的插件或扩展,也不是基于 Electron 或 Chromium 的普通浏览器外壳,而是用 Common Lisp 从零构建的独立浏览器项目,采用宽松的 BSD 三条款许可证开源。
这意味着它不仅在技术上追求极致自由,在理念上也强调用户的完全掌控权——你可以修改它的每一个行为、重写任何功能、甚至动态地在运行时改变其逻辑。对于习惯用键盘操作、追求效率与可定制性的开发者而言,Nyxt 提供了一种前所未有的浏览体验:没有冗余的 UI 元素,几乎所有的交互都通过快捷键或命令行完成,整个浏览器就像一个可执行的 Lisp 程序,等待你去“编程”而非“点击”。
Nyxt 的目标用户非常明确:那些厌倦了现代浏览器臃肿界面、渴望回归极简与高效、并且愿意投入时间学习和定制工具的技术人员。
它不像 Chrome 或 Firefox 那样试图取悦大众,而是坚定地服务于小众中的极客群体。
它的存在本身就是在挑战主流浏览器的设计范式——不是“功能越多越好”,而是“你能控制多少”。
正如其官网 FAQ 所言,Nyxt 和 Emacs 一样,并不遵循 Unix “做一件事并做好”的哲学,而是选择构建一个以可扩展性为核心基础的系统。这种设计允许用户深入其内部结构,实时修改、调试甚至扩展功能,真正实现“你的浏览器你做主”。
Nyxt 由 John Mercouris 于 2017 年发起,目前由一家名为 Atlas 的小型公司赞助和支持,团队核心成员仅有 Mercouris 和 André A. Gomes 两人。
尽管深受 Emacs 启发,但开发者明确拒绝将其做成 Emacs 的一部分。原因在于,他们认为 Emacs 本身积累了太多历史包袱和技术债务,难以支撑现代 Web 浏览所需的速度与灵活性。
更重要的是,若将 Nyxt 做成 Emacs 插件,就会强制用户必须先掌握 Emacs 才能使用,这与“让更多人享受高效浏览”的初衷相悖。
因此,Nyxt 选择了独立发展,既保留了 Emacs 式的命令驱动与模式化设计,又提供了对 vi 键绑定和 CUA(Windows 风格)快捷键的支持,使得 Vim 用户或普通用户也能快速上手。
此外,Nyxt 也无法作为浏览器扩展存在。主流浏览器的插件系统存在严重限制,无法充分发挥 Lisp 的强大表达能力,也无法实现诸如深度 DOM 操作、自定义渲染流程等高级功能。
Nyxt 需要的是对底层的完全控制权,而这只能通过原生应用实现。
目前稳定版 3.12 使用 WebKitGTK 作为渲染引擎(主要面向 Linux),而正在开发中的 4.0 版本则引入了 Electron 支持,标志着项目向“渲染器无关”(renderer-agnostic)架构迈进。
这一转变不仅有望提升性能,还将正式支持 macOS 和 Windows 平台,扩大其用户基础。
Nyxt 的安装推荐使用 Flatpak,尤其在 Linux 上最为方便。
不过,某些环境下(如 Fedora + NVIDIA 显卡)可能需要禁用 WebKit 的沙箱和合成功能才能运行,而这会带来安全风险。因此,更稳妥的方式是从源码编译,尽管这增加了使用门槛。
一旦启动,Nyxt 展示的是一个极简的起始页,包含四个按钮:快速入门、查看快捷键、手册和设置。这里已经预示了它的使用逻辑——没有地址栏、没有标签页按钮、没有菜单栏。取而代之的是“缓冲区”(buffers),类似于标签页,但每个 buffer 可以拥有独立的设置、模式和快捷键配置。
所有操作几乎都依赖键盘。
例如,按下 Ctrl+Space 或 Alt+x 可唤出“提示缓冲区”(prompt buffer),在这里输入命令即可执行各种功能,如打开网页、切换 buffer、管理书签等。右键菜单极简,仅提供后退、刷新和调试工具入口。
最令人惊艳的功能之一是“历史树”(history tree),它以树状结构可视化用户的浏览路径,支持跨 buffer 导航,并能结合其他命令批量操作历史页面。比如你可以搜索所有来自 Wikipedia 的页面并一键关闭或收藏,这种基于语义的操作方式远超传统浏览器的线性历史记录。
Nyxt 的最大魅力在于其完全可编程性。
它内置了一个 Lisp REPL,允许用户直接在浏览器中运行代码。所有配置都通过 ~/.config/nyxt/config.lisp 文件定义,你可以用 Common Lisp 编写自定义命令、添加右键菜单项、创建 URL 分发规则,甚至实现全新的协议处理器。例如,几行代码就能添加一个“收藏当前页”的右键选项:
lisp
(define-command-global my-bookmark-url ()
"Prompt to bookmark the current URL."
(let ((url (prompt :prompt "Bookmark URL" :sources 'prompter:raw-source)))
(nyxt/mode/bookmark:bookmark-current-url)))
(ffi-add-context-menu-command 'my-bookmark-url "Bookmark")
这种能力让 Nyxt 不只是一个浏览器,更是一个以网页为核心的应用平台。理论上,你可以把它改造成 RSS 阅读器、文档管理系统、甚至 IDE。然而,现实是:目前社区生态尚不成熟。相比 Emacs 或 Vim 动辄数万的配置分享,Nyxt 的公开资源极为稀少。虽然有像 Artyom Bologov 这样的用户曾贡献大量配置模板,但他本人已转向其他项目,导致部分内容逐渐过时。官方也仅列出两个由 Atlas 自研的扩展,生态建设任重道远。
Nyxt 当前版本(3.x)在 JavaScript 密集型网站(如 GitHub、Mastodon)上的表现明显慢于 Firefox 或 Chrome,部分交互(如日期选择器)卡顿明显。此外,它不支持 WebRTC,意味着无法用于 Zoom、Jitsi 等视频会议服务,也不适合日常社交娱乐。但对于以阅读技术文档、浏览静态站点为主的开发者和系统管理员来说,Nyxt 已足够流畅可用。
好消息是,基于 Electron 的 4.0 预览版已展现出显著性能提升,在相同网站上的响应更为迅捷。尽管尚未稳定,但每两到三周一次的预发布节奏表明项目正稳步推进。长远来看,Nyxt 的商业模式也颇具理想主义色彩:Atlas 计划基于 Nyxt 框架开发付费应用(如 RSS 阅读器 Demeter),采用“随心所付”模式,即使无法支付也可免费获取源码。这种方式虽难盈利丰厚,却体现了对开源精神的坚守。
Nyxt 绝非人人可用的浏览器。
它需要耐心学习、反复调试,甚至要面对文档陈旧、功能缺失的挫折。
但它也为愿意投入时间的用户打开了一扇门:一个真正属于你的、可被彻底重塑的浏览环境。
正如 Emacs 和 Vim 教会我们的那样,工具的价值不在于开箱即用的便利,而在于它能否随着你的成长而进化。
Nyxt 正是这样一款工具——它不完美,但它自由;它缓慢,但它深刻。如果你渴望摆脱“被设计好”的浏览器,想要亲手打造属于自己的上网方式,那么 Nyxt 值得你花一个周末去探索。