From 478f619fb2e078018210066f6ebf88759e7d41dc Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 25 Aug 2026 23:02:25 +0800 Subject: [PATCH] feat: rebuild public project for multilingual discovery --- .github/CODEOWNERS | 1 + .github/workflows/ci.yml | 19 +++ .github/workflows/pages.yml | 39 ++++++ .github/workflows/upstream-monitor.yml | 19 +++ .gitignore | 4 + CHANGELOG.md | 14 ++ CITATION.cff | 25 ++++ NOTICE.md | 9 ++ README.ja.md | 82 ++++++++++++ README.ko.md | 82 ++++++++++++ README.md | 103 +++++++------- README.ru.md | 82 ++++++++++++ README.th.md | 82 ++++++++++++ README.vi.md | 82 ++++++++++++ README.zh-Hans.md | 82 ++++++++++++ README.zh-Hant.md | 82 ++++++++++++ RIGHTS.md | 15 +++ SECURITY.md | 22 +++ SUPPORT.md | 15 +++ assets/singlinkvpn-public-project.png | Bin 0 -> 181568 bytes assets/singlinkvpn-public-project.svg | 46 +++++++ docs/downloads-and-versions.md | 16 +++ docs/open-source-status.md | 14 ++ docs/security-and-privacy-evidence.md | 23 ++++ llms.txt | 26 ++++ metadata/locales/en.json | 27 ++++ metadata/locales/ja.json | 27 ++++ metadata/locales/ko.json | 27 ++++ metadata/locales/ru.json | 27 ++++ metadata/locales/th.json | 27 ++++ metadata/locales/vi.json | 27 ++++ metadata/locales/zh-Hans.json | 27 ++++ metadata/locales/zh-Hant.json | 27 ++++ metadata/project.json | 49 +++++++ metadata/project.schema.json | 26 ++++ package.json | 13 ++ scripts/audit.mjs | 43 ++++++ scripts/build-readmes.mjs | 122 +++++++++++++++++ scripts/build-site.mjs | 178 +++++++++++++++++++++++++ scripts/verify-remote-links.mjs | 52 ++++++++ test/project.test.mjs | 52 ++++++++ 41 files changed, 1689 insertions(+), 46 deletions(-) create mode 100644 .github/CODEOWNERS create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/pages.yml create mode 100644 .github/workflows/upstream-monitor.yml create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 CITATION.cff create mode 100644 NOTICE.md create mode 100644 README.ja.md create mode 100644 README.ko.md create mode 100644 README.ru.md create mode 100644 README.th.md create mode 100644 README.vi.md create mode 100644 README.zh-Hans.md create mode 100644 README.zh-Hant.md create mode 100644 RIGHTS.md create mode 100644 SECURITY.md create mode 100644 SUPPORT.md create mode 100644 assets/singlinkvpn-public-project.png create mode 100644 assets/singlinkvpn-public-project.svg create mode 100644 docs/downloads-and-versions.md create mode 100644 docs/open-source-status.md create mode 100644 docs/security-and-privacy-evidence.md create mode 100644 llms.txt create mode 100644 metadata/locales/en.json create mode 100644 metadata/locales/ja.json create mode 100644 metadata/locales/ko.json create mode 100644 metadata/locales/ru.json create mode 100644 metadata/locales/th.json create mode 100644 metadata/locales/vi.json create mode 100644 metadata/locales/zh-Hans.json create mode 100644 metadata/locales/zh-Hant.json create mode 100644 metadata/project.json create mode 100644 metadata/project.schema.json create mode 100644 package.json create mode 100644 scripts/audit.mjs create mode 100644 scripts/build-readmes.mjs create mode 100644 scripts/build-site.mjs create mode 100644 scripts/verify-remote-links.mjs create mode 100644 test/project.test.mjs diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..470fe11 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @SingLinkLabs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..d100ae9 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,19 @@ +name: Validate public project + +on: + pull_request: + push: + branches: [main] + +permissions: + contents: read + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: 24 + - run: npm test diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 0000000..01a7155 --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,39 @@ +name: Deploy GitHub Pages + +on: + push: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: 24 + - run: npm test + - uses: actions/configure-pages@v5 + - uses: actions/upload-pages-artifact@v4 + with: + path: dist + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/upstream-monitor.yml b/.github/workflows/upstream-monitor.yml new file mode 100644 index 0000000..e3f2366 --- /dev/null +++ b/.github/workflows/upstream-monitor.yml @@ -0,0 +1,19 @@ +name: Verify public source links + +on: + schedule: + - cron: '17 3 * * 1' + workflow_dispatch: + +permissions: + contents: read + +jobs: + links: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: 24 + - run: npm run verify:remote diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2824b07 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +dist/ +node_modules/ +.DS_Store +*.log diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..7eeb73f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,14 @@ +# Changelog + +This changelog covers the public project repository, not SingLinkVPN client releases. See the [official product changelog](https://singlinkvpn.com/en/tech/changelog/) for client versions. + +## 1.0.0 — 2026-08-25 + +- Rebuilt the repository as an official public project and evidence index. +- Added complete English, Traditional Chinese, Simplified Chinese, Japanese, Korean, Vietnamese, Thai, and Russian documentation. +- Added stable platform routes instead of version-bound binary links. +- Added machine-readable project data and schema. +- Added scoped security-audit and no-logs evidence references. +- Added an explicit open-source and rights boundary. +- Added generated GitHub Pages, structured data, sitemap, robots policy, and `llms.txt`. +- Added automated content, localization, link, and discovery-surface checks. diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000..2143b3e --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,25 @@ +cff-version: 1.2.0 +message: "If you cite this public project, cite the repository and the specific evidence record used." +title: "SingLinkVPN Official Public Project" +type: software +authors: + - name: SingLinkLabs +repository-code: "https://github.com/SingLinkLabs/SingLinkVPN" +url: "https://singlinkvpn.com/" +version: 1.0.0 +date-released: 2026-08-25 +license: MIT +keywords: + - SingLinkVPN + - VPN + - security audit + - no-logs verification + - privacy +preferred-citation: + type: software + authors: + - name: SingLinkLabs + title: "SingLinkVPN Official Public Project" + version: 1.0.0 + year: 2026 + repository-code: "https://github.com/SingLinkLabs/SingLinkVPN" diff --git a/NOTICE.md b/NOTICE.md new file mode 100644 index 0000000..551f56f --- /dev/null +++ b/NOTICE.md @@ -0,0 +1,9 @@ +# Notices + +This repository is maintained by SingLinkLabs as an official public index for SingLinkVPN product routes, public technical status, and evidence records. + +Security-audit and no-logs materials are attributed in their dedicated repositories. Their conclusions are reproduced only as scoped summaries and must be read together with the underlying reports, integrity records, limitations, and reference dates. + +SingLinkVPN, SingLink, associated logos, characters, and product names may be trademarks or protected brand assets of their respective owners. Third-party names are used for factual identification only. + +Last project-record verification: 2026-08-25. diff --git a/README.ja.md b/README.ja.md new file mode 100644 index 0000000..714b674 --- /dev/null +++ b/README.ja.md @@ -0,0 +1,82 @@ +# SingLinkVPN 公式公開プロジェクト + +[English](./README.md) · [繁體中文](./README.zh-Hant.md) · [简体中文](./README.zh-Hans.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md) · [Tiếng Việt](./README.vi.md) · [ไทย](./README.th.md) · [Русский](./README.ru.md) + +![SingLinkVPN official public project](./assets/singlinkvpn-public-project.png) + +公式リンク、現在の製品情報、検証可能なセキュリティとプライバシーの証拠、プロトコル状況、公開ロードマップを提供します。 + +## このリポジトリについて + +これは SingLinkVPN の公式公開プロジェクト兼証拠索引です。すべての独自 VPN クライアントや本番コンポーネントがオープンソースであることを意味しません。製品案内、第三者が公開した証拠、社内技術状況、将来段階的に公開する内容を区別します。 + +- [公式サイト](https://singlinkvpn.com/) +- [ニュース・技術センター](https://singlinknews.com/) +- [公式変更履歴](https://singlinkvpn.com/en/tech/changelog/) +- [サポート](https://github.com/SingLinkLabs/SingLinkVPN/issues) + +## 安定したダウンロード経路 + +最新の互換インストーラーと説明は公式プラットフォームページから取得してください。バージョン情報は公式変更履歴で管理し、このリポジトリでは古くなりやすいバイナリ名を恒久 URL として扱いません。 + +- [全プラットフォーム版](https://singlinkvpn.com/en/download/) +- [iOS](https://singlinkvpn.com/en/download/ios/) +- [Android](https://singlinkvpn.com/en/download/android/) +- [Windows](https://singlinkvpn.com/en/download/windows/) +- [macOS](https://singlinkvpn.com/en/download/macos/) +- [Linux](https://singlinkvpn.com/en/download/linux/) +- [Apple TV](https://singlinkvpn.com/en/download/tv/) + +## Free Plan + +現在公開されている Free Plan はモバイルで 1 日 200 MB、デスクトップで 1 日 500 MB です。対象となるデスクトップキャンペーンでは 1 日 1 GB まで増える場合があります。地域、キャンペーン、サーバー、制限は変更されるため、数値を引用する前に公式説明を確認してください。 + +- [Free Plan](https://singlinknews.com/free-plan) + +## セキュリティとプライバシーの証拠 + +### デスクトップ 2.5 セキュリティ監査 + +専用証拠レジストリは、macOS 2.5.7 build 3065 と Windows 2.5.8 build 3077 を対象とした監査者署名済みバージョン 2.0 報告書を記録します。100/100 という結果は、監査者が明記した版、サンプル、証拠、環境、試験だけに適用されます。 + +- [セキュリティ監査証拠](https://github.com/SingLinkLabs/singlinkvpn-security-audit) +- [セキュリティ監査証拠 · Pages](https://singlinklabs.github.io/singlinkvpn-security-audit/) + +### 2026 年ノーログ検証 + +専用レジストリは 2026 年 7 月 29 日を基準日とする署名済みノーログ検証を記録します。結論は確認対象の本番環境と基準日に限定され、すべての状態や将来版を永久に保証するものではありません。 + +- [ノーログ証拠](https://github.com/SingLinkLabs/singlinkvpn-no-logs-report) +- [ノーログ証拠 · Pages](https://singlinklabs.github.io/singlinkvpn-no-logs-report/) + +## プロトコル状況 + +Sola は SingLink 2.0 アーキテクチャを再構築した SingLink の次世代 VPN 転送プロトコルです。中核開発と第 1 段階の社内試験は完了しましたが、プロトコルのセキュリティおよび実装監査は進行中です。社内性能値を第三者が再現した結果として表現してはいけません。 + +- [Sola プロトコル](https://singlinknews.com/sola-protocol) + +## オープンソース状況 + +SingLinkVPN は文書、証拠、研究データ、コードを段階的に公開しています。明示されたライセンスの下で実際にリポジトリへ公開されたファイルだけがオープンソースです。独自クライアント、本番インフラ、商標、第三者報告書に MIT ライセンスが自動適用されることはありません。 + +- [オープンソース計画](https://singlinknews.com/singlink-vpn-open-source-plan) + +## 検証と更新 + +機械可読なプロジェクト情報、出典、公開日、自動検査を用意し、公開事項を再確認できるようにしています。現在のクライアント版は公式変更履歴、報告書の範囲と完全性は各証拠レジストリを確認してください。 + +```sh +npm test +npm run verify:remote +``` + +- [Machine-readable project record](./metadata/project.json) +- [Citation metadata](./CITATION.cff) +- [Security policy](./SECURITY.md) +- [Rights and licence boundary](./RIGHTS.md) + +## 証拠の境界 + +公開メタデータは発見と検証を改善できますが、検索登録、順位、被リンク、AI による引用を保証しません。性能は地域、通信事業者、端末、サーバー負荷、接続先により変わります。セキュリティ所見は各報告書の範囲に限定されます。 + +**最終確認: 2026-08-25.** diff --git a/README.ko.md b/README.ko.md new file mode 100644 index 0000000..6c67baa --- /dev/null +++ b/README.ko.md @@ -0,0 +1,82 @@ +# SingLinkVPN 공식 공개 프로젝트 + +[English](./README.md) · [繁體中文](./README.zh-Hant.md) · [简体中文](./README.zh-Hans.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md) · [Tiếng Việt](./README.vi.md) · [ไทย](./README.th.md) · [Русский](./README.ru.md) + +![SingLinkVPN official public project](./assets/singlinkvpn-public-project.png) + +공식 링크, 현재 제품 정보, 검증 가능한 보안·개인정보 증거, 프로토콜 상태와 공개 오픈소스 로드맵을 제공합니다. + +## 이 저장소 소개 + +이 저장소는 SingLinkVPN의 공식 공개 프로젝트이자 증거 색인입니다. 모든 독점 VPN 클라이언트나 운영 구성 요소가 오픈소스라는 뜻은 아닙니다. 제품 안내, 제3자가 공개한 독립 증거, 내부 기술 상태와 향후 단계별 공개 범위를 구분합니다. + +- [공식 웹사이트](https://singlinkvpn.com/) +- [뉴스 및 기술 센터](https://singlinknews.com/) +- [공식 변경 기록](https://singlinkvpn.com/en/tech/changelog/) +- [지원](https://github.com/SingLinkLabs/SingLinkVPN/issues) + +## 안정적인 다운로드 경로 + +최신 호환 설치 파일과 안내는 공식 플랫폼 페이지에서 확인하십시오. 버전 정보는 공식 변경 기록에서 관리하며, 이 저장소는 오래될 수 있는 바이너리 파일명을 영구 다운로드 주소로 유지하지 않습니다. + +- [전체 플랫폼 다운로드](https://singlinkvpn.com/en/download/) +- [iOS](https://singlinkvpn.com/en/download/ios/) +- [Android](https://singlinkvpn.com/en/download/android/) +- [Windows](https://singlinkvpn.com/en/download/windows/) +- [macOS](https://singlinkvpn.com/en/download/macos/) +- [Linux](https://singlinkvpn.com/en/download/linux/) +- [Apple TV](https://singlinkvpn.com/en/download/tv/) + +## Free Plan + +현재 공개된 Free Plan은 모바일에서 하루 200 MB, 데스크톱에서 하루 500 MB를 제공합니다. 대상 데스크톱 캠페인에서는 하루 1 GB까지 늘어날 수 있습니다. 지역, 캠페인, 서버와 제한은 변경될 수 있으므로 수치를 인용하기 전에 공식 설명을 확인하십시오. + +- [Free Plan](https://singlinknews.com/free-plan) + +## 보안 및 개인정보 증거 + +### 데스크톱 2.5 보안 감사 + +전용 증거 레지스트리는 macOS 2.5.7 build 3065와 Windows 2.5.8 build 3077을 다룬 감사자 서명 버전 2.0 보고서를 기록합니다. 100/100 결과는 감사자가 명시한 버전, 샘플, 증거, 환경과 시험에만 적용됩니다. + +- [보안 감사 증거](https://github.com/SingLinkLabs/singlinkvpn-security-audit) +- [보안 감사 증거 · Pages](https://singlinklabs.github.io/singlinkvpn-security-audit/) + +### 2026 노로그 검증 + +전용 레지스트리는 2026년 7월 29일을 기준일로 하는 서명된 노로그 검증을 기록합니다. 결론은 검토된 운영 환경 범위와 기준일에 한정되며 모든 시스템 상태나 향후 버전을 영구 보장하지 않습니다. + +- [노로그 증거](https://github.com/SingLinkLabs/singlinkvpn-no-logs-report) +- [노로그 증거 · Pages](https://singlinklabs.github.io/singlinkvpn-no-logs-report/) + +## 프로토콜 상태 + +Sola는 SingLink 2.0 아키텍처를 재구성한 SingLink의 차세대 VPN 전송 프로토콜입니다. 핵심 개발과 1단계 내부 시험은 완료됐지만 프로토콜 보안 및 구현 감사는 진행 중입니다. 내부 성능 수치를 제3자가 독립적으로 재현한 결과처럼 표현해서는 안 됩니다. + +- [Sola 프로토콜](https://singlinknews.com/sola-protocol) + +## 오픈소스 상태 + +SingLinkVPN은 문서, 증거, 연구 데이터와 코드를 단계적으로 공개하고 있습니다. 명시된 라이선스와 함께 실제 저장소에 게시된 파일만 오픈소스입니다. 독점 클라이언트, 운영 인프라, 상표와 제3자 보고서에는 이 저장소의 MIT 라이선스가 자동 적용되지 않습니다. + +- [오픈소스 계획](https://singlinknews.com/singlink-vpn-open-source-plan) + +## 검증 및 업데이트 + +기계 판독형 프로젝트 데이터, 출처 링크, 공개 날짜와 자동 검사를 제공해 공개 주장을 다시 확인할 수 있게 합니다. 현재 클라이언트 버전은 공식 변경 기록을, 보고서 범위와 무결성은 각 증거 레지스트리를 확인하십시오. + +```sh +npm test +npm run verify:remote +``` + +- [Machine-readable project record](./metadata/project.json) +- [Citation metadata](./CITATION.cff) +- [Security policy](./SECURITY.md) +- [Rights and licence boundary](./RIGHTS.md) + +## 증거 범위 + +공개 메타데이터는 발견과 검증을 개선할 수 있지만 검색 색인, 순위, 백링크 또는 AI 인용을 보장하지 않습니다. 성능은 지역, 통신사, 기기, 서버 부하와 대상 서비스에 따라 달라집니다. 보안 결과는 각 보고서에 명시된 범위로 제한됩니다. + +**최종 확인: 2026-08-25.** diff --git a/README.md b/README.md index b110d0d..9ef597f 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,82 @@ -# 🌐 [星连VPN](https://singlinkvpn.com/) +# SingLinkVPN Official Public Project -星连VPN,真正 **免费试用** 的高速 VPN 软件。 -支持 **iOS / Android / Windows / macOS / Linux **,一键秒连,**全程加密、不留日志、不限流量**。 +[English](./README.md) · [繁體中文](./README.zh-Hant.md) · [简体中文](./README.zh-Hans.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md) · [Tiếng Việt](./README.vi.md) · [ไทย](./README.th.md) · [Русский](./README.ru.md) -## 📥 下载地址 +![SingLinkVPN official public project](./assets/singlinkvpn-public-project.png) -* 📱 **iOS 安装包**:[App Store 下载](https://apps.apple.com/ca/app/hiddify-proxy-vpn/id6596777532) -* 📱 **Android 安装包**:[点击下载](https://download.singlinkvpn.com/%E6%98%9F%E8%BF%9EVPN-Android.apk) -* 💻 **Windows 安装包**:[点击下载](https://download.singlinkvpn.com/%E6%98%9F%E8%BF%9EVPN_Windows%20_Setup.exe) -* 🍎 **macOS 安装包 (M 芯片)**:[点击下载](https://download.singlinkvpn.com/%E6%98%9F%E8%BF%9EVPN-MacOS-%28M%E8%8A%AF%E7%89%87%29.pkg) -* 🍎 **macOS 安装包 (Intel 芯片)**:[点击下载](https://download.singlinkvpn.com/%E6%98%9F%E8%BF%9EVPN-MacOS%28Inter%E8%8A%AF%E7%89%87%29.pkg) -* 🌍 **用户仪表盘**:[立即进入](https://dashboard.singlinkvpn.com/) -* 🌍 **官方网站**:[立即进入](https://singlinkvpn.com/) +Official links, current product facts, verifiable security and privacy evidence, protocol status, and the public open-source roadmap. -### 🎁 交流社群 +## About this repository -* [Telegram 交流社群](https://t.me/singlink1688) +This is SingLinkVPN's official public project and evidence index. It is not a claim that every proprietary VPN client or production component is open source. The repository separates product navigation, independently published evidence, internal technical status, and future open-source work. -### ⚡️ 如部分地区无法打开官网,可尝试以下下载地址👇: +- [Official website](https://singlinkvpn.com/) +- [News and technical center](https://singlinknews.com/) +- [Official changelog](https://singlinkvpn.com/en/tech/changelog/) +- [Support](https://github.com/SingLinkLabs/SingLinkVPN/issues) -* [下载地址1](https://singlink.cc) -* [下载地址2](https://singlink02.com) +## Stable download routes +Use the official platform pages for the latest compatible installers and instructions. Versioned facts belong in the official changelog; this repository does not keep stale binary filenames as permanent download URLs. -## 🌟 产品特点 +- [All-platform downloads](https://singlinkvpn.com/en/download/) +- [iOS](https://singlinkvpn.com/en/download/ios/) +- [Android](https://singlinkvpn.com/en/download/android/) +- [Windows](https://singlinkvpn.com/en/download/windows/) +- [macOS](https://singlinkvpn.com/en/download/macos/) +- [Linux](https://singlinkvpn.com/en/download/linux/) +- [Apple TV](https://singlinkvpn.com/en/download/tv/) -* 🚀 **自主研发「SingLink」协议**:跨境访问速度提升 300%+ -* 🌍 **全球 100+ 高速服务期**,单节点最高可达 2000Mbps -* 🔒 **AES-256 军工级加密**,严格无日志政策防追踪 -* 📱 **全平台支持**:iOS / Android / Windows / macOS / Linux -* 🎁 **免费试用**,无需充值即可体验,满意再订阅 +## Free Plan -![星连VPN](https://pbs.twimg.com/media/Gvb6diGXsAAIS6F?format=png&name=900x900) +The current published Free Plan provides 200 MB per day on mobile and 500 MB per day on desktop. Eligible desktop campaigns may raise the daily amount to 1 GB. Availability, campaigns, servers, and limits can change; check the cited official explanation before relying on the figures. +- [Free Plan](https://singlinknews.com/free-plan) -# 🌐 [SingLinkVPN](https://sg.singlinkvpn.com/) +## Security and privacy evidence -SingLinkVPN is a truly **free-to-try** high-speed cross-border VPN. -Supports **iOS / Android / Windows / macOS / Linux / Web** with one-click connection, **no logs, full encryption, unlimited bandwidth**. +### Desktop 2.5 security audit -## 📥 Download Links +The dedicated evidence registry records the auditor's signed version 2.0 report for macOS 2.5.7 build 3065 and Windows 2.5.8 build 3077. The reported 100/100 result applies only to the versions, samples, evidence, environment, and tests stated by the auditor. -* 📱 **iOS App**: [App Store](https://apps.apple.com/ca/app/hiddify-proxy-vpn/id6596777532) -* 📱 **Android App**: [Download](https://download.singlinkvpn.com/%E6%98%9F%E8%BF%9EVPN-Android.apk) -* 💻 **Windows App**: [Download](https://download.singlinkvpn.com/%E6%98%9F%E8%BF%9EVPN_Windows%20_Setup.exe) -* 🍎 **macOS App (M Chip)**: [Download](https://download.singlinkvpn.com/%E6%98%9F%E8%BF%9EVPN-MacOS-%28M%E8%8A%AF%E7%89%87%29.pkg) -* 🍎 **macOS App (Intel Chip)**: [Download](https://download.singlinkvpn.com/%E6%98%9F%E8%BF%9EVPN-MacOS%28Inter%E8%8A%AF%E7%89%87%29.pkg) -* 🌍 **Dashboard**: [Log in](https://dashboard.singlinkvpn.com/) -* 🌍 **Offcial Website**: [Log in](https://singlinkvpn.com/) +- [Security-audit evidence](https://github.com/SingLinkLabs/singlinkvpn-security-audit) +- [Security-audit evidence · Pages](https://singlinklabs.github.io/singlinkvpn-security-audit/) -### 🎁 Telegram Group: +### 2026 no-logs verification -* [Telegram Group](https://t.me/singlinkvpn_en) +The dedicated registry records the signed no-logs verification with a 29 July 2026 reference date. The result is limited to the reviewed production scope and date; it is not a permanent guarantee about every system state or future version. -### ⚡️ Try it if some area can't open the offcial website👇: +- [No-logs evidence](https://github.com/SingLinkLabs/singlinkvpn-no-logs-report) +- [No-logs evidence · Pages](https://singlinklabs.github.io/singlinkvpn-no-logs-report/) -* [Download 1](https://singlink.cc) -* [Download 2](https://singlink02.com) +## Protocol status +Sola is SingLink's next-generation VPN transport protocol rebuilt from the SingLink 2.0 architecture. Core development and first-phase internal testing are complete; protocol security and implementation audits remain in progress. Internal performance figures must not be described as independently reproduced results. -## 🌟 Features +- [Sola protocol](https://singlinknews.com/sola-protocol) -* 🚀 **Self-developed “SingLink” protocol**: boosts cross-border speed by 300%+ -* 🌍 **100+ global high-speed nodes**, up to 2000Mbps per node -* 🔒 **AES-256 military-grade encryption**, strict no-log policy -* 📱 **All-platform support**: iOS / Android / Windows / macOS / Linux / Web -* 🎁 **Free trial** – no upfront payment required +## Open-source status -![SingLinkVPN](https://pbs.twimg.com/media/Gvb6diGXsAAIS6F?format=png&name=900x900) +SingLinkVPN is publishing documentation, evidence, research data, and code in phases. Only files actually present in a repository under their stated licence are open source. Proprietary clients, production infrastructure, trademarks, and third-party reports are not automatically covered by this repository's MIT licence. +- [Open-source plan](https://singlinknews.com/singlink-vpn-open-source-plan) + +## Verification and updates + +Machine-readable project data, source links, release dates, and automated checks are included so readers can reproduce the repository's public claims. Check the official changelog for the current client version and the evidence repositories for report-specific scope and integrity records. + +```sh +npm test +npm run verify:remote +``` + +- [Machine-readable project record](./metadata/project.json) +- [Citation metadata](./CITATION.cff) +- [Security policy](./SECURITY.md) +- [Rights and licence boundary](./RIGHTS.md) + +## Evidence boundary + +Public metadata can improve discovery and verification, but it does not guarantee indexing, rankings, backlinks, or citation by an AI system. Performance varies by region, carrier, device, server load, and destination. Security findings remain limited to each report's stated scope. + +**Last verified: 2026-08-25.** diff --git a/README.ru.md b/README.ru.md new file mode 100644 index 0000000..a40c393 --- /dev/null +++ b/README.ru.md @@ -0,0 +1,82 @@ +# Официальный публичный проект SingLinkVPN + +[English](./README.md) · [繁體中文](./README.zh-Hant.md) · [简体中文](./README.zh-Hans.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md) · [Tiếng Việt](./README.vi.md) · [ไทย](./README.th.md) · [Русский](./README.ru.md) + +![SingLinkVPN official public project](./assets/singlinkvpn-public-project.png) + +Официальные ссылки, актуальные сведения о продукте, проверяемые доказательства безопасности и конфиденциальности, статус протокола и публичный план. + +## О репозитории + +Это официальный публичный проект и индекс доказательств SingLinkVPN. Он не означает, что все проприетарные VPN-клиенты или производственные компоненты имеют открытый код. Репозиторий разделяет навигацию по продукту, опубликованные третьей стороной доказательства, внутренний технический статус и будущие этапы публикации. + +- [Официальный сайт](https://singlinkvpn.com/) +- [Центр новостей и технологий](https://singlinknews.com/) +- [Официальный журнал изменений](https://singlinkvpn.com/en/tech/changelog/) +- [Поддержка](https://github.com/SingLinkLabs/SingLinkVPN/issues) + +## Стабильные страницы загрузки + +Получайте актуальные совместимые установщики и инструкции на официальных страницах платформ. Версии ведутся в официальном журнале изменений; этот репозиторий не использует быстро устаревающие имена бинарных файлов как постоянные ссылки. + +- [Загрузки для всех платформ](https://singlinkvpn.com/en/download/) +- [iOS](https://singlinkvpn.com/en/download/ios/) +- [Android](https://singlinkvpn.com/en/download/android/) +- [Windows](https://singlinkvpn.com/en/download/windows/) +- [macOS](https://singlinkvpn.com/en/download/macos/) +- [Linux](https://singlinkvpn.com/en/download/linux/) +- [Apple TV](https://singlinkvpn.com/en/download/tv/) + +## Free Plan + +Согласно текущей публикации, Free Plan предоставляет 200 МБ в день на мобильных устройствах и 500 МБ в день на компьютерах. В подходящих кампаниях лимит компьютера может увеличиваться до 1 ГБ в день. Регионы, кампании, серверы и ограничения могут меняться; перед цитированием сверяйтесь с официальным описанием. + +- [Free Plan](https://singlinknews.com/free-plan) + +## Доказательства безопасности и конфиденциальности + +### Аудит безопасности настольной версии 2.5 + +Отдельный реестр хранит подписанный аудитором отчёт версии 2.0 для macOS 2.5.7 build 3065 и Windows 2.5.8 build 3077. Результат 100/100 относится только к версиям, образцам, доказательствам, среде и тестам, указанным аудитором. + +- [Доказательства аудита безопасности](https://github.com/SingLinkLabs/singlinkvpn-security-audit) +- [Доказательства аудита безопасности · Pages](https://singlinklabs.github.io/singlinkvpn-security-audit/) + +### Проверка отсутствия журналов 2026 + +Отдельный реестр хранит подписанную проверку no-logs с контрольной датой 29 июля 2026 года. Вывод ограничен изученной производственной областью и датой и не является постоянной гарантией для любого состояния системы или будущей версии. + +- [Доказательства no-logs](https://github.com/SingLinkLabs/singlinkvpn-no-logs-report) +- [Доказательства no-logs · Pages](https://singlinklabs.github.io/singlinkvpn-no-logs-report/) + +## Статус протокола + +Sola — транспортный VPN-протокол нового поколения SingLink, архитектура которого переработана на основе SingLink 2.0. Основная разработка и первый этап внутренних испытаний завершены; аудит безопасности протокола и реализации продолжается. Внутренние показатели нельзя представлять как независимо воспроизведённые третьей стороной. + +- [Протокол Sola](https://singlinknews.com/sola-protocol) + +## Статус открытого кода + +SingLinkVPN поэтапно публикует документацию, доказательства, исследовательские данные и код. Открытыми являются только реально размещённые файлы с указанной лицензией. Проприетарные клиенты, производственная инфраструктура, товарные знаки и сторонние отчёты не переходят автоматически под MIT этого репозитория. + +- [План открытого кода](https://singlinknews.com/singlink-vpn-open-source-plan) + +## Проверка и обновления + +Машиночитаемые данные проекта, источники, даты публикации и автоматические проверки позволяют перепроверять публичные сведения. Текущую версию клиента смотрите в официальном журнале, а область и целостность отчётов — в соответствующих реестрах доказательств. + +```sh +npm test +npm run verify:remote +``` + +- [Machine-readable project record](./metadata/project.json) +- [Citation metadata](./CITATION.cff) +- [Security policy](./SECURITY.md) +- [Rights and licence boundary](./RIGHTS.md) + +## Границы доказательств + +Публичные метаданные улучшают обнаружение и проверяемость, но не гарантируют индексацию, позиции, обратные ссылки или цитирование ИИ. Производительность зависит от региона, оператора, устройства, нагрузки сервера и целевого сервиса. Выводы безопасности ограничены областью каждого отчёта. + +**Последняя проверка: 2026-08-25.** diff --git a/README.th.md b/README.th.md new file mode 100644 index 0000000..c8e4578 --- /dev/null +++ b/README.th.md @@ -0,0 +1,82 @@ +# โครงการสาธารณะทางการของ SingLinkVPN + +[English](./README.md) · [繁體中文](./README.zh-Hant.md) · [简体中文](./README.zh-Hans.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md) · [Tiếng Việt](./README.vi.md) · [ไทย](./README.th.md) · [Русский](./README.ru.md) + +![SingLinkVPN official public project](./assets/singlinkvpn-public-project.png) + +รวมลิงก์ทางการ ข้อมูลผลิตภัณฑ์ปัจจุบัน หลักฐานความปลอดภัยและความเป็นส่วนตัวที่ตรวจสอบได้ สถานะโปรโตคอล และแผนการเปิดเผยต่อสาธารณะ + +## เกี่ยวกับคลังนี้ + +นี่คือโครงการสาธารณะและดัชนีหลักฐานทางการของ SingLinkVPN ไม่ได้หมายความว่าไคลเอนต์ VPN แบบกรรมสิทธิ์หรือส่วนประกอบระบบใช้งานจริงทั้งหมดเป็นโอเพนซอร์ส คลังแยกข้อมูลผลิตภัณฑ์ หลักฐานที่เผยแพร่โดยบุคคลที่สาม สถานะเทคนิคภายใน และสิ่งที่จะเปิดเผยเป็นระยะอย่างชัดเจน + +- [เว็บไซต์ทางการ](https://singlinkvpn.com/) +- [ศูนย์ข่าวและเทคนิค](https://singlinknews.com/) +- [บันทึกการเปลี่ยนแปลง](https://singlinkvpn.com/en/tech/changelog/) +- [ฝ่ายสนับสนุน](https://github.com/SingLinkLabs/SingLinkVPN/issues) + +## เส้นทางดาวน์โหลดที่คงที่ + +ใช้หน้าสำหรับแต่ละแพลตฟอร์มทางการเพื่อรับตัวติดตั้งและคำแนะนำล่าสุด ข้อมูลเวอร์ชันอยู่ในบันทึกการเปลี่ยนแปลงทางการ คลังนี้ไม่ใช้ชื่อไฟล์ไบนารีที่ล้าสมัยง่ายเป็น URL ดาวน์โหลดถาวร + +- [ดาวน์โหลดทุกแพลตฟอร์ม](https://singlinkvpn.com/en/download/) +- [iOS](https://singlinkvpn.com/en/download/ios/) +- [Android](https://singlinkvpn.com/en/download/android/) +- [Windows](https://singlinkvpn.com/en/download/windows/) +- [macOS](https://singlinkvpn.com/en/download/macos/) +- [Linux](https://singlinkvpn.com/en/download/linux/) +- [Apple TV](https://singlinkvpn.com/en/download/tv/) + +## Free Plan + +Free Plan ที่ประกาศในปัจจุบันให้ 200 MB ต่อวันบนมือถือ และ 500 MB ต่อวันบนเดสก์ท็อป แคมเปญเดสก์ท็อปที่เข้าเงื่อนไขอาจเพิ่มเป็น 1 GB ต่อวัน พื้นที่ แคมเปญ เซิร์ฟเวอร์ และข้อจำกัดอาจเปลี่ยนแปลง โปรดตรวจสอบคำอธิบายทางการก่อนอ้างอิงตัวเลข + +- [Free Plan](https://singlinknews.com/free-plan) + +## หลักฐานความปลอดภัยและความเป็นส่วนตัว + +### การตรวจสอบความปลอดภัยเดสก์ท็อป 2.5 + +คลังหลักฐานเฉพาะบันทึกรายงานเวอร์ชัน 2.0 ที่ผู้ตรวจสอบลงนาม ครอบคลุม macOS 2.5.7 build 3065 และ Windows 2.5.8 build 3077 ผล 100/100 ใช้เฉพาะกับเวอร์ชัน ตัวอย่าง หลักฐาน สภาพแวดล้อม และการทดสอบที่ผู้ตรวจสอบระบุ + +- [หลักฐานการตรวจสอบความปลอดภัย](https://github.com/SingLinkLabs/singlinkvpn-security-audit) +- [หลักฐานการตรวจสอบความปลอดภัย · Pages](https://singlinklabs.github.io/singlinkvpn-security-audit/) + +### การยืนยันไม่บันทึกกิจกรรมปี 2026 + +คลังเฉพาะบันทึกการยืนยันที่ลงนามและมีวันที่อ้างอิง 29 กรกฎาคม 2026 ข้อสรุปจำกัดอยู่ที่ระบบใช้งานจริงและวันที่ที่ตรวจสอบ ไม่ใช่การรับประกันถาวรสำหรับทุกสถานะหรือเวอร์ชันในอนาคต + +- [หลักฐานไม่บันทึกกิจกรรม](https://github.com/SingLinkLabs/singlinkvpn-no-logs-report) +- [หลักฐานไม่บันทึกกิจกรรม · Pages](https://singlinklabs.github.io/singlinkvpn-no-logs-report/) + +## สถานะโปรโตคอล + +Sola คือโปรโตคอลขนส่ง VPN รุ่นใหม่ของ SingLink ที่สร้างสถาปัตยกรรมใหม่จาก SingLink 2.0 การพัฒนาหลักและการทดสอบภายในระยะแรกเสร็จแล้ว แต่การตรวจสอบความปลอดภัยและการนำไปใช้ยังดำเนินอยู่ ห้ามอธิบายตัวเลขภายในว่าเป็นผลที่บุคคลที่สามทำซ้ำอย่างอิสระ + +- [โปรโตคอล Sola](https://singlinknews.com/sola-protocol) + +## สถานะโอเพนซอร์ส + +SingLinkVPN กำลังเผยแพร่เอกสาร หลักฐาน ข้อมูลวิจัย และโค้ดเป็นระยะ เฉพาะไฟล์ที่เผยแพร่จริงพร้อมใบอนุญาตที่ระบุเท่านั้นที่เป็นโอเพนซอร์ส ไคลเอนต์กรรมสิทธิ์ โครงสร้างพื้นฐาน เครื่องหมายการค้า และรายงานบุคคลที่สามไม่ได้อยู่ภายใต้ MIT ของคลังนี้โดยอัตโนมัติ + +- [แผนโอเพนซอร์ส](https://singlinknews.com/singlink-vpn-open-source-plan) + +## การตรวจสอบและอัปเดต + +มีข้อมูลโครงการที่เครื่องอ่านได้ ลิงก์แหล่งที่มา วันที่เผยแพร่ และการตรวจสอบอัตโนมัติเพื่อให้ตรวจซ้ำได้ โปรดดูบันทึกการเปลี่ยนแปลงสำหรับเวอร์ชันปัจจุบัน และดูคลังหลักฐานที่เกี่ยวข้องสำหรับขอบเขตและความสมบูรณ์ของรายงาน + +```sh +npm test +npm run verify:remote +``` + +- [Machine-readable project record](./metadata/project.json) +- [Citation metadata](./CITATION.cff) +- [Security policy](./SECURITY.md) +- [Rights and licence boundary](./RIGHTS.md) + +## ขอบเขตของหลักฐาน + +เมทาดาทาสาธารณะช่วยให้ค้นพบและตรวจสอบได้ดีขึ้น แต่ไม่รับประกันการจัดทำดัชนี อันดับ ลิงก์ย้อนกลับ หรือการอ้างอิงโดย AI ประสิทธิภาพแตกต่างตามภูมิภาค ผู้ให้บริการ อุปกรณ์ ภาระเซิร์ฟเวอร์ และบริการปลายทาง ข้อสรุปด้านความปลอดภัยจำกัดตามรายงานแต่ละฉบับ + +**ตรวจสอบล่าสุด: 2026-08-25.** diff --git a/README.vi.md b/README.vi.md new file mode 100644 index 0000000..4efb5ab --- /dev/null +++ b/README.vi.md @@ -0,0 +1,82 @@ +# Dự án công khai chính thức SingLinkVPN + +[English](./README.md) · [繁體中文](./README.zh-Hant.md) · [简体中文](./README.zh-Hans.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md) · [Tiếng Việt](./README.vi.md) · [ไทย](./README.th.md) · [Русский](./README.ru.md) + +![SingLinkVPN official public project](./assets/singlinkvpn-public-project.png) + +Cung cấp liên kết chính thức, thông tin sản phẩm hiện tại, bằng chứng bảo mật và quyền riêng tư có thể kiểm chứng, trạng thái giao thức và lộ trình công khai. + +## Giới thiệu kho lưu trữ + +Đây là dự án công khai và chỉ mục bằng chứng chính thức của SingLinkVPN. Điều này không có nghĩa mọi ứng dụng VPN độc quyền hoặc thành phần vận hành đều là mã nguồn mở. Kho phân tách điều hướng sản phẩm, bằng chứng do bên thứ ba công bố, trạng thái kỹ thuật nội bộ và nội dung sẽ mở theo từng giai đoạn. + +- [Trang web chính thức](https://singlinkvpn.com/) +- [Trung tâm tin tức và kỹ thuật](https://singlinknews.com/) +- [Nhật ký thay đổi chính thức](https://singlinkvpn.com/en/tech/changelog/) +- [Hỗ trợ](https://github.com/SingLinkLabs/SingLinkVPN/issues) + +## Đường dẫn tải ổn định + +Hãy dùng trang nền tảng chính thức để lấy bộ cài tương thích mới nhất và hướng dẫn. Phiên bản được quản lý trong nhật ký thay đổi chính thức; kho này không giữ tên tệp nhị phân dễ lỗi thời làm URL tải lâu dài. + +- [Tải cho mọi nền tảng](https://singlinkvpn.com/en/download/) +- [iOS](https://singlinkvpn.com/en/download/ios/) +- [Android](https://singlinkvpn.com/en/download/android/) +- [Windows](https://singlinkvpn.com/en/download/windows/) +- [macOS](https://singlinkvpn.com/en/download/macos/) +- [Linux](https://singlinkvpn.com/en/download/linux/) +- [Apple TV](https://singlinkvpn.com/en/download/tv/) + +## Free Plan + +Free Plan hiện được công bố cung cấp 200 MB mỗi ngày trên di động và 500 MB mỗi ngày trên máy tính. Chiến dịch máy tính đủ điều kiện có thể tăng lên 1 GB mỗi ngày. Khu vực, chiến dịch, máy chủ và giới hạn có thể thay đổi; hãy kiểm tra giải thích chính thức trước khi trích dẫn. + +- [Free Plan](https://singlinknews.com/free-plan) + +## Bằng chứng bảo mật và quyền riêng tư + +### Kiểm toán bảo mật máy tính 2.5 + +Kho bằng chứng riêng ghi nhận báo cáo phiên bản 2.0 có chữ ký của bên kiểm toán cho macOS 2.5.7 build 3065 và Windows 2.5.8 build 3077. Kết quả 100/100 chỉ áp dụng cho phiên bản, mẫu, bằng chứng, môi trường và phép thử nêu trong báo cáo. + +- [Bằng chứng kiểm toán bảo mật](https://github.com/SingLinkLabs/singlinkvpn-security-audit) +- [Bằng chứng kiểm toán bảo mật · Pages](https://singlinklabs.github.io/singlinkvpn-security-audit/) + +### Xác minh không lưu nhật ký năm 2026 + +Kho riêng ghi nhận xác minh không lưu nhật ký có chữ ký với ngày tham chiếu 29 tháng 7 năm 2026. Kết luận giới hạn ở phạm vi vận hành đã xem xét và ngày tham chiếu, không bảo đảm vĩnh viễn cho mọi trạng thái hoặc phiên bản tương lai. + +- [Bằng chứng không lưu nhật ký](https://github.com/SingLinkLabs/singlinkvpn-no-logs-report) +- [Bằng chứng không lưu nhật ký · Pages](https://singlinklabs.github.io/singlinkvpn-no-logs-report/) + +## Trạng thái giao thức + +Sola là giao thức truyền VPN thế hệ mới của SingLink, được tái cấu trúc từ kiến trúc SingLink 2.0. Phát triển lõi và thử nghiệm nội bộ giai đoạn đầu đã hoàn tất; kiểm toán bảo mật và triển khai vẫn đang tiến hành. Không được mô tả số liệu nội bộ như kết quả được bên thứ ba tái lập. + +- [Giao thức Sola](https://singlinknews.com/sola-protocol) + +## Trạng thái mã nguồn mở + +SingLinkVPN đang công bố tài liệu, bằng chứng, dữ liệu nghiên cứu và mã theo từng giai đoạn. Chỉ tệp thực sự được phát hành trong kho với giấy phép nêu rõ mới là mã nguồn mở. Ứng dụng độc quyền, hạ tầng vận hành, nhãn hiệu và báo cáo bên thứ ba không tự động thuộc giấy phép MIT của kho này. + +- [Kế hoạch mã nguồn mở](https://singlinknews.com/singlink-vpn-open-source-plan) + +## Xác minh và cập nhật + +Dữ liệu dự án có thể đọc bằng máy, liên kết nguồn, ngày phát hành và kiểm tra tự động giúp công chúng kiểm tra lại thông tin. Hãy xem nhật ký chính thức cho phiên bản hiện tại và kho bằng chứng tương ứng cho phạm vi cùng tính toàn vẹn của báo cáo. + +```sh +npm test +npm run verify:remote +``` + +- [Machine-readable project record](./metadata/project.json) +- [Citation metadata](./CITATION.cff) +- [Security policy](./SECURITY.md) +- [Rights and licence boundary](./RIGHTS.md) + +## Ranh giới bằng chứng + +Siêu dữ liệu công khai có thể cải thiện khả năng tìm thấy và xác minh nhưng không bảo đảm lập chỉ mục, thứ hạng, liên kết ngược hay trích dẫn AI. Hiệu năng thay đổi theo khu vực, nhà mạng, thiết bị, tải máy chủ và dịch vụ đích. Kết luận bảo mật chỉ áp dụng trong phạm vi báo cáo. + +**Xác minh lần cuối: 2026-08-25.** diff --git a/README.zh-Hans.md b/README.zh-Hans.md new file mode 100644 index 0000000..e6713b5 --- /dev/null +++ b/README.zh-Hans.md @@ -0,0 +1,82 @@ +# SingLinkVPN 星连VPN官方公开项目 + +[English](./README.md) · [繁體中文](./README.zh-Hant.md) · [简体中文](./README.zh-Hans.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md) · [Tiếng Việt](./README.vi.md) · [ไทย](./README.th.md) · [Русский](./README.ru.md) + +![SingLinkVPN official public project](./assets/singlinkvpn-public-project.png) + +集中提供官方入口、当前产品事实、可核验的安全与隐私证据、协议状态及公开开源路线图。 + +## 关于本仓库 + +这是 SingLinkVPN 的官方公共项目与证据索引,并不代表所有专有 VPN 客户端或生产组件已经开源。本仓库明确区分产品导航、第三方发布的独立证据、内部技术状态及未来分阶段开放的内容。 + +- [官方网站](https://singlinkvpn.com/) +- [新闻与技术中心](https://singlinknews.com/) +- [官方更新日志](https://singlinkvpn.com/en/tech/changelog/) +- [支持中心](https://github.com/SingLinkLabs/SingLinkVPN/issues) + +## 稳定下载入口 + +请通过官方平台页面获取最新兼容安装包与使用说明。版本事实由官方更新日志维护;本仓库不再把容易过期的安装包文件名作为长期下载地址。 + +- [全平台下载](https://singlinkvpn.com/en/download/) +- [iOS](https://singlinkvpn.com/en/download/ios/) +- [Android](https://singlinkvpn.com/en/download/android/) +- [Windows](https://singlinkvpn.com/en/download/windows/) +- [macOS](https://singlinkvpn.com/en/download/macos/) +- [Linux](https://singlinkvpn.com/en/download/linux/) +- [Apple TV](https://singlinkvpn.com/en/download/tv/) + +## 免费计划 + +当前公布的免费计划为移动端每日 200 MB、桌面端每日 500 MB;符合条件的桌面活动可提高至每日 1 GB。可用地区、活动、节点及限制可能调整,引用这些数字前应核对所链接的官方说明。 + +- [免费计划](https://singlinknews.com/free-plan) + +## 安全与隐私证据 + +### 电脑端 2.5 安全审计 + +独立证据库记录审计方签署的 2.0 版报告,范围包括 macOS 2.5.7 build 3065 与 Windows 2.5.8 build 3077。报告中的 100/100 只适用于审计方列明的版本、样本、证据、环境与测试。 + +- [安全审计证据](https://github.com/SingLinkLabs/singlinkvpn-security-audit) +- [安全审计证据 · Pages](https://singlinklabs.github.io/singlinkvpn-security-audit/) + +### 2026 无日志验证 + +独立证据库记录基准日为 2026 年 7 月 29 日的已签署无日志验证。结论仅限当日受审生产环境范围,并非对所有系统状态或未来版本的永久保证。 + +- [无日志证据](https://github.com/SingLinkLabs/singlinkvpn-no-logs-report) +- [无日志证据 · Pages](https://singlinklabs.github.io/singlinkvpn-no-logs-report/) + +## 协议状态 + +Sola 是 SingLink 基于 SingLink 2.0 架构重构的新一代 VPN 传输协议。核心开发及第一阶段内部测试已完成,协议安全与实现审计仍在进行;内部性能数字不能表述为第三方独立复现结果。 + +- [Sola 协议](https://singlinknews.com/sola-protocol) + +## 开源状态 + +SingLinkVPN 正分阶段公开文档、证据、研究数据与代码。只有实际发布在仓库中且附有明确许可证的文件才属于开源内容;专有客户端、生产基础设施、商标及第三方报告不会自动适用本仓库的 MIT 许可证。 + +- [开源计划](https://singlinknews.com/singlink-vpn-open-source-plan) + +## 核验与更新 + +仓库提供机器可读项目资料、来源链接、发布日期及自动检查,便于公众复核。当前客户端版本应以官方更新日志为准,报告范围和完整性记录应以对应证据库为准。 + +```sh +npm test +npm run verify:remote +``` + +- [Machine-readable project record](./metadata/project.json) +- [Citation metadata](./CITATION.cff) +- [Security policy](./SECURITY.md) +- [Rights and licence boundary](./RIGHTS.md) + +## 证据边界 + +公开元数据可以改善发现与核验,但不保证搜索收录、排名、外链或任何 AI 系统一定引用。实际性能会受地区、运营商、设备、节点负载及目标服务影响;安全结论只适用于各报告列明的范围。 + +**最后核验: 2026-08-25.** diff --git a/README.zh-Hant.md b/README.zh-Hant.md new file mode 100644 index 0000000..6a48dfb --- /dev/null +++ b/README.zh-Hant.md @@ -0,0 +1,82 @@ +# SingLinkVPN 星連VPN官方公開項目 + +[English](./README.md) · [繁體中文](./README.zh-Hant.md) · [简体中文](./README.zh-Hans.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md) · [Tiếng Việt](./README.vi.md) · [ไทย](./README.th.md) · [Русский](./README.ru.md) + +![SingLinkVPN official public project](./assets/singlinkvpn-public-project.png) + +集中提供官方入口、目前產品事實、可核驗的安全與私隱證據、協議狀態及公開開源路線圖。 + +## 關於本儲存庫 + +這是 SingLinkVPN 的官方公共項目與證據索引,並不代表所有專有 VPN 用戶端或生產組件已經開源。本儲存庫明確區分產品導覽、第三方發布的獨立證據、內部技術狀態及未來分階段開放的內容。 + +- [官方網站](https://singlinkvpn.com/) +- [新聞與技術中心](https://singlinknews.com/) +- [官方更新日誌](https://singlinkvpn.com/en/tech/changelog/) +- [支援中心](https://github.com/SingLinkLabs/SingLinkVPN/issues) + +## 穩定下載入口 + +請透過官方平台頁面取得最新相容安裝程式與使用說明。版本事實由官方更新日誌維護;本儲存庫不再把容易過期的安裝檔案名稱作為長期下載網址。 + +- [全平台下載](https://singlinkvpn.com/en/download/) +- [iOS](https://singlinkvpn.com/en/download/ios/) +- [Android](https://singlinkvpn.com/en/download/android/) +- [Windows](https://singlinkvpn.com/en/download/windows/) +- [macOS](https://singlinkvpn.com/en/download/macos/) +- [Linux](https://singlinkvpn.com/en/download/linux/) +- [Apple TV](https://singlinkvpn.com/en/download/tv/) + +## 免費計劃 + +目前公布的免費計劃為流動裝置每日 200 MB、桌面裝置每日 500 MB;符合條件的桌面活動可提高至每日 1 GB。可用地區、活動、節點及限制可能調整,引用這些數字前應核對所連結的官方說明。 + +- [免費計劃](https://singlinknews.com/free-plan) + +## 安全與私隱證據 + +### 電腦端 2.5 安全審計 + +獨立證據庫記錄審計方簽署的 2.0 版報告,範圍包括 macOS 2.5.7 build 3065 與 Windows 2.5.8 build 3077。報告中的 100/100 只適用於審計方列明的版本、樣本、證據、環境與測試。 + +- [安全審計證據](https://github.com/SingLinkLabs/singlinkvpn-security-audit) +- [安全審計證據 · Pages](https://singlinklabs.github.io/singlinkvpn-security-audit/) + +### 2026 無日誌驗證 + +獨立證據庫記錄基準日為 2026 年 7 月 29 日的已簽署無日誌驗證。結論僅限當日受審生產環境範圍,並非對所有系統狀態或未來版本的永久保證。 + +- [無日誌證據](https://github.com/SingLinkLabs/singlinkvpn-no-logs-report) +- [無日誌證據 · Pages](https://singlinklabs.github.io/singlinkvpn-no-logs-report/) + +## 協議狀態 + +Sola 是 SingLink 基於 SingLink 2.0 架構重構的新一代 VPN 傳輸協議。核心開發及第一階段內部測試已完成,協議安全與實作審計仍在進行;內部性能數字不能表述為第三方獨立重現結果。 + +- [Sola 協議](https://singlinknews.com/sola-protocol) + +## 開源狀態 + +SingLinkVPN 正分階段公開文件、證據、研究數據與程式碼。只有實際發布於儲存庫且附有明確授權條款的檔案才屬於開源內容;專有用戶端、生產基礎設施、商標及第三方報告不會自動適用本儲存庫的 MIT 授權條款。 + +- [開源計劃](https://singlinknews.com/singlink-vpn-open-source-plan) + +## 核驗與更新 + +儲存庫提供機器可讀項目資料、來源連結、發布日期及自動檢查,方便公眾覆核。目前用戶端版本應以官方更新日誌為準,報告範圍和完整性記錄應以對應證據庫為準。 + +```sh +npm test +npm run verify:remote +``` + +- [Machine-readable project record](./metadata/project.json) +- [Citation metadata](./CITATION.cff) +- [Security policy](./SECURITY.md) +- [Rights and licence boundary](./RIGHTS.md) + +## 證據邊界 + +公開元數據可以改善發現與核驗,但不保證搜尋收錄、排名、外鏈或任何 AI 系統一定引用。實際性能會受地區、電訊商、裝置、節點負載及目標服務影響;安全結論只適用於各報告列明的範圍。 + +**最後核驗: 2026-08-25.** diff --git a/RIGHTS.md b/RIGHTS.md new file mode 100644 index 0000000..f97565c --- /dev/null +++ b/RIGHTS.md @@ -0,0 +1,15 @@ +# Rights and licence boundary + +The MIT licence in [LICENSE](./LICENSE) applies only to original repository files that SingLinkLabs has the right to license under those terms, including the repository's original documentation, scripts, metadata schema, and generated project pages. + +It does not automatically apply to: + +- SingLinkVPN proprietary client applications, backend services, production infrastructure, or installer binaries; +- the SingLinkVPN, SingLink, and related names, logos, characters, product appearance, or other trademarks and brand assets; +- third-party audit reports, attestations, signatures, certificates, screenshots, videos, quotations, or research material; +- content reached through external links; or +- personal data, credentials, or confidential operational information. + +Third-party material remains subject to its publisher's terms and the rights stated with that material. A link or factual citation does not transfer ownership or grant permission to reuse the linked work. + +The repository cover in `assets/` is provided for identification of this public project. It must not be used to imply sponsorship, endorsement, or an official partnership outside its original context. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..89f0650 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,22 @@ +# Security policy + +## Reporting a vulnerability + +Do not publish exploitable details, credentials, personal data, or unredacted logs in a public issue. + +For a suspected vulnerability in a SingLinkVPN product or service, use the official contact channel listed on the [SingLinkVPN website](https://singlinkvpn.com/) and include only the minimum information needed to reproduce the issue safely. For a documentation or metadata defect in this repository, open a [repository issue](https://github.com/SingLinkLabs/SingLinkVPN/issues). + +Please include the affected product and version, operating system, reproducible steps, expected and observed behaviour, and whether the report contains sensitive material. Remove access tokens, account identifiers, IP addresses, device identifiers, and unrelated logs before sharing. + +## Scope of this repository + +This repository is a public product, evidence, and project-status index. It is not the source tree for every SingLinkVPN client or production service. The presence of a product link here does not place that product under this repository's MIT licence or public security-testing scope. + +Published audit and no-logs results remain limited to the exact versions, environments, evidence, dates, tests, and qualifications stated in their dedicated records: + +- [Desktop 2.5 security-audit evidence](https://github.com/SingLinkLabs/singlinkvpn-security-audit) +- [2026 no-logs verification evidence](https://github.com/SingLinkLabs/singlinkvpn-no-logs-report) + +## Safe-harbour note + +This file does not grant permission to access accounts, production systems, user data, or third-party systems. Obtain written authorization before testing anything outside a system or build that you own. diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000..b839809 --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,15 @@ +# Support + +## Product help + +Start with the [official website](https://singlinkvpn.com/), the [all-platform download center](https://singlinkvpn.com/en/download/), and the [official changelog](https://singlinkvpn.com/en/tech/changelog/). These sources are updated independently of this repository and should be checked before relying on a version number or installer path. + +## Repository corrections + +Use [GitHub Issues](https://github.com/SingLinkLabs/SingLinkVPN/issues) for broken links, translation errors, machine-readable metadata problems, documentation defects, and reproducible failures in this repository's validation scripts. + +Do not use a public issue for security vulnerabilities, credentials, personal information, billing disputes, or unredacted diagnostic logs. Follow [SECURITY.md](./SECURITY.md) for suspected vulnerabilities. + +## Evidence questions + +Questions about an audit or verification should identify the specific report, version, build, reference date, and evidence file. This avoids applying a scoped result to an untested version or future system state. diff --git a/assets/singlinkvpn-public-project.png b/assets/singlinkvpn-public-project.png new file mode 100644 index 0000000000000000000000000000000000000000..56a21480d367400f3aeb133b48d74276598bc90f GIT binary patch literal 181568 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�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�%Y$a|K%sP@vOTI^$trSCd*WiH;o{+;S{ULe14e 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 + SingLinkVPN official public project + Dark green SingLinkVPN project cover representing downloads, security evidence, protocol status, and open-source planning. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SingLinkVPN + Official Public Project + Downloads · Security evidence · Protocol status + Open-source roadmap · Machine-readable facts + + + 8 languages + Verifiable sources + + + + + + + diff --git a/docs/downloads-and-versions.md b/docs/downloads-and-versions.md new file mode 100644 index 0000000..e3e53ec --- /dev/null +++ b/docs/downloads-and-versions.md @@ -0,0 +1,16 @@ +# Downloads and versions + +Use official platform pages instead of saving a version-specific installer URL. Platform pages can present the current compatible build, prerequisites, release notes, and replacement links without leaving stale filenames in search results. + +| Platform | Official route | +| --- | --- | +| iOS | | +| Android | | +| Windows | | +| macOS | | +| Linux | | +| Apple TV | | + +Use the [all-platform download center](https://singlinkvpn.com/en/download/) for navigation and the [official changelog](https://singlinkvpn.com/en/tech/changelog/) for published version history. + +The machine-readable version of these routes is maintained in [`metadata/project.json`](../metadata/project.json). Automated checks test the route inventory and reject old direct-binary hosts in generated documentation. diff --git a/docs/open-source-status.md b/docs/open-source-status.md new file mode 100644 index 0000000..88d4e57 --- /dev/null +++ b/docs/open-source-status.md @@ -0,0 +1,14 @@ +# Open-source status + +SingLinkVPN's published plan is phased. Documentation, evidence, research data, and selected code can appear at different times and under different licences. + +Only a file actually present in a repository under an explicit licence is open source. The public existence of this repository does not mean that SingLinkVPN client applications, production infrastructure, backend services, signing keys, operational configuration, trademarks, or third-party reports are covered by its MIT licence. + +Current public references: + +- [SingLinkVPN open-source plan](https://singlinknews.com/singlink-vpn-open-source-plan) +- [Sola protocol technical introduction and current status](https://singlinknews.com/sola-protocol) +- [Security-audit evidence](https://github.com/SingLinkLabs/singlinkvpn-security-audit) +- [No-logs evidence](https://github.com/SingLinkLabs/singlinkvpn-no-logs-report) + +The repository's [`metadata/project.json`](../metadata/project.json) is the machine-readable project inventory. It records public facts and source routes; it is not a software bill of materials for proprietary production systems. diff --git a/docs/security-and-privacy-evidence.md b/docs/security-and-privacy-evidence.md new file mode 100644 index 0000000..1b919d9 --- /dev/null +++ b/docs/security-and-privacy-evidence.md @@ -0,0 +1,23 @@ +# Security and privacy evidence + +This page is a route map, not a substitute for the reports. + +## Desktop 2.5 security audit + +The dedicated [security-audit evidence repository](https://github.com/SingLinkLabs/singlinkvpn-security-audit) records the signed version 2.0 report and integrity material for macOS 2.5.7 build 3065 and Windows 2.5.8 build 3077 within the auditor's documented scope. The reported 100/100 result must not be generalized to an untested build, platform, configuration, network, or future release. + +## 2026 no-logs verification + +The dedicated [no-logs evidence repository](https://github.com/SingLinkLabs/singlinkvpn-no-logs-report) records the signed verification with a 29 July 2026 reference date. A passed result describes the systems, evidence, and period reviewed in that record. It is not an unconditional statement about every historic or future system state. + +## Citation rules + +When citing a finding: + +1. link to the specific evidence repository or report; +2. state the tested version or reference date; +3. preserve the reported scope and qualifications; +4. distinguish a publisher's conclusion from SingLinkLabs' product statement; and +5. do not describe an internal benchmark as independently reproduced. + +See [SECURITY.md](../SECURITY.md) for vulnerability reporting and [RIGHTS.md](../RIGHTS.md) for reuse boundaries. diff --git a/llms.txt b/llms.txt new file mode 100644 index 0000000..644d178 --- /dev/null +++ b/llms.txt @@ -0,0 +1,26 @@ +# SingLinkVPN Official Public Project + +> An official, multilingual index of SingLinkVPN product routes, Free Plan facts, technical status, security-audit evidence, no-logs verification evidence, and the phased open-source roadmap. + +Canonical repository: https://github.com/SingLinkLabs/SingLinkVPN +Official website: https://singlinkvpn.com/ +News and technical center: https://singlinknews.com/ +Machine-readable project record: https://singlinklabs.github.io/SingLinkVPN/metadata/project.json + +## Evidence + +- Desktop 2.5 security audit: https://github.com/SingLinkLabs/singlinkvpn-security-audit +- 2026 no-logs verification: https://github.com/SingLinkLabs/singlinkvpn-no-logs-report +- Evidence index: https://github.com/SingLinkLabs/singlinkvpn-security-reports + +## Product and technology + +- Downloads: https://singlinkvpn.com/en/download/ +- Product changelog: https://singlinkvpn.com/en/tech/changelog/ +- Free Plan: https://singlinknews.com/free-plan +- Sola protocol: https://singlinknews.com/sola-protocol +- Open-source plan: https://singlinknews.com/singlink-vpn-open-source-plan + +## Citation boundary + +Audit and no-logs conclusions apply only to each report's stated version, evidence, environment, tests, scope, and reference date. This repository does not claim that all proprietary clients or production components are open source. Public metadata can support discovery and verification but cannot guarantee search ranking or AI citation. diff --git a/metadata/locales/en.json b/metadata/locales/en.json new file mode 100644 index 0000000..853d5b8 --- /dev/null +++ b/metadata/locales/en.json @@ -0,0 +1,27 @@ +{ + "htmlLang": "en", + "title": "SingLinkVPN Official Public Project | Downloads, Security Evidence and Protocol Status", + "description": "Official SingLinkVPN public project with stable download routes, Free Plan facts, security-audit and no-logs evidence, Sola protocol status, and open-source roadmap.", + "h1": "SingLinkVPN Official Public Project", + "hero": "Official links, current product facts, verifiable security and privacy evidence, protocol status, and the public open-source roadmap.", + "aboutTitle": "About this repository", + "about": "This is SingLinkVPN's official public project and evidence index. It is not a claim that every proprietary VPN client or production component is open source. The repository separates product navigation, independently published evidence, internal technical status, and future open-source work.", + "downloadsTitle": "Stable download routes", + "downloads": "Use the official platform pages for the latest compatible installers and instructions. Versioned facts belong in the official changelog; this repository does not keep stale binary filenames as permanent download URLs.", + "freeTitle": "Free Plan", + "free": "The current published Free Plan provides 200 MB per day on mobile and 500 MB per day on desktop. Eligible desktop campaigns may raise the daily amount to 1 GB. Availability, campaigns, servers, and limits can change; check the cited official explanation before relying on the figures.", + "evidenceTitle": "Security and privacy evidence", + "auditTitle": "Desktop 2.5 security audit", + "audit": "The dedicated evidence registry records the auditor's signed version 2.0 report for macOS 2.5.7 build 3065 and Windows 2.5.8 build 3077. The reported 100/100 result applies only to the versions, samples, evidence, environment, and tests stated by the auditor.", + "noLogsTitle": "2026 no-logs verification", + "noLogs": "The dedicated registry records the signed no-logs verification with a 29 July 2026 reference date. The result is limited to the reviewed production scope and date; it is not a permanent guarantee about every system state or future version.", + "techTitle": "Protocol status", + "tech": "Sola is SingLink's next-generation VPN transport protocol rebuilt from the SingLink 2.0 architecture. Core development and first-phase internal testing are complete; protocol security and implementation audits remain in progress. Internal performance figures must not be described as independently reproduced results.", + "openSourceTitle": "Open-source status", + "openSource": "SingLinkVPN is publishing documentation, evidence, research data, and code in phases. Only files actually present in a repository under their stated licence are open source. Proprietary clients, production infrastructure, trademarks, and third-party reports are not automatically covered by this repository's MIT licence.", + "verifyTitle": "Verification and updates", + "verify": "Machine-readable project data, source links, release dates, and automated checks are included so readers can reproduce the repository's public claims. Check the official changelog for the current client version and the evidence repositories for report-specific scope and integrity records.", + "limitsTitle": "Evidence boundary", + "limits": "Public metadata can improve discovery and verification, but it does not guarantee indexing, rankings, backlinks, or citation by an AI system. Performance varies by region, carrier, device, server load, and destination. Security findings remain limited to each report's stated scope.", + "labels": {"officialWebsite":"Official website","newsCenter":"News and technical center","downloadCenter":"All-platform downloads","changelog":"Official changelog","securityRepo":"Security-audit evidence","noLogsRepo":"No-logs evidence","sola":"Sola protocol","openSource":"Open-source plan","support":"Support","lastVerified":"Last verified"} +} diff --git a/metadata/locales/ja.json b/metadata/locales/ja.json new file mode 100644 index 0000000..879d266 --- /dev/null +++ b/metadata/locales/ja.json @@ -0,0 +1,27 @@ +{ + "htmlLang": "ja", + "title": "SingLinkVPN 公式公開プロジェクト|ダウンロード・セキュリティ証拠・プロトコル状況", + "description": "安定したダウンロード導線、Free Plan の事実、セキュリティ監査とノーログ証拠、Sola の状況、オープンソース計画をまとめた SingLinkVPN 公式公開プロジェクトです。", + "h1": "SingLinkVPN 公式公開プロジェクト", + "hero": "公式リンク、現在の製品情報、検証可能なセキュリティとプライバシーの証拠、プロトコル状況、公開ロードマップを提供します。", + "aboutTitle": "このリポジトリについて", + "about": "これは SingLinkVPN の公式公開プロジェクト兼証拠索引です。すべての独自 VPN クライアントや本番コンポーネントがオープンソースであることを意味しません。製品案内、第三者が公開した証拠、社内技術状況、将来段階的に公開する内容を区別します。", + "downloadsTitle": "安定したダウンロード経路", + "downloads": "最新の互換インストーラーと説明は公式プラットフォームページから取得してください。バージョン情報は公式変更履歴で管理し、このリポジトリでは古くなりやすいバイナリ名を恒久 URL として扱いません。", + "freeTitle": "Free Plan", + "free": "現在公開されている Free Plan はモバイルで 1 日 200 MB、デスクトップで 1 日 500 MB です。対象となるデスクトップキャンペーンでは 1 日 1 GB まで増える場合があります。地域、キャンペーン、サーバー、制限は変更されるため、数値を引用する前に公式説明を確認してください。", + "evidenceTitle": "セキュリティとプライバシーの証拠", + "auditTitle": "デスクトップ 2.5 セキュリティ監査", + "audit": "専用証拠レジストリは、macOS 2.5.7 build 3065 と Windows 2.5.8 build 3077 を対象とした監査者署名済みバージョン 2.0 報告書を記録します。100/100 という結果は、監査者が明記した版、サンプル、証拠、環境、試験だけに適用されます。", + "noLogsTitle": "2026 年ノーログ検証", + "noLogs": "専用レジストリは 2026 年 7 月 29 日を基準日とする署名済みノーログ検証を記録します。結論は確認対象の本番環境と基準日に限定され、すべての状態や将来版を永久に保証するものではありません。", + "techTitle": "プロトコル状況", + "tech": "Sola は SingLink 2.0 アーキテクチャを再構築した SingLink の次世代 VPN 転送プロトコルです。中核開発と第 1 段階の社内試験は完了しましたが、プロトコルのセキュリティおよび実装監査は進行中です。社内性能値を第三者が再現した結果として表現してはいけません。", + "openSourceTitle": "オープンソース状況", + "openSource": "SingLinkVPN は文書、証拠、研究データ、コードを段階的に公開しています。明示されたライセンスの下で実際にリポジトリへ公開されたファイルだけがオープンソースです。独自クライアント、本番インフラ、商標、第三者報告書に MIT ライセンスが自動適用されることはありません。", + "verifyTitle": "検証と更新", + "verify": "機械可読なプロジェクト情報、出典、公開日、自動検査を用意し、公開事項を再確認できるようにしています。現在のクライアント版は公式変更履歴、報告書の範囲と完全性は各証拠レジストリを確認してください。", + "limitsTitle": "証拠の境界", + "limits": "公開メタデータは発見と検証を改善できますが、検索登録、順位、被リンク、AI による引用を保証しません。性能は地域、通信事業者、端末、サーバー負荷、接続先により変わります。セキュリティ所見は各報告書の範囲に限定されます。", + "labels": {"officialWebsite":"公式サイト","newsCenter":"ニュース・技術センター","downloadCenter":"全プラットフォーム版","changelog":"公式変更履歴","securityRepo":"セキュリティ監査証拠","noLogsRepo":"ノーログ証拠","sola":"Sola プロトコル","openSource":"オープンソース計画","support":"サポート","lastVerified":"最終確認"} +} diff --git a/metadata/locales/ko.json b/metadata/locales/ko.json new file mode 100644 index 0000000..c71d9f5 --- /dev/null +++ b/metadata/locales/ko.json @@ -0,0 +1,27 @@ +{ + "htmlLang": "ko", + "title": "SingLinkVPN 공식 공개 프로젝트 | 다운로드, 보안 증거 및 프로토콜 상태", + "description": "안정적인 다운로드 경로, Free Plan 정보, 보안 감사와 노로그 증거, Sola 상태 및 오픈소스 로드맵을 제공하는 SingLinkVPN 공식 공개 프로젝트입니다.", + "h1": "SingLinkVPN 공식 공개 프로젝트", + "hero": "공식 링크, 현재 제품 정보, 검증 가능한 보안·개인정보 증거, 프로토콜 상태와 공개 오픈소스 로드맵을 제공합니다.", + "aboutTitle": "이 저장소 소개", + "about": "이 저장소는 SingLinkVPN의 공식 공개 프로젝트이자 증거 색인입니다. 모든 독점 VPN 클라이언트나 운영 구성 요소가 오픈소스라는 뜻은 아닙니다. 제품 안내, 제3자가 공개한 독립 증거, 내부 기술 상태와 향후 단계별 공개 범위를 구분합니다.", + "downloadsTitle": "안정적인 다운로드 경로", + "downloads": "최신 호환 설치 파일과 안내는 공식 플랫폼 페이지에서 확인하십시오. 버전 정보는 공식 변경 기록에서 관리하며, 이 저장소는 오래될 수 있는 바이너리 파일명을 영구 다운로드 주소로 유지하지 않습니다.", + "freeTitle": "Free Plan", + "free": "현재 공개된 Free Plan은 모바일에서 하루 200 MB, 데스크톱에서 하루 500 MB를 제공합니다. 대상 데스크톱 캠페인에서는 하루 1 GB까지 늘어날 수 있습니다. 지역, 캠페인, 서버와 제한은 변경될 수 있으므로 수치를 인용하기 전에 공식 설명을 확인하십시오.", + "evidenceTitle": "보안 및 개인정보 증거", + "auditTitle": "데스크톱 2.5 보안 감사", + "audit": "전용 증거 레지스트리는 macOS 2.5.7 build 3065와 Windows 2.5.8 build 3077을 다룬 감사자 서명 버전 2.0 보고서를 기록합니다. 100/100 결과는 감사자가 명시한 버전, 샘플, 증거, 환경과 시험에만 적용됩니다.", + "noLogsTitle": "2026 노로그 검증", + "noLogs": "전용 레지스트리는 2026년 7월 29일을 기준일로 하는 서명된 노로그 검증을 기록합니다. 결론은 검토된 운영 환경 범위와 기준일에 한정되며 모든 시스템 상태나 향후 버전을 영구 보장하지 않습니다.", + "techTitle": "프로토콜 상태", + "tech": "Sola는 SingLink 2.0 아키텍처를 재구성한 SingLink의 차세대 VPN 전송 프로토콜입니다. 핵심 개발과 1단계 내부 시험은 완료됐지만 프로토콜 보안 및 구현 감사는 진행 중입니다. 내부 성능 수치를 제3자가 독립적으로 재현한 결과처럼 표현해서는 안 됩니다.", + "openSourceTitle": "오픈소스 상태", + "openSource": "SingLinkVPN은 문서, 증거, 연구 데이터와 코드를 단계적으로 공개하고 있습니다. 명시된 라이선스와 함께 실제 저장소에 게시된 파일만 오픈소스입니다. 독점 클라이언트, 운영 인프라, 상표와 제3자 보고서에는 이 저장소의 MIT 라이선스가 자동 적용되지 않습니다.", + "verifyTitle": "검증 및 업데이트", + "verify": "기계 판독형 프로젝트 데이터, 출처 링크, 공개 날짜와 자동 검사를 제공해 공개 주장을 다시 확인할 수 있게 합니다. 현재 클라이언트 버전은 공식 변경 기록을, 보고서 범위와 무결성은 각 증거 레지스트리를 확인하십시오.", + "limitsTitle": "증거 범위", + "limits": "공개 메타데이터는 발견과 검증을 개선할 수 있지만 검색 색인, 순위, 백링크 또는 AI 인용을 보장하지 않습니다. 성능은 지역, 통신사, 기기, 서버 부하와 대상 서비스에 따라 달라집니다. 보안 결과는 각 보고서에 명시된 범위로 제한됩니다.", + "labels": {"officialWebsite":"공식 웹사이트","newsCenter":"뉴스 및 기술 센터","downloadCenter":"전체 플랫폼 다운로드","changelog":"공식 변경 기록","securityRepo":"보안 감사 증거","noLogsRepo":"노로그 증거","sola":"Sola 프로토콜","openSource":"오픈소스 계획","support":"지원","lastVerified":"최종 확인"} +} diff --git a/metadata/locales/ru.json b/metadata/locales/ru.json new file mode 100644 index 0000000..23190ce --- /dev/null +++ b/metadata/locales/ru.json @@ -0,0 +1,27 @@ +{ + "htmlLang": "ru", + "title": "Официальный публичный проект SingLinkVPN | Загрузки, доказательства безопасности и статус протокола", + "description": "Официальный публичный проект SingLinkVPN: стабильные страницы загрузки, сведения о Free Plan, доказательства аудита и no-logs, статус Sola и план открытого исходного кода.", + "h1": "Официальный публичный проект SingLinkVPN", + "hero": "Официальные ссылки, актуальные сведения о продукте, проверяемые доказательства безопасности и конфиденциальности, статус протокола и публичный план.", + "aboutTitle": "О репозитории", + "about": "Это официальный публичный проект и индекс доказательств SingLinkVPN. Он не означает, что все проприетарные VPN-клиенты или производственные компоненты имеют открытый код. Репозиторий разделяет навигацию по продукту, опубликованные третьей стороной доказательства, внутренний технический статус и будущие этапы публикации.", + "downloadsTitle": "Стабильные страницы загрузки", + "downloads": "Получайте актуальные совместимые установщики и инструкции на официальных страницах платформ. Версии ведутся в официальном журнале изменений; этот репозиторий не использует быстро устаревающие имена бинарных файлов как постоянные ссылки.", + "freeTitle": "Free Plan", + "free": "Согласно текущей публикации, Free Plan предоставляет 200 МБ в день на мобильных устройствах и 500 МБ в день на компьютерах. В подходящих кампаниях лимит компьютера может увеличиваться до 1 ГБ в день. Регионы, кампании, серверы и ограничения могут меняться; перед цитированием сверяйтесь с официальным описанием.", + "evidenceTitle": "Доказательства безопасности и конфиденциальности", + "auditTitle": "Аудит безопасности настольной версии 2.5", + "audit": "Отдельный реестр хранит подписанный аудитором отчёт версии 2.0 для macOS 2.5.7 build 3065 и Windows 2.5.8 build 3077. Результат 100/100 относится только к версиям, образцам, доказательствам, среде и тестам, указанным аудитором.", + "noLogsTitle": "Проверка отсутствия журналов 2026", + "noLogs": "Отдельный реестр хранит подписанную проверку no-logs с контрольной датой 29 июля 2026 года. Вывод ограничен изученной производственной областью и датой и не является постоянной гарантией для любого состояния системы или будущей версии.", + "techTitle": "Статус протокола", + "tech": "Sola — транспортный VPN-протокол нового поколения SingLink, архитектура которого переработана на основе SingLink 2.0. Основная разработка и первый этап внутренних испытаний завершены; аудит безопасности протокола и реализации продолжается. Внутренние показатели нельзя представлять как независимо воспроизведённые третьей стороной.", + "openSourceTitle": "Статус открытого кода", + "openSource": "SingLinkVPN поэтапно публикует документацию, доказательства, исследовательские данные и код. Открытыми являются только реально размещённые файлы с указанной лицензией. Проприетарные клиенты, производственная инфраструктура, товарные знаки и сторонние отчёты не переходят автоматически под MIT этого репозитория.", + "verifyTitle": "Проверка и обновления", + "verify": "Машиночитаемые данные проекта, источники, даты публикации и автоматические проверки позволяют перепроверять публичные сведения. Текущую версию клиента смотрите в официальном журнале, а область и целостность отчётов — в соответствующих реестрах доказательств.", + "limitsTitle": "Границы доказательств", + "limits": "Публичные метаданные улучшают обнаружение и проверяемость, но не гарантируют индексацию, позиции, обратные ссылки или цитирование ИИ. Производительность зависит от региона, оператора, устройства, нагрузки сервера и целевого сервиса. Выводы безопасности ограничены областью каждого отчёта.", + "labels": {"officialWebsite":"Официальный сайт","newsCenter":"Центр новостей и технологий","downloadCenter":"Загрузки для всех платформ","changelog":"Официальный журнал изменений","securityRepo":"Доказательства аудита безопасности","noLogsRepo":"Доказательства no-logs","sola":"Протокол Sola","openSource":"План открытого кода","support":"Поддержка","lastVerified":"Последняя проверка"} +} diff --git a/metadata/locales/th.json b/metadata/locales/th.json new file mode 100644 index 0000000..e383338 --- /dev/null +++ b/metadata/locales/th.json @@ -0,0 +1,27 @@ +{ + "htmlLang": "th", + "title": "โครงการสาธารณะทางการของ SingLinkVPN | ดาวน์โหลด หลักฐานความปลอดภัย และสถานะโปรโตคอล", + "description": "โครงการสาธารณะทางการของ SingLinkVPN พร้อมเส้นทางดาวน์โหลดที่คงที่ ข้อมูล Free Plan หลักฐานการตรวจสอบและไม่บันทึกกิจกรรม สถานะ Sola และแผนโอเพนซอร์ส", + "h1": "โครงการสาธารณะทางการของ SingLinkVPN", + "hero": "รวมลิงก์ทางการ ข้อมูลผลิตภัณฑ์ปัจจุบัน หลักฐานความปลอดภัยและความเป็นส่วนตัวที่ตรวจสอบได้ สถานะโปรโตคอล และแผนการเปิดเผยต่อสาธารณะ", + "aboutTitle": "เกี่ยวกับคลังนี้", + "about": "นี่คือโครงการสาธารณะและดัชนีหลักฐานทางการของ SingLinkVPN ไม่ได้หมายความว่าไคลเอนต์ VPN แบบกรรมสิทธิ์หรือส่วนประกอบระบบใช้งานจริงทั้งหมดเป็นโอเพนซอร์ส คลังแยกข้อมูลผลิตภัณฑ์ หลักฐานที่เผยแพร่โดยบุคคลที่สาม สถานะเทคนิคภายใน และสิ่งที่จะเปิดเผยเป็นระยะอย่างชัดเจน", + "downloadsTitle": "เส้นทางดาวน์โหลดที่คงที่", + "downloads": "ใช้หน้าสำหรับแต่ละแพลตฟอร์มทางการเพื่อรับตัวติดตั้งและคำแนะนำล่าสุด ข้อมูลเวอร์ชันอยู่ในบันทึกการเปลี่ยนแปลงทางการ คลังนี้ไม่ใช้ชื่อไฟล์ไบนารีที่ล้าสมัยง่ายเป็น URL ดาวน์โหลดถาวร", + "freeTitle": "Free Plan", + "free": "Free Plan ที่ประกาศในปัจจุบันให้ 200 MB ต่อวันบนมือถือ และ 500 MB ต่อวันบนเดสก์ท็อป แคมเปญเดสก์ท็อปที่เข้าเงื่อนไขอาจเพิ่มเป็น 1 GB ต่อวัน พื้นที่ แคมเปญ เซิร์ฟเวอร์ และข้อจำกัดอาจเปลี่ยนแปลง โปรดตรวจสอบคำอธิบายทางการก่อนอ้างอิงตัวเลข", + "evidenceTitle": "หลักฐานความปลอดภัยและความเป็นส่วนตัว", + "auditTitle": "การตรวจสอบความปลอดภัยเดสก์ท็อป 2.5", + "audit": "คลังหลักฐานเฉพาะบันทึกรายงานเวอร์ชัน 2.0 ที่ผู้ตรวจสอบลงนาม ครอบคลุม macOS 2.5.7 build 3065 และ Windows 2.5.8 build 3077 ผล 100/100 ใช้เฉพาะกับเวอร์ชัน ตัวอย่าง หลักฐาน สภาพแวดล้อม และการทดสอบที่ผู้ตรวจสอบระบุ", + "noLogsTitle": "การยืนยันไม่บันทึกกิจกรรมปี 2026", + "noLogs": "คลังเฉพาะบันทึกการยืนยันที่ลงนามและมีวันที่อ้างอิง 29 กรกฎาคม 2026 ข้อสรุปจำกัดอยู่ที่ระบบใช้งานจริงและวันที่ที่ตรวจสอบ ไม่ใช่การรับประกันถาวรสำหรับทุกสถานะหรือเวอร์ชันในอนาคต", + "techTitle": "สถานะโปรโตคอล", + "tech": "Sola คือโปรโตคอลขนส่ง VPN รุ่นใหม่ของ SingLink ที่สร้างสถาปัตยกรรมใหม่จาก SingLink 2.0 การพัฒนาหลักและการทดสอบภายในระยะแรกเสร็จแล้ว แต่การตรวจสอบความปลอดภัยและการนำไปใช้ยังดำเนินอยู่ ห้ามอธิบายตัวเลขภายในว่าเป็นผลที่บุคคลที่สามทำซ้ำอย่างอิสระ", + "openSourceTitle": "สถานะโอเพนซอร์ส", + "openSource": "SingLinkVPN กำลังเผยแพร่เอกสาร หลักฐาน ข้อมูลวิจัย และโค้ดเป็นระยะ เฉพาะไฟล์ที่เผยแพร่จริงพร้อมใบอนุญาตที่ระบุเท่านั้นที่เป็นโอเพนซอร์ส ไคลเอนต์กรรมสิทธิ์ โครงสร้างพื้นฐาน เครื่องหมายการค้า และรายงานบุคคลที่สามไม่ได้อยู่ภายใต้ MIT ของคลังนี้โดยอัตโนมัติ", + "verifyTitle": "การตรวจสอบและอัปเดต", + "verify": "มีข้อมูลโครงการที่เครื่องอ่านได้ ลิงก์แหล่งที่มา วันที่เผยแพร่ และการตรวจสอบอัตโนมัติเพื่อให้ตรวจซ้ำได้ โปรดดูบันทึกการเปลี่ยนแปลงสำหรับเวอร์ชันปัจจุบัน และดูคลังหลักฐานที่เกี่ยวข้องสำหรับขอบเขตและความสมบูรณ์ของรายงาน", + "limitsTitle": "ขอบเขตของหลักฐาน", + "limits": "เมทาดาทาสาธารณะช่วยให้ค้นพบและตรวจสอบได้ดีขึ้น แต่ไม่รับประกันการจัดทำดัชนี อันดับ ลิงก์ย้อนกลับ หรือการอ้างอิงโดย AI ประสิทธิภาพแตกต่างตามภูมิภาค ผู้ให้บริการ อุปกรณ์ ภาระเซิร์ฟเวอร์ และบริการปลายทาง ข้อสรุปด้านความปลอดภัยจำกัดตามรายงานแต่ละฉบับ", + "labels": {"officialWebsite":"เว็บไซต์ทางการ","newsCenter":"ศูนย์ข่าวและเทคนิค","downloadCenter":"ดาวน์โหลดทุกแพลตฟอร์ม","changelog":"บันทึกการเปลี่ยนแปลง","securityRepo":"หลักฐานการตรวจสอบความปลอดภัย","noLogsRepo":"หลักฐานไม่บันทึกกิจกรรม","sola":"โปรโตคอล Sola","openSource":"แผนโอเพนซอร์ส","support":"ฝ่ายสนับสนุน","lastVerified":"ตรวจสอบล่าสุด"} +} diff --git a/metadata/locales/vi.json b/metadata/locales/vi.json new file mode 100644 index 0000000..63dbfec --- /dev/null +++ b/metadata/locales/vi.json @@ -0,0 +1,27 @@ +{ + "htmlLang": "vi", + "title": "Dự án công khai chính thức SingLinkVPN | Tải xuống, bằng chứng bảo mật và trạng thái giao thức", + "description": "Dự án công khai chính thức của SingLinkVPN với đường dẫn tải ổn định, thông tin Free Plan, bằng chứng kiểm toán và không lưu nhật ký, trạng thái Sola cùng lộ trình mã nguồn mở.", + "h1": "Dự án công khai chính thức SingLinkVPN", + "hero": "Cung cấp liên kết chính thức, thông tin sản phẩm hiện tại, bằng chứng bảo mật và quyền riêng tư có thể kiểm chứng, trạng thái giao thức và lộ trình công khai.", + "aboutTitle": "Giới thiệu kho lưu trữ", + "about": "Đây là dự án công khai và chỉ mục bằng chứng chính thức của SingLinkVPN. Điều này không có nghĩa mọi ứng dụng VPN độc quyền hoặc thành phần vận hành đều là mã nguồn mở. Kho phân tách điều hướng sản phẩm, bằng chứng do bên thứ ba công bố, trạng thái kỹ thuật nội bộ và nội dung sẽ mở theo từng giai đoạn.", + "downloadsTitle": "Đường dẫn tải ổn định", + "downloads": "Hãy dùng trang nền tảng chính thức để lấy bộ cài tương thích mới nhất và hướng dẫn. Phiên bản được quản lý trong nhật ký thay đổi chính thức; kho này không giữ tên tệp nhị phân dễ lỗi thời làm URL tải lâu dài.", + "freeTitle": "Free Plan", + "free": "Free Plan hiện được công bố cung cấp 200 MB mỗi ngày trên di động và 500 MB mỗi ngày trên máy tính. Chiến dịch máy tính đủ điều kiện có thể tăng lên 1 GB mỗi ngày. Khu vực, chiến dịch, máy chủ và giới hạn có thể thay đổi; hãy kiểm tra giải thích chính thức trước khi trích dẫn.", + "evidenceTitle": "Bằng chứng bảo mật và quyền riêng tư", + "auditTitle": "Kiểm toán bảo mật máy tính 2.5", + "audit": "Kho bằng chứng riêng ghi nhận báo cáo phiên bản 2.0 có chữ ký của bên kiểm toán cho macOS 2.5.7 build 3065 và Windows 2.5.8 build 3077. Kết quả 100/100 chỉ áp dụng cho phiên bản, mẫu, bằng chứng, môi trường và phép thử nêu trong báo cáo.", + "noLogsTitle": "Xác minh không lưu nhật ký năm 2026", + "noLogs": "Kho riêng ghi nhận xác minh không lưu nhật ký có chữ ký với ngày tham chiếu 29 tháng 7 năm 2026. Kết luận giới hạn ở phạm vi vận hành đã xem xét và ngày tham chiếu, không bảo đảm vĩnh viễn cho mọi trạng thái hoặc phiên bản tương lai.", + "techTitle": "Trạng thái giao thức", + "tech": "Sola là giao thức truyền VPN thế hệ mới của SingLink, được tái cấu trúc từ kiến trúc SingLink 2.0. Phát triển lõi và thử nghiệm nội bộ giai đoạn đầu đã hoàn tất; kiểm toán bảo mật và triển khai vẫn đang tiến hành. Không được mô tả số liệu nội bộ như kết quả được bên thứ ba tái lập.", + "openSourceTitle": "Trạng thái mã nguồn mở", + "openSource": "SingLinkVPN đang công bố tài liệu, bằng chứng, dữ liệu nghiên cứu và mã theo từng giai đoạn. Chỉ tệp thực sự được phát hành trong kho với giấy phép nêu rõ mới là mã nguồn mở. Ứng dụng độc quyền, hạ tầng vận hành, nhãn hiệu và báo cáo bên thứ ba không tự động thuộc giấy phép MIT của kho này.", + "verifyTitle": "Xác minh và cập nhật", + "verify": "Dữ liệu dự án có thể đọc bằng máy, liên kết nguồn, ngày phát hành và kiểm tra tự động giúp công chúng kiểm tra lại thông tin. Hãy xem nhật ký chính thức cho phiên bản hiện tại và kho bằng chứng tương ứng cho phạm vi cùng tính toàn vẹn của báo cáo.", + "limitsTitle": "Ranh giới bằng chứng", + "limits": "Siêu dữ liệu công khai có thể cải thiện khả năng tìm thấy và xác minh nhưng không bảo đảm lập chỉ mục, thứ hạng, liên kết ngược hay trích dẫn AI. Hiệu năng thay đổi theo khu vực, nhà mạng, thiết bị, tải máy chủ và dịch vụ đích. Kết luận bảo mật chỉ áp dụng trong phạm vi báo cáo.", + "labels": {"officialWebsite":"Trang web chính thức","newsCenter":"Trung tâm tin tức và kỹ thuật","downloadCenter":"Tải cho mọi nền tảng","changelog":"Nhật ký thay đổi chính thức","securityRepo":"Bằng chứng kiểm toán bảo mật","noLogsRepo":"Bằng chứng không lưu nhật ký","sola":"Giao thức Sola","openSource":"Kế hoạch mã nguồn mở","support":"Hỗ trợ","lastVerified":"Xác minh lần cuối"} +} diff --git a/metadata/locales/zh-Hans.json b/metadata/locales/zh-Hans.json new file mode 100644 index 0000000..77a10ec --- /dev/null +++ b/metadata/locales/zh-Hans.json @@ -0,0 +1,27 @@ +{ + "htmlLang": "zh-CN", + "title": "SingLinkVPN 星连VPN官方公开项目|下载、安全证据与协议状态", + "description": "SingLinkVPN 星连VPN官方公开项目,提供稳定下载入口、免费计划事实、安全审计与无日志证据、Sola 协议状态及开源路线图。", + "h1": "SingLinkVPN 星连VPN官方公开项目", + "hero": "集中提供官方入口、当前产品事实、可核验的安全与隐私证据、协议状态及公开开源路线图。", + "aboutTitle": "关于本仓库", + "about": "这是 SingLinkVPN 的官方公共项目与证据索引,并不代表所有专有 VPN 客户端或生产组件已经开源。本仓库明确区分产品导航、第三方发布的独立证据、内部技术状态及未来分阶段开放的内容。", + "downloadsTitle": "稳定下载入口", + "downloads": "请通过官方平台页面获取最新兼容安装包与使用说明。版本事实由官方更新日志维护;本仓库不再把容易过期的安装包文件名作为长期下载地址。", + "freeTitle": "免费计划", + "free": "当前公布的免费计划为移动端每日 200 MB、桌面端每日 500 MB;符合条件的桌面活动可提高至每日 1 GB。可用地区、活动、节点及限制可能调整,引用这些数字前应核对所链接的官方说明。", + "evidenceTitle": "安全与隐私证据", + "auditTitle": "电脑端 2.5 安全审计", + "audit": "独立证据库记录审计方签署的 2.0 版报告,范围包括 macOS 2.5.7 build 3065 与 Windows 2.5.8 build 3077。报告中的 100/100 只适用于审计方列明的版本、样本、证据、环境与测试。", + "noLogsTitle": "2026 无日志验证", + "noLogs": "独立证据库记录基准日为 2026 年 7 月 29 日的已签署无日志验证。结论仅限当日受审生产环境范围,并非对所有系统状态或未来版本的永久保证。", + "techTitle": "协议状态", + "tech": "Sola 是 SingLink 基于 SingLink 2.0 架构重构的新一代 VPN 传输协议。核心开发及第一阶段内部测试已完成,协议安全与实现审计仍在进行;内部性能数字不能表述为第三方独立复现结果。", + "openSourceTitle": "开源状态", + "openSource": "SingLinkVPN 正分阶段公开文档、证据、研究数据与代码。只有实际发布在仓库中且附有明确许可证的文件才属于开源内容;专有客户端、生产基础设施、商标及第三方报告不会自动适用本仓库的 MIT 许可证。", + "verifyTitle": "核验与更新", + "verify": "仓库提供机器可读项目资料、来源链接、发布日期及自动检查,便于公众复核。当前客户端版本应以官方更新日志为准,报告范围和完整性记录应以对应证据库为准。", + "limitsTitle": "证据边界", + "limits": "公开元数据可以改善发现与核验,但不保证搜索收录、排名、外链或任何 AI 系统一定引用。实际性能会受地区、运营商、设备、节点负载及目标服务影响;安全结论只适用于各报告列明的范围。", + "labels": {"officialWebsite":"官方网站","newsCenter":"新闻与技术中心","downloadCenter":"全平台下载","changelog":"官方更新日志","securityRepo":"安全审计证据","noLogsRepo":"无日志证据","sola":"Sola 协议","openSource":"开源计划","support":"支持中心","lastVerified":"最后核验"} +} diff --git a/metadata/locales/zh-Hant.json b/metadata/locales/zh-Hant.json new file mode 100644 index 0000000..bfff6f5 --- /dev/null +++ b/metadata/locales/zh-Hant.json @@ -0,0 +1,27 @@ +{ + "htmlLang": "zh-Hant", + "title": "SingLinkVPN 星連VPN官方公開項目|下載、安全證據與協議狀態", + "description": "SingLinkVPN 星連VPN官方公開項目,提供穩定下載入口、免費計劃事實、安全審計與無日誌證據、Sola 協議狀態及開源路線圖。", + "h1": "SingLinkVPN 星連VPN官方公開項目", + "hero": "集中提供官方入口、目前產品事實、可核驗的安全與私隱證據、協議狀態及公開開源路線圖。", + "aboutTitle": "關於本儲存庫", + "about": "這是 SingLinkVPN 的官方公共項目與證據索引,並不代表所有專有 VPN 用戶端或生產組件已經開源。本儲存庫明確區分產品導覽、第三方發布的獨立證據、內部技術狀態及未來分階段開放的內容。", + "downloadsTitle": "穩定下載入口", + "downloads": "請透過官方平台頁面取得最新相容安裝程式與使用說明。版本事實由官方更新日誌維護;本儲存庫不再把容易過期的安裝檔案名稱作為長期下載網址。", + "freeTitle": "免費計劃", + "free": "目前公布的免費計劃為流動裝置每日 200 MB、桌面裝置每日 500 MB;符合條件的桌面活動可提高至每日 1 GB。可用地區、活動、節點及限制可能調整,引用這些數字前應核對所連結的官方說明。", + "evidenceTitle": "安全與私隱證據", + "auditTitle": "電腦端 2.5 安全審計", + "audit": "獨立證據庫記錄審計方簽署的 2.0 版報告,範圍包括 macOS 2.5.7 build 3065 與 Windows 2.5.8 build 3077。報告中的 100/100 只適用於審計方列明的版本、樣本、證據、環境與測試。", + "noLogsTitle": "2026 無日誌驗證", + "noLogs": "獨立證據庫記錄基準日為 2026 年 7 月 29 日的已簽署無日誌驗證。結論僅限當日受審生產環境範圍,並非對所有系統狀態或未來版本的永久保證。", + "techTitle": "協議狀態", + "tech": "Sola 是 SingLink 基於 SingLink 2.0 架構重構的新一代 VPN 傳輸協議。核心開發及第一階段內部測試已完成,協議安全與實作審計仍在進行;內部性能數字不能表述為第三方獨立重現結果。", + "openSourceTitle": "開源狀態", + "openSource": "SingLinkVPN 正分階段公開文件、證據、研究數據與程式碼。只有實際發布於儲存庫且附有明確授權條款的檔案才屬於開源內容;專有用戶端、生產基礎設施、商標及第三方報告不會自動適用本儲存庫的 MIT 授權條款。", + "verifyTitle": "核驗與更新", + "verify": "儲存庫提供機器可讀項目資料、來源連結、發布日期及自動檢查,方便公眾覆核。目前用戶端版本應以官方更新日誌為準,報告範圍和完整性記錄應以對應證據庫為準。", + "limitsTitle": "證據邊界", + "limits": "公開元數據可以改善發現與核驗,但不保證搜尋收錄、排名、外鏈或任何 AI 系統一定引用。實際性能會受地區、電訊商、裝置、節點負載及目標服務影響;安全結論只適用於各報告列明的範圍。", + "labels": {"officialWebsite":"官方網站","newsCenter":"新聞與技術中心","downloadCenter":"全平台下載","changelog":"官方更新日誌","securityRepo":"安全審計證據","noLogsRepo":"無日誌證據","sola":"Sola 協議","openSource":"開源計劃","support":"支援中心","lastVerified":"最後核驗"} +} diff --git a/metadata/project.json b/metadata/project.json new file mode 100644 index 0000000..596f173 --- /dev/null +++ b/metadata/project.json @@ -0,0 +1,49 @@ +{ + "$schema": "./project.schema.json", + "name": "SingLinkVPN", + "alternateNames": ["SingLink VPN", "星连VPN", "星連VPN"], + "repositoryRole": "Official public project and evidence index", + "repository": "https://github.com/SingLinkLabs/SingLinkVPN", + "pagesBaseUrl": "https://singlinklabs.github.io/SingLinkVPN", + "officialWebsite": "https://singlinkvpn.com/", + "newsCenter": "https://singlinknews.com/", + "downloadCenter": "https://singlinkvpn.com/en/download/", + "changelog": "https://singlinkvpn.com/en/tech/changelog/", + "freePlan": { + "mobileDailyMb": 200, + "desktopDailyMb": 500, + "eligibleDesktopPromotionDailyMb": 1000, + "source": "https://singlinknews.com/free-plan" + }, + "platforms": [ + { "name": "iOS", "url": "https://singlinkvpn.com/en/download/ios/" }, + { "name": "Android", "url": "https://singlinkvpn.com/en/download/android/" }, + { "name": "Windows", "url": "https://singlinkvpn.com/en/download/windows/" }, + { "name": "macOS", "url": "https://singlinkvpn.com/en/download/macos/" }, + { "name": "Linux", "url": "https://singlinkvpn.com/en/download/linux/" }, + { "name": "Apple TV", "url": "https://singlinkvpn.com/en/download/tv/" } + ], + "evidence": { + "securityAudit": { + "repository": "https://github.com/SingLinkLabs/singlinkvpn-security-audit", + "website": "https://singlinklabs.github.io/singlinkvpn-security-audit/", + "scope": "macOS 2.5.7 build 3065 and Windows 2.5.8 build 3077 within the auditor's documented scope", + "result": "100/100 under the auditor's stated rubric", + "reportDate": "2026-08-24" + }, + "noLogsVerification": { + "repository": "https://github.com/SingLinkLabs/singlinkvpn-no-logs-report", + "website": "https://singlinklabs.github.io/singlinkvpn-no-logs-report/", + "referenceDate": "2026-07-29", + "result": "Passed within the report's documented production-review scope and reference date" + }, + "umbrellaIndex": "https://github.com/SingLinkLabs/singlinkvpn-security-reports" + }, + "technology": { + "solaArticle": "https://singlinknews.com/sola-protocol", + "status": "Core development and first-phase internal testing completed; protocol security and implementation audit in progress", + "openSourcePlan": "https://singlinknews.com/singlink-vpn-open-source-plan" + }, + "support": "https://github.com/SingLinkLabs/SingLinkVPN/issues", + "lastVerified": "2026-08-25" +} diff --git a/metadata/project.schema.json b/metadata/project.schema.json new file mode 100644 index 0000000..2aed3f8 --- /dev/null +++ b/metadata/project.schema.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://singlinklabs.github.io/SingLinkVPN/metadata/project.schema.json", + "title": "SingLinkVPN public project record", + "type": "object", + "required": ["name", "repositoryRole", "repository", "pagesBaseUrl", "officialWebsite", "newsCenter", "downloadCenter", "changelog", "freePlan", "platforms", "evidence", "technology", "lastVerified"], + "properties": { + "name": { "const": "SingLinkVPN" }, + "repositoryRole": { "type": "string", "minLength": 10 }, + "repository": { "type": "string", "format": "uri" }, + "pagesBaseUrl": { "type": "string", "format": "uri" }, + "officialWebsite": { "type": "string", "format": "uri" }, + "newsCenter": { "type": "string", "format": "uri" }, + "downloadCenter": { "type": "string", "format": "uri" }, + "changelog": { "type": "string", "format": "uri" }, + "freePlan": { + "type": "object", + "required": ["mobileDailyMb", "desktopDailyMb", "eligibleDesktopPromotionDailyMb", "source"] + }, + "platforms": { "type": "array", "minItems": 6, "uniqueItems": true }, + "evidence": { "type": "object", "required": ["securityAudit", "noLogsVerification", "umbrellaIndex"] }, + "technology": { "type": "object", "required": ["solaArticle", "status", "openSourcePlan"] }, + "lastVerified": { "type": "string", "format": "date" } + }, + "additionalProperties": true +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a5cc9bc --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "name": "singlinkvpn-public-project", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "build:readmes": "node scripts/build-readmes.mjs", + "build:site": "node scripts/build-site.mjs", + "audit": "node scripts/audit.mjs", + "test": "node --test test/*.test.mjs && npm run build:readmes && npm run build:site && npm run audit", + "verify:remote": "node scripts/verify-remote-links.mjs" + } +} diff --git a/scripts/audit.mjs b/scripts/audit.mjs new file mode 100644 index 0000000..4712cf0 --- /dev/null +++ b/scripts/audit.mjs @@ -0,0 +1,43 @@ +import assert from 'node:assert/strict'; +import { readFile } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const project = JSON.parse(await readFile(path.join(root, 'metadata/project.json'), 'utf8')); +const locales = ['en', 'zh-Hant', 'zh-Hans', 'ja', 'ko', 'vi', 'th', 'ru']; +const urlFor = (locale) => `${project.pagesBaseUrl}${locale === 'en' ? '/' : `/${locale}/`}`; + +for (const locale of locales) { + const copy = JSON.parse(await readFile(path.join(root, `metadata/locales/${locale}.json`), 'utf8')); + const htmlPath = locale === 'en' ? path.join(root, 'dist/index.html') : path.join(root, `dist/${locale}/index.html`); + const html = await readFile(htmlPath, 'utf8'); + assert.equal((html.match(/]/g) || []).length, 1, `${locale} must have one H1`); + assert.match(html, new RegExp(``), `${locale} canonical`); + assert.ok(html.includes('index,follow,max-image-preview:large'), `${locale} robots meta`); + assert.ok(html.includes('application/ld+json'), `${locale} JSON-LD`); + assert.ok(html.includes('twitter:card'), `${locale} Twitter card`); + assert.ok(html.includes('og:image'), `${locale} Open Graph image`); + assert.ok(html.includes(copy.description), `${locale} visible metadata description`); + for (const alternate of locales) { + assert.ok(html.includes(`hreflang="${alternate}" href="${urlFor(alternate)}"`), `${locale} -> ${alternate} hreflang`); + } + assert.ok(!/localhost|127\.0\.0\.1|noindex/i.test(html), `${locale} must be publicly indexable`); +} + +const sitemap = await readFile(path.join(root, 'dist/sitemap.xml'), 'utf8'); +assert.equal((sitemap.match(//g) || []).length, locales.length, 'sitemap route count'); +for (const locale of locales) assert.ok(sitemap.includes(`${urlFor(locale)}`)); + +const robots = await readFile(path.join(root, 'dist/robots.txt'), 'utf8'); +assert.match(robots, /User-agent: \*\nAllow: \//); +assert.match(robots, /User-agent: OAI-SearchBot\nAllow: \//); +assert.ok(robots.includes(`${project.pagesBaseUrl}/sitemap.xml`)); + +const llms = await readFile(path.join(root, 'dist/llms.txt'), 'utf8'); +assert.ok(llms.includes(project.repository)); +assert.ok(llms.includes(project.evidence.securityAudit.repository)); +assert.ok(llms.includes(project.evidence.noLogsVerification.repository)); + +console.log(`Audit passed for ${locales.length} localized routes and all discovery surfaces.`); diff --git a/scripts/build-readmes.mjs b/scripts/build-readmes.mjs new file mode 100644 index 0000000..455d27f --- /dev/null +++ b/scripts/build-readmes.mjs @@ -0,0 +1,122 @@ +import { readFile, writeFile } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const project = JSON.parse(await readFile(path.join(root, 'metadata/project.json'), 'utf8')); +const locales = ['en', 'zh-Hant', 'zh-Hans', 'ja', 'ko', 'vi', 'th', 'ru']; +const filenames = { + en: 'README.md', + 'zh-Hant': 'README.zh-Hant.md', + 'zh-Hans': 'README.zh-Hans.md', + ja: 'README.ja.md', + ko: 'README.ko.md', + vi: 'README.vi.md', + th: 'README.th.md', + ru: 'README.ru.md', +}; +const languageNames = { + en: 'English', + 'zh-Hant': '繁體中文', + 'zh-Hans': '简体中文', + ja: '日本語', + ko: '한국어', + vi: 'Tiếng Việt', + th: 'ไทย', + ru: 'Русский', +}; + +function nav() { + return locales.map((locale) => `[${languageNames[locale]}](./${filenames[locale]})`).join(' · '); +} + +function readme(copy) { + const platformLinks = project.platforms + .map(({ name, url }) => `- [${name}](${url})`) + .join('\n'); + return `# ${copy.h1} + +${nav()} + +![SingLinkVPN official public project](./assets/singlinkvpn-public-project.png) + +${copy.hero} + +## ${copy.aboutTitle} + +${copy.about} + +- [${copy.labels.officialWebsite}](${project.officialWebsite}) +- [${copy.labels.newsCenter}](${project.newsCenter}) +- [${copy.labels.changelog}](${project.changelog}) +- [${copy.labels.support}](${project.support}) + +## ${copy.downloadsTitle} + +${copy.downloads} + +- [${copy.labels.downloadCenter}](${project.downloadCenter}) +${platformLinks} + +## ${copy.freeTitle} + +${copy.free} + +- [${copy.freeTitle}](${project.freePlan.source}) + +## ${copy.evidenceTitle} + +### ${copy.auditTitle} + +${copy.audit} + +- [${copy.labels.securityRepo}](${project.evidence.securityAudit.repository}) +- [${copy.labels.securityRepo} · Pages](${project.evidence.securityAudit.website}) + +### ${copy.noLogsTitle} + +${copy.noLogs} + +- [${copy.labels.noLogsRepo}](${project.evidence.noLogsVerification.repository}) +- [${copy.labels.noLogsRepo} · Pages](${project.evidence.noLogsVerification.website}) + +## ${copy.techTitle} + +${copy.tech} + +- [${copy.labels.sola}](${project.technology.solaArticle}) + +## ${copy.openSourceTitle} + +${copy.openSource} + +- [${copy.labels.openSource}](${project.technology.openSourcePlan}) + +## ${copy.verifyTitle} + +${copy.verify} + +\`\`\`sh +npm test +npm run verify:remote +\`\`\` + +- [Machine-readable project record](./metadata/project.json) +- [Citation metadata](./CITATION.cff) +- [Security policy](./SECURITY.md) +- [Rights and licence boundary](./RIGHTS.md) + +## ${copy.limitsTitle} + +${copy.limits} + +**${copy.labels.lastVerified}: ${project.lastVerified}.** +`; +} + +for (const locale of locales) { + const copy = JSON.parse(await readFile(path.join(root, `metadata/locales/${locale}.json`), 'utf8')); + await writeFile(path.join(root, filenames[locale]), readme(copy), 'utf8'); +} + +console.log(`Built ${locales.length} complete localized README files.`); diff --git a/scripts/build-site.mjs b/scripts/build-site.mjs new file mode 100644 index 0000000..440846c --- /dev/null +++ b/scripts/build-site.mjs @@ -0,0 +1,178 @@ +import { cp, mkdir, readFile, rm, writeFile } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const dist = path.join(root, 'dist'); +const project = JSON.parse(await readFile(path.join(root, 'metadata/project.json'), 'utf8')); +const locales = ['en', 'zh-Hant', 'zh-Hans', 'ja', 'ko', 'vi', 'th', 'ru']; +const languageNames = { + en: 'English', + 'zh-Hant': '繁體中文', + 'zh-Hans': '简体中文', + ja: '日本語', + ko: '한국어', + vi: 'Tiếng Việt', + th: 'ไทย', + ru: 'Русский', +}; + +const escapeHtml = (value) => String(value) + .replaceAll('&', '&') + .replaceAll('<', '<') + .replaceAll('>', '>') + .replaceAll('"', '"') + .replaceAll("'", '''); + +const routeFor = (locale) => locale === 'en' ? '/' : `/${locale}/`; +const urlFor = (locale) => `${project.pagesBaseUrl}${routeFor(locale)}`; + +function link(url, label, className = '') { + return `${escapeHtml(label)}`; +} + +function page(copy, locale) { + const canonical = urlFor(locale); + const alternates = locales + .map((code) => ``) + .join('\n '); + const languageNav = locales + .map((code) => link(urlFor(code), languageNames[code], code === locale ? 'active' : '')) + .join(''); + const platformLinks = project.platforms + .map(({ name, url }) => `
  • ${link(url, name)}
  • `) + .join(''); + const graph = { + '@context': 'https://schema.org', + '@graph': [ + { + '@type': 'WebSite', + '@id': `${project.pagesBaseUrl}/#website`, + url: `${project.pagesBaseUrl}/`, + name: 'SingLinkVPN Official Public Project', + alternateName: project.alternateNames, + inLanguage: locales.map((code) => JSON.parse(localeCopies.get(code)).htmlLang), + }, + { + '@type': 'WebPage', + '@id': `${canonical}#webpage`, + url: canonical, + name: copy.title, + description: copy.description, + isPartOf: { '@id': `${project.pagesBaseUrl}/#website` }, + inLanguage: copy.htmlLang, + dateModified: project.lastVerified, + }, + { + '@type': 'SoftwareApplication', + '@id': `${project.officialWebsite}#software`, + name: project.name, + alternateName: project.alternateNames, + url: project.officialWebsite, + applicationCategory: 'SecurityApplication', + operatingSystem: project.platforms.map(({ name }) => name).join(', '), + sameAs: [ + project.repository, + project.newsCenter, + project.evidence.securityAudit.repository, + project.evidence.noLogsVerification.repository, + ], + }, + ], + }; + + return ` + + + + + ${escapeHtml(copy.title)} + + + + ${alternates} + + + + + + + + + + + + + + + + + +
    + ${link(project.officialWebsite, 'SingLinkVPN', 'brand')} + +
    +
    +
    +
    ${escapeHtml(project.repositoryRole)}
    +

    ${escapeHtml(copy.h1)}

    +

    ${escapeHtml(copy.hero)}

    +
    + ${link(project.officialWebsite, copy.labels.officialWebsite, 'button')} + ${link(project.downloadCenter, copy.labels.downloadCenter, 'button secondary')} +
    +
    + ${escapeHtml(copy.h1)} +
    +

    ${escapeHtml(copy.aboutTitle)}

    ${escapeHtml(copy.about)}

    ${link(project.newsCenter, copy.labels.newsCenter)} · ${link(project.changelog, copy.labels.changelog)} · ${link(project.support, copy.labels.support)}

    +

    ${escapeHtml(copy.downloadsTitle)}

    ${escapeHtml(copy.downloads)}

      ${platformLinks}
    +

    ${escapeHtml(copy.freeTitle)}

    ${escapeHtml(copy.free)}

    ${link(project.freePlan.source, copy.freeTitle)}

    +

    ${escapeHtml(copy.auditTitle)}

    ${escapeHtml(copy.audit)}

    ${link(project.evidence.securityAudit.repository, copy.labels.securityRepo)}

    +

    ${escapeHtml(copy.noLogsTitle)}

    ${escapeHtml(copy.noLogs)}

    ${link(project.evidence.noLogsVerification.repository, copy.labels.noLogsRepo)}

    +

    ${escapeHtml(copy.techTitle)}

    ${escapeHtml(copy.tech)}

    ${link(project.technology.solaArticle, copy.labels.sola)}

    +

    ${escapeHtml(copy.openSourceTitle)}

    ${escapeHtml(copy.openSource)}

    ${link(project.technology.openSourcePlan, copy.labels.openSource)}

    +
    + +
    +
    + +
    + +`; +} + +await rm(dist, { recursive: true, force: true }); +await mkdir(dist, { recursive: true }); + +const localeCopies = new Map(); +for (const locale of locales) { + localeCopies.set(locale, await readFile(path.join(root, `metadata/locales/${locale}.json`), 'utf8')); +} + +for (const locale of locales) { + const copy = JSON.parse(localeCopies.get(locale)); + const target = locale === 'en' ? dist : path.join(dist, locale); + await mkdir(target, { recursive: true }); + await writeFile(path.join(target, 'index.html'), page(copy, locale), 'utf8'); +} + +await mkdir(path.join(dist, 'assets'), { recursive: true }); +await mkdir(path.join(dist, 'metadata'), { recursive: true }); +await cp(path.join(root, 'assets/singlinkvpn-public-project.png'), path.join(dist, 'assets/singlinkvpn-public-project.png')); +await cp(path.join(root, 'assets/singlinkvpn-public-project.svg'), path.join(dist, 'assets/singlinkvpn-public-project.svg')); +await cp(path.join(root, 'metadata/project.json'), path.join(dist, 'metadata/project.json')); +await cp(path.join(root, 'metadata/project.schema.json'), path.join(dist, 'metadata/project.schema.json')); +await cp(path.join(root, 'llms.txt'), path.join(dist, 'llms.txt')); +await writeFile(path.join(dist, '.nojekyll'), '', 'utf8'); + +const sitemap = ` + +${locales.map((locale) => ` ${urlFor(locale)}${project.lastVerified}`).join('\n')} +\n`; +await writeFile(path.join(dist, 'sitemap.xml'), sitemap, 'utf8'); +await writeFile(path.join(dist, 'robots.txt'), `User-agent: *\nAllow: /\n\nUser-agent: OAI-SearchBot\nAllow: /\n\nSitemap: ${project.pagesBaseUrl}/sitemap.xml\n`, 'utf8'); + +console.log(`Built ${locales.length} localized Pages routes in dist/.`); diff --git a/scripts/verify-remote-links.mjs b/scripts/verify-remote-links.mjs new file mode 100644 index 0000000..f1876ed --- /dev/null +++ b/scripts/verify-remote-links.mjs @@ -0,0 +1,52 @@ +import { readFile } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const project = JSON.parse(await readFile(path.join(root, 'metadata/project.json'), 'utf8')); +const urls = new Set([ + project.officialWebsite, + project.newsCenter, + project.downloadCenter, + project.changelog, + project.freePlan.source, + project.support, + ...project.platforms.map(({ url }) => url), + project.evidence.securityAudit.repository, + project.evidence.securityAudit.website, + project.evidence.noLogsVerification.repository, + project.evidence.noLogsVerification.website, + project.evidence.umbrellaIndex, + project.technology.solaArticle, + project.technology.openSourcePlan, +]); + +const failures = []; +for (const url of urls) { + let finalError; + for (let attempt = 1; attempt <= 3; attempt += 1) { + try { + const response = await fetch(url, { + redirect: 'follow', + signal: AbortSignal.timeout(30_000), + headers: { 'user-agent': 'SingLinkVPN-public-project-link-check/1.0' }, + }); + console.log(`${response.status}\t${response.url}\t${url}`); + await response.body?.cancel(); + if (!response.ok) finalError = `${response.status} ${url}`; + else finalError = undefined; + break; + } catch (error) { + finalError = `${error.name}: ${url}`; + console.error(`RETRY ${attempt}/3\t${url}\t${error.message}`); + } + } + if (finalError) failures.push(finalError); +} + +if (failures.length) { + console.error(`\n${failures.length} remote link checks failed:\n${failures.join('\n')}`); + process.exit(1); +} + +console.log(`Verified ${urls.size} remote source routes.`); diff --git a/test/project.test.mjs b/test/project.test.mjs new file mode 100644 index 0000000..158bff2 --- /dev/null +++ b/test/project.test.mjs @@ -0,0 +1,52 @@ +import assert from 'node:assert/strict'; +import { readFile } from 'node:fs/promises'; +import path from 'node:path'; +import test from 'node:test'; +import { fileURLToPath } from 'node:url'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const locales = ['en', 'zh-Hant', 'zh-Hans', 'ja', 'ko', 'vi', 'th', 'ru']; +const readmeNames = { en: 'README.md', 'zh-Hant': 'README.zh-Hant.md', 'zh-Hans': 'README.zh-Hans.md', ja: 'README.ja.md', ko: 'README.ko.md', vi: 'README.vi.md', th: 'README.th.md', ru: 'README.ru.md' }; +const requiredCopy = ['htmlLang', 'title', 'description', 'h1', 'hero', 'aboutTitle', 'about', 'downloadsTitle', 'downloads', 'freeTitle', 'free', 'evidenceTitle', 'auditTitle', 'audit', 'noLogsTitle', 'noLogs', 'techTitle', 'tech', 'openSourceTitle', 'openSource', 'verifyTitle', 'verify', 'limitsTitle', 'limits', 'labels']; + +test('project record contains stable, scoped facts', async () => { + const project = JSON.parse(await readFile(path.join(root, 'metadata/project.json'), 'utf8')); + assert.equal(project.freePlan.mobileDailyMb, 200); + assert.equal(project.freePlan.desktopDailyMb, 500); + assert.equal(project.freePlan.eligibleDesktopPromotionDailyMb, 1000); + assert.equal(project.platforms.length, 6); + const serialized = JSON.stringify(project); + assert.doesNotMatch(serialized, /localhost|127\.0\.0\.1|download\.singlinkvpn\.com|sg\.singlinkvpn\.com/); + assert.match(project.evidence.securityAudit.result, /100\/100/); + assert.match(project.evidence.noLogsVerification.result, /scope and reference date/); +}); + +test('all locale records are complete and distinct', async () => { + const titles = new Set(); + for (const locale of locales) { + const copy = JSON.parse(await readFile(path.join(root, `metadata/locales/${locale}.json`), 'utf8')); + for (const key of requiredCopy) assert.ok(copy[key], `${locale}.${key}`); + assert.ok(copy.title.length >= 30, `${locale} title is descriptive`); + assert.ok(copy.description.length >= 60, `${locale} description is descriptive`); + titles.add(copy.title); + } + assert.equal(titles.size, locales.length, 'titles must be localized'); +}); + +test('all generated READMEs preserve evidence and reject stale claims', async () => { + for (const locale of locales) { + const markdown = await readFile(path.join(root, readmeNames[locale]), 'utf8'); + assert.ok(markdown.includes('singlinkvpn-security-audit')); + assert.ok(markdown.includes('singlinkvpn-no-logs-report')); + assert.ok(markdown.includes('metadata/project.json')); + assert.ok(markdown.includes('npm run verify:remote')); + assert.doesNotMatch(markdown, /sg\.singlinkvpn\.com|download\.singlinkvpn\.com|unlimited bandwidth|300%|2000Mbps/i); + } +}); + +test('rights boundary is explicit', async () => { + const rights = await readFile(path.join(root, 'RIGHTS.md'), 'utf8'); + assert.match(rights, /proprietary client applications/); + assert.match(rights, /third-party audit reports/); + assert.match(rights, /does not automatically apply/i); +});