Files
刚刚andCodex a3858db878 修复下载页面的稳定版、预发布版和 Nightly 通道 (#326)
下载页面目前只有稳定版和预发布版两个通道,并将 GitHub 返回的第一个预发布版本作为普通预发布版。官方新增 Nightly 后,这会误选
`nightly`,并拼出错误的版本标签和下载地址。

此次修改为中英文下载页面补齐稳定版、预发布版、开发版(Nightly)三个通道。普通预发布版明确排除 Nightly
和草稿;下载链接按发布资产中的真实文件名和地址匹配,支持 Nightly 标签与安装包版本号不同的情况。

各通道分别处理接口失败,稳定版和预发布版保留版本回退,Nightly 无法加载或暂无资产时提供官方发布页入口。同步将预发布版回退版本更新为
`2.7.0`。

验证:

- `pnpm docs:build` 构建通过。
- `pnpm exec eslint useLatestVersion.ts releaseUtils.ts metadata.data.ts
tests/releaseUtils.test.ts` 检查通过。
- `node --experimental-strip-types --test tests/releaseUtils.test.ts`:6
项回归测试通过,覆盖通道区分、Nightly 下载地址、GUI 资产版本差异、Android 安装包、缺失资产和接口失败回退。
- 浏览器验证中英文通道切换、操作系统和架构筛选、GitHub 加速前缀及构建后的页面预览。

Co-authored-by: Codex <codex@local>
2026-10-17 12:21:24 +08:00

10 KiB

home
home
hello
<script setup lang="ts"> import { computed, ref } from 'vue' import { data } from '../../metadata.data.js' import { resolveDownloadUrl } from '../../releaseUtils.ts' import { useLatestVersion } from '../../useLatestVersion.ts' const { latestVersion, prereleaseVersion, latestRelease, prereleaseRelease, nightlyRelease, loading } = useLatestVersion() interface Package { os: string arch: string gui_pkg_tmpl: Record cli_pkg_tmpl: Record // key: format, value: url comment?: string } function gen_pkg_without_gui(os: string, archs: string[]): Package[] { return archs.map(arch => { return { os, arch, gui_pkg_tmpl: {}, cli_pkg_tmpl: { "zip": `https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-${arch}-v{}.zip`, }, } }) } const packages = ref([ { os: 'Windows', arch: 'x86_64', gui_pkg_tmpl: { "exe": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_x64-setup.exe' }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-windows-x86_64-v{}.zip' }, comment: "Windows 7 needs to be SP1 and above, and you need to install the two patches KB3063858 and KB4474419, and disable QUIC input." }, { os: "Windows", arch: "arm64", gui_pkg_tmpl: { "exe": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_arm64-setup.exe' }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-windows-arm64-v{}.zip' }, }, { os: "Linux", arch: "x86_64", gui_pkg_tmpl: { "deb": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_amd64.deb', "AppImage": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_amd64.AppImage', }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-x86_64-v{}.zip', }, }, { os: "Linux", arch: "aarch64", gui_pkg_tmpl: { "deb": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_arm64.deb', }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-linux-aarch64-v{}.zip', }, }, ...gen_pkg_without_gui("Linux", ["arm", "armhf", "armv7", "armv7hf", "mips", "mipsel"]), { os: "MacOS", arch: "x86_64", gui_pkg_tmpl: { "dmg": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_x64.dmg', }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-macos-x86_64-v{}.zip', }, comment: "After installing the GUI, you need to manually execute xattr -c /Applications/easytier-gui.app, otherwise it will prompt that the file is damaged" }, { os: "MacOS", arch: "aarch64", gui_pkg_tmpl: { "dmg": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-gui_{}_aarch64.dmg', }, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-macos-aarch64-v{}.zip', }, comment: "After installing the GUI, you need to manually execute xattr -c /Applications/easytier-gui.app, otherwise it will prompt that the file is damaged" }, { os: "Android", arch: "arm64", gui_pkg_tmpl: { "apk": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/app-arm64-release.apk', }, cli_pkg_tmpl: {}, comment: "Choose this version for new Android devices. If you encounter abnormal display issues, please try upgrading WebView" }, { os: "Android", arch: "arm", gui_pkg_tmpl: { "apk": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/app-arm-release.apk', }, cli_pkg_tmpl: {}, comment: "Choose this version for older Android devices. If you encounter abnormal display issues, please try upgrading WebView" }, { os: "Android", arch: "x86_64", gui_pkg_tmpl: { "apk": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/app-x86_64-release.apk', }, cli_pkg_tmpl: {}, comment: "If you encounter abnormal display issues, please try upgrading WebView" }, { os: "Android", arch: "x86", gui_pkg_tmpl: { "apk": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/app-x86-release.apk', }, cli_pkg_tmpl: {}, comment: "If you encounter abnormal display issues, please try upgrading WebView" }, { os: "Android Magisk Module", arch: "aarch64", gui_pkg_tmpl: {}, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/Easytier-Magisk-v{}.zip' }, comment: "Supports Magisk/KernelSU/Apatch. Will start an easytier-core instance on boot. Config located at /data/adb/modules/easytier_magisk/config/" }, { os: "FreeBSD 13.2", arch: "x86_64", gui_pkg_tmpl: {}, cli_pkg_tmpl: { "zip": 'https://github.com/EasyTier/EasyTier/releases/download/v{}/easytier-freebsd-13.2-x86_64-v{}.zip', }, } ]) const all_archs = new Set(packages.value.map(pkg => pkg.arch)) const all_os = new Set(packages.value.map(pkg => pkg.os)) const all_proxy = new Set(data.github_accels) const channel = ref('easytier_latest_version') const url = 'https://github.com/EasyTier/EasyTier/releases/tag/' const filter_os = ref('') const filter_arch = ref('') const accel_proxy = ref('') const vers = computed(() => ({ easytier_latest_version: latestVersion.value ?? data.easytier_latest_version, easytier_pre_release_version: prereleaseVersion.value ?? data.easytier_pre_release_version, })) const currentVersion = computed(() => vers.value[channel.value as keyof typeof vers.value]) const currentRelease = computed(() => { if (channel.value === 'nightly') return nightlyRelease.value return channel.value === 'easytier_latest_version' ? latestRelease.value : prereleaseRelease.value }) const currentTag = computed(() => channel.value === 'nightly' ? 'nightly' : currentRelease.value?.tag_name ?? `v${currentVersion.value}`) const currentTitle = computed(() => channel.value === 'nightly' ? 'Nightly' : currentTag.value) function renderLinks(templates: Record) { return Object.entries(templates).flatMap(([format, template]) => { const downloadUrl = resolveDownloadUrl(template, currentRelease.value, channel.value === 'nightly' ? undefined : currentVersion.value) return downloadUrl ? [{ format, url: accel_proxy.value + downloadUrl }] : [] }) } </script>

Download

You can directly go to the GitHub Release page to view the download links for all versions, or use the table below to find the version that suits you.

The command line program package includes four executables:

  • easytier-core: The core program of EasyTier
  • easytier-cli: EasyTier management program, after starting easytier-core, you can use easytier-cli to view virtual network information
  • easytier-web: Used for self-hosting the EasyTier Web console backend, generally no need to self-host, you can use the official Web console
  • easytier-web-embed: Same functionality as easytier-web, but includes the Web frontend.

Switch Download Channel

Stable Version(v{{ vers.easytier_latest_version }}) Pre-release Version(v{{ vers.easytier_pre_release_version }}) Development (Nightly)

Nightly follows the main branch and is intended for testing the latest features. It may be unstable.

EasyTier {{ currentTitle }}

Loading Nightly downloads… Nightly downloads could not be loaded. Please visit the Nightly release page.

  • GitHub Acceleration

    Direct {{ p }}
  • Filter by Operating System

    All {{ os }}
  • Filter by Hardware Architecture

    All {{ arch }}
Operating System Hardware Architecture GUI Program CLI Program Notes
{{ pkg.os }} {{ pkg.arch }} {{link.format}} {{link.format}} {{ pkg.comment }}