website: downloads page (#7728)

* website: downloads page

* bigger headings

* translations

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
This commit is contained in:
Evgeny
2026-10-15 22:10:59 +01:00
committed by GitHub
co-authored by Evgeny @ SimpleX Chat
parent 41f0c429b3
commit 5dfe7c1f0e
38 changed files with 793 additions and 68 deletions
@@ -50,7 +50,7 @@ Other limitations of the desktop app:
- you cannot send voice messages.
- there is no support for calls yet.
You can download the desktop app for Linux and Mac via [downloads page](../docs/DOWNLOADS.md). Windows version will be available soon.
You can download the desktop app for Linux and Mac via [downloads page](https://simplex.chat/downloads/). Windows version will be available soon.
## Group directory service and other group improvements
@@ -40,7 +40,7 @@ This is only possible when both devices are connected to the same local network.
**On desktop**
If you don't have desktop app installed yet, [download it](../docs/DOWNLOADS.md) and create any chat profile - you don't need to use it, and when you create it there are no server requests sent and no accounts are created. Think about it as about user profile on your computer.
If you don't have desktop app installed yet, [download it](https://simplex.chat/downloads/) and create any chat profile - you don't need to use it, and when you create it there are no server requests sent and no accounts are created. Think about it as about user profile on your computer.
Then in desktop app settings choose *Link a mobile* - it will show a QR code.
+2 -1
View File
@@ -1,11 +1,12 @@
---
title: Download SimpleX apps
permalink: /downloads/index.html
revision: 09.09.2024
---
# Download SimpleX apps
Download the app for your platform: https://simplex.chat/downloads/
You can get the latest beta releases from [GitHub](https://github.com/simplex-chat/simplex-chat/releases).
If you cannot access GitHub, you can download SimpleX Chat apps from our mirror at [git.simplex.chat](https://git.simplex.chat/simplex-chat/simplex-chat/releases)
+1 -1
View File
@@ -49,6 +49,6 @@ This is a part-time remote contract. You must be in UTC +/- 8 hours timezone.
## How to join the team
To apply, please [install SimpleX Chat app](./DOWNLOADS.md) and send your achievements to this [SimpleX address](https://smp16.simplex.im/a#OGL3qf7utOrUERFoFOROgdQaAkj_znzoeACNKDAsFNA).
To apply, please [install SimpleX Chat app](https://simplex.chat/downloads/) and send your achievements to this [SimpleX address](https://smp16.simplex.im/a#OGL3qf7utOrUERFoFOROgdQaAkj_znzoeACNKDAsFNA).
**We do NOT review CVs at the initial stage, please only send the links to your achievements**.
+31
View File
@@ -172,6 +172,17 @@ fs.readdir(translationsDirectoryPath, (err, files) => {
const translations = require("./translations.json")
const translatedPages = {
"": "src/index.html",
why: "src/why.html",
downloads: "src/_includes/downloads_hero.html",
}
const translatedPageKeys = Object.fromEntries(Object.entries(translatedPages).map(([route, file]) => {
const template = fs.readFileSync(path.resolve(__dirname, file), "utf8")
return [route, [...new Set(Array.from(template.matchAll(/["']([\w-]+)["']\s*\|\s*i18n/g), (match) => match[1]))]]
}))
const outputDir = '_site'
module.exports = function (ty) {
@@ -402,6 +413,12 @@ module.exports = function (ty) {
return strings[locale] ?? strings.en ?? key
})
ty.addFilter("translated", (lang, url) => {
const [first, second] = url.split("/").slice(1)
const keys = translatedPageKeys[supportedLangs.includes(first) ? second : first]
return !keys || keys.every((key) => translations[key]?.[lang] !== undefined)
})
ty.on("eleventy.before", () => unknownStrings.clear())
ty.on("eleventy.after", () => {
@@ -413,6 +430,20 @@ module.exports = function (ty) {
console.warn(`[i18n] Untranslated of ${allStrings.length} strings, English used: ${untranslated.map(([lang, count]) => `${lang} ${count}`).join(", ")}`)
}
if (unknownStrings.size > 0) console.warn(`[i18n] Missing in en.json: ${Array.from(unknownStrings).join(", ")}`)
const hiddenTranslations = supportedLangs.filter((lang) => lang !== "en").sort()
.flatMap((lang) => Object.entries(translatedPageKeys).map(([route, keys]) =>
({ lang, page: route || "home", keys, missing: keys.filter((key) => translations[key]?.[lang] === undefined) })))
.filter(({ keys, missing }) => missing.length > 0 && missing.length <= keys.length / 4)
if (hiddenTranslations.length > 0) {
const banner = "!".repeat(100)
console.warn([
banner,
"[i18n] LANGUAGES HIDDEN FROM PAGE LANGUAGE MENUS - translate the missing strings:",
...hiddenTranslations.map(({ lang, page, keys, missing }) =>
`[i18n] ${page} page, ${lang}: ${keys.length - missing.length}/${keys.length} strings, missing ${missing.join(", ")}`),
banner,
].join("\n"))
}
})
// Keeps the same directory structure.
+1 -1
View File
@@ -7,7 +7,7 @@ const repoDir = path.resolve(__dirname, "..")
const docs = {
from: "docs",
to: "src/docs",
exclude: [/^contributing\//, /^rfcs\//, /^dependencies\//, /^LINKS\.md$/, /^lang\/[^/]+\/README\.md$/],
exclude: [/^contributing\//, /^rfcs\//, /^dependencies\//, /^LINKS\.md$/, /^DOWNLOADS\.md$/, /^lang\/[^/]+\/README\.md$/],
}
const sources = [
+2 -1
View File
@@ -324,5 +324,6 @@
"navbar-token": "رمز",
"index-token-cta": "اعرف المزيد عن أرصدة المجتمع",
"navbar-old-site": "الموقع القديم",
"send-file": "إرسال ملف"
"send-file": "إرسال ملف",
"why-footer-link": "لماذا نبنيها"
}
+2 -1
View File
@@ -381,5 +381,6 @@
"send-file": "Odeslat soubor",
"links": "Odkazy",
"links-title": "Komunitní odkazy",
"links-all-languages": "Všechny jazyky"
"links-all-languages": "Všechny jazyky",
"why-film": "Podívejte se na 2minutový film na YouTube"
}
+24 -1
View File
@@ -383,5 +383,28 @@
"links-all-languages": "Alle Sprachen",
"docs-dropdown-16": "Ein Chat-Relais hosten",
"index-hero-invest": "Investieren Sie in SimpleX Chat.",
"index-hero-invest-cta": "Erfahren Sie mehr auf Wefunder."
"index-hero-invest-cta": "Erfahren Sie mehr auf Wefunder.",
"downloads-h1": "SimpleX Chat herunterladen",
"downloads-lead-1": "Das einzige Messaging-Netzwerk ohne jegliche Benutzerkennungen.",
"downloads-lead-2": "Kostenlos, quelloffen, dezentral.",
"downloads-lead-device": "Ihr Profil ist nur auf Ihrem Gerät.",
"downloads-lead-phone": "Ihr Profil ist nur auf Ihrem Smartphone.",
"downloads-for-mac": "Für macOS herunterladen",
"downloads-for-windows": "Für Windows herunterladen",
"downloads-for-linux": "Für Linux herunterladen",
"downloads-beta": "Beta",
"downloads-more": "Mehr",
"downloads-other-devices": "Andere Geräte",
"downloads-all-h2": "Alle Downloads",
"downloads-desktop": "Desktop",
"downloads-terminal": "Terminal",
"downloads-terminal-desc": "Kommandozeilen-App für Server, Bots und Entwickler.",
"downloads-terminal-guide": "Die Terminal-App verwenden",
"downloads-phone": "Smartphone",
"downloads-link-desktop": "Sie können Ihr Smartphone mit der Desktop-App verbinden, um dasselbe Profil zu nutzen, wenn beide im selben lokalen Netzwerk sind.",
"downloads-advanced-h2": "Für fortgeschrittene Nutzer",
"downloads-github": "Alle Releases auf GitHub",
"downloads-mirror": "Spiegel: git.simplex.chat",
"downloads-fdroid-repo": "F-Droid-Repository",
"why-film": "Sehen Sie sich den 2-minütigen Film auf YouTube an"
}
+24 -2
View File
@@ -337,7 +337,7 @@
"why-p7": "The oldest human freedom &mdash; to speak to another person without being watched &mdash; built on infrastructure that cannot betray it.",
"why-p8": "Because we destroyed the power to know who you are. So that <em>your</em> power can never be taken.",
"why-tagline": "Be free in your network.",
"why-film": "Watch the film",
"why-film": "Watch 2-min film on YouTube",
"why-footer-link": "Why we are building it",
"send-file": "Send file",
"file-desc": "Send files securely with end-to-end encryption — no accounts, no tracking.",
@@ -384,5 +384,27 @@
"file-proto-spec": "Read the XFTP protocol specification →",
"links": "Community",
"links-title": "Community Links",
"links-all-languages": "All languages"
"links-all-languages": "All languages",
"downloads-h1": "Get SimpleX Chat",
"downloads-lead-1": "The only messaging network without any user identifiers.",
"downloads-lead-2": "Free, open-source, decentralized.",
"downloads-lead-device": "Your profile is only on your device.",
"downloads-lead-phone": "Your profile is only on your phone.",
"downloads-for-mac": "Download for macOS",
"downloads-for-windows": "Download for Windows",
"downloads-for-linux": "Download for Linux",
"downloads-beta": "Beta",
"downloads-more": "More",
"downloads-other-devices": "Other devices",
"downloads-all-h2": "All downloads",
"downloads-phone": "Phone",
"downloads-desktop": "Desktop",
"downloads-terminal": "Terminal",
"downloads-terminal-desc": "Command-line app for servers, bots and developers.",
"downloads-terminal-guide": "Using the terminal app",
"downloads-link-desktop": "You can link your phone to the desktop app to use the same profile, when both are on the same local network.",
"downloads-advanced-h2": "For advanced users",
"downloads-github": "All releases on GitHub",
"downloads-mirror": "Mirror: git.simplex.chat",
"downloads-fdroid-repo": "F-Droid repository"
}
+24 -1
View File
@@ -383,5 +383,28 @@
"links-all-languages": "Todos los idiomas",
"docs-dropdown-16": "Alojar un servidor de chat",
"index-hero-invest": "Invierte en SimpleX Chat.",
"index-hero-invest-cta": "Descubre más en Wefunder."
"index-hero-invest-cta": "Descubre más en Wefunder.",
"downloads-h1": "Descarga SimpleX Chat",
"downloads-lead-1": "La única red de mensajería sin ningún identificador de usuario.",
"downloads-lead-2": "Gratis, de código abierto, descentralizada.",
"downloads-lead-device": "Tu perfil solo está en tu dispositivo.",
"downloads-lead-phone": "Tu perfil solo está en tu teléfono.",
"downloads-for-mac": "Descargar para macOS",
"downloads-for-windows": "Descargar para Windows",
"downloads-for-linux": "Descargar para Linux",
"downloads-beta": "Beta",
"downloads-more": "Más",
"downloads-other-devices": "Otros dispositivos",
"downloads-all-h2": "Todas las descargas",
"downloads-desktop": "Escritorio",
"downloads-terminal": "Terminal",
"downloads-terminal-desc": "Aplicación de línea de comandos para servidores, bots y desarrolladores.",
"downloads-terminal-guide": "Cómo usar la aplicación de terminal",
"downloads-phone": "Teléfono",
"downloads-link-desktop": "Puedes vincular tu teléfono a la aplicación de escritorio para usar el mismo perfil cuando ambos estén en la misma red local.",
"downloads-advanced-h2": "Para usuarios avanzados",
"downloads-github": "Todas las versiones en GitHub",
"downloads-mirror": "Espejo: git.simplex.chat",
"downloads-fdroid-repo": "Repositorio de F-Droid",
"why-film": "Mira el corto de 2 minutos en YouTube"
}
+2 -1
View File
@@ -383,5 +383,6 @@
"file-proto-spec": "Lire la spécification du protocole XFTP →",
"links": "Communauté",
"links-title": "Liens de la communauté",
"links-all-languages": "Toutes les langues"
"links-all-languages": "Toutes les langues",
"why-film": "Regardez le film de 2 minutes sur YouTube"
}
+2 -1
View File
@@ -383,5 +383,6 @@
"links-all-languages": "Összes nyelv",
"docs-dropdown-16": "Csevegési átjátszó üzemeltetése",
"index-hero-invest": "Fektessen be a SimpleX Chatbe.",
"index-hero-invest-cta": "Bővebben a Wefunderen."
"index-hero-invest-cta": "Bővebben a Wefunderen.",
"why-film": "Nézze meg a 2 perces filmet a YouTube-on"
}
+2 -1
View File
@@ -380,5 +380,6 @@
"file-proto-spec": "Baca spesifikasi protokol XFTP →",
"links": "Tautan",
"links-title": "Tautan Komunitas",
"links-all-languages": "Semua Bahasa"
"links-all-languages": "Semua Bahasa",
"why-film": "Tonton film 2 menit di YouTube"
}
+2 -1
View File
@@ -383,5 +383,6 @@
"links-all-languages": "Tutte le lingue",
"docs-dropdown-16": "Ospita un relay di chat",
"index-hero-invest": "Investi in SimpleX Chat.",
"index-hero-invest-cta": "Scopri di più su Wefunder."
"index-hero-invest-cta": "Scopri di più su Wefunder.",
"why-film": "Guarda il film di 2 minuti su YouTube"
}
+3 -1
View File
@@ -314,5 +314,7 @@
"how-secure-forward-secrecy": "前方秘匿性",
"how-secure-two-factor-key-exchange": "2ファクタ鍵交換",
"how-secure-post-quantum-hybrid-crypto": "ポスト量子ハイブリッド暗号",
"messengers-comparison-section-list-point-2": "否認可能性の対象には、クライアントとサーバー間の接続は含まれません。"
"messengers-comparison-section-list-point-2": "否認可能性の対象には、クライアントとサーバー間の接続は含まれません。",
"why-footer-link": "私たちがこれを作る理由",
"index-testflight-title": "TestFlight の SimpleX iOS ベータ版"
}
+2 -1
View File
@@ -378,5 +378,6 @@
"file-proto-h-4": "Niezależne routery danych",
"file-proto-p-4": "Gdy plik jest dzielony na fragmenty, jest on wysyłany przez routery sieciowe obsługiwane przez niezależne podmioty. Żaden operator nie może zobaczyć rzeczywistego rozmiaru ani nazwy pliku. Nawet jeśli router zostanie naruszony, może on zobaczyć tylko zaszyfrowane fragmenty o stałym rozmiarze. Fragmenty plików są przechowywane w pamięci podręcznej routerów sieciowych przez około 48 godzin.",
"file-proto-spec": "Zapoznaj się ze specyfikacją protokołu XFTP →",
"send-file": "Wyślij plik"
"send-file": "Wyślij plik",
"why-film": "Obejrzyj 2-minutowy film na YouTube"
}
+2 -1
View File
@@ -324,5 +324,6 @@
"messengers-comparison-section-list-point-6": "O acordo de chaves pós-quântico é 'esparso' &mdash; ele protege apenas algumas das etapas da catraca (ratchet).",
"navbar-old-site": "Site antigo",
"index-directory-users-group-title": "Grupos de usuários do SimpleX",
"send-file": "Enviar arquivo"
"send-file": "Enviar arquivo",
"why-footer-link": "Por que a estamos construindo"
}
+25 -1
View File
@@ -338,5 +338,29 @@
"file-desc": "Отправьте файлы безопасно со сквозным шифрованием — без учётных записей, без отслеживания.",
"file-noscript": "JavaScript необходим для передачи файлов.",
"file-e2e-note": "Сквозное шифрование — сервер никогда не видит ваш файл.",
"file-learn-more": "Узнайте больше о протоколе XFTP"
"file-learn-more": "Узнайте больше о протоколе XFTP",
"docs-dropdown-15": "Проверка и воспроизведение сборок",
"downloads-h1": "Скачать SimpleX Chat",
"downloads-lead-1": "Единственная сеть обмена сообщениями без идентификаторов пользователей.",
"downloads-lead-2": "Бесплатна, открыта, децентрализована.",
"downloads-lead-device": "Ваш профиль — только на устройстве.",
"downloads-lead-phone": "Ваш профиль — только на телефоне.",
"downloads-for-mac": "Скачать для macOS",
"downloads-for-windows": "Скачать для Windows",
"downloads-for-linux": "Скачать для Linux",
"downloads-beta": "Бета",
"downloads-more": "Ещё",
"downloads-other-devices": "Другие устройства",
"downloads-all-h2": "Все версии",
"downloads-desktop": "Компьютер",
"downloads-terminal": "Терминал",
"downloads-terminal-desc": "Консольное приложение для серверов, ботов и разработчиков.",
"downloads-terminal-guide": "Как пользоваться консольным приложением",
"downloads-phone": "Телефон",
"downloads-link-desktop": "Вы можете связать телефон с приложением для компьютера и использовать один профиль, когда оба устройства находятся в одной локальной сети.",
"downloads-advanced-h2": "Для опытных пользователей",
"downloads-github": "Все релизы на GitHub",
"downloads-mirror": "Зеркало: git.simplex.chat",
"downloads-fdroid-repo": "Репозиторий F-Droid",
"why-film": "Посмотрите 2-минутный фильм на YouTube"
}
+8 -1
View File
@@ -372,5 +372,12 @@
"index-roadmap-1": "2026",
"index-roadmap-2": "2027年6月",
"index-roadmap-3": "2027年12月",
"send-file": "发送文件"
"send-file": "发送文件",
"why-film": "在 YouTube 上观看 2 分钟短片",
"index-hero-countdown-lead": "SimpleX 域名上线",
"index-hero-countdown-done": "获取 SimpleX 域名",
"index-hero-own-part": "拥有它的一部分。",
"index-hero-invest": "投资 SimpleX Chat。",
"index-hero-downloads": "下载量",
"index-hero-monthly-users": "月活跃用户"
}
+1
View File
@@ -20,6 +20,7 @@ const htmlPages = new Set([
"blog",
"links",
"directory",
"downloads",
])
const removedTags = new Set([
-1
View File
@@ -29,7 +29,6 @@
"WEBRTC.md",
"XFTP-SERVER.md",
"CHAT-RELAY.md",
"DOWNLOADS.md",
"REPRODUCE.md",
"TRANSPARENCY.md",
"SECURITY.md",
+14 -38
View File
@@ -4,9 +4,7 @@
"label": "en",
"name": "English",
"flag": "/img/flags/en.svg",
"enabled": true,
"home": true,
"why": true
"enabled": true
},
{
"label": "ar",
@@ -15,32 +13,25 @@
"textColor": "white",
"iconBg": "green",
"enabled": true,
"home": true,
"rtl": true
},
{
"label": "cs",
"name": "Čeština",
"flag": "/img/flags/cs.svg",
"enabled": true,
"home": true,
"why": true
"enabled": true
},
{
"label": "de",
"name": "Deutsch",
"flag": "/img/flags/de.svg",
"enabled": true,
"home": true,
"why": true
"enabled": true
},
{
"label": "es",
"name": "Español",
"flag": "/img/flags/es.svg",
"enabled": true,
"home": true,
"why": true
"enabled": true
},
{
"label": "fi",
@@ -52,9 +43,7 @@
"label": "fr",
"name": "Français",
"flag": "/img/flags/fr.svg",
"enabled": true,
"home": true,
"why": true
"enabled": true
},
{
"label": "he",
@@ -67,32 +56,25 @@
"label": "hu",
"name": "Magyar",
"flag": "/img/flags/hu.svg",
"enabled": true,
"home": true,
"why": true
"enabled": true
},
{
"label": "id",
"name": "Indonesia",
"flag": "/img/flags/id.svg",
"enabled": true,
"home": true,
"why": true
"enabled": true
},
{
"label": "it",
"name": "Italiano",
"flag": "/img/flags/it.svg",
"enabled": true,
"home": true,
"why": true
"enabled": true
},
{
"label": "ja",
"name": "日本語",
"flag": "/img/flags/jp.svg",
"enabled": true,
"home": true
"enabled": true
},
{
"label": "nl",
@@ -104,16 +86,13 @@
"label": "pl",
"name": "Polski",
"flag": "/img/flags/pl.svg",
"enabled": true,
"home": true,
"why": true
"enabled": true
},
{
"label": "pt_BR",
"name": "Português",
"flag": "/img/flags/br.svg",
"enabled": true,
"home": true
"enabled": true
},
{
"label": "uk",
@@ -125,8 +104,7 @@
"label": "zh_Hans",
"name": "简体中文",
"flag": "/img/flags/cn.svg",
"enabled": true,
"why": true
"enabled": true
},
{
"label": "nb_NO",
@@ -138,9 +116,7 @@
"label": "ru",
"name": "Русский",
"flag": "/img/flags/ru.svg",
"enabled": true,
"home": true,
"why": true
"enabled": true
}
]
}
}
+53
View File
@@ -0,0 +1,53 @@
<section class="dl-hero">
<div class="dl-wrap dl-intro">
<h1>{{ "downloads-h1" | i18n({}, lang) }}</h1>
<p class="dl-lead"><span class="dl-lead-intro">{{ "downloads-lead-1" | i18n({}, lang) }}<br></span><span class="dl-nowrap">{{ "downloads-lead-2" | i18n({}, lang) }}</span><br class="dl-br-mobile"> <span class="dl-nowrap dl-lead-device">{{ "downloads-lead-device" | i18n({}, lang) }}</span><span class="dl-nowrap dl-lead-phone">{{ "downloads-lead-phone" | i18n({}, lang) }}</span></p>
</div>
<div class="dl-wrap dl-devices">
<div class="dl-device" data-device="desktop">
<div class="dl-shot dl-shot-desktop">
<img class="dark:hidden" src="/img/downloads/desktop-light.webp" alt="SimpleX Chat desktop app" width="1311" height="880">
<img class="hidden dark:block" src="/img/downloads/desktop-dark.webp" alt="SimpleX Chat desktop app" width="1311" height="880">
</div>
<a class="dl-primary dl-os dl-os-mac" href="{{ release }}simplex-desktop-macos-aarch64.dmg">{{ "downloads-for-mac" | i18n({}, lang) }}</a>
<a class="dl-primary dl-os dl-os-windows" href="{{ release }}simplex-desktop-windows-x86_64.msi">{{ "downloads-for-windows" | i18n({}, lang) }}</a>
<a class="dl-primary dl-os dl-os-linux" href="{{ release }}simplex-desktop-x86_64.AppImage">{{ "downloads-for-linux" | i18n({}, lang) }}</a>
<p class="dl-alt dl-os dl-os-mac">Apple Silicon · <a href="{{ release }}simplex-desktop-macos-x86_64.dmg">Intel</a> · <a href="#dl-all">{{ "downloads-more" | i18n({}, lang) }}</a></p>
<p class="dl-alt dl-os dl-os-windows">x86_64 · <a href="#dl-all">{{ "downloads-more" | i18n({}, lang) }}</a></p>
<p class="dl-alt dl-os dl-os-linux">AppImage x86_64 · <a href="https://flathub.org/apps/chat.simplex.simplex" target="_blank" rel="noopener">Flatpak</a> · <a href="#dl-all">{{ "downloads-more" | i18n({}, lang) }}</a></p>
</div>
<div class="dl-device" data-device="iphone">
<div class="dl-shot dl-shot-phone">
<img src="/img/crowdfunding/phone.png" alt="SimpleX Chat on iPhone" width="504" height="1020">
</div>
<a class="dl-badge" href="https://apps.apple.com/us/app/simplex-chat/id1605771084" target="_blank" rel="noopener"><img src="/img/new/apple_store.svg" alt="Download on the App Store"></a>
<p class="dl-alt">{{ "downloads-beta" | i18n({}, lang) }}: <a href="https://testflight.apple.com/join/DWuT2LQu" target="_blank" rel="noopener">TestFlight</a></p>
</div>
<div class="dl-device" data-device="android">
<div class="dl-shot dl-shot-phone">
<img class="dark:hidden" src="/img/downloads/android-light.webp" alt="SimpleX Chat on Android" width="440" height="965">
<img class="hidden dark:block" src="/img/downloads/android-dark.webp" alt="SimpleX Chat on Android" width="440" height="965">
</div>
<a class="dl-badge" href="https://play.google.com/store/apps/details?id=chat.simplex.app" target="_blank" rel="noopener"><img src="/img/new/google_play.svg" alt="Get it on Google Play"></a>
<p class="dl-alt"><a href="{{ '' if lang == 'en' else '/' ~ lang }}/fdroid">F-Droid</a> · APK <a href="{{ release }}simplex-aarch64.apk">aarch64</a> · <a href="{{ release }}simplex-armv7a.apk">armv7</a></p>
</div>
</div>
<p class="dl-wrap dl-other"><a href="#dl-all">{{ "downloads-other-devices" | i18n({}, lang) }}</a></p>
<div class="dl-wrap dl-proof">
<div class="dl-stat"><b>3M</b> <span>{{ "index-hero-downloads" | i18n({}, lang) }}</span></div>
<div class="dl-stat"><b>600K</b> <span>{{ "index-hero-monthly-users" | i18n({}, lang) }}</span></div>
<div class="dl-audits">
<a href="https://www.trailofbits.com/about" target="_blank" rel="noopener" title="{{ 'index-security-assessment-title' | i18n({}, lang) }}">
<img class="dark:hidden" src="/img/trail-of-bits-light.png" alt="Trail of Bits">
<img class="hidden dark:block" src="/img/design_3/publications/trail-of-bits.png" alt="Trail of Bits">
</a>
<a class="box-btn btn-1" href="/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html" title="{{ 'index-security-review-2022-title' | i18n({}, lang) }}">2022</a>
<a class="box-btn gold-gradient" href="/blog/20241014-simplex-network-v6-1-security-review-better-calls-user-experience.html" title="{{ 'index-security-review-2024-title' | i18n({}, lang) }}">2024</a>
<p>{{ "index-security-audits-label" | i18n({}, lang) | safe }}</p>
</div>
</div>
</section>
+2 -2
View File
@@ -162,7 +162,7 @@
</a>
<ul class="sub-menu">
{% if ("docs" in page.url) or ('downloads' in page.url) or ('security' in page.url) or ('reproduce' in page.url) or ('transparency' in page.url) or ('jobs' in page.url) or ('faq' in page.url) %}
{% if ("docs" in page.url) or ('security' in page.url) or ('reproduce' in page.url) or ('transparency' in page.url) or ('jobs' in page.url) or ('faq' in page.url) %}
{% for supportedLang in supportedLangsForDoc %}
{% for language in languages.languages %}
{% if language.label == supportedLang %}
@@ -176,7 +176,7 @@
{% endfor %}
{% else %}
{% for language in languages.languages %}
{% if language.enabled and (language.home or (page.url != '/' and page.url != '/' + lang + '/')) and (language.why or ('why' not in page.url)) %}
{% if language.enabled and (language.label | translated(page.url)) %}
<li>
<a href="{% completeRoute {url: page.url, lang: language.label} %}">
<p>{{ language.name }}</p>
+1 -1
View File
@@ -41,7 +41,7 @@ active_blog: true
<section class="py-10 px-5 mt-[66px]" id="blog-list">
<div class="container">
<h1 class="text-[38px] text-center font-bold mb-2">Latest news</h1>
<h1 class="text-[38px] md:text-[45px] text-center font-bold mb-2">Latest news</h1>
<p class="text-right mb-9"><a class="text-primary-light dark:text-[#70F0F9] text-sm font-medium tracking-[0.03em]" href="/news">Open SimpleX Network News channel</a></p>
{% for blog in collections.blogs %}
+474
View File
@@ -0,0 +1,474 @@
.dl-page {
--dl-text: #000000;
--dl-muted: #3f484b;
--dl-heading: #023789;
--dl-link: #0053d0;
--dl-card: #ffffff;
--dl-card-border: #d6e8fb;
--dl-hero-bg: #c4e2fc;
--dl-page-bg: #f3faff;
--dl-hero-image: url("/img/design_3/cover-light.webp");
color: var(--dl-text);
font-family: "Manrope", sans-serif;
}
.dark .dl-page {
--dl-text: #ffffff;
--dl-muted: #c4d0ea;
--dl-heading: #ffffff;
--dl-link: #70f0f9;
--dl-card: #071c46;
--dl-card-border: rgba(255, 255, 255, 0.1);
--dl-hero-bg: #02071d;
--dl-page-bg: #000832;
--dl-hero-image: url("/img/design_3/cover.webp");
}
.dl-page a {
color: var(--dl-link);
}
.dl-page a:hover {
text-decoration: underline;
text-underline-offset: 3px;
}
.dl-wrap {
max-width: 1360px;
margin: 0 auto;
padding-left: 56px;
padding-right: 56px;
}
.dl-hero {
--dl-bg-w: min(166.667vw, 296.296vh);
--dl-bg-h: min(93.75vw, 166.667vh);
--dl-pad: 56px;
--dl-h1: 60px;
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: space-between;
gap: var(--dl-pad);
min-height: min(100svh, 1080px);
--dl-crest: calc(132px + 1.5 * var(--dl-pad) + var(--dl-h1));
padding: calc(54px + var(--dl-pad)) 0 22px;
background-color: var(--dl-hero-bg);
background-image: var(--dl-hero-image);
background-size: var(--dl-bg-w) var(--dl-bg-h);
background-position: 50% calc(var(--dl-crest) - var(--dl-bg-h) * 0.2678);
background-repeat: no-repeat;
}
.dl-hero::after {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 46%;
background: linear-gradient(to bottom, transparent 0%, var(--dl-page-bg) 62%);
}
.dl-hero > * {
position: relative;
z-index: 1;
}
.dl-intro {
display: flex;
flex-direction: column;
align-items: center;
gap: 18px;
text-align: center;
}
.dl-intro h1 {
font-family: "GT-Walsheim", sans-serif;
font-weight: 700;
font-size: var(--dl-h1);
line-height: 1;
letter-spacing: -0.025em;
color: var(--dl-heading);
}
.dl-lead {
font-size: 20px;
line-height: 1.5;
color: var(--dl-heading);
}
.dl-nowrap {
white-space: nowrap;
}
.dl-br-mobile,
.dl-lead-phone,
.dl-page[data-device="iphone"] .dl-lead-device,
.dl-page[data-device="android"] .dl-lead-device {
display: none;
}
.dl-page[data-device="iphone"] .dl-lead-phone,
.dl-page[data-device="android"] .dl-lead-phone {
display: inline;
}
.dl-devices {
--dl-gap: clamp(28px, 4vw, 56px);
--dl-shot-h: min(calc((100vw - 112px - 2 * var(--dl-gap)) / 2.44), calc(clamp(728px, 100svh, 1080px) - 3 * var(--dl-pad) - var(--dl-h1) - 309px));
display: flex;
justify-content: center;
align-items: flex-start;
gap: var(--dl-gap);
max-width: none;
}
.dl-device {
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
text-align: center;
}
.dl-shot {
margin-bottom: 10px;
}
.dl-shot img {
vertical-align: top;
height: var(--dl-shot-h);
width: auto;
}
.dl-shot-desktop {
border-radius: 12px;
overflow: hidden;
box-shadow: 0 30px 70px rgba(2, 7, 29, 0.35);
border: 1px solid rgba(255, 255, 255, 0.2);
}
.dl-shot-phone {
filter: drop-shadow(0 24px 36px rgba(2, 7, 29, 0.4));
}
.dl-primary {
display: inline-flex;
align-items: center;
justify-content: center;
height: 56px;
padding: 0 30px;
border-radius: 999px;
background: linear-gradient(90deg, #019bfe 0%, #2e3fa0 100%);
color: #ffffff !important;
font-size: 18px;
font-weight: 600;
text-decoration: none !important;
}
.dl-primary:hover {
filter: brightness(1.08);
}
.dl-badge img {
height: 48px;
width: auto;
border: 1px solid #4f4f4f;
border-radius: 9px;
}
.dl-alt {
font-size: 15px;
color: var(--dl-muted);
}
.dl-os {
display: none;
}
.dl-page[data-os="mac"] a.dl-os-mac,
.dl-page[data-os="windows"] a.dl-os-windows,
.dl-page[data-os="linux"] a.dl-os-linux {
display: inline-flex;
}
.dl-page[data-os="mac"] p.dl-os-mac,
.dl-page[data-os="windows"] p.dl-os-windows,
.dl-page[data-os="linux"] p.dl-os-linux {
display: block;
}
.dl-other {
display: none;
margin-top: 28px;
text-align: center;
font-size: 15px;
font-weight: 600;
}
.dl-proof {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
gap: 24px 56px;
}
.dl-stat {
display: flex;
align-items: baseline;
gap: 12px;
}
.dl-stat b {
font-size: 36px;
line-height: 1.1;
font-weight: 700;
color: var(--dl-heading);
}
.dl-stat span {
font-size: 17px;
color: var(--dl-muted);
}
.dl-audits {
display: flex;
align-items: center;
gap: 12px;
}
.dl-audits img {
height: 36px;
width: auto;
}
.dl-audits .box-btn {
color: #000000;
text-decoration: none;
}
.dl-audits p {
font-size: 14px;
font-weight: 300;
line-height: 1.2;
text-align: start;
}
.dl-section {
padding-top: 112px;
}
.dl-section h2 {
margin-bottom: 36px;
font-family: "GT-Walsheim", sans-serif;
font-weight: 500;
font-size: 48px;
letter-spacing: -0.02em;
color: var(--dl-heading);
}
.dl-cards {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 24px;
}
.dl-page[data-device="iphone"] .dl-card-phone,
.dl-page[data-device="android"] .dl-card-phone {
order: -1;
}
.dl-cards article {
display: flex;
flex-direction: column;
gap: 16px;
padding: 30px;
border-radius: 20px;
background: var(--dl-card);
border: 1px solid var(--dl-card-border);
}
.dl-cards h3 {
font-family: "GT-Walsheim", sans-serif;
font-weight: 500;
font-size: 26px;
color: var(--dl-heading);
}
.dl-cards ul {
display: flex;
flex-direction: column;
gap: 10px;
list-style: none;
padding: 0;
font-size: 16px;
}
.dl-cards p {
font-size: 15px;
line-height: 1.5;
color: var(--dl-muted);
}
.dl-advanced {
padding-bottom: 96px;
}
.dl-advanced h2 {
font-size: 28px;
margin-bottom: 18px;
}
.dl-advanced p {
display: flex;
flex-wrap: wrap;
gap: 12px 28px;
font-size: 17px;
}
@media (max-height: 1023px) {
.dl-hero {
--dl-h1: 48px;
}
}
@media (max-width: 1015px) and (orientation: portrait) {
.dl-hero {
--dl-bg-w: min(516.13vw, 296.296vh);
--dl-bg-h: min(290.323vw, 166.667vh);
}
}
@media (max-width: 1015px) {
.dl-wrap {
padding-left: 24px;
padding-right: 24px;
}
.dl-hero {
--dl-crest: 232px;
display: block;
min-height: 0;
padding: 100px 0 48px;
}
.dl-intro h1 {
font-size: min(46px, 9.6vw);
}
.dl-lead {
font-size: 16px;
}
.dl-devices {
--dl-shot-h: 440px;
flex-direction: column;
align-items: center;
margin-top: 56px;
gap: 48px;
}
.dl-page[data-device] .dl-device:not(.dl-detected) {
display: none;
}
.dl-br-mobile {
display: inline;
}
.dl-lead-intro {
display: none;
}
html:not(.dark) .dl-hero .dl-alt,
html:not(.dark) .dl-hero .dl-alt a {
color: #ffffff;
text-shadow: 0 1px 4px rgba(2, 7, 29, 0.7);
}
.dl-shot {
order: 1;
margin: 20px 0 0;
}
.dl-shot-desktop {
width: 100%;
max-width: 560px;
}
.dl-shot-desktop img {
width: 100%;
height: auto;
}
.dl-shot-phone {
width: min(80vw, 360px);
aspect-ratio: 20 / 21;
overflow: hidden;
filter: none;
-webkit-mask-image: linear-gradient(to bottom, #000 60%, transparent 100%);
mask-image: linear-gradient(to bottom, #000 60%, transparent 100%);
}
.dl-shot-phone img {
width: 100%;
height: auto;
}
.dl-badge img {
height: 54px;
}
.dl-proof {
gap: 20px 36px;
margin-top: 36px;
}
.dl-stat {
flex-direction: column;
align-items: center;
gap: 0;
}
.dl-stat b {
font-size: 28px;
line-height: 1.5;
}
.dl-stat span {
font-size: 14px;
}
.dl-other {
display: block;
}
.dl-section {
padding-top: 64px;
}
.dl-section h2 {
font-size: 32px;
margin-bottom: 24px;
}
.dl-cards {
grid-template-columns: minmax(0, 1fr);
}
.dl-cards article {
padding: 22px;
}
.dl-advanced {
padding-bottom: 64px;
}
.dl-advanced p {
flex-direction: column;
}
}
+1 -1
View File
@@ -264,7 +264,7 @@ active_directory: true
<section class="py-10 px-5 mt-[66px] dark:text-white">
<div class="container">
<h1 class="text-[38px] text-center font-bold text-active-blue mb-8">SimpleX Directory</h1>
<h1 class="text-[38px] md:text-[45px] text-center font-bold text-active-blue mb-8">SimpleX Directory</h1>
<p>Welcome to the selected users' communities that you can join via <a href="/downloads">SimpleX Chat
app</a>.</p>
<p>SimpleX Directory is also available as a <a href="https://smp4.simplex.im/a#lXUjJW5vHYQzoLYgmi8GbxkGP41_kjefFvBrdwg-0Ok" target="_blank" rel="noopener">SimpleX chat bot</a>.</p>
+74
View File
@@ -0,0 +1,74 @@
---
layout: layouts/main.html
title: "Download SimpleX Chat for iPhone, Android, Mac, Windows and Linux"
description: "Get SimpleX Chat – the only messaging network without any user identifiers. Free and open-source apps for iPhone, Android, Mac, Windows and Linux."
templateEngineOverride: njk
noGlossary: true
---
{% set lang = page.url | getlang %}
{% set release = "https://github.com/simplex-chat/simplex-chat/releases/latest/download/" %}
<link rel="stylesheet" href="/css/downloads.css">
<div class="dl-page" id="dl-page" data-os="mac">
{% include "downloads_hero.html" %}
<section class="dl-wrap dl-section" id="dl-all">
<h2>{{ "downloads-all-h2" | i18n({}, lang) }}</h2>
<div class="dl-cards">
<article>
<h3>{{ "downloads-desktop" | i18n({}, lang) }}</h3>
<ul>
<li>Windows: <a href="{{ release }}simplex-desktop-windows-x86_64.msi">x86_64</a></li>
<li>macOS: <a href="{{ release }}simplex-desktop-macos-aarch64.dmg">Apple Silicon</a> · <a href="{{ release }}simplex-desktop-macos-x86_64.dmg">Intel</a></li>
<li>Linux AppImage: <a href="{{ release }}simplex-desktop-x86_64.AppImage">x86_64</a> · <a href="{{ release }}simplex-desktop-aarch64.AppImage">aarch64</a></li>
<li>Linux: <a href="https://flathub.org/apps/chat.simplex.simplex" target="_blank" rel="noopener">Flatpak</a></li>
<li>Ubuntu 22.04, Debian: <a href="{{ release }}simplex-desktop-ubuntu-22_04-x86_64.deb">x86_64</a> · <a href="{{ release }}simplex-desktop-ubuntu-22_04-aarch64.deb">aarch64</a></li>
<li>Ubuntu 24.04: <a href="{{ release }}simplex-desktop-ubuntu-24_04-x86_64.deb">x86_64</a> · <a href="{{ release }}simplex-desktop-ubuntu-24_04-aarch64.deb">aarch64</a></li>
</ul>
<p>{{ "downloads-link-desktop" | i18n({}, lang) }}</p>
</article>
<article>
<h3>{{ "downloads-terminal" | i18n({}, lang) }}</h3>
<ul>
<li>Windows: <a href="{{ release }}simplex-chat-windows-x86-64">x86_64</a></li>
<li>macOS: <a href="{{ release }}simplex-chat-macos-aarch64">Apple Silicon</a> · <a href="{{ release }}simplex-chat-macos-x86-64">Intel</a></li>
<li>Ubuntu 22.04: <a href="{{ release }}simplex-chat-ubuntu-22_04-x86_64">x86_64</a> · <a href="{{ release }}simplex-chat-ubuntu-22_04-aarch64">aarch64</a></li>
<li>Ubuntu 24.04: <a href="{{ release }}simplex-chat-ubuntu-24_04-x86_64">x86_64</a> · <a href="{{ release }}simplex-chat-ubuntu-24_04-aarch64">aarch64</a></li>
</ul>
<p>{{ "downloads-terminal-desc" | i18n({}, lang) }} <a href="/docs/cli.html">{{ "downloads-terminal-guide" | i18n({}, lang) }}</a></p>
</article>
<article class="dl-card-phone">
<h3>{{ "downloads-phone" | i18n({}, lang) }}</h3>
<ul>
<li>iOS: <a href="https://apps.apple.com/us/app/simplex-chat/id1605771084" target="_blank" rel="noopener">App Store</a> · <a href="https://testflight.apple.com/join/DWuT2LQu" target="_blank" rel="noopener">TestFlight</a></li>
<li>Android: <a href="https://play.google.com/store/apps/details?id=chat.simplex.app" target="_blank" rel="noopener">Google Play</a> · <a href="{{ '' if lang == 'en' else '/' ~ lang }}/fdroid">F-Droid</a></li>
<li>Android APK: <a href="{{ release }}simplex-aarch64.apk">aarch64</a> · <a href="{{ release }}simplex-armv7a.apk">armv7</a></li>
</ul>
</article>
</div>
</section>
<section class="dl-wrap dl-section dl-advanced">
<h2>{{ "downloads-advanced-h2" | i18n({}, lang) }}</h2>
<p>
<a href="https://github.com/simplex-chat/simplex-chat/releases" target="_blank" rel="noopener">{{ "downloads-github" | i18n({}, lang) }}</a>
<a href="https://git.simplex.chat/simplex-chat/simplex-chat/releases" target="_blank" rel="noopener">{{ "downloads-mirror" | i18n({}, lang) }}</a>
<a href="/reproduce/">{{ "docs-dropdown-15" | i18n({}, lang) }}</a>
<a href="{{ '' if lang == 'en' else '/' ~ lang }}/fdroid">{{ "downloads-fdroid-repo" | i18n({}, lang) }}</a>
</p>
</section>
</div>
<script>
(function () {
var ua = navigator.userAgent;
var platform = (navigator.userAgentData && navigator.userAgentData.platform) || navigator.platform || "";
var page = document.getElementById("dl-page");
var device = "desktop";
if (/Android|CrOS/i.test(ua)) device = "android";
else if (/iPhone|iPad|iPod/i.test(ua) || (/Mac/i.test(platform) && navigator.maxTouchPoints > 1)) device = "iphone";
else page.dataset.os = /Win/i.test(platform) ? "windows" : /Linux|X11/i.test(platform) ? "linux" : "mac";
page.dataset.device = device;
page.querySelector('.dl-device[data-device="' + device + '"]').classList.add("dl-detected");
})();
</script>
Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

+1 -1
View File
@@ -160,7 +160,7 @@ active_home: true
</div>
<div class="socials">
<a href="/downloads" class="desktop-app-btn hidden" title="{{ 'index-hero-download-desktop-btn-title' | i18n({}, lang) }}">
<a href="{{ '' if lang == 'en' or not (lang | translated('/downloads/')) else '/' ~ lang }}/downloads" class="desktop-app-btn hidden" title="{{ 'index-hero-download-desktop-btn-title' | i18n({}, lang) }}">
<div class="btn-content">
<div>
<img class="no-border" src="/img/design_3/socials/linux.png">
+1 -1
View File
@@ -233,7 +233,7 @@ active_links: true
<section class="py-10 px-5 mt-[66px]" id="links-page">
<div class="container">
<h1 class="text-[38px] text-center font-bold mb-8">{{ "links-title" | i18n({}, lang) | safe }}</h1>
<h1 class="text-[38px] md:text-[45px] text-center font-bold mb-8">{{ "links-title" | i18n({}, lang) | safe }}</h1>
<div id="links-filters">
<select id="filter-language">
+9 -3
View File
@@ -47,9 +47,15 @@ noGlossary: true
{{ "why-tagline" | i18n({}, lang) | safe }}
</p>
<p class="mt-10 md:mt-14 text-[18px] md:text-[20px] lg:text-[22px] font-medium">
<a class="underline underline-offset-4 text-primary-light dark:text-primary-dark" href="https://www.youtube.com/watch?v=k-GhLNZm8G0" target="_blank" rel="noopener">{{ "why-film" | i18n({}, lang) | safe }}</a>
</p>
<a class="block mt-10 md:mt-14" href="https://www.youtube.com/watch?v=k-GhLNZm8G0" target="_blank" rel="noopener">
<div class="relative">
<img class="w-full rounded-2xl" src="/img/why/why-video.jpg" alt="" loading="lazy" width="960" height="540">
<div class="absolute inset-0 m-auto flex items-center justify-center w-14 h-14 md:w-[72px] md:h-[72px] rounded-full bg-white/80" aria-hidden="true">
<svg class="w-[38px] h-[38px] md:w-12 md:h-12 fill-[#02071d]" viewBox="0 0 24 24"><path d="M8 5v14l11-7z"></path></svg>
</div>
</div>
<p class="mt-4 text-[18px] md:text-[20px] lg:text-[22px] font-medium underline underline-offset-4 text-primary-light dark:text-primary-dark">{{ "why-film" | i18n({}, lang) | safe }}</p>
</a>
</div>
</section>
+1
View File
@@ -38,6 +38,7 @@ for lang in "${langs[@]}"; do
cp src/invitation.html src/$lang
cp src/fdroid.html src/$lang
cp src/why.html src/$lang
cp src/downloads.html src/$lang
cp src/file.html src/$lang
echo "{\"lang\":\"$lang\"}" > src/$lang/$lang.json
echo "*" > src/$lang/.gitignore