面向浏览器与 iPhone/iPad 的本地 CDN 选择工具:优先保证开播,安全缓冲后再复核线路,并保留原始 CDN 回退。A local CDN selection tool for browsers and iPhone/iPad that prioritizes playback, verifies routes after safe buffering, and keeps an original-CDN fallback.
Install / v2.2.0
选择你的设备。Choose your device.
安装页只负责把公开配置交给你的设备;测速、选择和切换均在本机完成。This page only hands the public configuration to your device. Measurement, selection, and switching all happen locally.
01 / Browser
Chrome / Edge
独立 MV3 扩展。解压后从浏览器扩展管理页加载,不需要代理或证书。A standalone MV3 extension. Unzip it and load it from the browser extension manager; no proxy or certificate is required.
打开 B 站时自动连接Connect automatically when Bilibili opens
签名快捷指令只调用 iOS 原生“连接 VPN”动作。安装后仍需在快捷指令 App 中创建一次个人自动化。The signed shortcut only invokes the native iOS “Connect VPN” action. After installation, create one personal automation in the Shortcuts app.
这些地址只会被已安装的本机脚本接管;网络工具未启动时不会连接任何外部服务。These addresses are intercepted only by the installed local script. With the network tool inactive, they do not connect to an external service.
Guide / Chrome · Edge
浏览器扩展完整安装与使用教程。Complete browser-extension setup and usage guide.
Bilibili-oversea 2.2 是 Manifest V3 扩展。测速、节点选择和规则切换都在本机完成;它不提供代理、不上传遥测,也不会替你绕过地区、版权、登录或会员限制。Bilibili-oversea 2.2 is a Manifest V3 extension. Measurement, node selection, and rule switching happen locally. It provides no proxy, sends no telemetry, and does not bypass region, copyright, login, or membership restrictions.
点击上方按钮下载 bilibili-oversea-browser-v2.2.0.zip。Use the button above to download bilibili-oversea-browser-v2.2.0.zip.
把 ZIP 解压到不会被系统清理、也不会随手移动的固定文件夹。Extract the ZIP into a stable folder that will not be cleaned or moved.
打开解压后的目录,确认能直接看到 manifest.json、src 和 assets。Open the extracted directory and confirm that manifest.json, src, and assets are directly inside it.
不要直接加载 ZIPDo not load the ZIP浏览器需要的是解压后的文件夹,并且必须选择包含 manifest.json 的那一层。The browser needs the extracted folder. Select the exact directory that contains manifest.json.
打开右上角“开发者模式”。Enable Developer mode in the top-right corner.
点击“加载已解压的扩展程序”,选择包含 manifest.json 的文件夹。Select “Load unpacked” and choose the folder containing manifest.json.
Microsoft Edge
在地址栏打开 edge://extensions。Open edge://extensions.
打开左侧“开发人员模式”。Enable Developer mode in the sidebar.
点击“加载解压缩的扩展”,选择包含 manifest.json 的文件夹。Select “Load unpacked” and choose the folder containing manifest.json.
安装成功Installed扩展列表会显示 Bilibili-oversea 2.2.0 和青色图标。建议从拼图菜单把它固定到工具栏。The extension list will show Bilibili-oversea 2.2.0 with a cyan icon. Pin it from the extensions menu for easier access.
03
首次运行与自动测速First run and automatic measurement
安装后刷新已经打开的哔哩哔哩视频、番剧或课程页面,再开始播放。After installation, refresh any open Bilibili video, anime, or course page, then start playback.
扩展会先观察播放器 API;如果 10 秒内没有捕获到媒体请求,会回退扫描当前页面上的视频资源。The extension watches the player API first. If no media request is captured within 10 seconds, it falls back to scanning video resources on the page.
如果该网络环境在最近 3 小时已有可用结果,会立即使用缓存胜出节点。If this network has a valid result from the last 3 hours, the cached winner is applied immediately.
播放缓冲稳定约 12 秒后,扩展会进行一次轻量比较:当前节点与表现最佳的备用节点各取少量数据,不中断正常播放。After playback has buffered safely for about 12 seconds, the extension performs a light comparison between the current node and the best backup without interrupting playback.
…完整测速进行中Full benchmark running
·轻量比较进行中Light comparison running
A自动模式Automatic mode
M固定节点模式Fixed-node mode
—使用原始 CDNOriginal CDN
!测速或规则安装失败Measurement or rule-install failure
04
扩展面板与切换模式Extension panel and switching modes
点击工具栏图标可查看当前目标、最近媒体请求、测速结果与动态规则状态。Select the toolbar icon to inspect the current target, recent media request, benchmark results, and dynamic-rule status.
自动模式Automatic mode
清除手动固定节点,并为当前视频重新测速。Clears a manually fixed node and remeasures the current video.
重新测速Retest
忽略当前缓存,对正在播放的视频重新执行完整比较。Ignores the current cache and runs a fresh full comparison for the playing video.
使用原始 CDNUse original CDN
移除当前标签页的动态重定向规则,恢复平台原始地址。Removes dynamic redirect rules for the current tab and restores the platform URL.
固定节点Fix a node
只允许固定已经验证可用的节点;切换后会轻微回退播放位置,让播放器重新取流。Locks only a verified node. Playback rewinds slightly after switching so the player can request the stream again.
禁用候选Disable a candidate
从后续测速中排除某个持续失败或不适合当前网络的节点。Excludes a repeatedly failing or unsuitable node from later measurements.
后台维护Background maintenance
首次轻量比较会等待安全缓冲,之后约每 15 分钟维护一次;它不会持续占用带宽测速。The first light comparison waits for safe buffering, then maintenance runs about every 15 minutes rather than continuously consuming bandwidth.
05
确认扩展确实生效Confirm that the extension is working
打开扩展面板,确认能看到当前标签页、最近媒体地址和规则状态。Open the panel and confirm that the current tab, recent media URL, and rule state are visible.
一次有效测速通常会显示 bilivideo 主机、HTTP 206 分段响应,并在胜出节点旁显示已安装规则。A valid measurement normally shows a bilivideo host, an HTTP 206 partial response, and an installed rule beside the winner.
跳到尚未缓存的时间点,或打开另一段新视频,观察面板中的最近媒体与目标是否更新。Seek to an uncached point or open another video, then confirm that the recent-media and target fields update.
正常保留原节点Original may remain如果候选节点没有更快,扩展会保留原始节点。这不代表扩展失效,也不保证每个视频和网络都能提速。If no candidate is faster, the extension keeps the original node. That is not a failure, and improvement is not guaranteed for every video or network.
06
更新与卸载Update and uninstall
更新Update
下载并解压新版本,覆盖或替换原固定文件夹。Download and extract the new version, replacing the stable extension folder.
回到扩展管理页,点击该扩展卡片上的“重新加载”。Return to the extensions page and select Reload on the extension card.
刷新已经打开的 B 站页面。Refresh any Bilibili pages that were already open.
卸载Uninstall
在扩展管理页找到 Bilibili-oversea。Find Bilibili-oversea on the extensions page.
点击“移除”,然后刷新 B 站标签页。Select Remove, then refresh Bilibili tabs.
确认不再使用后,可删除本地解压目录。Delete the extracted folder after confirming it is no longer in use.
07
常见问题排查Common troubleshooting
一直显示“等待视频”Stuck on “waiting for video”
刷新页面并实际开始播放;关闭会替换播放器或阻止媒体请求的其他扩展,再检查当前网站权限。Refresh and start playback. Disable extensions that replace the player or block media requests, then check site access.
所有候选都失败All candidates failed
先切回原始 CDN 确认视频本身能播放,再重新测速。公司、校园或公共网络可能阻断部分候选主机。Switch to the original CDN and confirm the video itself plays, then retest. Corporate, campus, or public networks may block some candidates.
切换后播放停住Playback stops after switching
等待几秒或向后拖动一点;仍无恢复时使用“原始 CDN”,刷新页面后再测。Wait a few seconds or seek slightly backward. If playback does not recover, choose Original CDN, refresh, and retest.
仍需核对实现细节Need implementation details
本页已包含完整操作内容;源代码与 Markdown 文档仍可在 GitHub 仓库中审阅。This page contains the complete operating guide. Source code and the Markdown documentation remain available for review in the GitHub repository.
08
权限、流量与隐私边界Permissions, traffic, and privacy boundaries
扩展不申请代理、Cookie、浏览历史、webRequest 或所有网站访问权限。The extension does not request proxy, cookie, browsing-history, webRequest, or all-sites access.
权限范围只覆盖相关哔哩哔哩页面与 bilivideo 媒体主机。Its access is limited to relevant Bilibili pages and bilivideo media hosts.
最近媒体的完整 URL 只保存在扩展后台内存,不上传到任何遥测服务。The full recent-media URL stays only in extension background memory and is not uploaded to telemetry.
一次完整测速理论上约消耗 4 MB;日常轻量比较只测试 2 个节点,每个约 256 KB。A full benchmark theoretically transfers about 4 MB. Routine light comparison checks only 2 nodes at roughly 256 KB each.
扩展源码公开在项目仓库中,可自行检查权限声明、测速逻辑和动态规则。The extension source is public in the project repository, including permissions, measurement logic, and dynamic rules.
安全边界Security boundary开发者模式安装会显示标准警告。只从项目发布地址下载,并在更新前核对文件来源。Developer-mode installation shows a standard warning. Download only from the project release location and verify the source before updating.
Guide / iOS · iPadOS
完整安装与自动启动教程。Complete setup and automatic-start guide.
配置只需导入一次。以后直接打开原版哔哩哔哩,iOS 会连接承载 Bili CDN Auto 的 VPN;视频开始播放后,脚本会实测候选 CDN,并使用当前网络下更合适的节点。Setup is a one-time process. Afterwards, opening the official Bilibili app can connect the VPN that carries Bili CDN Auto; once playback begins, the script measures candidate CDNs and uses the more suitable route for the current network.
00
开始前Before you start
推荐 iOS/iPadOS 16.4 或更高版本,以使用系统原生“连接 VPN”快捷指令动作。iOS/iPadOS 16.4 or later is recommended for the native “Connect VPN” Shortcuts action.
安装 Surge、Shadowrocket、Loon 或 Stash 中的一款即可;不要同时连接多个 VPN 工具。Use one of Surge, Shadowrocket, Loon, or Stash. Do not connect multiple VPN tools at once.
网络工具中应已有可正常使用的主配置。Bili CDN Auto 是模块/插件,不提供代理节点或订阅。Your network tool must already have a working main configuration. Bili CDN Auto is a module/plugin; it does not provide proxy nodes or subscriptions.
能力边界Scope它只优化视频 CDN 路径,不能绕过地区、版权、登录或会员限制。It only optimizes video-CDN routing. It cannot bypass region, copyright, login, or membership restrictions.
01
导入 Bili CDN AutoImport Bili CDN Auto
在本页上方选择你实际使用的网络工具,只导入对应的一项,不要把所有客户端配置全部安装。Use the buttons above to import only the configuration for the network tool you actually use.
Shadowrocket
点击上方 Shadowrocket,允许浏览器打开 App。Select Shadowrocket above and allow the browser to open the app.
在模块导入页添加 Bili CDN Auto,保持默认参数。Add Bili CDN Auto on the import screen and keep the defaults.
在配置/模块页面确认模块已存在并启用。Confirm that it exists and is enabled under configuration/modules.
回到首页,选择平时使用的配置或节点。Return home and select your usual profile or node.
Surge
点击上方 Surge,允许浏览器打开 Surge。Select Surge above and allow the browser to open it.
在模块安装页确认添加。Confirm installation on the module screen.
Surge → 当前配置 → 模块,确认已启用。Go to Surge → Current Profile → Modules and confirm it is enabled.
首次使用保持默认参数;以后可在模块参数页调整候选节点和缓存时间。Keep defaults initially; candidate nodes and cache duration can be adjusted later.
Loon
点击上方 Loon,允许打开 App 并确认导入插件。Select Loon above, allow the app to open, and confirm plugin import.
Loon → 配置 → 插件,确认已启用。Go to Loon → Configuration → Plugins and confirm it is enabled.
候选 CDN、缓存时间等参数保持默认即可。Keep the candidate CDN and cache settings at their defaults.
Stash
点击上方 Stash,确认安装 Bili CDN Auto Override。Select Stash above and confirm installation of the Bili CDN Auto Override.
Stash → 覆写/Override,确认已启用。Go to Stash → Override and confirm it is enabled.
确认原有主配置仍处于选中状态。Confirm that your existing main profile remains selected.
Quantumult X / Experimental下载上方 .snippet,将其中的 [rewrite_local] 与 [mitm] 合并到自己的配置并更新资源。它没有与其他四款相同的一键模块流程,建议熟悉配置格式后使用。Download the .snippet above, merge its [rewrite_local] and [mitm] sections into your own configuration, then refresh resources. Quantumult X has no equivalent one-tap module flow; use it only if you understand its format.
02
生成、安装并信任自己的证书Generate, install, and trust your own certificate
视频请求使用 HTTPS。只有设备信任网络工具在本机生成的 CA,工具才能执行 CDN 请求脚本。Video requests use HTTPS. Your network tool can run the CDN-request script only after the device trusts the CA generated locally by that tool.
Shadowrocket:设置 → 证书,生成新的 CA,然后安装证书。Settings → Certificate; generate a new CA, then install it.
Surge:首页/更多 → MitM,生成新的 CA 并安装系统描述文件。Home/More → MitM; generate a new CA and install the system profile.
Loon:配置/设置 → MitM → 证书,生成并安装证书。Configuration/Settings → MitM → Certificate; generate and install it.
Stash:首页 → MitM → CA 证书 → Stash Generated CA → 安装证书。Home → MitM → CA Certificate → Stash Generated CA → Install.
打开刚下载的描述文件并点击“安装”。Open the downloaded profile and tap Install.
设置 → 通用 → 关于本机 → 证书信任设置。Go to Settings → General → About → Certificate Trust Settings.
在“针对根证书启用完全信任”下启用刚生成的证书。Enable full trust for the certificate you just generated.
回到网络工具,确认 MitM/HTTPS 解密已开启。Return to the network tool and confirm MitM/HTTPS decryption is enabled.
安全提示Security只使用自己设备上的网络工具生成的证书。不要下载、共享或安装他人的 CA、私钥或 .p12 文件。模块已把解密主机限制到相关 B 站视频 CDN 域名。Use only the certificate generated by the network tool on your own device. Never download, share, or install another person's CA, private key, or .p12. The module limits decrypted hosts to relevant Bilibili video-CDN domains.
03
首次连接与基础验证First connection and basic verification
在网络工具首页启动连接;首次连接时允许 iOS 添加 VPN 配置。Start the connection in your network tool and allow iOS to add its VPN profile.
回到本页上方点击“查看状态”。Return here and select “View status” above.
页面显示包含 "ok": true 的 JSON,表示本机控制脚本已加载。A JSON response containing "ok": true means the local control script is loaded.
打开哔哩哔哩,播放一个未完整缓存的视频至少 15–25 秒。Open Bilibili and play a video that is not fully cached for at least 15–25 seconds.
再次查看状态;正常情况下 selectedHost 不为空,scores 中会出现测速结果。Check status again. Normally, selectedHost is non-empty and scores contains measurements.
播放优先Playback first新视频的首个媒体请求从不等待测速:有缓存时立即用缓存赢家,无缓存时先走原始 CDN。至少 15 秒后的后续媒体请求才会触发安全测速;如果没有后续请求,就继续原线路。The first media request never waits for a benchmark: it immediately uses a cached winner when available, otherwise the original CDN. Safe measurement can begin only on a later request after at least 15 seconds; without another request, playback stays on the original route.
若“查看状态”直接访问失败,通常是网络工具未连接、模块未启用,或主配置没有加载该模块。If “View status” fails immediately, the network tool is usually disconnected, the module is disabled, or the main profile did not load it.
04
安装“连接 VPN”快捷指令Install the “Connect VPN” shortcut
点击本页上方“安装快捷指令”。Select “Install shortcut” above.
在快捷指令 App 中检查内容:它只有一个系统动作——“连接 VPN”。Inspect it in Shortcuts: it contains only one system action, “Connect VPN.”
点击“添加快捷指令”。Tap “Add Shortcut.”
如果设备里有多个 VPN,编辑动作中的 VPN,选择承载 Bili CDN Auto 的客户端。If the device has multiple VPNs, edit the VPN field and choose the client carrying Bili CDN Auto.
手动运行一次并允许连接;确认状态栏出现 VPN 标志且没有跳转到其他 App。Run it once, allow the connection, and confirm the VPN indicator appears without switching to another app.
文件通过 macOS Shortcuts 的“任何人可导入”模式签名,不包含账号、API 密钥、代理节点或远程执行代码。The file is signed with the macOS Shortcuts “Anyone” import mode and contains no accounts, API keys, proxy nodes, or remotely executed code.
05
创建“打开哔哩哔哩时”个人自动化Create a personal “When Bilibili opens” automation
Apple 不允许下载文件替用户静默创建个人自动化,因此需要在本机确认一次:Apple does not allow a downloaded file to silently create a personal automation, so confirm these steps once on-device:
打开“快捷指令”App,进入“自动化”。Open Shortcuts and go to Automation.
点击右上角 +;首次使用可直接点“新建自动化”。Tap + at the top right, or “New Automation” on first use.
选择“App”。Choose “App.”
点击“选取”,勾选“哔哩哔哩”,然后完成。Tap “Choose,” select Bilibili, then confirm.
勾选“打开时”;不要选择“关闭时”。Select “Is Opened,” not “Is Closed.”
选择“立即运行”;“运行时通知”可按偏好关闭。Choose “Run Immediately”; the run notification can be disabled if offered.
进入下一步,选择“新建空白自动化”。Continue and choose “New Blank Automation.”
添加“运行快捷指令”动作。Add the “Run Shortcut” action.
点击蓝色的“快捷指令”字段,选择 BiliCDNAuto-ConnectVPN。Tap the blue Shortcut field and choose BiliCDNAuto-ConnectVPN.
点击“完成”。Tap Done.
关闭哔哩哔哩和网络工具后测试:点击原版哔哩哔哩图标,VPN 应自动连接,画面仍停留在哔哩哔哩;播放后 CDN 优选在后台执行。To test, close Bilibili and the network tool, then open the official Bilibili app. The VPN should connect while the app remains visible; CDN selection runs in the background after playback starts.
06
日常操作与默认策略Daily use and default policy
正常情况直接打开哔哩哔哩,不必进入网络工具或本页。Normally, just open Bilibili; there is no need to revisit the network tool or this page.
换 Wi‑Fi 或蜂窝网络后,旧选择会失效;首个请求先走原始 CDN,安全延迟后重新选择。After changing Wi-Fi or cellular networks, the old choice expires; the first request uses the original CDN and selection resumes after the safety delay.
明显变慢时点“重新测速”,再拖动到未缓存位置或重开视频。If playback becomes clearly slower, select “Retest,” then seek to uncached content or reopen the video.
“原始 CDN”恢复平台默认;“自动模式”重新启用自动选择;“查看状态”中的 selectedHost 是当前节点。“Original CDN” restores the platform default, “Automatic mode” re-enables selection, and selectedHost in status shows the current node.
不要每次启动都重测Do not retest on every launch成功结果默认缓存 3 小时,失败结果缓存 10 分钟。新视频 15 秒后及每 15 分钟,仅比较当前节点与最佳备用节点,各读取 128 KiB;完整测速同样每节点 128 KiB 并行请求,最长约 4 秒,只在无缓存、明显变慢、节点失败、换网或候选耗尽时发生。Successful results are cached for 3 hours and failures for 10 minutes. After 15 seconds on a new video and every 15 minutes thereafter, only the current node and best fallback are compared at 128 KiB each. A full benchmark also uses parallel 128 KiB requests per node for up to about 4 seconds, and runs only when there is no cache, playback slows, a node fails, the network changes, or candidates are exhausted.
iOS 网络工具无法读取播放器缓冲值,因此不能像浏览器扩展一样每 2 秒读取缓冲;15 秒安全延迟是请求层的保守近似。iOS network tools cannot read the player's buffer, so they cannot sample it every two seconds like the browser extension. The 15-second safety delay is a conservative request-layer approximation.
07
常见问题Troubleshooting
打开 App 后 VPN 没有连接VPN does not connect when the app opens
手动运行快捷指令,确认它能连接正确的 VPN。Run the shortcut manually and confirm it connects the correct VPN.
检查自动化是否启用、触发 App 是否为哔哩哔哩、运行方式是否为“立即运行”。Confirm the automation is enabled, targets Bilibili, and is set to Run Immediately.
多 VPN 时重新选择正确配置;旧版 iOS 可改用按需连接或下方 URL Scheme。With multiple VPNs, select the correct one again. On older iOS, use on-demand connection or a URL Scheme below.
selectedHost一直为空stays empty
确认模块已启用,证书已安装且完全信任。Confirm the module is enabled and the certificate is installed and fully trusted.
播放新视频或拖到未缓存位置,再点一次“重新测速”。Play a new video or seek to uncached content, then run “Retest” once.
证书错误或完全无法联网Certificate error or no connectivity
立即停止网络工具,禁用模块后重试。检查是否误装他人证书、证书过期或存在其他 MitM/重写冲突;必要时删除描述文件并重新生成。Stop the network tool immediately and retry with the module disabled. Check for someone else's certificate, expiry, or conflicting MitM/rewrite rules; remove and regenerate the profile if needed.
自动测速后仍没有变快No improvement after automatic measurement
候选 CDN 在当前运营商上可能表现接近,或瓶颈不在 CDN。无可用候选时会沿用原始节点,但不能保证每条视频线路都改善。Candidate CDNs may perform similarly on your carrier, or the bottleneck may be elsewhere. The original node is retained when no candidate is better, and improvement is not guaranteed for every video route.
08
URL Scheme 备用方案URL Scheme fallback
如果系统“连接 VPN”动作不能识别客户端,可在个人自动化中改用“打开 URL”动作:If the system “Connect VPN” action cannot identify your client, use an “Open URL” action in the personal automation:
Surgesurge:///start?autoclose=true
Shadowrocketshadowrocket://connect?autoclose=true
Loonloon://on
Stashstash://start
Surge 和 Shadowrocket 的 autoclose=true 会在连接后返回之前的 App。Loon、Stash 是否自动返回取决于版本,因此仍优先使用系统动作或客户端按需连接。For Surge and Shadowrocket, autoclose=true returns to the previous app after connecting. Loon and Stash behavior varies by version, so prefer the system action or on-demand connection.
09
卸载与恢复Uninstall and restore
在快捷指令 → 自动化中删除“哔哩哔哩打开时”自动化。Delete the “When Bilibili opens” automation in Shortcuts → Automation.
删除 BiliCDNAuto-ConnectVPN 快捷指令。Delete the BiliCDNAuto-ConnectVPN shortcut.
在网络工具中禁用或删除 Bili CDN Auto 模块/插件/Override。Disable or delete the Bili CDN Auto module/plugin/Override in the network tool.
若不再使用任何 HTTPS 解密功能,到设置 → 通用 → VPN 与设备管理中删除对应证书描述文件。If you no longer use HTTPS decryption, remove its certificate profile under Settings → General → VPN & Device Management.
停止 VPN;哔哩哔哩将恢复平台原始 CDN 行为。Stop the VPN; Bilibili returns to the platform's original CDN behavior.
浏览器扩展可以随时切回“原始 CDN”或直接移除。iOS 端可在网络工具里禁用对应模块,并删除个人自动化、快捷指令与不再使用的证书;完成后 B 站恢复原始网络行为。源码、配置模板与版本记录都保留在 GitHub 仓库中。
What it solves
Bilibili-oversea addresses cases where the same video performs very differently across bilivideo.com CDN hosts. It compares viable routes locally and sends later media requests to a better host for the current network. The browser edition runs as a Chrome / Edge extension; the iPhone and iPad edition uses the local scripting capabilities of Surge, Loon, Shadowrocket, Stash, or Quantumult X.
Playback-first behavior
A new video is never held back for a benchmark. A recent cached winner is applied immediately; otherwise playback starts on the original CDN. The browser extension verifies routes after the player has safe buffer, while the mobile edition waits for a later media request before running a lightweight comparison. Failed candidates rotate to a verified fallback, with the original CDN always available.
Security and privacy boundaries
Measurements, selections, and status remain on the device; there is no telemetry or remote control service.
The project does not provide proxy nodes, subscriptions, or shared certificates.
On iOS, users must generate and trust their own MITM certificate inside their network tool. Never install a CA, private key, or .p12 file supplied by someone else.
The tool can improve CDN route selection, but it cannot guarantee that every video becomes faster and does not bypass copyright, regional, or platform-signature restrictions.
Maintenance and recovery
The browser extension can return to the original CDN at any time or be removed completely. On iOS, disable the module in the network tool and remove the personal automation, shortcut, and any certificate that is no longer needed. Bilibili then returns to its original network behavior. Source, configuration templates, and release history remain available in the GitHub repository.