diff --git a/README.md b/README.md index 0ccfa90a47..dd81cd4c52 100644 --- a/README.md +++ b/README.md @@ -71,53 +71,53 @@ 🌐 In 42+ languages - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + +
🇺🇸🇧🇷🇵🇹🇪🇸🇫🇷🇮🇹🇩🇪🇳🇱🇷🇺🇺🇦🇵🇱🇨🇿🇸🇰🇷🇴🇭🇺English (en)Português — Brasil (pt-BR)Português (pt)Español (es)Français (fr)Italiano (it)Deutsch (de)Nederlands (nl)Русский (ru)Українська (uk-UA)Polski (pl)Čeština (cs)Slovenčina (sk)Română (ro)Magyar (hu)
🇧🇬🇩🇰🇫🇮🇳🇴🇸🇪🇨🇳🇹🇼🇯🇵🇰🇷🇹🇭🇻🇳🇮🇩🇲🇾🇵🇭Български (bg)Dansk (da)Suomi (fi)Norsk (no)Svenska (sv)中文 — 简体 (zh-CN)中文 — 繁體 (zh-TW)日本語 (ja)한국어 (ko)ไทย (th)Tiếng Việt (vi)Bahasa Indonesia (id)Bahasa Melayu (ms)Filipino (phi)
🇮🇳🇮🇳🇮🇳🇮🇳🇮🇳🇮🇳🇧🇩🇵🇰🇮🇷🇸🇦🇮🇱🇹🇷🇦🇿🇹🇿हिन्दी (in)हिन्दी (hi)ગુજરાતી (gu)मराठी (mr)தமிழ் (ta)తెలుగు (te)বাংলা (bn)اردو (ur)فارسی (fa)العربية (ar)עברית (he)Türkçe (tr)Azərbaycan (az)Kiswahili (sw)
@@ -995,66 +995,56 @@ Compression: aggressive (~50%) → double your free quota · Cost: $0/mo ### 📘 Getting Started -| Document | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| [User Guide](docs/guides/USER_GUIDE.md) | Providers, combos, CLI integration, deployment | -| [Setup Guide](docs/guides/SETUP_GUIDE.md) | Full install methods, CLI tool configs, protocol setup, timeout tuning | -| [CLI Tools Guide](docs/reference/CLI-TOOLS.md) | Per-tool setup for Claude Code, Codex, Cursor, Cline, OpenClaw, Kilo, Copilot | -| [Remote Mode](docs/guides/REMOTE-MODE.md) | Drive a remote OmniRoute (VPS) from your laptop CLI via scoped access tokens | -| [Claude Code Config](docs/guides/CLAUDE-CODE-CONFIGURATION.md) | Point Claude Code at OmniRoute (local/remote) with `launch` + per-model profiles | -| [Quick Start](README.md#-quick-start) | 3-step install → connect → configure | +- **[User Guide](docs/guides/USER_GUIDE.md)** — Providers, combos, CLI integration, deployment +- **[Setup Guide](docs/guides/SETUP_GUIDE.md)** — Full install methods, CLI tool configs, protocol setup, timeout tuning +- **[CLI Tools Guide](docs/reference/CLI-TOOLS.md)** — Per-tool setup for Claude Code, Codex, Cursor, Cline, OpenClaw, Kilo, Copilot +- **[Remote Mode](docs/guides/REMOTE-MODE.md)** — Drive a remote OmniRoute (VPS) from your laptop CLI via scoped access tokens +- **[Claude Code Config](docs/guides/CLAUDE-CODE-CONFIGURATION.md)** — Point Claude Code at OmniRoute (local/remote) with `launch` + per-model profiles +- **[Quick Start](README.md#-quick-start)** — 3-step install → connect → configure ### 🔧 Operations & Deployment -| Document | Description | -| -------------------------------------------------------- | -------------------------------------------------------------- | -| [Docker Guide](docs/guides/DOCKER_GUIDE.md) | Docker run, Compose profiles, Caddy HTTPS, tunnels, image tags | -| [Podman Guide](contrib/podman/README.md) | Quadlet systemd integration, podman-compose, SELinux | -| [VM Deployment](docs/ops/VM_DEPLOYMENT_GUIDE.md) | Complete guide: VM + nginx + Cloudflare setup | -| [Fly.io Deployment](docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) | Deploy to Fly.io with persistent storage | -| [Termux Guide](docs/guides/TERMUX_GUIDE.md) | Run OmniRoute on Android via Termux | -| [PWA Guide](docs/guides/PWA_GUIDE.md) | Progressive Web App install, caching, architecture | -| [Uninstall Guide](docs/guides/UNINSTALL.md) | Clean removal for all install methods | -| [Environment Config](docs/reference/ENVIRONMENT.md) | Complete `.env` variables and references | +- **[Docker Guide](docs/guides/DOCKER_GUIDE.md)** — Docker run, Compose profiles, Caddy HTTPS, tunnels, image tags +- **[Podman Guide](contrib/podman/README.md)** — Quadlet systemd integration, podman-compose, SELinux +- **[VM Deployment](docs/ops/VM_DEPLOYMENT_GUIDE.md)** — Complete guide: VM + nginx + Cloudflare setup +- **[Fly.io Deployment](docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md)** — Deploy to Fly.io with persistent storage +- **[Termux Guide](docs/guides/TERMUX_GUIDE.md)** — Run OmniRoute on Android via Termux +- **[PWA Guide](docs/guides/PWA_GUIDE.md)** — Progressive Web App install, caching, architecture +- **[Uninstall Guide](docs/guides/UNINSTALL.md)** — Clean removal for all install methods +- **[Environment Config](docs/reference/ENVIRONMENT.md)** — Complete `.env` variables and references ### 🧠 Features & Architecture -| Document | Description | -| ---------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -| [Architecture](docs/architecture/ARCHITECTURE.md) | System architecture, data flow, and internals | -| [Compression Guide](docs/compression/COMPRESSION_GUIDE.md) | 7-option pipeline: off / lite / standard / aggressive / ultra / RTK / stacked | -| [RTK Compression](docs/compression/RTK_COMPRESSION.md) | Command-output compression, filters, trust, verify, raw-output recovery | -| [Compression Engines](docs/compression/COMPRESSION_ENGINES.md) | Caveman, RTK, stacked pipelines, dashboard/API/MCP surfaces | -| [Compression Rules Format](docs/compression/COMPRESSION_RULES_FORMAT.md) | JSON rule-pack schemas for Caveman and RTK filters | -| [Compression Language Packs](docs/compression/COMPRESSION_LANGUAGE_PACKS.md) | Language detection and Caveman rule-pack authoring | -| [Resilience Guide](docs/architecture/RESILIENCE_GUIDE.md) | Circuit breakers, cooldowns, queue, anti-thundering herd, TLS spoofing | -| [Auto-Combo Engine](docs/routing/AUTO-COMBO.md) | 12-factor scoring, mode packs, self-healing | -| [Proxy Guide](docs/ops/PROXY_GUIDE.md) | 3-level proxy system, 1proxy marketplace, registry CRUD | -| [Free Tiers](docs/reference/FREE_TIERS.md) | 25+ free API providers consolidated directory | -| [Features Gallery](docs/guides/FEATURES.md) | Visual dashboard tour with screenshots | -| [Codebase Documentation](docs/architecture/CODEBASE_DOCUMENTATION.md) | Beginner-friendly codebase walkthrough | +- **[Architecture](docs/architecture/ARCHITECTURE.md)** — System architecture, data flow, and internals +- **[Compression Guide](docs/compression/COMPRESSION_GUIDE.md)** — 7-option pipeline: off / lite / standard / aggressive / ultra / RTK / stacked +- **[RTK Compression](docs/compression/RTK_COMPRESSION.md)** — Command-output compression, filters, trust, verify, raw-output recovery +- **[Compression Engines](docs/compression/COMPRESSION_ENGINES.md)** — Caveman, RTK, stacked pipelines, dashboard/API/MCP surfaces +- **[Compression Rules Format](docs/compression/COMPRESSION_RULES_FORMAT.md)** — JSON rule-pack schemas for Caveman and RTK filters +- **[Compression Language Packs](docs/compression/COMPRESSION_LANGUAGE_PACKS.md)** — Language detection and Caveman rule-pack authoring +- **[Resilience Guide](docs/architecture/RESILIENCE_GUIDE.md)** — Circuit breakers, cooldowns, queue, anti-thundering herd, TLS spoofing +- **[Auto-Combo Engine](docs/routing/AUTO-COMBO.md)** — 12-factor scoring, mode packs, self-healing +- **[Proxy Guide](docs/ops/PROXY_GUIDE.md)** — 3-level proxy system, 1proxy marketplace, registry CRUD +- **[Free Tiers](docs/reference/FREE_TIERS.md)** — 25+ free API providers consolidated directory +- **[Features Gallery](docs/guides/FEATURES.md)** — Visual dashboard tour with screenshots +- **[Codebase Documentation](docs/architecture/CODEBASE_DOCUMENTATION.md)** — Beginner-friendly codebase walkthrough ### 🤖 Protocols & APIs -| Document | Description | -| ------------------------------------------------- | --------------------------------------------------- | -| [API Reference](docs/reference/API_REFERENCE.md) | All endpoints with examples | -| [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0 specification | -| [MCP Server](open-sse/mcp-server/README.md) | 95 MCP tools, IDE configs, Python/TS/Go clients | -| [MCP Server Guide](docs/frameworks/MCP-SERVER.md) | MCP installation, transports, and tool reference | -| [A2A Server](src/lib/a2a/README.md) | JSON-RPC 2.0 protocol, skills, streaming, task mgmt | -| [A2A Server Guide](docs/frameworks/A2A-SERVER.md) | A2A agent card, tasks, skills, and streaming | +- **[API Reference](docs/reference/API_REFERENCE.md)** — All endpoints with examples +- **[OpenAPI Spec](docs/openapi.yaml)** — OpenAPI 3.0 specification +- **[MCP Server](open-sse/mcp-server/README.md)** — 95 MCP tools, IDE configs, Python/TS/Go clients +- **[MCP Server Guide](docs/frameworks/MCP-SERVER.md)** — MCP installation, transports, and tool reference +- **[A2A Server](src/lib/a2a/README.md)** — JSON-RPC 2.0 protocol, skills, streaming, task mgmt +- **[A2A Server Guide](docs/frameworks/A2A-SERVER.md)** — A2A agent card, tasks, skills, and streaming ### 📋 Project & Quality -| Document | Description | -| -------------------------------------------------- | ----------------------------------------------- | -| [Contributing](CONTRIBUTING.md) | Development setup and guidelines | -| [Changelog](CHANGELOG.md) | Full per-version release history | -| [Security Policy](SECURITY.md) | Vulnerability reporting and security practices | -| [i18n Guide](docs/guides/I18N.md) | 40+ language support, translation workflow, RTL | -| [Release Checklist](docs/ops/RELEASE_CHECKLIST.md) | Pre-release validation steps | -| [Coverage Plan](docs/ops/COVERAGE_PLAN.md) | Test coverage strategy and 21,000+ test suite | +- **[Contributing](CONTRIBUTING.md)** — Development setup and guidelines +- **[Changelog](CHANGELOG.md)** — Full per-version release history +- **[Security Policy](SECURITY.md)** — Vulnerability reporting and security practices +- **[i18n Guide](docs/guides/I18N.md)** — 40+ language support, translation workflow, RTL +- **[Release Checklist](docs/ops/RELEASE_CHECKLIST.md)** — Pre-release validation steps +- **[Coverage Plan](docs/ops/COVERAGE_PLAN.md)** — Test coverage strategy and 21,000+ test suite
diff --git a/docs/assets/flags/README.md b/docs/assets/flags/README.md new file mode 100644 index 0000000000..11aaae3e5f --- /dev/null +++ b/docs/assets/flags/README.md @@ -0,0 +1,19 @@ +# Flag icons + +SVG country flags used by the language selector in the root `README.md`. + +They are served locally (instead of Unicode flag emoji) because regional-indicator +flag emoji do **not** render on Windows and several Safari/WebKit configurations, +which broke the "In 43 languages" table on those platforms. + +## Source & license + +Flags are from [lipis/flag-icons](https://github.com/lipis/flag-icons) +(`flags/4x3/`), licensed **MIT**. Each file is named by its ISO 3166-1 alpha-2 +country code (e.g. `br.svg`, `us.svg`). The six Indian-language cells (`in`, `hi`, +`gu`, `mr`, `ta`, `te`) reuse the single `in.svg`. + +``` +MIT License — Copyright (c) 2013 Panayiotis Lipiridis +https://github.com/lipis/flag-icons/blob/main/LICENSE +``` diff --git a/docs/assets/flags/az.svg b/docs/assets/flags/az.svg new file mode 100644 index 0000000000..3557522110 --- /dev/null +++ b/docs/assets/flags/az.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/assets/flags/bd.svg b/docs/assets/flags/bd.svg new file mode 100644 index 0000000000..16b794debd --- /dev/null +++ b/docs/assets/flags/bd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/assets/flags/bg.svg b/docs/assets/flags/bg.svg new file mode 100644 index 0000000000..af2d0d07c3 --- /dev/null +++ b/docs/assets/flags/bg.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/flags/br.svg b/docs/assets/flags/br.svg new file mode 100644 index 0000000000..719a763caa --- /dev/null +++ b/docs/assets/flags/br.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/flags/cn.svg b/docs/assets/flags/cn.svg new file mode 100644 index 0000000000..10d3489a0e --- /dev/null +++ b/docs/assets/flags/cn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/assets/flags/cz.svg b/docs/assets/flags/cz.svg new file mode 100644 index 0000000000..7913de3895 --- /dev/null +++ b/docs/assets/flags/cz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/flags/de.svg b/docs/assets/flags/de.svg new file mode 100644 index 0000000000..71aa2d2c30 --- /dev/null +++ b/docs/assets/flags/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/flags/dk.svg b/docs/assets/flags/dk.svg new file mode 100644 index 0000000000..563277f81d --- /dev/null +++ b/docs/assets/flags/dk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/flags/es.svg b/docs/assets/flags/es.svg new file mode 100644 index 0000000000..a296ebf7e1 --- /dev/null +++ b/docs/assets/flags/es.svg @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/flags/fi.svg b/docs/assets/flags/fi.svg new file mode 100644 index 0000000000..470be2d07c --- /dev/null +++ b/docs/assets/flags/fi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/flags/fr.svg b/docs/assets/flags/fr.svg new file mode 100644 index 0000000000..e682b90020 --- /dev/null +++ b/docs/assets/flags/fr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/flags/hu.svg b/docs/assets/flags/hu.svg new file mode 100644 index 0000000000..24fbfb9658 --- /dev/null +++ b/docs/assets/flags/hu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/assets/flags/id.svg b/docs/assets/flags/id.svg new file mode 100644 index 0000000000..3b7c8fcfd9 --- /dev/null +++ b/docs/assets/flags/id.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/assets/flags/il.svg b/docs/assets/flags/il.svg new file mode 100644 index 0000000000..f43be7e8ed --- /dev/null +++ b/docs/assets/flags/il.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/assets/flags/in.svg b/docs/assets/flags/in.svg new file mode 100644 index 0000000000..bc47d74911 --- /dev/null +++ b/docs/assets/flags/in.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/flags/ir.svg b/docs/assets/flags/ir.svg new file mode 100644 index 0000000000..8c6d516216 --- /dev/null +++ b/docs/assets/flags/ir.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/flags/it.svg b/docs/assets/flags/it.svg new file mode 100644 index 0000000000..20a8bfdcc8 --- /dev/null +++ b/docs/assets/flags/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/assets/flags/jp.svg b/docs/assets/flags/jp.svg new file mode 100644 index 0000000000..cc1c181ce9 --- /dev/null +++ b/docs/assets/flags/jp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/assets/flags/kr.svg b/docs/assets/flags/kr.svg new file mode 100644 index 0000000000..6947eab2b3 --- /dev/null +++ b/docs/assets/flags/kr.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/flags/my.svg b/docs/assets/flags/my.svg new file mode 100644 index 0000000000..115f864d8a --- /dev/null +++ b/docs/assets/flags/my.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/flags/nl.svg b/docs/assets/flags/nl.svg new file mode 100644 index 0000000000..e90f5b0351 --- /dev/null +++ b/docs/assets/flags/nl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/flags/no.svg b/docs/assets/flags/no.svg new file mode 100644 index 0000000000..a5f2a152a9 --- /dev/null +++ b/docs/assets/flags/no.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/assets/flags/ph.svg b/docs/assets/flags/ph.svg new file mode 100644 index 0000000000..b910e24cd2 --- /dev/null +++ b/docs/assets/flags/ph.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/assets/flags/pk.svg b/docs/assets/flags/pk.svg new file mode 100644 index 0000000000..4ddc19f8ea --- /dev/null +++ b/docs/assets/flags/pk.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/assets/flags/pl.svg b/docs/assets/flags/pl.svg new file mode 100644 index 0000000000..42d2b0ce19 --- /dev/null +++ b/docs/assets/flags/pl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/assets/flags/pt.svg b/docs/assets/flags/pt.svg new file mode 100644 index 0000000000..2767cd4e9f --- /dev/null +++ b/docs/assets/flags/pt.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/flags/ro.svg b/docs/assets/flags/ro.svg new file mode 100644 index 0000000000..fda0f7bec9 --- /dev/null +++ b/docs/assets/flags/ro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/assets/flags/ru.svg b/docs/assets/flags/ru.svg new file mode 100644 index 0000000000..cf243011ae --- /dev/null +++ b/docs/assets/flags/ru.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/assets/flags/sa.svg b/docs/assets/flags/sa.svg new file mode 100644 index 0000000000..596cf48bb7 --- /dev/null +++ b/docs/assets/flags/sa.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/flags/se.svg b/docs/assets/flags/se.svg new file mode 100644 index 0000000000..8ba745acaf --- /dev/null +++ b/docs/assets/flags/se.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/assets/flags/sk.svg b/docs/assets/flags/sk.svg new file mode 100644 index 0000000000..676018e628 --- /dev/null +++ b/docs/assets/flags/sk.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/assets/flags/th.svg b/docs/assets/flags/th.svg new file mode 100644 index 0000000000..1e93a61e95 --- /dev/null +++ b/docs/assets/flags/th.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/assets/flags/tr.svg b/docs/assets/flags/tr.svg new file mode 100644 index 0000000000..b96da21f0e --- /dev/null +++ b/docs/assets/flags/tr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/assets/flags/tw.svg b/docs/assets/flags/tw.svg new file mode 100644 index 0000000000..57fd98b433 --- /dev/null +++ b/docs/assets/flags/tw.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/flags/tz.svg b/docs/assets/flags/tz.svg new file mode 100644 index 0000000000..a2cfbca42a --- /dev/null +++ b/docs/assets/flags/tz.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/assets/flags/ua.svg b/docs/assets/flags/ua.svg new file mode 100644 index 0000000000..03daa19683 --- /dev/null +++ b/docs/assets/flags/ua.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/assets/flags/us.svg b/docs/assets/flags/us.svg new file mode 100644 index 0000000000..9cfd0c927f --- /dev/null +++ b/docs/assets/flags/us.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/assets/flags/vn.svg b/docs/assets/flags/vn.svg new file mode 100644 index 0000000000..7e4bac8f4a --- /dev/null +++ b/docs/assets/flags/vn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + +