Xenon

隐私政策

Xenon 应用运行在你自己的电脑上,数据也保存在那里。本网站是另一回事,规则也不一样。本页把两者分开来讲,分别说明各自会发送和保存什么。

最后更新:2026年9月27日

摘要

  • Xenon 应用不会追踪你如何使用它。没有账号,没有个人档案,也没有任何使用记录离开你的电脑。它有两个计数器。一个在应用检查更新时发送,描述的是这次安装本身:它的版本、它的系统,以及大致装了多久。另一个在你从商店安装某个作品时,给该作品的安装次数加 1。两者都不涉及你打开了哪些小组件、搜索了什么,或者用仪表盘做了什么。新安装时,两者一开始都是开启的,你可以在“设置 → 通用 → 更新”中分别关闭它们;如果在加入某个计数器的那个版本之前你就已经在用 Xenon,那么它对你来说一直保持关闭。两者都不带任何标识符,所以都无法追溯到你,也无法相互关联。
  • 这个应用并不是完全离线的。它会自行检查更新,并获取一份简短的公告列表;天气、专辑封面以及你连接的服务,只有在用到它们的功能里才会被联系。这些请求都列在下面。
  • 本网站使用 Google Analytics,以了解人们访问了哪些页面、点了哪些下载。在欧洲经济区、英国和瑞士,在你于横幅中选择接受之前,不会存储任何内容。
  • 本网站还用 Cloudflare Web Analytics 统计页面浏览量,它不设置 Cookie,也不建立个人档案。它只告诉我有多少人访问了某个页面。
  • 按下下载按钮,会给我自己服务器上的一个计数器加 1,不带 Cookie,也不带标识符。下载链接仍然直接指向 GitHub,所以这个计数器永远不会挡在你和文件之间。

数据控制者与联系方式

Xenon 是开发者 Marcello Mastroeni 一个人的个人项目,源代码以自定义的非商业许可证放在 GitHub 上。我是本网站的数据控制者。与本页有关的任何事情,比如提问、更正,或者关于你的数据的请求,请写信到 marcellomastroeni4@gmail.com,或者在 GitHub 上提交 issue。

本网站(xenon-app.com)

本网站使用 Google Analytics 4(衡量 ID G-LQ8Y8WZPQF),用来了解哪些页面有人阅读、哪些下载被点击,以及访客从哪里来。这是关于网站的汇总报告。它和你电脑上的那份应用没有关联,我也没有办法把这里的一次访问和你电脑上的某个安装对应起来。

Analytics 会收到什么

Cloudflare Web Analytics

除了 Analytics,本网站还会加载 Cloudflare Web Analytics,这是一个不使用 Cookie 的页面浏览计数器。它不设置 Cookie,不存储标识符,也无法在不同网站之间或不同访问之间跟踪你;它以汇总形式报告页面网址、来源页面、国家、设备类型和页面加载时间。因为它不识别任何人,所以不经过同意横幅就会运行,列在这里是为了让你知道它的存在。为什么两个都用:Analytics 只统计接受了横幅的访客,而这里给出的是完整的总数,那些数字要对照它来看。

下载计数器

当你在本网站按下下载按钮时,页面还会向我自己的服务器(也就是应用所连接的那个支持者中心)发送一条只有一行的消息,说明有一个下载按钮被按下了,以及是哪一个(hero、footer 等等)。消息的全部内容就是这些:没有 Cookie,没有标识符,不保留 IP,也没有任何能和其他数据关联起来的东西。它给 (日期,按钮) 对应的计数器加 1,然后这个请求就被丢弃。

之所以有它,是因为这一步我原本完全看不到。Cloudflare 知道页面被浏览了,GitHub 知道下载完成了,但两者都看不到中间按下按钮的那一下,而正是这一下能说明下载页面到底管不管用。Google Analytics 本来可以报告它,但它只统计接受了横幅的人,而这个网站的访客里有相当一部分会把它完全屏蔽,所以这个数字会出现偏差,偏差的方向我也无法测量。

下载链接本身不经过我的服务器。它和以前完全一样,直接指向 GitHub;计数器是另外单独发出的一条消息,发出后就不再理会,页面也不会等它。如果我的服务器宕机了,或者你屏蔽了它,下载照常进行,只是这次按下不会被计入。

Cookie 同意

本网站使用 Google 意见征求模式(Consent Mode)。如果你在欧洲经济区、英国或瑞士,所有存储和广告信号一开始都是拒绝状态:在你按下“接受”之前,不会写入任何 Cookie,Analytics 只会收到不带 Cookie、无法识别身份的简短请求。在这些地区之外,默认是允许的,按下“拒绝”即可关闭。拒绝只需点一下,位置和大小都与“接受”相同。

你可以随时改变主意。这个按钮会清除已保存的选择,并重新显示横幅:

你的选择保存在浏览器的本地存储中,键名为 xenon.site.consent。这个值不会离开你的设备。清除浏览器数据就会重置它。

托管与字体

本网站由 GitHub Pages 提供,它会处理请求和你的 IP 地址以送达页面,并保留短期的安全日志。这在技术上是必需的,发生在任何同意选择之前。页面顶部还会向 GitHub API 查询项目的星标数,每个浏览器会话一次,所以 GitHub 也会看到这个请求。网站的字体由网站自己提供(/fonts/),所以加载字体不会联系其他任何人。唯一的例外是在线演示,它运行的是应用自己的仪表盘页面,并从 Google Fonts 加载该页面的字体,因此 Google Fonts 会看到这个请求。社区截图由 Cloudflare R2(assets.xenon-app.com)提供。

Xenon 应用

应用把你的数据保存在你的电脑上。设置、笔记、任务、日程、Deck、AI 记忆和上传的背景都放在 server/data/ 里。应用不会把这个文件夹上传到任何地方,里面也没有分析 SDK、崩溃上报或行为追踪。下面介绍的两个匿名计数器,是应用关于自身所做的仅有的报告,两者都不带任何形式的标识符:服务器保存的只是计数,从来不是关于某台机器的记录。

本地文件搜索和磁盘空间小组件都在你的电脑上运行:你的搜索词、文件名、文件夹索引和磁盘扫描结果都在那里计算,而你从搜索中打开过的文件列表(用来让你自己的结果排序更准)也和其他数据一样保存在 server/data/ 里。你交给 Xenon AI 的内容是例外。使用云端 AI 服务商时,智能搜索(Ctrl+I)会把你输入的句子发送给该服务商;让 AI 查找文件或解释你的磁盘情况时,它据以回答的结果也会发送给该服务商,比如文件名和文件夹大小。用于 AI 搜索和清理的完整上下文开关(默认关闭)还会发送你已安装应用的名称、已索引的文件夹、最常用的文件夹,以及你最近从搜索中打开的文件,但从不发送它们的内容。

应用确实会做的,是为需要联网的功能发起网络请求。下面是这些请求,以及每一项在什么时候发生。

