feat:移除了弹窗,服务器添加sls

This commit is contained in:
AxTps committed 2026-09-08 22:39:45 +08:00
commit 6a295f9a7a
4082 files changed
+1322534

No files matched your search

+389
View File
@@ -0,0 +1,389 @@
<script setup lang="ts">
import { CalendarIcon, HistoryIcon } from '@modrinth/assets'
import Accordion from '@modrinth/ui/src/components/base/Accordion.vue'
import ButtonStyled from '@modrinth/ui/src/components/base/ButtonStyled.vue'
import TagItem from '@modrinth/ui/src/components/base/TagItem.vue'
import { defineMessages, useVIntl } from '@modrinth/ui/src/composables/i18n.ts'
type AnnouncementLocale = 'en-US' | 'zh-CN'
type AnnouncementChangeType = 'added' | 'changed' | 'deprecated' | 'removed' | 'fixed' | 'security'
type LocalizedAnnouncementText = Record<AnnouncementLocale, string>
type LauncherAnnouncement = {
id: string
version: string
publishedAt: string
title: LocalizedAnnouncementText
changes: Partial<Record<AnnouncementChangeType, LocalizedAnnouncementText[]>>
notes?: LocalizedAnnouncementText
externalUrl?: string
}
type AnnouncementCatalog = {
updated_at: string
announcements: LauncherAnnouncement[]
}
// 每次用户访问时从客户端实时拉取。数据来自 app 前端的公告 catalog
// (apps/app-frontend/src/announcements/catalog.ts),由发布 CI 导出并经
// Release metadata is served by the website endpoint and does not require a
// direct browser request to the GitHub API.
const CATALOG_URL = '/api/releases/catalog'
const CHANGE_TYPES: readonly AnnouncementChangeType[] = [
'added',
'changed',
'deprecated',
'removed',
'fixed',
'security',
]
const { formatMessage, locale } = useVIntl()
const messages = defineMessages({
seoTitle: {
id: 'axolotl-site.changelog.seo.title',
defaultMessage: 'Changelog - Axolotl Launcher',
},
seoDescription: {
id: 'axolotl-site.changelog.seo.description',
defaultMessage: 'See what changed in each public Axolotl Launcher release.',
},
eyebrow: { id: 'axolotl-site.changelog.eyebrow', defaultMessage: 'Release history' },
title: { id: 'axolotl-site.changelog.title', defaultMessage: 'Changelog' },
description: {
id: 'axolotl-site.changelog.description',
defaultMessage: 'Browse features, changes, and fixes in every public release.',
},
loading: {
id: 'axolotl-site.changelog.loading',
defaultMessage: 'Checking published releases…',
},
errorTitle: {
id: 'axolotl-site.changelog.error.title',
defaultMessage: 'Changelog is temporarily unavailable',
},
errorDescription: {
id: 'axolotl-site.changelog.error.description',
defaultMessage:
'We could not fetch the release history. Your network may be unavailable, or the data source is temporarily unreachable.',
},
retry: { id: 'axolotl-site.changelog.retry', defaultMessage: 'Retry' },
empty: {
id: 'axolotl-site.changelog.empty',
defaultMessage: 'No public release notes are available yet.',
},
noReleaseNotes: {
id: 'axolotl-site.changelog.no-release-notes',
defaultMessage: 'No release notes were provided for this version.',
},
added: { id: 'axolotl-site.changelog.category.added', defaultMessage: 'Added' },
changed: { id: 'axolotl-site.changelog.category.changed', defaultMessage: 'Changed' },
deprecated: {
id: 'axolotl-site.changelog.category.deprecated',
defaultMessage: 'Deprecated',
},
removed: { id: 'axolotl-site.changelog.category.removed', defaultMessage: 'Removed' },
fixed: { id: 'axolotl-site.changelog.category.fixed', defaultMessage: 'Fixed' },
security: { id: 'axolotl-site.changelog.category.security', defaultMessage: 'Security' },
})
const categoryClasses: Record<AnnouncementChangeType, string> = {
added: 'bg-brand-green',
changed: 'bg-brand-blue',
deprecated: 'bg-brand-orange',
removed: 'bg-brand-red',
fixed: 'bg-brand-purple',
security: 'bg-brand-orange',
}
function getLocalizedText(text: LocalizedAnnouncementText): string {
return text[locale.value === 'zh-CN' ? 'zh-CN' : 'en-US']
}
function getAnnouncementChangeTypes(announcement: LauncherAnnouncement): AnnouncementChangeType[] {
return CHANGE_TYPES.filter((type) => announcement.changes?.[type]?.length)
}
const {
data: announcements,
error,
status,
refresh,
} = await useAsyncData(
'axolotl-release-catalog',
async () => {
const catalog = await $fetch<AnnouncementCatalog>(CATALOG_URL, { timeout: 8000 })
return catalog.announcements
},
{ server: false },
)
const isLoading = computed(() => status.value === 'idle' || status.value === 'pending')
const seoTitle = computed(() => formatMessage(messages.seoTitle))
const seoDescription = computed(() => formatMessage(messages.seoDescription))
useSeoMeta({
title: () => seoTitle.value,
description: () => seoDescription.value,
ogTitle: () => seoTitle.value,
ogDescription: () => seoDescription.value,
ogType: 'website',
ogUrl: 'https://axlmc.org/changelog',
robots: 'index, follow',
})
useHead({
link: [{ rel: 'canonical', href: 'https://axlmc.org/changelog' }],
})
</script>
<template>
<section class="changelog-page">
<header class="changelog-header">
<span class="section-eyebrow">{{ formatMessage(messages.eyebrow) }}</span>
<h1>{{ formatMessage(messages.title) }}</h1>
<p>{{ formatMessage(messages.description) }}</p>
</header>
<div
v-if="isLoading"
class="status-panel m-0 flex items-center justify-center gap-3 rounded-lg border border-surface-5 bg-surface-4 p-8 text-center text-[var(--color-secondary)]"
role="status"
>
<div class="loading-indicator" aria-hidden="true" />
{{ formatMessage(messages.loading) }}
</div>
<div
v-else-if="error"
class="status-panel error-panel m-0 flex items-center justify-center justify-between gap-3 rounded-lg border border-surface-5 bg-surface-4 p-8 text-left text-center text-[var(--color-secondary)]"
role="alert"
>
<div>
<h2>{{ formatMessage(messages.errorTitle) }}</h2>
<p>{{ formatMessage(messages.errorDescription) }}</p>
</div>
<ButtonStyled color="brand" type="outlined">
<button type="button" @click="refresh()">{{ formatMessage(messages.retry) }}</button>
</ButtonStyled>
</div>
<p
v-else-if="!announcements?.length"
class="status-panel m-0 flex items-center justify-center gap-3 rounded-lg border border-surface-5 bg-surface-4 p-8 text-center text-[var(--color-secondary)]"
>
{{ formatMessage(messages.empty) }}
</p>
<div v-else class="flex flex-col gap-3">
<Accordion
v-for="(announcement, index) in announcements"
:key="announcement.id"
:open-by-default="index === 0"
class="overflow-hidden rounded-lg border border-surface-5 bg-surface-4"
button-class="group flex w-full cursor-pointer items-center gap-4 border-0 bg-transparent px-5 py-4 text-left"
>
<template #title>
<div class="announcement-heading flex min-w-0 flex-1 items-center justify-between gap-4">
<div class="flex min-w-0 items-center gap-3">
<h2>{{ getLocalizedText(announcement.title) }}</h2>
<TagItem>{{ announcement.version }}</TagItem>
</div>
<div
class="flex shrink-0 items-center gap-[0.35rem] text-[0.8125rem] text-[var(--color-secondary)]"
>
<CalendarIcon aria-hidden="true" />
<time :datetime="announcement.publishedAt">
{{ announcement.publishedAt }}
</time>
</div>
</div>
</template>
<div class="border-t border-surface-5 bg-surface-3 px-[1.25rem] pb-2">
<p
v-if="
!announcement.changes ||
CHANGE_TYPES.every((type) => !announcement.changes?.[type]?.length)
"
class="m-0 pb-2 pt-4 leading-[1.6] text-[var(--color-secondary)]"
>
{{ formatMessage(messages.noReleaseNotes) }}
</p>
<section
v-for="(type, typeIndex) in getAnnouncementChangeTypes(announcement)"
:key="type"
class="change-group"
:class="{ 'first-change-group': typeIndex === 0 }"
>
<h3>
<span :class="categoryClasses[type]" aria-hidden="true" />
{{ formatMessage(messages[type]) }}
</h3>
<ul>
<li v-for="change in announcement.changes[type]" :key="change">
{{ getLocalizedText(change) }}
</li>
</ul>
</section>
</div>
</Accordion>
</div>
<div class="mt-8 flex items-center justify-center gap-2 text-sm text-[var(--color-secondary)]">
<HistoryIcon aria-hidden="true" />
<a href="https://github.com/Mystic-Stars/Axolotl/releases" target="_blank" rel="noopener">
GitHub Releases
</a>
</div>
</section>
</template>
<style scoped lang="scss">
.changelog-page {
width: min(52rem, calc(100% - 2rem));
margin: 0 auto;
padding: 4rem 0 5rem;
}
.changelog-header {
max-width: 40rem;
margin-bottom: 2.5rem;
h1 {
margin: 0.5rem 0 0;
color: var(--color-contrast);
font-size: 2.25rem;
line-height: 1.15;
}
p {
margin: 1rem 0 0;
color: var(--color-secondary);
line-height: 1.65;
}
}
.announcement-title-row {
h2 {
margin: 0;
overflow: hidden;
color: var(--color-contrast);
font-size: 1rem;
font-weight: 600;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.announcement-date {
svg {
width: 1rem;
height: 1rem;
}
}
.change-group {
display: grid;
grid-template-columns: 7rem minmax(0, 1fr);
gap: 1.25rem;
padding: 1rem 0;
border-top: 1px solid var(--surface-5);
&.first-change-group {
border-top: 0;
}
h3 {
display: flex;
align-items: center;
gap: 0.5rem;
margin: 0;
color: var(--color-secondary);
font-size: 0.875rem;
font-weight: 600;
span {
width: 0.5rem;
height: 0.5rem;
border-radius: 50%;
}
}
ul {
display: flex;
flex-direction: column;
gap: 0.5rem;
margin: 0;
padding-left: 1.25rem;
color: var(--color-base);
line-height: 1.6;
overflow-wrap: anywhere;
}
}
.error-panel {
h2,
p {
margin: 0;
}
h2 {
color: var(--color-contrast);
font-size: 1rem;
}
p {
margin-top: 0.25rem;
}
}
.loading-indicator {
width: 1rem;
height: 1rem;
border: 2px solid var(--surface-5);
border-top-color: var(--color-brand);
border-radius: 50%;
animation: spin 700ms linear infinite;
}
.changelog-footer {
svg {
width: 1rem;
height: 1rem;
}
a {
color: inherit;
}
}
@keyframes spin {
to {
transform: rotate(1turn);
}
}
@media (max-width: 600px) {
.changelog-page {
padding: 2.5rem 0 3rem;
}
.changelog-header h1 {
font-size: 1.875rem;
}
.announcement-heading,
.error-panel,
.change-group {
align-items: flex-start;
flex-direction: column;
}
.change-group {
grid-template-columns: 1fr;
gap: 0.5rem;
}
}
</style>
File diff suppressed because it is too large. Load diff
+288
View File
@@ -0,0 +1,288 @@
<script setup lang="ts">
import { useVIntl } from '@modrinth/ui/src/composables/i18n.ts'
import LegalDocument from '~/components/ui/LegalDocument.vue'
const { locale } = useVIntl()
const isChinese = computed(() => locale.value === 'zh-CN')
const seoTitle = computed(() =>
isChinese.value ? '隐私政策 - Axolotl Launcher' : 'Privacy Policy - Axolotl Launcher',
)
const seoDescription = computed(() =>
isChinese.value
? '了解 Axolotl Launcher 官方网站和桌面应用如何处理数据。'
: 'Learn how the Axolotl Launcher official website and desktop application handle data.',
)
useSeoMeta({
title: () => seoTitle.value,
description: () => seoDescription.value,
ogTitle: () => seoTitle.value,
ogDescription: () => seoDescription.value,
ogType: 'website',
ogUrl: 'https://axlmc.org/privacy',
robots: 'index, follow',
})
useHead({
link: [{ rel: 'canonical', href: 'https://axlmc.org/privacy' }],
})
</script>
<template>
<LegalDocument
v-if="isChinese"
:key="`zh-${locale}`"
eyebrow="隐私政策"
title="隐私政策"
description="本政策说明 Axolotl Launcher 官方网站和桌面应用处理数据的方式,以及第三方服务可能接收的信息。"
updated-at="2026 年 8 月 14 日"
>
<h2>1. 适用范围</h2>
<p>
本政策适用于 www.axlmc.org 官方网站和 Axolotl Launcher
桌面应用。通过启动器访问的第三方网站、API、认证服务、服务器及内容下载地址,适用对应第三方自己的隐私政策。
</p>
<h2>2. 官方网站处理的数据</h2>
<p>网站无需注册账户。为保存你的显示和下载偏好,浏览器会在本地保存:</p>
<ul>
<li>语言偏好 Cookie(<code>locale</code>);</li>
<li>主题、高级渲染、减少动态效果和外部链接打开方式;</li>
<li>下载源选择(自动、Update Server 或 GitHub)。</li>
</ul>
<p>
这些偏好主要保存在 Cookie 或浏览器 localStorage 中,你可通过浏览器设置清除。网站不使用广告
Cookie。网站接入<a href="https://howxm.com" target="_blank" rel="noopener">浩客(Howxm)</a>
作为第三方用户体验分析和反馈收集服务;其可根据服务配置处理与网站访问、交互、设备或浏览器及网络请求相关的信息,以展示问卷、收集评价和改进网站体验。
</p>
<p>
网站托管和网络基础设施提供者可能为保障访问、安全和故障排查而处理常规请求信息,例如 IP
地址、访问时间、请求路径、User-Agent 和错误日志。此类处理受对应提供者政策约束。
</p>
<h2>3. 桌面应用处理的数据</h2>
<p>启动器会在你的设备本地处理并保存运行所需的数据,包括:</p>
<ul>
<li>应用设置、界面偏好和下载配置;</li>
<li>Minecraft 实例、游戏版本、模组及其他内容的元数据;</li>
<li>账户资料、登录会话、离线账户信息和自定义认证服务地址;</li>
<li>游戏日志、崩溃信息、缓存、下载记录及更新状态。</li>
</ul>
<p>
这些数据用于登录、启动游戏、管理内容、诊断故障和提供你主动使用的功能。启动器会在首次运行或功能升级后询问是否允许匿名遥测;未确认或关闭时不会发送遥测。允许后,启动器每天最多发送一次匿名活跃信号,用于统计选择加入遥测的匿名安装量、DAU、WAU、MAU。不会自动上传完整的启动器日志或 Minecraft
令牌、账户凭据或原始随机安装标识。
</p>
<p>
遥测使用本地生成的随机安装标识;服务端仅保存经密钥 HMAC-SHA256
处理后的不可逆标识。你可随时在“隐私与安全”中关闭遥测;关闭后会停止后续采集并清空本地待发送队列,但已经上传的数据仍按下述保留周期清理。Discord
Rich Presence 是独立的本地开关,不属于遥测。
</p>
<h2>4. 与第三方共享和传输</h2>
<p>
当你使用登录、搜索、下载、更新、皮肤或联机等功能时,启动器会按你的操作直接连接第三方服务。请求可能包含服务完成操作所需的账户令牌、用户标识、项目或文件标识、IP
地址、设备和网络请求信息。可能涉及的服务包括:
</p>
<ul>
<li>Microsoft 和 Minecraft 的登录、资料及游戏服务;</li>
<li>你选择的第三方 Yggdrasil 认证服务;</li>
<li>Modrinth、CurseForge 及内容作者提供的 API 和下载地址;</li>
<li>Update Server、GitHub 及其他用于版本检查、更新或文件分发的服务;</li>
<li>用于官网用户体验分析和反馈收集的浩客(Howxm);</li>
<li>用于接收和保存选择加入的匿名遥测数据的 Cloudflare Workers 和 D1;</li>
<li>你主动连接的 Minecraft 服务器或其他外部链接。</li>
</ul>
<p>项目维护者不会出售你的个人信息。第三方如何保存和使用请求数据,由其各自的隐私政策决定。</p>
<h2>5. 数据保存与删除</h2>
<p>
网站偏好保存在你的浏览器中;启动器数据主要保存在你的设备中。你可以清除浏览器站点数据,或在启动器内移除账户、实例和缓存。卸载应用不一定自动删除全部数据目录,请在确认备份需求后手动清理残留文件。
</p>
<p>
遥测中的匿名日活记录保留 35 天;每日汇总和匿名安装哈希会长期保留,用于历史趋势和累计安装统计。项目不会在遥测数据库中保存请求
IP。Cloudflare
作为基础设施提供者仍可能按其自身政策处理网络请求所必需的信息。
</p>
<p>
第三方服务保存的数据须通过对应服务的账户设置或隐私渠道管理。项目维护者无法代你访问、导出或删除第三方持有的数据。
</p>
<h2>6. 数据安全</h2>
<p>
我们通过开源审查、系统权限和安全更新等方式降低风险,但无法保证绝对安全。请从官方渠道下载软件、及时更新、保护系统账户,不要公开登录令牌、完整日志或包含个人信息的截图。
</p>
<h2>7. 未成年人</h2>
<p>
未成年人应在监护人指导下使用本项目,并遵守所在地区的年龄要求及 Minecraft、Microsoft
和其他相关服务的规则。请勿通过公开反馈渠道提交不必要的个人信息。
</p>
<h2>8. 政策变更</h2>
<p>
本政策可能因功能、第三方服务或法律要求变化而更新。新版本将在本页面发布,并标明最后更新日期。重大变化会尽量通过官方网站、GitHub
仓库或版本说明告知。
</p>
<h2>9. 联系方式</h2>
<p>
如有隐私问题或发现安全风险,请通过
<a href="https://github.com/Mystic-Stars/Axolotl/issues" target="_blank" rel="noopener"
>GitHub Issues</a
>
联系项目维护者。请勿在公开 Issue 中提交账户令牌、密码、完整日志或其他敏感信息。也可加入官方 QQ
群 737601250 咨询一般问题。
</p>
</LegalDocument>
<LegalDocument
v-else
:key="`en-${locale}`"
eyebrow="Privacy Policy"
title="Privacy Policy"
description="This policy explains how the Axolotl Launcher official website and desktop application handle data, and what information third-party services may receive."
updated-at="August 14, 2026"
>
<h2>1. Scope</h2>
<p>
This policy applies to the www.axlmc.org official website and the Axolotl Launcher desktop
application. Third-party websites, APIs, authentication services, servers, and content
download addresses accessed through the launcher are governed by their own privacy policies.
</p>
<h2>2. Data Processed by the Official Website</h2>
<p>
The website does not require an account. To remember your display and download preferences,
your browser stores locally:
</p>
<ul>
<li>A language preference cookie (<code>locale</code>);</li>
<li>Theme, advanced rendering, reduced motion, and external-link behavior;</li>
<li>Your download-source selection (automatic, Update Server, or GitHub).</li>
</ul>
<p>
These preferences are mainly stored in cookies or browser localStorage and can be cleared
through your browser settings. The website uses no advertising cookies. It integrates
<a href="https://howxm.com" target="_blank" rel="noopener">Howxm</a> as a third-party
user-experience analytics and feedback collection service. Depending on its service
configuration, Howxm may process information related to website visits, interactions, devices
or browsers, and network requests to display surveys, collect ratings, and improve the website
experience.
</p>
<p>
Website hosting and network infrastructure providers may process routine request information
such as IP addresses, access times, request paths, User-Agent strings, and error logs to
ensure availability, security, and troubleshooting. Such processing is subject to the
corresponding providers' policies.
</p>
<h2>3. Data Processed by the Desktop Application</h2>
<p>
The launcher processes and stores the data needed to run locally on your device, including:
</p>
<ul>
<li>Application settings, interface preferences, and download configuration;</li>
<li>Metadata for Minecraft instances, game versions, mods, and other content;</li>
<li>
Account profiles, login sessions, offline account information, and custom authentication
service addresses;
</li>
<li>Game logs, crash information, caches, download records, and update status.</li>
</ul>
<p>
This data is used for signing in, launching the game, managing content, diagnosing faults, and
providing features you actively use. The launcher asks whether to allow anonymous telemetry on
first use or after a relevant consent update. No telemetry is sent before confirmation or
while it is disabled. When enabled, the launcher sends at most one anonymous daily activity
signal. This is used to count opted-in anonymous installations, DAU, WAU, and MAU. Full
launcher or Minecraft logs, Minecraft tokens, account credentials, and the original random
installation identifier are not uploaded automatically.
</p>
<p>
Telemetry uses a random installation identifier generated locally; the service stores only an
irreversible HMAC-SHA256 value produced with a server secret. You can disable telemetry at any time
under Privacy & security. Disabling it stops future collection and clears the local pending
queue, while previously uploaded records are deleted under the retention periods below.
Discord Rich Presence is an independent local setting and is not telemetry.
</p>
<h2>4. Sharing and Transfers with Third Parties</h2>
<p>
When you use features such as sign-in, search, download, update, skins, or multiplayer, the
launcher connects directly to third-party services based on your actions. Requests may include
the account tokens, user identifiers, project or file identifiers, IP addresses, device, and
network request information needed to complete the operation. Services that may be involved
include:
</p>
<ul>
<li>Microsoft and Minecraft sign-in, profile, and game services;</li>
<li>Third-party Yggdrasil authentication services you choose;</li>
<li>APIs and download addresses provided by Modrinth, CurseForge, and content authors;</li>
<li>
Update Server, GitHub, and other services used for version checks, updates, or file
distribution;
</li>
<li>Howxm for official-website user-experience analytics and feedback collection;</li>
<li>
Cloudflare Workers and D1 for opted-in anonymous telemetry ingestion and storage;
</li>
<li>Minecraft servers or other external links you connect to.</li>
</ul>
<p>
The project maintainers do not sell your personal information. How third parties store and use
request data is determined by their respective privacy policies.
</p>
<h2>5. Data Retention and Deletion</h2>
<p>
Website preferences are stored in your browser; launcher data is mainly stored on your device.
You can clear browser site data or remove accounts, instances, and caches inside the launcher.
Uninstalling the application does not necessarily delete all data directories automatically;
after confirming your backup needs, manually clean up any leftover files.
</p>
<p>
Anonymous daily-active records are retained for 35 days; daily totals and anonymous installation hashes are retained long-term for
historical trends and cumulative installation counts. The project does not store request IP
addresses in the telemetry database. Cloudflare, as the infrastructure provider, may still process information
required to deliver network requests under its own policies.
</p>
<p>
Data stored by third-party services must be managed through the corresponding service's
account settings or privacy channels. The project maintainers cannot access, export, or delete
data held by third parties on your behalf.
</p>
<h2>6. Data Security</h2>
<p>
We reduce risk through open-source review, system permissions, and security updates, but
cannot guarantee absolute security. Download software from official channels, update
regularly, protect your system accounts, and do not publicly share login tokens, full logs, or
screenshots containing personal information.
</p>
<h2>7. Minors</h2>
<p>
Minors should use this project under the guidance of a guardian and comply with the age
requirements of their region as well as the rules of Minecraft, Microsoft, and other related
services. Do not submit unnecessary personal information through public feedback channels.
</p>
<h2>8. Changes to This Policy</h2>
<p>
This policy may be updated as features, third-party services, or legal requirements change.
New versions will be published on this page with a last-updated date. Significant changes will
be announced through the official website, the GitHub repository, or release notes when
possible.
</p>
<h2>9. Contact</h2>
<p>
For privacy questions or security concerns, contact the project maintainers via
<a href="https://github.com/Mystic-Stars/Axolotl/issues" target="_blank" rel="noopener"
>GitHub Issues</a
>. Do not submit account tokens, passwords, full logs, or other sensitive information in
public issues. You may also join the official QQ group 737601250 for general questions.
</p>
</LegalDocument>
</template>
+323
View File
@@ -0,0 +1,323 @@
<script setup lang="ts">
import { useVIntl } from '@modrinth/ui/src/composables/i18n.ts'
import LegalDocument from '~/components/ui/LegalDocument.vue'
const { locale } = useVIntl()
const isChinese = computed(() => locale.value === 'zh-CN')
const seoTitle = computed(() =>
isChinese.value ? '服务条款 - Axolotl Launcher' : 'Terms of Service - Axolotl Launcher',
)
const seoDescription = computed(() =>
isChinese.value
? '使用 Axolotl Launcher 官方网站及桌面应用前,请阅读本服务条款。'
: 'Read these terms of service before using the Axolotl Launcher website and desktop application.',
)
useSeoMeta({
title: () => seoTitle.value,
description: () => seoDescription.value,
ogTitle: () => seoTitle.value,
ogDescription: () => seoDescription.value,
ogType: 'website',
ogUrl: 'https://axlmc.org/terms',
robots: 'index, follow',
})
useHead({
link: [{ rel: 'canonical', href: 'https://axlmc.org/terms' }],
})
</script>
<template>
<LegalDocument
v-if="isChinese"
:key="`zh-${locale}`"
eyebrow="服务条款"
title="服务条款"
description="本条款说明 Axolotl Launcher 各部分适用的开源许可证、官方服务规则及第三方权利边界。"
updated-at="2026 年 8 月 2 日"
>
<h2>1. 适用范围与文件效力</h2>
<p>
本条款适用于 Axolotl Launcher
官方网站、官方发布的桌面应用及项目维护者提供的相关服务。软件的复制、修改、分发和网络部署,以仓库中对应文件的许可证与复制声明为准;本页面只是中文说明,不替代、修改或限制原始许可证。
</p>
<p>
根据 GPL-3.0 和
AGPL-3.0,仅接收或运行未经修改的软件副本不要求你接受许可证。只有在复制、修改、传播、分发软件,或以适用
AGPL 的修改版本向网络用户提供服务时,许可证中的对应条件才适用。
</p>
<h2>2. 仓库采用的许可证</h2>
<p>本仓库没有一份覆盖全部文件的统一许可证。不同部分采用不同许可:</p>
<ul>
<li>
官方网站源代码采用
<a
href="https://github.com/Mystic-Stars/Axolotl/blob/main/apps/website/LICENSE"
target="_blank"
rel="noopener"
>GNU Affero General Public License Version 3 only(AGPL-3.0-only)</a
>;
</li>
<li>
桌面应用相关 package 采用
<a
href="https://github.com/Mystic-Stars/Axolotl/blob/main/apps/app-frontend/LICENSE"
target="_blank"
rel="noopener"
>GNU General Public License Version 3 only(GPL-3.0-only)</a
>;
</li>
<li>
其他 package 保留各自的上游许可证,应查看对应目录中的 <code>LICENSE</code>、<code
>COPYING.md</code
>
和源码声明;
</li>
<li>
第三方代码、数据、图标、图片、商标及其他素材可能采用单独许可,不因被收录在本仓库中而自动改用
GPL 或 AGPL。
</li>
</ul>
<h2>3. 你的开源软件权利</h2>
<p>
在遵守适用许可证的前提下,你可以运行、研究、复制、修改和再分发受 GPL-3.0-only 或 AGPL-3.0-only
保护的代码,也可以收费分发。项目维护者不会通过本服务条款对这些许可证已经授予的权利增加限制。
</p>
<p>
复制或分发时通常需要保留版权、许可证和无担保声明;分发修改版本时需要明确标注修改及日期,并按对应许可证向接收者提供完整许可权利与相应源代码。分发目标代码时,应按许可证规定提供可机器读取的对应源代码。不得对接收者行使许可证权利增加额外限制。
</p>
<p>
若你修改采用 AGPL-3.0-only 的网站代码,并让用户通过网络与修改版本交互,应按 AGPL 第 13
条向这些用户显著提供免费获取该版本对应源代码的机会。具体义务以许可证原文为准。
</p>
<h2>4. 品牌、商标与受限素材</h2>
<p>
开源软件许可证不自动授予商标权。Axolotl Launcher 是独立的非官方项目,与
Mojang、Microsoft、Rinth, Inc.、Modrinth、CurseForge 或 MinecraftSearch
不存在隶属、认可或背书关系。相关名称和商标归各自权利人所有。
</p>
<p>
Modrinth 商标、徽标、封面和其他受限品牌素材不属于 Axolotl Launcher 品牌。网站复制声明列出的
Modrinth 品牌元素未经 Rinth, Inc.
明确书面许可不得使用。外部徽标须遵守各权利人的品牌规范。使用或再分发其他第三方图片、图标、数据和素材前,也应核对对应声明。
</p>
<h2>5. 特别归属与第三方许可</h2>
<p>
桌面启动器的中文内容搜索包含来自 Plain Craft Launcher 的未修改
<code>WikiEntries.txt</code> 快照,该文件采用 PCL Limited Distribution License,并包含由 MC
百科贡献的中文项目名称信息。种子地图功能还包含 MIT 许可的 cubiomes,以及权利归
MinecraftSearch、Mojang 或各素材创作者所有的图像。它们不适用 Axolotl 桌面代码的 GPL-3.0-only
授权,具体范围以仓库复制声明为准。
</p>
<h2>6. 官方网站与服务的使用</h2>
<p>
使用项目维护者运营的官方网站、下载源、反馈渠道或其他基础设施时,你应遵守适用法律及对应第三方平台规则,不得攻击、干扰、滥用基础设施,不得实施欺诈或侵害他人权利。这些服务规则只约束官方服务的使用,不限制
GPL 或 AGPL 授予你对软件副本的权利。
</p>
<p>
启动器会按你的操作连接 Microsoft、Minecraft、Modrinth、CurseForge、GitHub、Update
Server、自定义 Yggdrasil
服务及内容作者提供的下载地址。第三方服务、游戏内容和文件受其各自条款、隐私政策、许可证、可用性及地区限制约束;项目维护者不替第三方提供担保。
</p>
<h2>7. 无担保</h2>
<p>
按照 GPL-3.0 和 AGPL-3.0 第 15
条,在适用法律允许的范围内,软件按“现状”提供,不附带任何明示或默示担保,包括适销性和特定用途适用性的默示担保。软件质量与性能风险由使用者承担;软件存在缺陷时,必要的维护、修复或更正费用由使用者承担,除非另有书面约定。
</p>
<h2>8. 责任限制</h2>
<p>
按照 GPL-3.0 和 AGPL-3.0 第 16
条,除适用法律要求或另有书面约定外,版权人以及依许可证修改或分发软件的其他主体,不对因使用或无法使用软件产生的一般、特殊、附带或后果性损害负责,包括数据丢失、数据不准确、第三方损失或软件无法与其他程序协同工作。若当地法律不允许完整排除责任,则按许可证第
17 条及当地法律处理。
</p>
<h2>9. 条款与许可证更新</h2>
<p>
本服务条款可随官方服务、第三方平台或法律要求更新。更新不会追溯撤销已经依适用开源许可证授予的权利,也不会把标注为“Version
3
only”的代码自动改为后续许可证版本。任何代码许可变更必须由相应权利人依法作出,并体现在仓库文件中。
</p>
<h2>10. 联系与完整文本</h2>
<p>
许可范围存在疑问时,请先查看仓库根目录及对应 package 的 <code>COPYING.md</code>、<code
>LICENSE</code
>
和源码声明。如需进一步确认,请通过
<a href="https://github.com/Mystic-Stars/Axolotl/issues" target="_blank" rel="noopener"
>GitHub Issues</a
>
联系项目维护者,或加入官方 QQ 群 737601250。本页面不是法律意见。
</p>
</LegalDocument>
<LegalDocument
v-else
:key="`en-${locale}`"
eyebrow="Terms of Service"
title="Terms of Service"
description="These terms explain the open-source licenses that apply to each part of Axolotl Launcher, the rules for official services, and the boundaries of third-party rights."
updated-at="August 2, 2026"
>
<h2>1. Scope and Effect of This Document</h2>
<p>
These terms apply to the official Axolotl Launcher website, the officially published desktop
application, and related services operated by the project maintainers. Copying, modification,
distribution, and network deployment of the software are governed by the licenses and copying
notices in the corresponding files of the repository; this page is a plain-language
explanation and does not replace, modify, or restrict the original licenses.
</p>
<p>
Under GPL-3.0 and AGPL-3.0, merely receiving or running an unmodified copy of the software
does not require you to accept the license. The relevant conditions of the license apply only
when you copy, modify, propagate, or distribute the software, or when you provide a modified
version governed by the AGPL to users over a network.
</p>
<h2>2. Licenses Used in This Repository</h2>
<p>
This repository has no single license covering all files. Different parts use different
licenses:
</p>
<ul>
<li>
The official website source code is licensed under the
<a
href="https://github.com/Mystic-Stars/Axolotl/blob/main/apps/website/LICENSE"
target="_blank"
rel="noopener"
>GNU Affero General Public License Version 3 only (AGPL-3.0-only)</a
>;
</li>
<li>
The desktop application packages are licensed under the
<a
href="https://github.com/Mystic-Stars/Axolotl/blob/main/apps/app-frontend/LICENSE"
target="_blank"
rel="noopener"
>GNU General Public License Version 3 only (GPL-3.0-only)</a
>;
</li>
<li>
Other packages retain their upstream licenses; check the <code>LICENSE</code>,
<code>COPYING.md</code>, and source-code notices in the corresponding directories;
</li>
<li>
Third-party code, data, icons, images, trademarks, and other assets may use separate
licenses and do not automatically become GPL or AGPL by being included in this repository.
</li>
</ul>
<h2>3. Your Rights Under the Open-Source Licenses</h2>
<p>
Subject to the applicable license, you may run, study, copy, modify, and redistribute code
protected by GPL-3.0-only or AGPL-3.0-only, including for a fee. These terms do not add
restrictions to the rights already granted by those licenses.
</p>
<p>
When copying or distributing, you usually need to retain copyright, license, and no-warranty
notices; when distributing modified versions, you must clearly mark the modifications and
their dates and provide recipients with the full license rights and corresponding source code
under the applicable license. When distributing object code, provide the corresponding
machine-readable source code as required by the license. You may not impose additional
restrictions on recipients' exercise of their license rights.
</p>
<p>
If you modify the AGPL-3.0-only website code and let users interact with the modified version
over a network, you must offer those users prominent access to the corresponding source code
of that version free of charge, as required by Section 13 of the AGPL. The license text takes
precedence over this summary.
</p>
<h2>4. Branding, Trademarks, and Restricted Assets</h2>
<p>
Open-source licenses do not automatically grant trademark rights. Axolotl Launcher is an
independent, unofficial project with no affiliation, endorsement, or sponsorship from Mojang,
Microsoft, Rinth, Inc., Modrinth, CurseForge, or MinecraftSearch. The related names and
trademarks belong to their respective owners.
</p>
<p>
Modrinth trademarks, logos, covers, and other restricted brand assets are not part of the
Axolotl Launcher brand. Modrinth brand elements listed in the repository's copying notices
must not be used without the explicit written permission of Rinth, Inc. External logos must
follow each owner's brand guidelines. Before using or redistributing other third-party images,
icons, data, and assets, check the corresponding notices.
</p>
<h2>5. Specific Attributions and Third-Party Licenses</h2>
<p>
The desktop launcher's Chinese content search includes an unmodified
<code>WikiEntries.txt</code> snapshot from Plain Craft Launcher, distributed under the PCL
Limited Distribution License and containing Chinese project-name information contributed by MC
Wiki. The seed-map feature also includes MIT-licensed cubiomes and images owned by
MinecraftSearch, Mojang, or the respective asset creators. These are not covered by the
GPL-3.0-only license of Axolotl's desktop code; the exact scope is defined by the repository's
copying notices.
</p>
<h2>6. Use of the Official Website and Services</h2>
<p>
When using the official website, download sources, feedback channels, or other infrastructure
operated by the project maintainers, you must comply with applicable law and the rules of the
corresponding third-party platforms, and must not attack, interfere with, or abuse the
infrastructure, commit fraud, or infringe the rights of others. These service rules only
govern the use of official services and do not limit the rights granted to you under GPL or
AGPL.
</p>
<p>
The launcher connects to Microsoft, Minecraft, Modrinth, CurseForge, GitHub, the Update
Server, custom Yggdrasil services, and download addresses provided by content authors based on
your actions. Third-party services, game content, and files are subject to their own terms,
privacy policies, licenses, availability, and regional restrictions; the project maintainers
do not warrant third parties.
</p>
<h2>7. No Warranty</h2>
<p>
Under Section 15 of GPL-3.0 and AGPL-3.0, to the extent permitted by applicable law, the
software is provided "as is" without any express or implied warranty, including implied
warranties of merchantability and fitness for a particular purpose. You assume the risk of the
software's quality and performance; if the software proves defective, you assume the cost of
all necessary servicing, repair, or correction, unless otherwise agreed in writing.
</p>
<h2>8. Limitation of Liability</h2>
<p>
Under Section 16 of GPL-3.0 and AGPL-3.0, except as required by applicable law or agreed in
writing, copyright holders and other parties who modify or distribute the software under the
license are not liable for general, special, incidental, or consequential damages arising from
the use or inability to use the software, including data loss, inaccurate data, third-party
losses, or the software failing to interoperate with other programs. If local law does not
allow the complete exclusion of liability, it is handled under Section 17 of the license and
local law.
</p>
<h2>9. Updates to These Terms and Licenses</h2>
<p>
These terms may be updated as official services, third-party platforms, or legal requirements
change. Updates do not retroactively revoke rights already granted under the applicable
open-source licenses, and do not automatically upgrade code marked "Version 3 only" to later
license versions. Any license change must be made lawfully by the appropriate rights holder
and reflected in the repository files.
</p>
<h2>10. Contact and Full Texts</h2>
<p>
If you have questions about license scope, first check the <code>COPYING.md</code>,
<code>LICENSE</code>, and source-code notices in the repository root and the corresponding
packages. For further confirmation, contact the project maintainers via
<a href="https://github.com/Mystic-Stars/Axolotl/issues" target="_blank" rel="noopener"
>GitHub Issues</a
>, or join the official QQ group 737601250. This page is not legal advice.
</p>
</LegalDocument>
</template>