联系的对象时机原因,以及发送的内容
api.github.com 自动,启动时(缓存 24 小时) 检查是否有更新的版本。它不发送标识符,但和任何 HTTP 请求一样,GitHub 会看到你的 IP 地址。它不需要你开启任何东西就会运行。
xenon-app.com 当你打开社区目录或商店时 下载社区主题、小组件和套件的公开目录。只读,不带标识符。
xenon-app.com
(公告)
自动,每天最多一次 下载一份所有人收到的都相同的简短公告列表:新版本发布、商店里的新内容,偶尔还有一些说明。只读,不带标识符。有些公告只面向一部分人,比如使用某个小组件或某个版本的人,而这种筛选是在你的电脑上进行的:你的仪表盘会下载整份列表,自己判断哪些适用。决定给你显示什么时,不会发送任何关于你安装了什么的信息,所以我既无法针对你,也无法知道谁看到了什么。你可以在任意一条公告里关闭公告。
支持者中心
(投票回答)
仅当你在公告里的投票中点选一个答案时 只发送你选了哪个选项,别的都不发:没有安装 UUID,不保留 IP,没有账号,连时间都没有。服务器给该选项的计数器加 1,然后丢弃这个请求,所以任何人,包括我在内,都无法查询某一台电脑回答了什么。什么都不点就什么都不会发送,关闭公告则会让它完全停止。
支持者中心
(安装次数)
当你从商店安装内容时,并且仅在该开关开启时 只发送你安装的作品的 id,别的都不发:没有安装 UUID,不保留 IP,没有账号。服务器给该作品的计数器加 1,然后丢弃这个请求。你的仪表盘会在你自己的电脑上记住哪些已经计过数,所以每个作品最多只报告一次,这也是为什么不需要发送任何可识别身份的信息来避免重复计数。结果是,这个数字的含义是“报告的安装次数”,而不是“有多少人拥有它”,无论显示在哪里,都是这样标注的。
支持者中心
(Cloudflare Worker)
当你给目录中的内容评分、兑换支持者代码,或更新已解锁的内容时 你的电脑会保存一个随机 UUID(install-id.json),让一次评分只计一次,一个代码也不能无限次重复使用。这个 UUID 从不离开你的电脑:发送的是它的单向哈希,而且评分和兑换代码使用的是同一个 UUID 的不同哈希。这是有意为之:如果共用一个值,支持者代码(它可以关联到某个 Discord 账号)和星级评分就会以同一个标识符存放在数据库里,我就能看到某位有名有姓的支持者给哪些作品评过分。用两个不同的值,就没有任何可以用来匹配它们的东西。两个哈希都不和你的硬件或姓名绑定;删掉这个文件,就会生成一个新的 UUID。更新你已解锁的内容时,同样只发送这个哈希、作品的 ID 和你当前的版本,不发送任何代码;中心只会回应它已经认定为所有者的电脑。
ipwho.is 仅在天气自动定位开启时 把你的 IP 转换成一个大致的城市,让天气小组件知道你在哪里。手动设置位置,这个请求就永远不会发生。
天气和空气质量 API
open-meteo、met.no、wttr.in
仅当你的仪表盘上有天气小组件时 发送要预报的位置坐标。不带标识符。
itunes.apple.com 正在播放媒体时 根据曲目标题查找专辑封面。不带标识符。
你自己连接的服务
Spotify、Twitch、YouTube、Discord、Home Assistant、OBS、AI 服务商、股票/新闻/足球信息源
仅在你配置了该集成之后 每一项都使用你提供的凭据,与各自的服务商通信,适用该服务商的隐私政策。在你设置之前,它们一直处于休眠状态。
你手机的推送服务
Apple、Google 或 Mozilla,取决于手机使用的浏览器
仅在你于已配对的手机或平板上开启通知之后 即使手机上的仪表盘已经关闭,电脑也能唤醒手机,提醒你设置好并正在等待的事情,比如倒计时结束。消息针对那部手机的浏览器做了端到端加密,所以推送服务能传递它,却无法读取它;不过它确实能看到有一条消息发给了那部手机,以及发送的时间。在你按下手机上的按钮之前,什么都不会设置;删除已配对的设备,推送就会停止。
匿名版本上报
支持者中心
从 v4.8.0 起的安装默认开启;更早的安装默认关闭,除非你自己打开过 版本、系统、安装了多久,以及一个“本周首次”标记,每天最多发送一次,发送到与上面几行相同的支持者中心。不带任何形式的标识符。完整列表见下一节。

本地 AI 功能(Ollama、Whisper)完全在你的电脑上运行。云端 AI 服务商则不然:如果你选择 Gemini、OpenAI 或 Anthropic,你的提示词会按照该服务商的条款发送给它。语音回复的方式有所不同:Gemini 和 OpenAI 有自己的语音,而使用其他任何服务商时,要朗读的文本会被发送到 Microsoft 的在线 Edge 语音服务,转换成语音。用哪个 AI 服务商由你选择,应用也绝不会把提示词发送给你没有选择的云端模型。

版本上报

我完全不知道到底有多少人在用 Xenon。下载次数只是噪音,而且与其去猜,我更想知道大家是不是卡在了旧版本上。所以在设置 → 通用 → 更新里有一个开关,叫匿名统计此安装,它会在应用检查更新时发送几项字段,每天最多一次。完整列表如下:

这就是全部内容。其中不包含的有:没有安装 UUID(这个标识符只留给评分和支持者代码使用,把它混进这里会让我能够把两者关联起来,而这正是我不希望自己能做到的),不保留 IP,没有硬件细节,没有时区,也没有任何关于你使用哪些小组件、搜索什么或打开什么的信息。这次上报是发给支持者中心的一个小请求,紧跟在应用本来就会进行的更新检查之后发送。

每周和每月统计

原本唯一一个不识别用户就得不到的数字,是“本周有多少台不同的安装处于活跃状态”。通常这需要一个 id,这样服务器才能区分来自同一台电脑的两次上报和来自两台电脑的两次上报。在这里,这件事由你自己的电脑来做:它在你的硬盘上记住上一次上报的是哪一周、哪一个月,然后只说一次“本周第一次”。服务器加 1,除此之外一无所知。每周和每月的统计结果是准确的,而且仍然没有任何可以用来识别你的东西。

统计数据如何存储

服务器端只有计数器,没有关于机器的记录。而且上面这些字段是在各自独立的表里、每个字段一张表分别计数的,从不放在同一行里。这才是关键。如果一行里同时有版本加上系统加上安装时长加上首次运行月份加上语言,很容易就能对应到某一个具体的人;而且由于这些字段大多每天都不变,连续几天的数据就可能被拼接成一台机器的历史:费了那么大工夫不发送标识符,结果却用数据本身拼出了一个标识符。每个字段单独计数,意味着这种组合在数据库里根本不存在:不是被隐藏,不是受访问控制,而是不存在。我能读到的是“今天有 N 台安装运行 4.11.0”、“有 N 台是七月首次运行的”和“有 N 台已经超过 90 天”,永远不知道是哪 N 台,也不知道它们之间的重叠。

有两处会把一对数值放在一起存储,因为在那里,这一对数值本身就是要回答的问题:有多少台安装从一个版本换到了另一个版本,以及某个月首次运行的安装中,有多少在之后的某个月仍然活跃。这两处都不包含任何其他内容,而且任何出现少于五次的组合都会被归入“其他”,在只有我能看到的控制台里也是如此。

所有数据在 400 天后删除。不会保留逐条请求的记录,所以不存在可以被交出、被传票调取或被泄露的数据集。

v4.11.0 中的变化

这个开关本身对任何人都没有改变状态:原来关着的仍然关着,原来开着的仍然开着。改变的是开启时上报所携带的内容,这也是本页在同一个版本中随之更新的原因。

有一个局限:在这个版本之前就已存在的安装,会把安装时长和首次运行月份报告为 unknown,而且会一直这样。应用从未记录过它们第一次运行的时间,而我宁愿留下一个看得见的空缺,也不要一个猜出来的数字。这个盲区会被单独计数,并作为独立的一类显示,所以我始终能看到整体情况缺了多少。

v4.8.0 中的变化

在 v4.7.1 及之前,这个开关在你打开之前一直是关闭的。从 v4.8.0 起,新安装默认开启,因为几乎没有人会去打开这样的开关,统计数字也就因此毫无用处。你可以随时在“设置”中关闭它,关闭后立即生效。

如果你之前已经安装了 Xenon,那么对你来说什么都没有变。只有在还没有设置文件时,也就是全新安装时,才会读取新的默认值。如果你在 v4.8.0 之前安装、并且没有动过这个开关,它会保持关闭:当初告诉你的是,除非你另行选择,它就是关闭的,而更新不应该悄悄改变这一点。如果你曾经打开过它,它会保持开启。无论哪种情况,应用都会沿用你的设置里已有的选择。

你的权利

根据《通用数据保护条例》(GDPR),你可以要求访问、更正或删除你的个人数据,也可以反对对其进行处理。对于本网站,实际可行的做法是:按“拒绝”(或上面的按钮)来停止 Analytics,使用 Google 的停用浏览器插件,或者清除浏览器数据。对于应用,卸载会停止上面描述的所有请求,删除 server/data/ 会移除应用保存的一切,包括安装 UUID。

你也有权向监管机构投诉;在意大利,这个机构是 Garante per la protezione dei dati personali(意大利个人数据保护局)。

本页的变更

如果应用开始发起上表中没有的网络请求,表格会在同一个版本中更新,发布说明里也会写明。页面顶部的日期告诉你本页最后一次修改的时间。