<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>GitHub Go Weekly Trending</title>
    <description>Weekly Trending of Go in GitHub</description>
    <pubDate>Sat, 18 Apr 2026 01:42:56 GMT</pubDate>
    <link>http://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>steipete/wacli</title>
      <link>https://github.com/steipete/wacli</link>
      <description>&lt;p&gt;WhatsApp CLI&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;🗃️ wacli — WhatsApp CLI: sync, search, send.&lt;/h1&gt; 
&lt;p&gt;WhatsApp CLI built on top of &lt;code&gt;whatsmeow&lt;/code&gt;, focused on:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Best-effort local sync of message history + continuous capture&lt;/li&gt; 
 &lt;li&gt;Fast offline search&lt;/li&gt; 
 &lt;li&gt;Sending messages&lt;/li&gt; 
 &lt;li&gt;Contact + group management&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This is a third-party tool that uses the WhatsApp Web protocol via &lt;code&gt;whatsmeow&lt;/code&gt; and is not affiliated with WhatsApp.&lt;/p&gt; 
&lt;h2&gt;Status&lt;/h2&gt; 
&lt;p&gt;Core implementation is in place. See &lt;code&gt;docs/spec.md&lt;/code&gt; for the full design notes.&lt;/p&gt; 
&lt;h2&gt;Recent updates (0.2.0)&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Messages: search/list includes display text for reactions, replies, and media types.&lt;/li&gt; 
 &lt;li&gt;Send: &lt;code&gt;wacli send file --filename&lt;/code&gt; to override the display name.&lt;/li&gt; 
 &lt;li&gt;Auth: optional &lt;code&gt;WACLI_DEVICE_LABEL&lt;/code&gt; / &lt;code&gt;WACLI_DEVICE_PLATFORM&lt;/code&gt; env overrides.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Install / Build&lt;/h2&gt; 
&lt;p&gt;Choose &lt;strong&gt;one&lt;/strong&gt; of the following options.&lt;br /&gt; If you install via Homebrew, you can skip the local build step.&lt;/p&gt; 
&lt;h3&gt;Option A: Install via Homebrew (tap)&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;brew install steipete/tap/wacli&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Option B: Build locally&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;go build -tags sqlite_fts5 -o ./dist/wacli ./cmd/wacli&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Run (local build only):&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;./dist/wacli --help&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Quick start&lt;/h2&gt; 
&lt;p&gt;Default store directory is &lt;code&gt;~/.wacli&lt;/code&gt; (override with &lt;code&gt;--store DIR&lt;/code&gt;).&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1) Authenticate (shows QR), then bootstrap sync
pnpm wacli auth
# or: ./dist/wacli auth (after pnpm build)

# 2) Keep syncing (never shows QR; requires prior auth)
pnpm wacli sync --follow

# Diagnostics
pnpm wacli doctor

# Search messages
pnpm wacli messages search &quot;meeting&quot;

# Backfill older messages for a chat (best-effort; requires your primary device online)
pnpm wacli history backfill --chat 1234567890@s.whatsapp.net --requests 10 --count 50

# Download media for a message (after syncing)
./wacli media download --chat 1234567890@s.whatsapp.net --id &amp;lt;message-id&amp;gt;

# Send a message
pnpm wacli send text --to 1234567890 --message &quot;hello&quot;

# Send a file
./wacli send file --to 1234567890 --file ./pic.jpg --caption &quot;hi&quot;
# Or override display name
./wacli send file --to 1234567890 --file /tmp/abc123 --filename report.pdf

# List groups and manage participants
pnpm wacli groups list
pnpm wacli groups rename --jid 123456789@g.us --name &quot;New name&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Prior Art / Credit&lt;/h2&gt; 
&lt;p&gt;This project is heavily inspired by (and learns from) the excellent &lt;code&gt;whatsapp-cli&lt;/code&gt; by Vicente Reig:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vicentereig/whatsapp-cli&quot;&gt;&lt;code&gt;whatsapp-cli&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;High-level UX&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;wacli auth&lt;/code&gt;: interactive login (shows QR code), then immediately performs initial data sync.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;wacli sync&lt;/code&gt;: non-interactive sync loop (never shows QR; errors if not authenticated).&lt;/li&gt; 
 &lt;li&gt;Output is human-readable by default; pass &lt;code&gt;--json&lt;/code&gt; for machine-readable output.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Storage&lt;/h2&gt; 
&lt;p&gt;Defaults to &lt;code&gt;~/.wacli&lt;/code&gt; (override with &lt;code&gt;--store DIR&lt;/code&gt;).&lt;/p&gt; 
&lt;h2&gt;Environment overrides&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;WACLI_DEVICE_LABEL&lt;/code&gt;: set the linked device label (shown in WhatsApp).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;WACLI_DEVICE_PLATFORM&lt;/code&gt;: override the linked device platform (defaults to &lt;code&gt;CHROME&lt;/code&gt; if unset or invalid).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Backfilling older history&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;wacli sync&lt;/code&gt; stores whatever WhatsApp Web sends opportunistically. To try to fetch &lt;em&gt;older&lt;/em&gt; messages, use on-demand history sync requests to your &lt;strong&gt;primary device&lt;/strong&gt; (your phone).&lt;/p&gt; 
&lt;p&gt;Important notes:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;This is &lt;strong&gt;best-effort&lt;/strong&gt;: WhatsApp may not return full history.&lt;/li&gt; 
 &lt;li&gt;Your &lt;strong&gt;primary device must be online&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Requests are &lt;strong&gt;per chat&lt;/strong&gt; (DM or group). &lt;code&gt;wacli&lt;/code&gt; uses the &lt;em&gt;oldest locally stored message&lt;/em&gt; in that chat as the anchor.&lt;/li&gt; 
 &lt;li&gt;Recommended &lt;code&gt;--count&lt;/code&gt; is &lt;code&gt;50&lt;/code&gt; per request.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Backfill one chat&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm wacli history backfill --chat 1234567890@s.whatsapp.net --requests 10 --count 50
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Backfill all chats (script)&lt;/h3&gt; 
&lt;p&gt;This loops through chats already known in your local DB:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm -s wacli -- --json chats list --limit 100000 \
  | jq -r &#39;.[].JID&#39; \
  | while read -r jid; do
      pnpm -s wacli -- history backfill --chat &quot;$jid&quot; --requests 3 --count 50
    done
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;See &lt;code&gt;LICENSE&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Maintainers&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Created by &lt;a href=&quot;https://github.com/steipete&quot;&gt;@steipete&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Currently maintained by &lt;a href=&quot;https://github.com/dinakars777&quot;&gt;@dinakars777&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/33fc639de3381396a2fdec6cf9df28483222d5aeb49e5e70f5a81d390ffbea60/steipete/wacli" medium="image" />
      
    </item>
    
    <item>
      <title>googleapis/mcp-toolbox</title>
      <link>https://github.com/googleapis/mcp-toolbox</link>
      <description>&lt;p&gt;MCP Toolbox for Databases is an open source MCP server for databases.&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/logo.png&quot; alt=&quot;logo&quot; /&gt;&lt;/p&gt; 
 &lt;h1&gt;MCP Toolbox for Databases&lt;/h1&gt; 
 &lt;p&gt;&lt;a href=&quot;https://trendshift.io/repositories/13019&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://trendshift.io/api/badge/repositories/13019&quot; alt=&quot;googleapis%2Fmcp-toolbox | Trendshift&quot; style=&quot;width: 250px; height: 55px;&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://goreportcard.com/report/github.com/googleapis/mcp-toolbox&quot;&gt;&lt;img src=&quot;https://goreportcard.com/badge/github.com/googleapis/mcp-toolbox&quot; alt=&quot;Go Report Card&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opensource.org/licenses/Apache-2.0&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-Apache%202.0-blue.svg?sanitize=true&quot; alt=&quot;License: Apache
2.0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://mcp-toolbox.dev/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Docs-MCP_Toolbox-blue&quot; alt=&quot;Docs&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/Dmm69peqjh&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Discord-%235865F2.svg?style=flat&amp;amp;logo=discord&amp;amp;logoColor=white&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://medium.com/@mcp_toolbox&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Medium-12100E?style=flat&amp;amp;logo=medium&amp;amp;logoColor=white&quot; alt=&quot;Medium&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://pypi.org/project/toolbox-core/&quot;&gt;&lt;img src=&quot;https://img.shields.io/pypi/v/toolbox-core?logo=python&amp;amp;logoColor=white&amp;amp;label=Python%20SDK&quot; alt=&quot;Python SDK&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.npmjs.com/package/@toolbox-sdk/core&quot;&gt;&lt;img src=&quot;https://img.shields.io/npm/v/@toolbox-sdk/core?logo=javascript&amp;amp;logoColor=white&amp;amp;label=JS%20SDK&quot; alt=&quot;JS/TS SDK&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://pkg.go.dev/github.com/googleapis/mcp-toolbox-sdk-go&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/googleapis/mcp-toolbox-sdk-go?logo=go&amp;amp;logoColor=white&amp;amp;label=Go%20SDK&quot; alt=&quot;Go SDK&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://mvnrepository.com/artifact/com.google.cloud.mcp/mcp-toolbox-sdk-java&quot;&gt;&lt;img src=&quot;https://img.shields.io/maven-central/v/com.google.cloud.mcp/mcp-toolbox-sdk-java?logo=apache-maven&amp;amp;logoColor=white&amp;amp;label=Java%20SDK&quot; alt=&quot;Java SDK&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;MCP Toolbox for Databases is an open source Model Context Protocol (MCP) server that connects your AI agents, IDEs, and applications directly to your enterprise databases.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/docs/en/documentation/introduction/architecture.png&quot; alt=&quot;architecture&quot; width=&quot;50%&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;It serves a &lt;strong&gt;dual purpose&lt;/strong&gt;:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Ready-to-use MCP Server (Build-Time):&lt;/strong&gt; Instantly connect Gemini CLI, Google Antigravity, Claude Code, Codex, or other MCP clients to your databases using our &lt;em&gt;prebuilt generic tools&lt;/em&gt;. Talk to your data, explore schemas, and generate code without writing boilerplate.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Custom Tools Framework (Run-Time):&lt;/strong&gt; A robust framework to build specialized, highly secure AI tools for your production agents. Define structured queries, semantic search, and NL2SQL capabilities safely and easily.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;This README provides a brief overview. For comprehensive details, see the &lt;a href=&quot;https://mcp-toolbox.dev/&quot;&gt;full documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Repository Name Update:&lt;/strong&gt; The &lt;code&gt;genai-toolbox&lt;/code&gt; repository has been officially renamed to &lt;code&gt;mcp-toolbox&lt;/code&gt;. To ensure your local environment reflects the new name, you may update your remote: &lt;code&gt;git remote set-url origin https://github.com/googleapis/mcp-toolbox.git&lt;/code&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;This solution was originally named “Gen AI Toolbox for Databases” (&lt;a href=&quot;http://github.com/googleapis/genai-toolbox&quot;&gt;github.com/googleapis/genai-toolbox&lt;/a&gt;) as its initial development predated MCP, but was renamed to align with the MCP compatibility.&lt;/p&gt; 
&lt;/div&gt; 
&lt;!-- TOC ignore:true --&gt; 
&lt;h2&gt;Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#why-mcp-toolbox&quot;&gt;Why MCP Toolbox?&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#quick-start-prebuilt-tools&quot;&gt;Quick Start: Prebuilt Tools&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#quick-start-custom-tools&quot;&gt;Quick Start: Custom Tools&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#install--run-the-toolbox-server&quot;&gt;Install &amp;amp; Run the Toolbox server&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#connect-to-toolbox&quot;&gt;Connect to Toolbox&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#mcp-client&quot;&gt;MCP Client&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#toolbox-sdks-integrate-with-your-application&quot;&gt;Toolbox SDKs: Integrate with your Application&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#additional-features&quot;&gt;Additional Features&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#versioning&quot;&gt;Versioning&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#contributing&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#community&quot;&gt;Community&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Why MCP Toolbox?&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Out-of-the-Box Database Access:&lt;/strong&gt; Prebuilt generic tools for instant data exploration (e.g., &lt;code&gt;list_tables&lt;/code&gt;, &lt;code&gt;execute_sql&lt;/code&gt;) directly from your IDE or CLI.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Custom Tools Framework:&lt;/strong&gt; Build production-ready tools with your own predefined logic, ensuring safety through Restricted Access, Structured Queries, and Semantic Search.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Simplified Development:&lt;/strong&gt; Integrate tools into your Agent Development Kit (ADK), LangChain, LlamaIndex, or custom agents in less than 10 lines of code.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Better Performance:&lt;/strong&gt; Handles connection pooling, integrated auth (IAM), and end-to-end observability (OpenTelemetry) out of the box.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Enhanced Security&lt;/strong&gt;: Integrated authentication for more secure access to your data.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;End-to-end Observability&lt;/strong&gt;: Out of the box metrics and tracing with built-in support for OpenTelemetry.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Quick Start: Prebuilt Tools&lt;/h2&gt; 
&lt;p&gt;Stop context-switching and let your AI assistant become a true co-developer. By connecting your IDE to your databases with MCP Toolbox, you can query your data in plain English, automate schema discovery and management, and generate database-aware code.&lt;/p&gt; 
&lt;p&gt;You can use the Toolbox in any MCP-compatible IDE or client (e.g., Gemini CLI, Google Antigravity, Claude Code, Codex, etc.) by configuring the MCP server.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Prebuilt tools are also conveniently available via the &lt;a href=&quot;https://antigravity.google/docs/mcp&quot;&gt;Google Antigravity MCP Store&lt;/a&gt; with a simple click-to-install experience.&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Add the following to your client&#39;s MCP configuration file (usually &lt;code&gt;mcp.json&lt;/code&gt; or &lt;code&gt;claude_desktop_config.json&lt;/code&gt;):&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;mcpServers&quot;: {
    &quot;toolbox-postgres&quot;: {
      &quot;command&quot;: &quot;npx&quot;,
      &quot;args&quot;: [
        &quot;-y&quot;,
        &quot;@toolbox-sdk/server&quot;,
        &quot;--prebuilt=postgres&quot;
      ]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Set the appropriate environment variables to connect, see the &lt;a href=&quot;https://mcp-toolbox.dev/documentation/configuration/prebuilt-configs/&quot;&gt;Prebuilt Tools Reference&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;When you run Toolbox with a &lt;code&gt;--prebuilt=&amp;lt;database&amp;gt;&lt;/code&gt; flag, you instantly get access to standard tools to interact with that database.&lt;/p&gt; 
&lt;p&gt;Supported databases currently include:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Google Cloud:&lt;/strong&gt; AlloyDB, BigQuery, Cloud SQL (PostgreSQL, MySQL, SQL Server), Spanner, Firestore, Knowledge Catalog (formerly known as Dataplex).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Other Databases:&lt;/strong&gt; PostgreSQL, MySQL, SQL Server, Oracle, MongoDB, Redis, Elasticsearch, CockroachDB, ClickHouse, Couchbase, Neo4j, Snowflake, Trino, and more.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For a full list of available tools and their capabilities across all supported databases, see the &lt;a href=&quot;https://mcp-toolbox.dev/documentation/configuration/prebuilt-configs/&quot;&gt;Prebuilt Tools Reference&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#install--run-the-toolbox-server&quot;&gt;Install &amp;amp; Run the Toolbox server&lt;/a&gt; section for different execution methods like Docker or binaries.&lt;/em&gt;&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;For users looking for a managed solution, &lt;a href=&quot;https://cloud.google.com/blog/products/databases/managed-mcp-servers-for-google-cloud-databases&quot;&gt;Google Cloud MCP Servers&lt;/a&gt; provide a managed MCP experience with prebuilt tools; you can &lt;a href=&quot;https://mcp-toolbox.dev/dev/reference/faq/&quot;&gt;learn more about the differences here&lt;/a&gt;.&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Quick Start: Custom Tools&lt;/h2&gt; 
&lt;p&gt;Toolbox can also be used as a framework for customized tools. The primary way to configure Toolbox is through the &lt;code&gt;tools.yaml&lt;/code&gt; file. If you have multiple files, you can tell Toolbox which to load with the &lt;code&gt;--config tools.yaml&lt;/code&gt; flag.&lt;/p&gt; 
&lt;p&gt;You can find more detailed reference documentation to all resource types in the &lt;a href=&quot;https://mcp-toolbox.dev/documentation/configuration/&quot;&gt;Resources&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Sources&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;sources&lt;/code&gt; section of your &lt;code&gt;tools.yaml&lt;/code&gt; defines what data sources your Toolbox should have access to. Most tools will have at least one source to execute against.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;kind: source
name: my-pg-source
type: postgres
host: 127.0.0.1
port: 5432
database: toolbox_db
user: toolbox_user
password: my-password
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more details on configuring different types of sources, see the &lt;a href=&quot;https://mcp-toolbox.dev/documentation/configuration/sources/&quot;&gt;Sources&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Tools&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;tools&lt;/code&gt; section of a &lt;code&gt;tools.yaml&lt;/code&gt; define the actions an agent can take: what type of tool it is, which source(s) it affects, what parameters it uses, etc.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;kind: tool
name: search-hotels-by-name
type: postgres-sql
source: my-pg-source
description: Search for hotels based on name.
parameters:
  - name: name
    type: string
    description: The name of the hotel.
statement: SELECT * FROM hotels WHERE name ILIKE &#39;%&#39; || $1 || &#39;%&#39;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more details on configuring different types of tools, see the &lt;a href=&quot;https://mcp-toolbox.dev/documentation/configuration/tools/&quot;&gt;Tools&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Toolsets&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;toolsets&lt;/code&gt; section of your &lt;code&gt;tools.yaml&lt;/code&gt; allows you to define groups of tools that you want to be able to load together. This can be useful for defining different groups based on agent or application.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;kind: toolset
name: my_first_toolset
tools:
    - my_first_tool
    - my_second_tool
---
kind: toolset
name: my_second_toolset
tools:
    - my_second_tool
    - my_third_tool
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Prompts&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;prompts&lt;/code&gt; section of a &lt;code&gt;tools.yaml&lt;/code&gt; defines prompts that can be used for interactions with LLMs.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;kind: prompt
name: code_review
description: &quot;Asks the LLM to analyze code quality and suggest improvements.&quot;
messages:
  - content: &amp;gt;
         Please review the following code for quality, correctness,
         and potential improvements: \n\n{{.code}}
arguments:
  - name: &quot;code&quot;
    description: &quot;The code to review&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more details on configuring prompts, see the &lt;a href=&quot;https://mcp-toolbox.dev/documentation/configuration/prompts/&quot;&gt;Prompts&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Install &amp;amp; Run the Toolbox server&lt;/h2&gt; 
&lt;p&gt;You can run Toolbox directly with a &lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#quick-start-custom-tools&quot;&gt;configuration file&lt;/a&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;npx @toolbox-sdk/server --config tools.yaml
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This runs the latest version of the Toolbox server with your configuration file.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;This method is optimized for convenience rather than performance. For a more standard and reliable installation, please use the binary or container image as described in &lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#install--run-the-toolbox-server&quot;&gt;Install &amp;amp; Run the Toolbox server&lt;/a&gt;.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Install Toolbox&lt;/h3&gt; 
&lt;p&gt;For the latest version, check the &lt;a href=&quot;https://github.com/googleapis/mcp-toolbox/releases&quot;&gt;releases page&lt;/a&gt; and use the following instructions for your OS and CPU architecture.&lt;/p&gt; 
&lt;details open&gt; 
 &lt;summary&gt;Binary&lt;/summary&gt; 
 &lt;p&gt;To install Toolbox as a binary:&lt;/p&gt; 
 &lt;!-- {x-release-please-start-version} --&gt; 
 &lt;blockquote&gt; 
  &lt;details&gt; 
   &lt;summary&gt;Linux (AMD64)&lt;/summary&gt; 
   &lt;p&gt;To install Toolbox as a binary on Linux (AMD64):&lt;/p&gt; 
   &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# see releases page for other versions
export VERSION=1.1.0
curl -L -o toolbox https://storage.googleapis.com/mcp-toolbox-for-databases/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
&lt;/code&gt;&lt;/pre&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;macOS (Apple Silicon)&lt;/summary&gt; 
   &lt;p&gt;To install Toolbox as a binary on macOS (Apple Silicon):&lt;/p&gt; 
   &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# see releases page for other versions
export VERSION=1.1.0
curl -L -o toolbox https://storage.googleapis.com/mcp-toolbox-for-databases/v$VERSION/darwin/arm64/toolbox
chmod +x toolbox
&lt;/code&gt;&lt;/pre&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;macOS (Intel)&lt;/summary&gt; 
   &lt;p&gt;To install Toolbox as a binary on macOS (Intel):&lt;/p&gt; 
   &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# see releases page for other versions
export VERSION=1.1.0
curl -L -o toolbox https://storage.googleapis.com/mcp-toolbox-for-databases/v$VERSION/darwin/amd64/toolbox
chmod +x toolbox
&lt;/code&gt;&lt;/pre&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;Windows (Command Prompt)&lt;/summary&gt; 
   &lt;p&gt;To install Toolbox as a binary on Windows (Command Prompt):&lt;/p&gt; 
   &lt;pre&gt;&lt;code class=&quot;language-cmd&quot;&gt;:: see releases page for other versions
set VERSION=1.1.0
curl -o toolbox.exe &quot;https://storage.googleapis.com/mcp-toolbox-for-databases/v%VERSION%/windows/amd64/toolbox.exe&quot;
&lt;/code&gt;&lt;/pre&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;Windows (PowerShell)&lt;/summary&gt; 
   &lt;p&gt;To install Toolbox as a binary on Windows (PowerShell):&lt;/p&gt; 
   &lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;# see releases page for other versions
$VERSION = &quot;1.1.0&quot;
curl.exe -o toolbox.exe &quot;https://storage.googleapis.com/mcp-toolbox-for-databases/v$VERSION/windows/amd64/toolbox.exe&quot;
&lt;/code&gt;&lt;/pre&gt; 
  &lt;/details&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Container image&lt;/summary&gt; You can also install Toolbox as a container: 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# see releases page for other versions
export VERSION=1.1.0
docker pull us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Homebrew&lt;/summary&gt; 
 &lt;p&gt;To install Toolbox using Homebrew on macOS or Linux:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;brew install mcp-toolbox
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Compile from source&lt;/summary&gt; 
 &lt;p&gt;To install from source, ensure you have the latest version of &lt;a href=&quot;https://go.dev/doc/install&quot;&gt;Go installed&lt;/a&gt;, and then run the following command:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;go install github.com/googleapis/mcp-toolbox@v1.1.0
&lt;/code&gt;&lt;/pre&gt; 
 &lt;!-- {x-release-please-end} --&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Gemini CLI&lt;/summary&gt; Check out the [Gemini CLI extensions](https://geminicli.com/extensions/) to install prebuilt tools for specific databases like AlloyDB, BigQuery, and Cloud SQL directly into Gemini CLI. 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# Install Gemini CLI
npm install -g @google/gemini-cli
# Install the extension
gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgres
# Run Gemini CLI
gemini
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Interact with your custom tools using natural language through the Gemini CLI.&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# Install the extension
gemini extensions install https://github.com/gemini-cli-extensions/mcp-toolbox
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Run Toolbox&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#quick-start-custom-tools&quot;&gt;Configure&lt;/a&gt; a &lt;code&gt;tools.yaml&lt;/code&gt; to define your tools, and then execute &lt;code&gt;toolbox&lt;/code&gt; to start the server:&lt;/p&gt; 
&lt;details open&gt; 
 &lt;summary&gt;Binary&lt;/summary&gt; 
 &lt;p&gt;To run Toolbox from binary:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;./toolbox --config &quot;tools.yaml&quot;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;ⓘ Note&lt;br /&gt; Toolbox enables dynamic reloading by default. To disable, use the &lt;code&gt;--disable-reload&lt;/code&gt; flag.&lt;/p&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Container image&lt;/summary&gt; 
 &lt;p&gt;To run the server after pulling the &lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/#install-toolbox&quot;&gt;container image&lt;/a&gt;:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;export VERSION=0.24.0 # Use the version you pulled
docker run -p 5000:5000 \
-v $(pwd)/tools.yaml:/app/tools.yaml \
us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION \
--config &quot;/app/tools.yaml&quot;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;ⓘ Note&lt;br /&gt; The &lt;code&gt;-v&lt;/code&gt; flag mounts your local &lt;code&gt;tools.yaml&lt;/code&gt; into the container, and &lt;code&gt;-p&lt;/code&gt; maps the container&#39;s port &lt;code&gt;5000&lt;/code&gt; to your host&#39;s port &lt;code&gt;5000&lt;/code&gt;.&lt;/p&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Source&lt;/summary&gt; 
 &lt;p&gt;To run the server directly from source, navigate to the project root directory and run:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;go run .
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;ⓘ Note&lt;br /&gt; This command runs the project from source, and is more suitable for development and testing. It does &lt;strong&gt;not&lt;/strong&gt; compile a binary into your &lt;code&gt;$GOPATH&lt;/code&gt;. If you want to compile a binary instead, refer the &lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/DEVELOPER.md#building-the-binary&quot;&gt;Developer Documentation&lt;/a&gt;.&lt;/p&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Homebrew&lt;/summary&gt; 
 &lt;p&gt;If you installed Toolbox using &lt;a href=&quot;https://brew.sh/&quot;&gt;Homebrew&lt;/a&gt;, the &lt;code&gt;toolbox&lt;/code&gt; binary is available in your system path. You can start the server with the same command:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;toolbox --config &quot;tools.yaml&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;NPM&lt;/summary&gt; 
 &lt;p&gt;To run Toolbox directly without manually downloading the binary (requires Node.js):&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;npx @toolbox-sdk/server --config tools.yaml
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Gemini CLI&lt;/summary&gt; After installing a [Gemini CLI extensions](https://geminicli.com/extensions/), the prebuilt tools will be available during use. 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# Run Gemini CLI
gemini

# List extensions
/exttensions list
# List MCP servers
/mcp list
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;p&gt;You can use &lt;code&gt;toolbox help&lt;/code&gt; for a full list of flags! To stop the server, send a terminate signal (&lt;code&gt;ctrl+c&lt;/code&gt; on most platforms).&lt;/p&gt; 
&lt;p&gt;For more detailed documentation on deploying to different environments, check out the resources in the &lt;a href=&quot;https://mcp-toolbox.dev/documentation/deploy-to/&quot;&gt;Deploy Toolbox section&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Connect to Toolbox&lt;/h2&gt; 
&lt;p&gt;Once your Toolbox server is up and running, you can load tools into your MCP-compatible client or application.&lt;/p&gt; 
&lt;h3&gt;MCP Client&lt;/h3&gt; 
&lt;p&gt;Add the following configuration to your MCP client configuration:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;mcpServers&quot;: {
    &quot;toolbox&quot;: {
      &quot;type&quot;: &quot;http&quot;,
      &quot;url&quot;: &quot;http://127.0.0.1:5000/mcp&quot;,
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you would like to connect to a specific toolset, replace url with &quot;&lt;a href=&quot;http://127.0.0.1:5000/mcp/%7Btoolset_name%7D&quot;&gt;http://127.0.0.1:5000/mcp/{toolset_name}&lt;/a&gt;&quot;.&lt;/p&gt; 
&lt;h3&gt;Toolbox SDKs: Integrate with your Application&lt;/h3&gt; 
&lt;p&gt;Toolbox Client SDKs provide the easy-to-use building blocks and advanced features for connecting your custom applications to the MCP Toolbox server. See below the list of Client SDKs for using various frameworks:&lt;/p&gt; 
&lt;details open&gt; 
 &lt;summary&gt;Python (&lt;a href=&quot;https://github.com/googleapis/mcp-toolbox-sdk-python&quot;&gt;Github&lt;/a&gt;)&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;blockquote&gt; 
  &lt;details open&gt; 
   &lt;summary&gt;Core&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://pypi.org/project/toolbox-core/&quot;&gt;Toolbox Core SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install toolbox-core
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from toolbox_core import ToolboxClient

# update the url to point to your server
async with ToolboxClient(&quot;http://127.0.0.1:5000&quot;) as client:

    # these tools can be passed to your application!
    tools = await client.load_toolset(&quot;toolset_name&quot;)
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
   &lt;p&gt;For more detailed instructions on using the Toolbox Core SDK, see the &lt;a href=&quot;https://github.com/googleapis/mcp-toolbox-sdk-python/tree/main/packages/toolbox-core/README.md&quot;&gt;project&#39;s README&lt;/a&gt;.&lt;/p&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;LangChain / LangGraph&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://pypi.org/project/toolbox-langchain/&quot;&gt;Toolbox LangChain SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install toolbox-langchain
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from toolbox_langchain import ToolboxClient

# update the url to point to your server
async with ToolboxClient(&quot;http://127.0.0.1:5000&quot;) as client:

    # these tools can be passed to your application!
    tools = client.load_toolset()
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;For more detailed instructions on using the Toolbox LangChain SDK, see the &lt;a href=&quot;https://github.com/googleapis/mcp-toolbox-sdk-python/raw/main/packages/toolbox-langchain/README.md&quot;&gt;project&#39;s README&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;LlamaIndex&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://pypi.org/project/toolbox-llamaindex/&quot;&gt;Toolbox Llamaindex SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install toolbox-llamaindex
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from toolbox_llamaindex import ToolboxClient

# update the url to point to your server
async with ToolboxClient(&quot;http://127.0.0.1:5000&quot;) as client:

    # these tools can be passed to your application!
    tools = client.load_toolset()
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;For more detailed instructions on using the Toolbox Llamaindex SDK, see the &lt;a href=&quot;https://github.com/googleapis/genai-toolbox-llamaindex-python/raw/main/README.md&quot;&gt;project&#39;s README&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
 &lt;/blockquote&gt;
&lt;/details&gt;  
&lt;details&gt; 
 &lt;summary&gt;Javascript/Typescript (&lt;a href=&quot;https://github.com/googleapis/mcp-toolbox-sdk-js&quot;&gt;Github&lt;/a&gt;)&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;blockquote&gt; 
  &lt;details open&gt; 
   &lt;summary&gt;Core&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://www.npmjs.com/package/@toolbox-sdk/core&quot;&gt;Toolbox Core SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install @toolbox-sdk/core
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;import { ToolboxClient } from &#39;@toolbox-sdk/core&#39;;

// update the url to point to your server
const URL = &#39;http://127.0.0.1:5000&#39;;
let client = new ToolboxClient(URL);

// these tools can be passed to your application!
const tools = await client.loadToolset(&#39;toolsetName&#39;);
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;For more detailed instructions on using the Toolbox Core SDK, see the &lt;a href=&quot;https://github.com/googleapis/mcp-toolbox-sdk-js/raw/main/packages/toolbox-core/README.md&quot;&gt;project&#39;s README&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;LangChain / LangGraph&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://www.npmjs.com/package/@toolbox-sdk/core&quot;&gt;Toolbox Core SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install @toolbox-sdk/core
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;import { ToolboxClient } from &#39;@toolbox-sdk/core&#39;;

// update the url to point to your server
const URL = &#39;http://127.0.0.1:5000&#39;;
let client = new ToolboxClient(URL);

// these tools can be passed to your application!
const toolboxTools = await client.loadToolset(&#39;toolsetName&#39;);

// Define the basics of the tool: name, description, schema and core logic
const getTool = (toolboxTool) =&amp;gt; tool(currTool, {
    name: toolboxTool.getName(),
    description: toolboxTool.getDescription(),
    schema: toolboxTool.getParamSchema()
});

// Use these tools in your Langchain/Langraph applications
const tools = toolboxTools.map(getTool);
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;Genkit&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://www.npmjs.com/package/@toolbox-sdk/core&quot;&gt;Toolbox Core SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install @toolbox-sdk/core
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;import { ToolboxClient } from &#39;@toolbox-sdk/core&#39;;
import { genkit } from &#39;genkit&#39;;

// Initialise genkit
const ai = genkit({
    plugins: [
        googleAI({
            apiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY
        })
    ],
    model: googleAI.model(&#39;gemini-2.0-flash&#39;),
});

// update the url to point to your server
const URL = &#39;http://127.0.0.1:5000&#39;;
let client = new ToolboxClient(URL);

// these tools can be passed to your application!
const toolboxTools = await client.loadToolset(&#39;toolsetName&#39;);

// Define the basics of the tool: name, description, schema and core logic
const getTool = (toolboxTool) =&amp;gt; ai.defineTool({
    name: toolboxTool.getName(),
    description: toolboxTool.getDescription(),
    schema: toolboxTool.getParamSchema()
}, toolboxTool)

// Use these tools in your Genkit applications
const tools = toolboxTools.map(getTool);
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;ADK&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://www.npmjs.com/package/@toolbox-sdk/adk&quot;&gt;Toolbox ADK SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install @toolbox-sdk/adk
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;import { ToolboxClient } from &#39;@toolbox-sdk/adk&#39;;

// update the url to point to your server
const URL = &#39;http://127.0.0.1:5000&#39;;
let client = new ToolboxClient(URL);

// these tools can be passed to your application!
const tools = await client.loadToolset(&#39;toolsetName&#39;);
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;For more detailed instructions on using the Toolbox ADK SDK, see the &lt;a href=&quot;https://github.com/googleapis/mcp-toolbox-sdk-js/raw/main/packages/toolbox-adk/README.md&quot;&gt;project&#39;s README&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
 &lt;/blockquote&gt;
&lt;/details&gt;  
&lt;details&gt; 
 &lt;summary&gt;Go (&lt;a href=&quot;https://github.com/googleapis/mcp-toolbox-sdk-go&quot;&gt;Github&lt;/a&gt;)&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;blockquote&gt; 
  &lt;details&gt; 
   &lt;summary&gt;Core&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://pkg.go.dev/github.com/googleapis/mcp-toolbox-sdk-go/core&quot;&gt;Toolbox Go SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go get github.com/googleapis/mcp-toolbox-sdk-go
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;package main

import (
  &quot;github.com/googleapis/mcp-toolbox-sdk-go/core&quot;
  &quot;context&quot;
)

func main() {
  // Make sure to add the error checks
  // update the url to point to your server
  URL := &quot;http://127.0.0.1:5000&quot;;
  ctx := context.Background()

  client, err := core.NewToolboxClient(URL)

  // Framework agnostic tools
  tools, err := client.LoadToolset(&quot;toolsetName&quot;, ctx)
}
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;For more detailed instructions on using the Toolbox Go SDK, see the &lt;a href=&quot;https://github.com/googleapis/mcp-toolbox-sdk-go/raw/main/core/README.md&quot;&gt;project&#39;s README&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;LangChain Go&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://pkg.go.dev/github.com/googleapis/mcp-toolbox-sdk-go/core&quot;&gt;Toolbox Go SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go get github.com/googleapis/mcp-toolbox-sdk-go
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;package main

import (
  &quot;context&quot;
  &quot;encoding/json&quot;

  &quot;github.com/googleapis/mcp-toolbox-sdk-go/core&quot;
  &quot;github.com/tmc/langchaingo/llms&quot;
)

func main() {
  // Make sure to add the error checks
  // update the url to point to your server
  URL := &quot;http://127.0.0.1:5000&quot;
  ctx := context.Background()

  client, err := core.NewToolboxClient(URL)

  // Framework agnostic tool
  tool, err := client.LoadTool(&quot;toolName&quot;, ctx)

  // Fetch the tool&#39;s input schema
  inputschema, err := tool.InputSchema()

  var paramsSchema map[string]any
  _ = json.Unmarshal(inputschema, &amp;amp;paramsSchema)

  // Use this tool with LangChainGo
  langChainTool := llms.Tool{
    Type: &quot;function&quot;,
    Function: &amp;amp;llms.FunctionDefinition{
      Name:        tool.Name(),
      Description: tool.Description(),
      Parameters:  paramsSchema,
    },
  }
}

&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;Genkit&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://pkg.go.dev/github.com/googleapis/mcp-toolbox-sdk-go/core&quot;&gt;Toolbox Go SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go get github.com/googleapis/mcp-toolbox-sdk-go
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;package main
import (
  &quot;context&quot;
  &quot;log&quot;

  &quot;github.com/firebase/genkit/go/genkit&quot;
  &quot;github.com/googleapis/mcp-toolbox-sdk-go/core&quot;
  &quot;github.com/googleapis/mcp-toolbox-sdk-go/tbgenkit&quot;
)

func main() {
  // Make sure to add the error checks
  // Update the url to point to your server
  URL := &quot;http://127.0.0.1:5000&quot;
  ctx := context.Background()
  g := genkit.Init(ctx)

  client, err := core.NewToolboxClient(URL)

  // Framework agnostic tool
  tool, err := client.LoadTool(&quot;toolName&quot;, ctx)

  // Convert the tool using the tbgenkit package
  // Use this tool with Genkit Go
  genkitTool, err := tbgenkit.ToGenkitTool(tool, g)
  if err != nil {
    log.Fatalf(&quot;Failed to convert tool: %v\n&quot;, err)
  }
  log.Printf(&quot;Successfully converted tool: %s&quot;, genkitTool.Name())
}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;Go GenAI&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://pkg.go.dev/github.com/googleapis/mcp-toolbox-sdk-go/core&quot;&gt;Toolbox Go SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go get github.com/googleapis/mcp-toolbox-sdk-go
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;package main

import (
  &quot;context&quot;
  &quot;encoding/json&quot;

  &quot;github.com/googleapis/mcp-toolbox-sdk-go/core&quot;
  &quot;google.golang.org/genai&quot;
)

func main() {
  // Make sure to add the error checks
  // Update the url to point to your server
  URL := &quot;http://127.0.0.1:5000&quot;
  ctx := context.Background()

  client, err := core.NewToolboxClient(URL)

  // Framework agnostic tool
  tool, err := client.LoadTool(&quot;toolName&quot;, ctx)

  // Fetch the tool&#39;s input schema
  inputschema, err := tool.InputSchema()

  var schema *genai.Schema
  _ = json.Unmarshal(inputschema, &amp;amp;schema)

  funcDeclaration := &amp;amp;genai.FunctionDeclaration{
    Name:        tool.Name(),
    Description: tool.Description(),
    Parameters:  schema,
  }

  // Use this tool with Go GenAI
  genAITool := &amp;amp;genai.Tool{
    FunctionDeclarations: []*genai.FunctionDeclaration{funcDeclaration},
  }
}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
  &lt;details&gt; 
   &lt;summary&gt;OpenAI Go&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://pkg.go.dev/github.com/googleapis/mcp-toolbox-sdk-go/core&quot;&gt;Toolbox Go SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go get github.com/googleapis/mcp-toolbox-sdk-go
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;package main

import (
  &quot;context&quot;
  &quot;encoding/json&quot;

  &quot;github.com/googleapis/mcp-toolbox-sdk-go/core&quot;
  openai &quot;github.com/openai/openai-go&quot;
)

func main() {
  // Make sure to add the error checks
  // Update the url to point to your server
  URL := &quot;http://127.0.0.1:5000&quot;
  ctx := context.Background()

  client, err := core.NewToolboxClient(URL)

  // Framework agnostic tool
  tool, err := client.LoadTool(&quot;toolName&quot;, ctx)

  // Fetch the tool&#39;s input schema
  inputschema, err := tool.InputSchema()

  var paramsSchema openai.FunctionParameters
  _ = json.Unmarshal(inputschema, &amp;amp;paramsSchema)

  // Use this tool with OpenAI Go
  openAITool := openai.ChatCompletionToolParam{
    Function: openai.FunctionDefinitionParam{
      Name:        tool.Name(),
      Description: openai.String(tool.Description()),
      Parameters:  paramsSchema,
    },
  }

}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
  &lt;details open&gt; 
   &lt;summary&gt;ADK Go&lt;/summary&gt; 
   &lt;ol&gt; 
    &lt;li&gt; &lt;p&gt;Install &lt;a href=&quot;https://pkg.go.dev/github.com/googleapis/mcp-toolbox-sdk-go/core&quot;&gt;Toolbox Go SDK&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go get github.com/googleapis/mcp-toolbox-sdk-go
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
    &lt;li&gt; &lt;p&gt;Load tools:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;package main

import (
  &quot;github.com/googleapis/mcp-toolbox-sdk-go/tbadk&quot;
  &quot;context&quot;
)

func main() {
  // Make sure to add the error checks
  // Update the url to point to your server
  URL := &quot;http://127.0.0.1:5000&quot;
  ctx := context.Background()
  client, err := tbadk.NewToolboxClient(URL)
  if err != nil {
    return fmt.Sprintln(&quot;Could not start Toolbox Client&quot;, err)
  }

  // Use this tool with ADK Go
  tool, err := client.LoadTool(&quot;toolName&quot;, ctx)
  if err != nil {
    return fmt.Sprintln(&quot;Could not load Toolbox Tool&quot;, err)
  }
}
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;For more detailed instructions on using the Toolbox Go SDK, see the &lt;a href=&quot;https://github.com/googleapis/mcp-toolbox-sdk-go/raw/main/core/README.md&quot;&gt;project&#39;s README&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
   &lt;/ol&gt; 
  &lt;/details&gt; 
 &lt;/blockquote&gt;
&lt;/details&gt;   
&lt;hr /&gt; 
&lt;h2&gt;Additional Features&lt;/h2&gt; 
&lt;h3&gt;Test tools with the Toolbox UI&lt;/h3&gt; 
&lt;p&gt;To launch Toolbox&#39;s interactive UI, use the &lt;code&gt;--ui&lt;/code&gt; flag. This allows you to test tools and toolsets with features such as authorized parameters. To learn more, visit &lt;a href=&quot;https://mcp-toolbox.dev/documentation/configuration/toolbox-ui/&quot;&gt;Toolbox UI&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;./toolbox --ui
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Telemetry&lt;/h3&gt; 
&lt;p&gt;Toolbox emits traces and metrics via OpenTelemetry. Use &lt;code&gt;--telemetry-otlp=&amp;lt;endpoint&amp;gt;&lt;/code&gt; to export to any OTLP-compatible backend like Google Cloud Monitoring, Agnost AI, or others. See the &lt;a href=&quot;https://mcp-toolbox.dev/documentation/monitoring/export_telemetry/&quot;&gt;telemetry docs&lt;/a&gt; for details.&lt;/p&gt; 
&lt;h3&gt;Generate Agent Skills&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;skills-generate&lt;/code&gt; command allows you to convert a &lt;strong&gt;toolset&lt;/strong&gt; into an &lt;strong&gt;Agent Skill&lt;/strong&gt; compatible with the &lt;a href=&quot;https://agentskills.io/specification&quot;&gt;Agent Skill specification&lt;/a&gt;. This is useful for distributing tools as portable skill packages.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;toolbox --config tools.yaml skills-generate \
  --name &quot;my-skill&quot; \
  --toolset &quot;my_toolset&quot; \
  --description &quot;A skill containing multiple tools&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Once generated, you can install the skill into the Gemini CLI:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gemini skills install ./skills/my-skill
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more details, see the &lt;a href=&quot;https://mcp-toolbox.dev/documentation/configuration/skills/&quot;&gt;Generate Agent Skills guide&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Versioning&lt;/h2&gt; 
&lt;p&gt;MCP Toolbox for Databases follows &lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The Public API includes the Toolbox Server (CLI, configuration manifests, and pre-built toolsets) and the Client SDKs.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Major versions&lt;/strong&gt; are incremented for breaking changes, such as incompatible CLI or manifest changes.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Minor versions&lt;/strong&gt; are incremented for new features, including modifications to pre-built toolsets or beta features.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Patch versions&lt;/strong&gt; are incremented for backward-compatible bug fixes.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more details, see our &lt;a href=&quot;https://mcp-toolbox.dev/reference/versioning/&quot;&gt;Full Versioning Policy&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Contributions are welcome. Please, see the &lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING&lt;/a&gt; guide to get started.&lt;/p&gt; 
&lt;p&gt;For technical details on setting up a environment for developing on Toolbox itself, see the &lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/DEVELOPER.md&quot;&gt;DEVELOPER&lt;/a&gt; guide.&lt;/p&gt; 
&lt;p&gt;Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See &lt;a href=&quot;https://raw.githubusercontent.com/googleapis/mcp-toolbox/main/CODE_OF_CONDUCT.md&quot;&gt;Contributor Code of Conduct&lt;/a&gt; for more information.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;p&gt;Join our &lt;a href=&quot;https://discord.gg/GQrFB3Ec3W&quot;&gt;Discord community&lt;/a&gt; to connect with our developers!&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/812044182/9691d4ec-d0aa-4903-b9ba-55670028f730" medium="image" />
      
    </item>
    
    <item>
      <title>Wei-Shaw/sub2api</title>
      <link>https://github.com/Wei-Shaw/sub2api</link>
      <description>&lt;p&gt;Sub2API-CRS2 一站式开源中转服务，让 Claude、Openai 、Gemini、Antigravity订阅统一接入，支持拼车共享，更高效分摊成本，原生工具无缝使用。&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Sub2API&lt;/h1&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://golang.org/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Go-1.25.7-00ADD8.svg?sanitize=true&quot; alt=&quot;Go&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://vuejs.org/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Vue-3.4+-4FC08D.svg?sanitize=true&quot; alt=&quot;Vue&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.postgresql.org/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/PostgreSQL-15+-336791.svg?sanitize=true&quot; alt=&quot;PostgreSQL&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://redis.io/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Redis-7+-DC382D.svg?sanitize=true&quot; alt=&quot;Redis&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.docker.com/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Docker-Ready-2496ED.svg?sanitize=true&quot; alt=&quot;Docker&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://trendshift.io/repositories/21823&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://trendshift.io/api/badge/repositories/21823&quot; alt=&quot;Wei-Shaw%2Fsub2api | Trendshift&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;AI API Gateway Platform for Subscription Quota Distribution&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;English | &lt;a href=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/README_CN.md&quot;&gt;中文&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/README_JA.md&quot;&gt;日本語&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Sub2API officially uses only the domains &lt;code&gt;sub2api.org&lt;/code&gt; and &lt;code&gt;pincc.ai&lt;/code&gt;. Other websites using the Sub2API name may be third-party deployments or services and are not affiliated with this project. Please verify and exercise your own judgment.&lt;/strong&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Demo&lt;/h2&gt; 
&lt;p&gt;Try Sub2API online: &lt;strong&gt;&lt;a href=&quot;https://demo.sub2api.org/&quot;&gt;https://demo.sub2api.org/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Demo credentials (shared demo environment; &lt;strong&gt;not&lt;/strong&gt; created automatically for self-hosted installs):&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Email&lt;/th&gt; 
   &lt;th&gt;Password&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;mailto:admin@sub2api.org&quot;&gt;admin@sub2api.org&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;admin123&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;Sub2API is an AI API gateway platform designed to distribute and manage API quotas from AI product subscriptions. Users can access upstream AI services through platform-generated API Keys, while the platform handles authentication, billing, load balancing, and request forwarding.&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Multi-Account Management&lt;/strong&gt; - Support multiple upstream account types (OAuth, API Key)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;API Key Distribution&lt;/strong&gt; - Generate and manage API Keys for users&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Precise Billing&lt;/strong&gt; - Token-level usage tracking and cost calculation&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Smart Scheduling&lt;/strong&gt; - Intelligent account selection with sticky sessions&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Concurrency Control&lt;/strong&gt; - Per-user and per-account concurrency limits&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rate Limiting&lt;/strong&gt; - Configurable request and token rate limits&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Built-in Payment System&lt;/strong&gt; - Supports EasyPay, Alipay, WeChat Pay, and Stripe for user self-service top-up, no separate payment service needed (&lt;a href=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/docs/PAYMENT.md&quot;&gt;Configuration Guide&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Admin Dashboard&lt;/strong&gt; - Web interface for monitoring and management&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;External System Integration&lt;/strong&gt; - Embed external systems (e.g. ticketing) via iframe to extend the admin dashboard&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;❤️ Sponsors&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;mailto:support@pincc.ai&quot;&gt;Want to appear here?&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;table&gt; 
 &lt;tbody&gt;
  &lt;tr&gt; 
   &lt;td width=&quot;180&quot; align=&quot;center&quot; valign=&quot;middle&quot;&gt;&lt;a href=&quot;https://shop.pincc.ai/&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/assets/partners/logos/pincc-logo.png&quot; alt=&quot;pincc&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td valign=&quot;middle&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://shop.pincc.ai/&quot;&gt;PinCC&lt;/a&gt;&lt;/b&gt; is the official relay service built on Sub2API, offering stable access to Claude Code, Codex, Gemini and other popular models — ready to use, no deployment or maintenance required.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;180&quot;&gt;&lt;a href=&quot;https://www.packyapi.com/register?aff=sub2api&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/assets/partners/logos/packycode.png&quot; alt=&quot;PackyCode&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Thanks to PackyCode for sponsoring this project! PackyCode is a reliable and efficient API relay service provider, offering relay services for Claude Code, Codex, Gemini, and more. PackyCode provides special discounts for our software users: register using &lt;a href=&quot;https://www.packyapi.com/register?aff=sub2api&quot;&gt;this link&lt;/a&gt; and enter the &quot;sub2api&quot; promo code during first recharge to get 10% off.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;180&quot;&gt;&lt;a href=&quot;https://poixe.com/i/sub2api&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/assets/partners/logos/poixe.png&quot; alt=&quot;PoixeAi&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Thanks to Poixe Ai for sponsoring this project! Poixe AI provides reliable LLM API services. You can leverage the platform&#39;s API endpoints to seamlessly build AI-powered products. Additionally, you can become a vendor by providing AI API resources to the platform and earn revenue. Register through the exclusive &lt;a href=&quot;https://poixe.com/i/sub2api&quot;&gt;sub2api&lt;/a&gt; referral link and receive a bonus of $5 USD on your first top-up.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;180&quot;&gt;&lt;a href=&quot;https://ctok.ai&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/assets/partners/logos/ctok.png&quot; alt=&quot;CTok&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Thanks to CTok.ai for sponsoring this project! CTok.ai is dedicated to building a one-stop AI programming tool service platform. We offer professional Claude Code packages and technical community services, with support for Google Gemini and OpenAI Codex. Through carefully designed plans and a professional tech community, we provide developers with reliable service guarantees and continuous technical support, making AI-assisted programming a true productivity tool. Click &lt;a href=&quot;https://ctok.ai&quot;&gt;here&lt;/a&gt; to register!&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;180&quot;&gt;&lt;a href=&quot;https://code.silkapi.com/&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/assets/partners/logos/silkapi.png&quot; alt=&quot;silkapi&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Thanks to SilkAPI for sponsoring this project! &lt;a href=&quot;https://code.silkapi.com/&quot;&gt;SilkAPI&lt;/a&gt; is a relay service built on Sub2API, specializing in providing high-speed and stable Codex API relay.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;180&quot;&gt;&lt;a href=&quot;https://ylscode.com/&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/assets/partners/logos/ylscode.png&quot; alt=&quot;ylscode&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Thanks to YLS Code for sponsoring this project! &lt;a href=&quot;https://ylscode.com/&quot;&gt;YLS Code&lt;/a&gt; is dedicated to building secure enterprise-grade Coding Agent productivity services, offering stable and fast Codex / Claude / Gemini subscription services along with pay-as-you-go API options for flexible choices. Register now for a limited-time 3-day Codex trial bonus!&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;180&quot;&gt;&lt;a href=&quot;https://www.aicodemirror.com/register?invitecode=KMVZQM&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/assets/partners/logos/AICodeMirror.jpg&quot; alt=&quot;AICodeMirror&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Thanks to AICodeMirror for sponsoring this project! AICodeMirror provides official high-stability relay services for Claude Code / Codex / Gemini CLI, with enterprise-grade concurrency, fast invoicing, and 24/7 dedicated technical support. Claude Code / Codex / Gemini official channels at 38% / 2% / 9% of original price, with extra discounts on top-ups! AICodeMirror offers special benefits for sub2api users: register via &lt;a href=&quot;https://www.aicodemirror.com/register?invitecode=KMVZQM&quot;&gt;this link&lt;/a&gt; to enjoy 20% off your first top-up, and enterprise customers can get up to 25% off!&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;180&quot;&gt;&lt;a href=&quot;https://aigocode.com/invite/SUB2API&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/assets/partners/logos/aigocode.png&quot; alt=&quot;AIGoCode&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Thanks to AIGoCode for sponsoring this project! AIGoCode is an all-in-one platform that integrates Claude Code, Codex, and the latest Gemini models, providing you with stable, efficient, and highly cost-effective AI coding services. The platform offers flexible subscription plans, zero risk of account suspension, direct access with no VPN required, and lightning-fast responses. AIGoCode has prepared a special benefit for sub2api users: if you register via &lt;a href=&quot;https://aigocode.com/invite/SUB2API&quot;&gt;this link&lt;/a&gt;, you&#39;ll receive an extra 10% bonus credit on your first top-up!&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;180&quot;&gt;&lt;a href=&quot;https://shop.bmoplus.com/?utm_source=github&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/assets/partners/logos/bmoplus.jpg&quot; alt=&quot;bmoplus&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Huge thanks to BmoPlus for sponsoring this project! BmoPlus is a highly reliable AI account provider built strictly for heavy AI users and developers. They offer rock-solid, ready-to-use accounts and official top-up services for ChatGPT Plus / ChatGPT Pro (Full Warranty) / Claude Pro / Super Grok / Gemini Pro. By registering and ordering through &lt;a href=&quot;https://shop.bmoplus.com/?utm_source=github&quot;&gt;BmoPlus - Premium AI Accounts &amp;amp; Top-ups&lt;/a&gt;, users can unlock the mind-blowing rate of 10% of the official GPT subscription price (90% OFF)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt;
&lt;/table&gt; 
&lt;h2&gt;Ecosystem&lt;/h2&gt; 
&lt;p&gt;Community projects that extend or integrate with Sub2API:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Project&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Features&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;s&gt;&lt;a href=&quot;https://github.com/touwaeriol/sub2apipay&quot;&gt;Sub2ApiPay&lt;/a&gt;&lt;/s&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;s&gt;Self-service payment system&lt;/s&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Now Built-in&lt;/strong&gt; — Payment is now integrated into Sub2API, no separate deployment needed. See &lt;a href=&quot;https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/docs/PAYMENT.md&quot;&gt;Payment Configuration Guide&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/ckken/sub2api-mobile&quot;&gt;sub2api-mobile&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Mobile admin console&lt;/td&gt; 
   &lt;td&gt;Cross-platform app (iOS/Android/Web) for user management, account management, monitoring dashboard, and multi-backend switching; built with Expo + React Native&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Tech Stack&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Component&lt;/th&gt; 
   &lt;th&gt;Technology&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Backend&lt;/td&gt; 
   &lt;td&gt;Go 1.25.7, Gin, Ent&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Frontend&lt;/td&gt; 
   &lt;td&gt;Vue 3.4+, Vite 5+, TailwindCSS&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Database&lt;/td&gt; 
   &lt;td&gt;PostgreSQL 15+&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Cache/Queue&lt;/td&gt; 
   &lt;td&gt;Redis 7+&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Nginx Reverse Proxy Note&lt;/h2&gt; 
&lt;p&gt;When using Nginx as a reverse proxy for Sub2API (or CRS) with Codex CLI, add the following to the &lt;code&gt;http&lt;/code&gt; block in your Nginx configuration:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-nginx&quot;&gt;underscores_in_headers on;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Nginx drops headers containing underscores by default (e.g. &lt;code&gt;session_id&lt;/code&gt;), which breaks sticky session routing in multi-account setups.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Deployment&lt;/h2&gt; 
&lt;h3&gt;Method 1: Script Installation (Recommended)&lt;/h3&gt; 
&lt;p&gt;One-click installation script that downloads pre-built binaries from GitHub Releases.&lt;/p&gt; 
&lt;h4&gt;Prerequisites&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;Linux server (amd64 or arm64)&lt;/li&gt; 
 &lt;li&gt;PostgreSQL 15+ (installed and running)&lt;/li&gt; 
 &lt;li&gt;Redis 7+ (installed and running)&lt;/li&gt; 
 &lt;li&gt;Root privileges&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Installation Steps&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -sSL https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/deploy/install.sh | sudo bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The script will:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Detect your system architecture&lt;/li&gt; 
 &lt;li&gt;Download the latest release&lt;/li&gt; 
 &lt;li&gt;Install binary to &lt;code&gt;/opt/sub2api&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Create systemd service&lt;/li&gt; 
 &lt;li&gt;Configure system user and permissions&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Post-Installation&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. Start the service
sudo systemctl start sub2api

# 2. Enable auto-start on boot
sudo systemctl enable sub2api

# 3. Open Setup Wizard in browser
# http://YOUR_SERVER_IP:8080
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The Setup Wizard will guide you through:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Database configuration&lt;/li&gt; 
 &lt;li&gt;Redis configuration&lt;/li&gt; 
 &lt;li&gt;Admin account creation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Upgrade&lt;/h4&gt; 
&lt;p&gt;You can upgrade directly from the &lt;strong&gt;Admin Dashboard&lt;/strong&gt; by clicking the &lt;strong&gt;Check for Updates&lt;/strong&gt; button in the top-left corner.&lt;/p&gt; 
&lt;p&gt;The web interface will:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Check for new versions automatically&lt;/li&gt; 
 &lt;li&gt;Download and apply updates with one click&lt;/li&gt; 
 &lt;li&gt;Support rollback if needed&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Useful Commands&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Check status
sudo systemctl status sub2api

# View logs
sudo journalctl -u sub2api -f

# Restart service
sudo systemctl restart sub2api

# Uninstall
curl -sSL https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/deploy/install.sh | sudo bash -s -- uninstall -y
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Method 2: Docker Compose (Recommended)&lt;/h3&gt; 
&lt;p&gt;Deploy with Docker Compose, including PostgreSQL and Redis containers.&lt;/p&gt; 
&lt;h4&gt;Prerequisites&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;Docker 20.10+&lt;/li&gt; 
 &lt;li&gt;Docker Compose v2+&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Quick Start (One-Click Deployment)&lt;/h4&gt; 
&lt;p&gt;Use the automated deployment script for easy setup:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Create deployment directory
mkdir -p sub2api-deploy &amp;amp;&amp;amp; cd sub2api-deploy

# Download and run deployment preparation script
curl -sSL https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/deploy/docker-deploy.sh | bash

# Start services
docker compose up -d

# View logs
docker compose logs -f sub2api
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;What the script does:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Downloads &lt;code&gt;docker-compose.local.yml&lt;/code&gt; (saved as &lt;code&gt;docker-compose.yml&lt;/code&gt;) and &lt;code&gt;.env.example&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Generates secure credentials (JWT_SECRET, TOTP_ENCRYPTION_KEY, POSTGRES_PASSWORD)&lt;/li&gt; 
 &lt;li&gt;Creates &lt;code&gt;.env&lt;/code&gt; file with auto-generated secrets&lt;/li&gt; 
 &lt;li&gt;Creates data directories (uses local directories for easy backup/migration)&lt;/li&gt; 
 &lt;li&gt;Displays generated credentials for your reference&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Manual Deployment&lt;/h4&gt; 
&lt;p&gt;If you prefer manual setup:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. Clone the repository
git clone https://github.com/Wei-Shaw/sub2api.git
cd sub2api/deploy

# 2. Copy environment configuration
cp .env.example .env

# 3. Edit configuration (generate secure passwords)
nano .env
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Required configuration in &lt;code&gt;.env&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# PostgreSQL password (REQUIRED)
POSTGRES_PASSWORD=your_secure_password_here

# JWT Secret (RECOMMENDED - keeps users logged in after restart)
JWT_SECRET=your_jwt_secret_here

# TOTP Encryption Key (RECOMMENDED - preserves 2FA after restart)
TOTP_ENCRYPTION_KEY=your_totp_key_here

# Optional: Admin account
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=your_admin_password

# Optional: Custom port
SERVER_PORT=8080
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Generate secure secrets:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Generate JWT_SECRET
openssl rand -hex 32

# Generate TOTP_ENCRYPTION_KEY
openssl rand -hex 32

# Generate POSTGRES_PASSWORD
openssl rand -hex 32
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 4. Create data directories (for local version)
mkdir -p data postgres_data redis_data

# 5. Start all services
# Option A: Local directory version (recommended - easy migration)
docker compose -f docker-compose.local.yml up -d

# Option B: Named volumes version (simple setup)
docker compose up -d

# 6. Check status
docker compose -f docker-compose.local.yml ps

# 7. View logs
docker compose -f docker-compose.local.yml logs -f sub2api
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Deployment Versions&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Version&lt;/th&gt; 
   &lt;th&gt;Data Storage&lt;/th&gt; 
   &lt;th&gt;Migration&lt;/th&gt; 
   &lt;th&gt;Best For&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;docker-compose.local.yml&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Local directories&lt;/td&gt; 
   &lt;td&gt;✅ Easy (tar entire directory)&lt;/td&gt; 
   &lt;td&gt;Production, frequent backups&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;docker-compose.yml&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Named volumes&lt;/td&gt; 
   &lt;td&gt;⚠️ Requires docker commands&lt;/td&gt; 
   &lt;td&gt;Simple setup&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt; Use &lt;code&gt;docker-compose.local.yml&lt;/code&gt; (deployed by script) for easier data management.&lt;/p&gt; 
&lt;h4&gt;Access&lt;/h4&gt; 
&lt;p&gt;Open &lt;code&gt;http://YOUR_SERVER_IP:8080&lt;/code&gt; in your browser.&lt;/p&gt; 
&lt;p&gt;If admin password was auto-generated, find it in logs:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose -f docker-compose.local.yml logs sub2api | grep &quot;admin password&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Upgrade&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Pull latest image and recreate container
docker compose -f docker-compose.local.yml pull
docker compose -f docker-compose.local.yml up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Easy Migration (Local Directory Version)&lt;/h4&gt; 
&lt;p&gt;When using &lt;code&gt;docker-compose.local.yml&lt;/code&gt;, migrate to a new server easily:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# On source server
docker compose -f docker-compose.local.yml down
cd ..
tar czf sub2api-complete.tar.gz sub2api-deploy/

# Transfer to new server
scp sub2api-complete.tar.gz user@new-server:/path/

# On new server
tar xzf sub2api-complete.tar.gz
cd sub2api-deploy/
docker compose -f docker-compose.local.yml up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Useful Commands&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Stop all services
docker compose -f docker-compose.local.yml down

# Restart
docker compose -f docker-compose.local.yml restart

# View all logs
docker compose -f docker-compose.local.yml logs -f

# Remove all data (caution!)
docker compose -f docker-compose.local.yml down
rm -rf data/ postgres_data/ redis_data/
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Method 3: Build from Source&lt;/h3&gt; 
&lt;p&gt;Build and run from source code for development or customization.&lt;/p&gt; 
&lt;h4&gt;Prerequisites&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;Go 1.21+&lt;/li&gt; 
 &lt;li&gt;Node.js 18+&lt;/li&gt; 
 &lt;li&gt;PostgreSQL 15+&lt;/li&gt; 
 &lt;li&gt;Redis 7+&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Build Steps&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. Clone the repository
git clone https://github.com/Wei-Shaw/sub2api.git
cd sub2api

# 2. Install pnpm (if not already installed)
npm install -g pnpm

# 3. Build frontend
cd frontend
pnpm install
pnpm run build
# Output will be in ../backend/internal/web/dist/

# 4. Build backend with embedded frontend
cd ../backend
go build -tags embed -o sub2api ./cmd/server

# 5. Create configuration file
cp ../deploy/config.example.yaml ./config.yaml

# 6. Edit configuration
nano config.yaml
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The &lt;code&gt;-tags embed&lt;/code&gt; flag embeds the frontend into the binary. Without this flag, the binary will not serve the frontend UI.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;Key configuration in &lt;code&gt;config.yaml&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;server:
  host: &quot;0.0.0.0&quot;
  port: 8080
  mode: &quot;release&quot;

database:
  host: &quot;localhost&quot;
  port: 5432
  user: &quot;postgres&quot;
  password: &quot;your_password&quot;
  dbname: &quot;sub2api&quot;

redis:
  host: &quot;localhost&quot;
  port: 6379
  password: &quot;&quot;

jwt:
  secret: &quot;change-this-to-a-secure-random-string&quot;
  expire_hour: 24

default:
  user_concurrency: 5
  user_balance: 0
  api_key_prefix: &quot;sk-&quot;
  rate_multiplier: 1.0
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Sora Status (Temporarily Unavailable)&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;⚠️ Sora-related features are temporarily unavailable due to technical issues in upstream integration and media delivery. Please do not rely on Sora in production at this time. Existing &lt;code&gt;gateway.sora_*&lt;/code&gt; configuration keys are reserved and may not take effect until these issues are resolved.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Additional security-related options are available in &lt;code&gt;config.yaml&lt;/code&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;cors.allowed_origins&lt;/code&gt; for CORS allowlist&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;security.url_allowlist&lt;/code&gt; for upstream/pricing/CRS host allowlists&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;security.url_allowlist.enabled&lt;/code&gt; to disable URL validation (use with caution)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;security.url_allowlist.allow_insecure_http&lt;/code&gt; to allow HTTP URLs when validation is disabled&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;security.url_allowlist.allow_private_hosts&lt;/code&gt; to allow private/local IP addresses&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;security.response_headers.enabled&lt;/code&gt; to enable configurable response header filtering (disabled uses default allowlist)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;security.csp&lt;/code&gt; to control Content-Security-Policy headers&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;billing.circuit_breaker&lt;/code&gt; to fail closed on billing errors&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;server.trusted_proxies&lt;/code&gt; to enable X-Forwarded-For parsing&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;turnstile.required&lt;/code&gt; to require Turnstile in release mode&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;⚠️ Security Warning: HTTP URL Configuration&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;When &lt;code&gt;security.url_allowlist.enabled=false&lt;/code&gt;, the system performs minimal URL validation by default, &lt;strong&gt;rejecting HTTP URLs&lt;/strong&gt; and only allowing HTTPS. To allow HTTP URLs (e.g., for development or internal testing), you must explicitly set:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;security:
  url_allowlist:
    enabled: false                # Disable allowlist checks
    allow_insecure_http: true     # Allow HTTP URLs (⚠️ INSECURE)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Or via environment variable:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;SECURITY_URL_ALLOWLIST_ENABLED=false
SECURITY_URL_ALLOWLIST_ALLOW_INSECURE_HTTP=true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Risks of allowing HTTP:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;API keys and data transmitted in &lt;strong&gt;plaintext&lt;/strong&gt; (vulnerable to interception)&lt;/li&gt; 
 &lt;li&gt;Susceptible to &lt;strong&gt;man-in-the-middle (MITM) attacks&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;NOT suitable for production&lt;/strong&gt; environments&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;When to use HTTP:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;✅ Development/testing with local servers (&lt;a href=&quot;http://localhost&quot;&gt;http://localhost&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;✅ Internal networks with trusted endpoints&lt;/li&gt; 
 &lt;li&gt;✅ Testing account connectivity before obtaining HTTPS&lt;/li&gt; 
 &lt;li&gt;❌ Production environments (use HTTPS only)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Example error without this setting:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Invalid base URL: invalid url scheme: http
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you disable URL validation or response header filtering, harden your network layer:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Enforce an egress allowlist for upstream domains/IPs&lt;/li&gt; 
 &lt;li&gt;Block private/loopback/link-local ranges&lt;/li&gt; 
 &lt;li&gt;Enforce TLS-only outbound traffic&lt;/li&gt; 
 &lt;li&gt;Strip sensitive upstream response headers at the proxy&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 6. Run the application
./sub2api
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Development Mode&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Backend (with hot reload)
cd backend
go run ./cmd/server

# Frontend (with hot reload)
cd frontend
pnpm run dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Code Generation&lt;/h4&gt; 
&lt;p&gt;When editing &lt;code&gt;backend/ent/schema&lt;/code&gt;, regenerate Ent + Wire:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd backend
go generate ./ent
go generate ./cmd/server
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Simple Mode&lt;/h2&gt; 
&lt;p&gt;Simple Mode is designed for individual developers or internal teams who want quick access without full SaaS features.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Enable: Set environment variable &lt;code&gt;RUN_MODE=simple&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Difference: Hides SaaS-related features and skips billing process&lt;/li&gt; 
 &lt;li&gt;Security note: In production, you must also set &lt;code&gt;SIMPLE_MODE_CONFIRM=true&lt;/code&gt; to allow startup&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Antigravity Support&lt;/h2&gt; 
&lt;p&gt;Sub2API supports &lt;a href=&quot;https://antigravity.so/&quot;&gt;Antigravity&lt;/a&gt; accounts. After authorization, dedicated endpoints are available for Claude and Gemini models.&lt;/p&gt; 
&lt;h3&gt;Dedicated Endpoints&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Endpoint&lt;/th&gt; 
   &lt;th&gt;Model&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/antigravity/v1/messages&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Claude models&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;/antigravity/v1beta/&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Gemini models&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Claude Code Configuration&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export ANTHROPIC_BASE_URL=&quot;http://localhost:8080/antigravity&quot;
export ANTHROPIC_AUTH_TOKEN=&quot;sk-xxx&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Hybrid Scheduling Mode&lt;/h3&gt; 
&lt;p&gt;Antigravity accounts support optional &lt;strong&gt;hybrid scheduling&lt;/strong&gt;. When enabled, the general endpoints &lt;code&gt;/v1/messages&lt;/code&gt; and &lt;code&gt;/v1beta/&lt;/code&gt; will also route requests to Antigravity accounts.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;⚠️ Warning&lt;/strong&gt;: Anthropic Claude and Antigravity Claude &lt;strong&gt;cannot be mixed within the same conversation context&lt;/strong&gt;. Use groups to isolate them properly.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Known Issues&lt;/h3&gt; 
&lt;p&gt;In Claude Code, Plan Mode cannot exit automatically. (Normally when using the native Claude API, after planning is complete, Claude Code will pop up options for users to approve or reject the plan.)&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Workaround&lt;/strong&gt;: Press &lt;code&gt;Shift + Tab&lt;/code&gt; to manually exit Plan Mode, then type your response to approve or reject the plan.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Project Structure&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;sub2api/
├── backend/                  # Go backend service
│   ├── cmd/server/           # Application entry
│   ├── internal/             # Internal modules
│   │   ├── config/           # Configuration
│   │   ├── model/            # Data models
│   │   ├── service/          # Business logic
│   │   ├── handler/          # HTTP handlers
│   │   └── gateway/          # API gateway core
│   └── resources/            # Static resources
│
├── frontend/                 # Vue 3 frontend
│   └── src/
│       ├── api/              # API calls
│       ├── stores/           # State management
│       ├── views/            # Page components
│       └── components/       # Reusable components
│
└── deploy/                   # Deployment files
    ├── docker-compose.yml    # Docker Compose configuration
    ├── .env.example          # Environment variables for Docker Compose
    ├── config.example.yaml   # Full config file for binary deployment
    └── install.sh            # One-click installation script
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Disclaimer&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Please read carefully before using this project:&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;🚨 &lt;strong&gt;Terms of Service Risk&lt;/strong&gt;: Using this project may violate Anthropic&#39;s Terms of Service. Please read Anthropic&#39;s user agreement carefully before use. All risks arising from the use of this project are borne solely by the user.&lt;/p&gt; 
 &lt;p&gt;📖 &lt;strong&gt;Disclaimer&lt;/strong&gt;: This project is for technical learning and research purposes only. The author assumes no responsibility for account suspension, service interruption, or any other losses caused by the use of this project.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Star History&lt;/h2&gt; 
&lt;a href=&quot;https://star-history.com/#Wei-Shaw/sub2api&amp;amp;Date&quot;&gt; 
 &lt;picture&gt; 
  &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://api.star-history.com/svg?repos=Wei-Shaw/sub2api&amp;amp;type=Date&amp;amp;theme=dark&quot; /&gt; 
  &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://api.star-history.com/svg?repos=Wei-Shaw/sub2api&amp;amp;type=Date&quot; /&gt; 
  &lt;img alt=&quot;Star History Chart&quot; src=&quot;https://api.star-history.com/svg?repos=Wei-Shaw/sub2api&amp;amp;type=Date&quot; /&gt; 
 &lt;/picture&gt; &lt;/a&gt; 
&lt;hr /&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;MIT License&lt;/p&gt; 
&lt;hr /&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;strong&gt;If you find this project useful, please give it a star!&lt;/strong&gt;&lt;/p&gt; 
&lt;/div&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/20ceaf1a9349c8aa56fb82df366e375ea327d46d50d9609c17bec3ee79bb8b6f/Wei-Shaw/sub2api" medium="image" />
      
    </item>
    
    <item>
      <title>QuantumNous/new-api</title>
      <link>https://github.com/QuantumNous/new-api</link>
      <description>&lt;p&gt;A unified AI model hub for aggregation &amp; distribution. It supports cross-converting various LLMs into OpenAI-compatible, Claude-compatible, or Gemini-compatible formats. A centralized gateway for personal and enterprise model management. 🍥&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/web/public/logo.png&quot; alt=&quot;new-api&quot; /&gt;&lt;/p&gt; 
 &lt;h1&gt;New API&lt;/h1&gt; 
 &lt;p&gt;🍥 &lt;strong&gt;Next-Generation LLM Gateway and AI Asset Management System&lt;/strong&gt;&lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/README.zh_CN.md&quot;&gt;简体中文&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/README.zh_TW.md&quot;&gt;繁體中文&lt;/a&gt; | &lt;strong&gt;English&lt;/strong&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/README.fr.md&quot;&gt;Français&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/README.ja.md&quot;&gt;日本語&lt;/a&gt; &lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/Calcium-Ion/new-api/main/LICENSE&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/license/Calcium-Ion/new-api?color=brightgreen&quot; alt=&quot;license&quot; /&gt; &lt;/a&gt;
  &lt;!--
  --&gt;&lt;a href=&quot;https://github.com/Calcium-Ion/new-api/releases/latest&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/v/release/Calcium-Ion/new-api?color=brightgreen&amp;amp;include_prereleases&quot; alt=&quot;release&quot; /&gt; &lt;/a&gt;
  &lt;!--
  --&gt;&lt;a href=&quot;https://hub.docker.com/r/CalciumIon/new-api&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/docker-dockerHub-blue&quot; alt=&quot;docker&quot; /&gt; &lt;/a&gt;
  &lt;!--
  --&gt;&lt;a href=&quot;https://goreportcard.com/report/github.com/Calcium-Ion/new-api&quot;&gt; &lt;img src=&quot;https://goreportcard.com/badge/github.com/Calcium-Ion/new-api&quot; alt=&quot;GoReportCard&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://trendshift.io/repositories/20180&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://trendshift.io/api/badge/repositories/20180&quot; alt=&quot;QuantumNous%2Fnew-api | Trendshift&quot; style=&quot;width: 250px; height: 55px;&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt; &lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://hellogithub.com/repository/QuantumNous/new-api&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://api.hellogithub.com/v1/widgets/recommend.svg?rid=539ac4217e69431684ad4a0bab768811&amp;amp;claim_uid=tbFPfKIDHpc4TzR&quot; alt=&quot;Featured｜HelloGitHub&quot; style=&quot;width: 250px; height: 54px;&quot; width=&quot;250&quot; height=&quot;54&quot; /&gt; &lt;/a&gt;
  &lt;!--
  --&gt;&lt;a href=&quot;https://www.producthunt.com/products/new-api/launches/new-api?embed=true&amp;amp;utm_source=badge-featured&amp;amp;utm_medium=badge&amp;amp;utm_campaign=badge-new-api&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt; &lt;img src=&quot;https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1047693&amp;amp;theme=light&amp;amp;t=1769577875005&quot; alt=&quot;New API - All-in-one AI asset management gateway. | Product Hunt&quot; style=&quot;width: 250px; height: 54px;&quot; width=&quot;250&quot; height=&quot;54&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/#-quick-start&quot;&gt;Quick Start&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/#-key-features&quot;&gt;Key Features&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/#-deployment&quot;&gt;Deployment&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/#-documentation&quot;&gt;Documentation&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/#-help-support&quot;&gt;Help&lt;/a&gt; &lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;📝 Project Description&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;This project is for personal learning purposes only, with no guarantee of stability or technical support&lt;/li&gt; 
  &lt;li&gt;Users must comply with OpenAI&#39;s &lt;a href=&quot;https://openai.com/policies/terms-of-use&quot;&gt;Terms of Use&lt;/a&gt; and &lt;strong&gt;applicable laws and regulations&lt;/strong&gt;, and must not use it for illegal purposes&lt;/li&gt; 
  &lt;li&gt;According to the &lt;a href=&quot;http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm&quot;&gt;《Interim Measures for the Management of Generative Artificial Intelligence Services》&lt;/a&gt;, please do not provide any unregistered generative AI services to the public in China.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🤝 Trusted Partners&lt;/h2&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;em&gt;No particular order&lt;/em&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://www.cherry-ai.com/&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/cherry-studio.png&quot; alt=&quot;Cherry Studio&quot; height=&quot;80&quot; /&gt; &lt;/a&gt;
 &lt;!--
  --&gt;&lt;a href=&quot;https://github.com/iOfficeAI/AionUi/&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/aionui.png&quot; alt=&quot;Aion UI&quot; height=&quot;80&quot; /&gt; &lt;/a&gt;
 &lt;!--
  --&gt;&lt;a href=&quot;https://bda.pku.edu.cn/&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/pku.png&quot; alt=&quot;Peking University&quot; height=&quot;80&quot; /&gt; &lt;/a&gt;
 &lt;!--
  --&gt;&lt;a href=&quot;https://www.compshare.cn/?ytag=GPU_yy_gh_newapi&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/ucloud.png&quot; alt=&quot;UCloud&quot; height=&quot;80&quot; /&gt; &lt;/a&gt;
 &lt;!--
  --&gt;&lt;a href=&quot;https://www.aliyun.com/&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/aliyun.png&quot; alt=&quot;Alibaba Cloud&quot; height=&quot;80&quot; /&gt; &lt;/a&gt;
 &lt;!--
  --&gt;&lt;a href=&quot;https://io.net/&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/io-net.png&quot; alt=&quot;IO.NET&quot; height=&quot;80&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🙏 Special Thanks&lt;/h2&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://www.jetbrains.com/?from=new-api&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png&quot; alt=&quot;JetBrains Logo&quot; width=&quot;120&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt;Thanks to &lt;a href=&quot;https://www.jetbrains.com/?from=new-api&quot;&gt;JetBrains&lt;/a&gt; for providing free open-source development license for this project&lt;/strong&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🚀 Quick Start&lt;/h2&gt; 
&lt;h3&gt;Using Docker Compose (Recommended)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Clone the project
git clone https://github.com/QuantumNous/new-api.git
cd new-api

# Edit docker-compose.yml configuration
nano docker-compose.yml

# Start the service
docker-compose up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Using Docker Commands&lt;/strong&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Pull the latest image
docker pull calciumion/new-api:latest

# Using SQLite (default)
docker run --name new-api -d --restart always \
  -p 3000:3000 \
  -e TZ=Asia/Shanghai \
  -v ./data:/data \
  calciumion/new-api:latest

# Using MySQL
docker run --name new-api -d --restart always \
  -p 3000:3000 \
  -e SQL_DSN=&quot;root:123456@tcp(localhost:3306)/oneapi&quot; \
  -e TZ=Asia/Shanghai \
  -v ./data:/data \
  calciumion/new-api:latest
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;💡 Tip:&lt;/strong&gt; &lt;code&gt;-v ./data:/data&lt;/code&gt; will save data in the &lt;code&gt;data&lt;/code&gt; folder of the current directory, you can also change it to an absolute path like &lt;code&gt;-v /your/custom/path:/data&lt;/code&gt;&lt;/p&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;p&gt;🎉 After deployment is complete, visit &lt;code&gt;http://localhost:3000&lt;/code&gt; to start using!&lt;/p&gt; 
&lt;p&gt;📖 For more deployment methods, please refer to &lt;a href=&quot;https://docs.newapi.pro/en/docs/installation&quot;&gt;Deployment Guide&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📚 Documentation&lt;/h2&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;h3&gt;📖 &lt;a href=&quot;https://docs.newapi.pro/en/docs&quot;&gt;Official Documentation&lt;/a&gt; | &lt;a href=&quot;https://deepwiki.com/QuantumNous/new-api&quot;&gt;&lt;img src=&quot;https://deepwiki.com/badge.svg?sanitize=true&quot; alt=&quot;Ask DeepWiki&quot; /&gt;&lt;/a&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Quick Navigation:&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Category&lt;/th&gt; 
   &lt;th&gt;Link&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🚀 Deployment Guide&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/installation&quot;&gt;Installation Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;⚙️ Environment Configuration&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/installation/config-maintenance/environment-variables&quot;&gt;Environment Variables&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;📡 API Documentation&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api&quot;&gt;API Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;❓ FAQ&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/support/faq&quot;&gt;FAQ&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;💬 Community Interaction&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/support/community-interaction&quot;&gt;Communication Channels&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;✨ Key Features&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;For detailed features, please refer to &lt;a href=&quot;https://docs.newapi.pro/en/docs/guide/wiki/basic-concepts/features-introduction&quot;&gt;Features Introduction&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;🎨 Core Functions&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🎨 New UI&lt;/td&gt; 
   &lt;td&gt;Modern user interface design&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🌍 Multi-language&lt;/td&gt; 
   &lt;td&gt;Supports Simplified Chinese, Traditional Chinese, English, French, Japanese&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🔄 Data Compatibility&lt;/td&gt; 
   &lt;td&gt;Fully compatible with the original One API database&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;📈 Data Dashboard&lt;/td&gt; 
   &lt;td&gt;Visual console and statistical analysis&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🔒 Permission Management&lt;/td&gt; 
   &lt;td&gt;Token grouping, model restrictions, user management&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;💰 Payment and Billing&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;✅ Online recharge (EPay, Stripe)&lt;/li&gt; 
 &lt;li&gt;✅ Pay-per-use model pricing&lt;/li&gt; 
 &lt;li&gt;✅ Cache billing support (OpenAI, Azure, DeepSeek, Claude, Qwen and all supported models)&lt;/li&gt; 
 &lt;li&gt;✅ Flexible billing policy configuration&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🔐 Authorization and Security&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;😈 Discord authorization login&lt;/li&gt; 
 &lt;li&gt;🤖 LinuxDO authorization login&lt;/li&gt; 
 &lt;li&gt;📱 Telegram authorization login&lt;/li&gt; 
 &lt;li&gt;🔑 OIDC unified authentication&lt;/li&gt; 
 &lt;li&gt;🔍 Key quota query usage (with &lt;a href=&quot;https://github.com/Calcium-Ion/neko-api-key-tool&quot;&gt;neko-api-key-tool&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🚀 Advanced Features&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;API Format Support:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;⚡ &lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/create-response&quot;&gt;OpenAI Responses&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;⚡ &lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/realtime/create-realtime-session&quot;&gt;OpenAI Realtime API&lt;/a&gt; (including Azure)&lt;/li&gt; 
 &lt;li&gt;⚡ &lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/create-message&quot;&gt;Claude Messages&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;⚡ &lt;a href=&quot;https://doc.newapi.pro/en/api/google-gemini-chat&quot;&gt;Google Gemini&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🔄 &lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/rerank/create-rerank&quot;&gt;Rerank Models&lt;/a&gt; (Cohere, Jina)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Intelligent Routing:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;⚖️ Channel weighted random&lt;/li&gt; 
 &lt;li&gt;🔄 Automatic retry on failure&lt;/li&gt; 
 &lt;li&gt;🚦 User-level model rate limiting&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Format Conversion:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;🔄 &lt;strong&gt;OpenAI Compatible ⇄ Claude Messages&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;🔄 &lt;strong&gt;OpenAI Compatible → Google Gemini&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;🔄 &lt;strong&gt;Google Gemini → OpenAI Compatible&lt;/strong&gt; - Text only, function calling not supported yet&lt;/li&gt; 
 &lt;li&gt;🚧 &lt;strong&gt;OpenAI Compatible ⇄ OpenAI Responses&lt;/strong&gt; - In development&lt;/li&gt; 
 &lt;li&gt;🔄 &lt;strong&gt;Thinking-to-content functionality&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Reasoning Effort Support:&lt;/strong&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;View detailed configuration&lt;/summary&gt; 
 &lt;p&gt;&lt;strong&gt;OpenAI series models:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;o3-mini-high&lt;/code&gt; - High reasoning effort&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;o3-mini-medium&lt;/code&gt; - Medium reasoning effort&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;o3-mini-low&lt;/code&gt; - Low reasoning effort&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gpt-5-high&lt;/code&gt; - High reasoning effort&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gpt-5-medium&lt;/code&gt; - Medium reasoning effort&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gpt-5-low&lt;/code&gt; - Low reasoning effort&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Claude thinking models:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;claude-3-7-sonnet-20250219-thinking&lt;/code&gt; - Enable thinking mode&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Google Gemini series models:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;gemini-2.5-flash-thinking&lt;/code&gt; - Enable thinking mode&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gemini-2.5-flash-nothinking&lt;/code&gt; - Disable thinking mode&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gemini-2.5-pro-thinking&lt;/code&gt; - Enable thinking mode&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gemini-2.5-pro-thinking-128&lt;/code&gt; - Enable thinking mode with thinking budget of 128 tokens&lt;/li&gt; 
  &lt;li&gt;You can also append &lt;code&gt;-low&lt;/code&gt;, &lt;code&gt;-medium&lt;/code&gt;, or &lt;code&gt;-high&lt;/code&gt; to any Gemini model name to request the corresponding reasoning effort (no extra thinking-budget suffix needed).&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🤖 Model Support&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;For details, please refer to &lt;a href=&quot;https://docs.newapi.pro/en/docs/api&quot;&gt;API Documentation - Relay Interface&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model Type&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Documentation&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🤖 OpenAI-Compatible&lt;/td&gt; 
   &lt;td&gt;OpenAI compatible models&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createchatcompletion&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🤖 OpenAI Responses&lt;/td&gt; 
   &lt;td&gt;OpenAI Responses format&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createresponse&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🎨 Midjourney-Proxy&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/novicezk/midjourney-proxy&quot;&gt;Midjourney-Proxy(Plus)&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://doc.newapi.pro/api/midjourney-proxy-image&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🎵 Suno-API&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Suno-API/Suno-API&quot;&gt;Suno API&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://doc.newapi.pro/api/suno-music&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🔄 Rerank&lt;/td&gt; 
   &lt;td&gt;Cohere, Jina&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/rerank/creatererank&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;💬 Claude&lt;/td&gt; 
   &lt;td&gt;Messages format&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/createmessage&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🌐 Gemini&lt;/td&gt; 
   &lt;td&gt;Google Gemini format&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/gemini/geminirelayv1beta&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🔧 Dify&lt;/td&gt; 
   &lt;td&gt;ChatFlow mode&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🎯 Custom&lt;/td&gt; 
   &lt;td&gt;Supports complete call address&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;📡 Supported Interfaces&lt;/h3&gt; 
&lt;details&gt; 
 &lt;summary&gt;View complete interface list&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createchatcompletion&quot;&gt;Chat Interface (Chat Completions)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createresponse&quot;&gt;Response Interface (Responses)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/images/openai/post-v1-images-generations&quot;&gt;Image Interface (Image)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/audio/openai/create-transcription&quot;&gt;Audio Interface (Audio)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/audio/openai/createspeech&quot;&gt;Video Interface (Video)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/embeddings/createembedding&quot;&gt;Embedding Interface (Embeddings)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/rerank/creatererank&quot;&gt;Rerank Interface (Rerank)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/realtime/createrealtimesession&quot;&gt;Realtime Conversation (Realtime)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/createmessage&quot;&gt;Claude Chat&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/gemini/geminirelayv1beta&quot;&gt;Google Gemini Chat&lt;/a&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🚢 Deployment&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Latest Docker image:&lt;/strong&gt; &lt;code&gt;calciumion/new-api:latest&lt;/code&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;📋 Deployment Requirements&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Component&lt;/th&gt; 
   &lt;th&gt;Requirement&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Local database&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;SQLite (Docker must mount &lt;code&gt;/data&lt;/code&gt; directory)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Remote database&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;MySQL ≥ 5.7.8 or PostgreSQL ≥ 9.6&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Container engine&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Docker / Docker Compose&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;⚙️ Environment Variable Configuration&lt;/h3&gt; 
&lt;details&gt; 
 &lt;summary&gt;Common environment variable configuration&lt;/summary&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Variable Name&lt;/th&gt; 
    &lt;th&gt;Description&lt;/th&gt; 
    &lt;th&gt;Default Value&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;SESSION_SECRET&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Session secret (required for multi-machine deployment)&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;CRYPTO_SECRET&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Encryption secret (required for Redis)&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;SQL_DSN&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Database connection string&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;REDIS_CONN_STRING&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Redis connection string&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;STREAMING_TIMEOUT&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Streaming timeout (seconds)&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;300&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;STREAM_SCANNER_MAX_BUFFER_MB&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Max per-line buffer (MB) for the stream scanner; increase when upstream sends huge image/base64 payloads&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;64&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;MAX_REQUEST_BODY_MB&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Max request body size (MB, counted &lt;strong&gt;after decompression&lt;/strong&gt;; prevents huge requests/zip bombs from exhausting memory). Exceeding it returns &lt;code&gt;413&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;32&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;AZURE_DEFAULT_API_VERSION&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Azure API version&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;2025-04-01-preview&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;ERROR_LOG_ENABLED&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Error log switch&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_URL&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope server address&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_APP_NAME&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope application name&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;new-api&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_BASIC_AUTH_USER&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope basic auth user&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_BASIC_AUTH_PASSWORD&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope basic auth password&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_MUTEX_RATE&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope mutex sampling rate&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_BLOCK_RATE&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope block sampling rate&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;HOSTNAME&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Hostname tag for Pyroscope&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;new-api&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;📖 &lt;strong&gt;Complete configuration:&lt;/strong&gt; &lt;a href=&quot;https://docs.newapi.pro/en/docs/installation/config-maintenance/environment-variables&quot;&gt;Environment Variables Documentation&lt;/a&gt;&lt;/p&gt; 
&lt;/details&gt; 
&lt;h3&gt;🔧 Deployment Methods&lt;/h3&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Method 1: Docker Compose (Recommended)&lt;/strong&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Clone the project
git clone https://github.com/QuantumNous/new-api.git
cd new-api

# Edit configuration
nano docker-compose.yml

# Start service
docker-compose up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Method 2: Docker Commands&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;&lt;strong&gt;Using SQLite:&lt;/strong&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run --name new-api -d --restart always \
  -p 3000:3000 \
  -e TZ=Asia/Shanghai \
  -v ./data:/data \
  calciumion/new-api:latest
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;Using MySQL:&lt;/strong&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run --name new-api -d --restart always \
  -p 3000:3000 \
  -e SQL_DSN=&quot;root:123456@tcp(localhost:3306)/oneapi&quot; \
  -e TZ=Asia/Shanghai \
  -v ./data:/data \
  calciumion/new-api:latest
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;💡 Path explanation:&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;./data:/data&lt;/code&gt; - Relative path, data saved in the data folder of the current directory&lt;/li&gt; 
   &lt;li&gt;You can also use absolute path, e.g.: &lt;code&gt;/your/custom/path:/data&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Method 3: BaoTa Panel&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ol&gt; 
  &lt;li&gt;Install BaoTa Panel (≥ 9.2.0 version)&lt;/li&gt; 
  &lt;li&gt;Search for &lt;strong&gt;New-API&lt;/strong&gt; in the application store&lt;/li&gt; 
  &lt;li&gt;One-click installation&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;📖 &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/BT.md&quot;&gt;Tutorial with images&lt;/a&gt;&lt;/p&gt; 
&lt;/details&gt; 
&lt;h3&gt;⚠️ Multi-machine Deployment Considerations&lt;/h3&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Must set&lt;/strong&gt; &lt;code&gt;SESSION_SECRET&lt;/code&gt; - Otherwise login status inconsistent&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Shared Redis must set&lt;/strong&gt; &lt;code&gt;CRYPTO_SECRET&lt;/code&gt; - Otherwise data cannot be decrypted&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;h3&gt;🔄 Channel Retry and Cache&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Retry configuration:&lt;/strong&gt; &lt;code&gt;Settings → Operation Settings → General Settings → Failure Retry Count&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Cache configuration:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;REDIS_CONN_STRING&lt;/code&gt;: Redis cache (recommended)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;MEMORY_CACHE_ENABLED&lt;/code&gt;: Memory cache&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🔗 Related Projects&lt;/h2&gt; 
&lt;h3&gt;Upstream Projects&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Project&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/songquanpeng/one-api&quot;&gt;One API&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Original project base&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/novicezk/midjourney-proxy&quot;&gt;Midjourney-Proxy&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Midjourney interface support&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Supporting Tools&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Project&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Calcium-Ion/neko-api-key-tool&quot;&gt;neko-api-key-tool&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Key quota query tool&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Calcium-Ion/new-api-horizon&quot;&gt;new-api-horizon&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;New API high-performance optimized version&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;💬 Help Support&lt;/h2&gt; 
&lt;h3&gt;📖 Documentation Resources&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Resource&lt;/th&gt; 
   &lt;th&gt;Link&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;📘 FAQ&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/support/faq&quot;&gt;FAQ&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;💬 Community Interaction&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/support/community-interaction&quot;&gt;Communication Channels&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🐛 Issue Feedback&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/support/feedback-issues&quot;&gt;Issue Feedback&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;📚 Complete Documentation&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs&quot;&gt;Official Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;🤝 Contribution Guide&lt;/h3&gt; 
&lt;p&gt;Welcome all forms of contribution!&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;🐛 Report Bugs&lt;/li&gt; 
 &lt;li&gt;💡 Propose New Features&lt;/li&gt; 
 &lt;li&gt;📝 Improve Documentation&lt;/li&gt; 
 &lt;li&gt;🔧 Submit Code&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📜 License&lt;/h2&gt; 
&lt;p&gt;This project is licensed under the &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/LICENSE&quot;&gt;GNU Affero General Public License v3.0 (AGPLv3)&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;This is an open-source project developed based on &lt;a href=&quot;https://github.com/songquanpeng/one-api&quot;&gt;One API&lt;/a&gt; (MIT License).&lt;/p&gt; 
&lt;p&gt;If your organization&#39;s policies do not permit the use of AGPLv3-licensed software, or if you wish to avoid the open-source obligations of AGPLv3, please contact us at: &lt;a href=&quot;mailto:support@quantumnous.com&quot;&gt;support@quantumnous.com&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🌟 Star History&lt;/h2&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://star-history.com/#Calcium-Ion/new-api&amp;amp;Date&quot;&gt;&lt;img src=&quot;https://api.star-history.com/svg?repos=Calcium-Ion/new-api&amp;amp;type=Date&quot; alt=&quot;Star History Chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;h3&gt;💖 Thank you for using New API&lt;/h3&gt; 
 &lt;p&gt;If this project is helpful to you, welcome to give us a ⭐️ Star！&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs&quot;&gt;Official Documentation&lt;/a&gt;&lt;/strong&gt; • &lt;strong&gt;&lt;a href=&quot;https://github.com/Calcium-Ion/new-api/issues&quot;&gt;Issue Feedback&lt;/a&gt;&lt;/strong&gt; • &lt;strong&gt;&lt;a href=&quot;https://github.com/Calcium-Ion/new-api/releases&quot;&gt;Latest Release&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;sub&gt;Built with ❤️ by QuantumNous&lt;/sub&gt;&lt;/p&gt; 
&lt;/div&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/acb76b42b9849241bb0907284904bbc5c0fe1dd19aee100c747532ccf7b58615/QuantumNous/new-api" medium="image" />
      
    </item>
    
    <item>
      <title>mostlygeek/llama-swap</title>
      <link>https://github.com/mostlygeek/llama-swap</link>
      <description>&lt;p&gt;Reliable model swapping for any local OpenAI/Anthropic compatible server - llama.cpp, vllm, etc&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/mostlygeek/llama-swap/main/docs/assets/hero3.webp&quot; alt=&quot;llama-swap header image&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/downloads/mostlygeek/llama-swap/total&quot; alt=&quot;GitHub Downloads (all assets, all releases)&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/mostlygeek/llama-swap/go-ci.yml&quot; alt=&quot;GitHub Actions Workflow Status&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/stars/mostlygeek/llama-swap&quot; alt=&quot;GitHub Repo stars&quot; /&gt;&lt;/p&gt; 
&lt;h1&gt;llama-swap&lt;/h1&gt; 
&lt;p&gt;Run multiple generative AI models on your machine and hot-swap between them on demand. llama-swap works with any OpenAI and Anthropic API compatible server and is used by thousands of people to power their local AI workflows.&lt;/p&gt; 
&lt;p&gt;Built in Go for performance and simplicity, llama-swap has zero dependencies and is incredibly easy to set up. Get started in minutes - just one binary and one configuration file.&lt;/p&gt; 
&lt;h2&gt;Features:&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;✅ Easy to deploy and configure: one binary, one configuration file. no external dependencies&lt;/li&gt; 
 &lt;li&gt;✅ On-demand model switching&lt;/li&gt; 
 &lt;li&gt;✅ Use any local OpenAI compatible server (llama.cpp, vllm, tabbyAPI, stable-diffusion.cpp, etc.) 
  &lt;ul&gt; 
   &lt;li&gt;future proof, upgrade your inference servers at any time.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;✅ OpenAI API supported endpoints: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;v1/completions&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;v1/chat/completions&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;v1/responses&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;v1/embeddings&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;v1/audio/speech&lt;/code&gt; (&lt;a href=&quot;https://github.com/mostlygeek/llama-swap/issues/36&quot;&gt;#36&lt;/a&gt;)&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;v1/audio/transcriptions&lt;/code&gt; (&lt;a href=&quot;https://github.com/mostlygeek/llama-swap/issues/41#issuecomment-2722637867&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;v1/audio/voices&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;v1/images/generations&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;v1/images/edits&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;✅ Anthropic API supported endpoints: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;v1/messages&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;v1/messages/count_tokens&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;✅ llama-server (llama.cpp) supported endpoints 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;v1/rerank&lt;/code&gt;, &lt;code&gt;v1/reranking&lt;/code&gt;, &lt;code&gt;/rerank&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;/infill&lt;/code&gt; - for code infilling&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;/completion&lt;/code&gt; - for completion endpoint&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;✅ SDAPI via &lt;a href=&quot;https://github.com/leejet/stable-diffusion.cpp/tree/master/examples/server&quot;&gt;stable-diffusion.cpp&#39;s server&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;/sdapi/v1/txt2img&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;/sdapi/v1/img2img&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;/sdapi/v1/loras&lt;/code&gt; - requires &lt;code&gt;model&lt;/code&gt; in request body to fetch the correct loras&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;✅ llama-swap API 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;/ui&lt;/code&gt; - web UI&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;/upstream/:model_id&lt;/code&gt; - direct access to upstream server (&lt;a href=&quot;https://github.com/mostlygeek/llama-swap/pull/31&quot;&gt;demo&lt;/a&gt;)&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;/models/unload&lt;/code&gt; - manually unload running models (&lt;a href=&quot;https://github.com/mostlygeek/llama-swap/issues/58&quot;&gt;#58&lt;/a&gt;)&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;/running&lt;/code&gt; - list currently running models (&lt;a href=&quot;https://github.com/mostlygeek/llama-swap/issues/61&quot;&gt;#61&lt;/a&gt;)&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;/log&lt;/code&gt; - remote log monitoring&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;/health&lt;/code&gt; - just returns &quot;OK&quot;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;✅ API Key support - define keys to restrict access to API endpoints&lt;/li&gt; 
 &lt;li&gt;✅ Customizable 
  &lt;ul&gt; 
   &lt;li&gt;Run concurrent models with a custom DSL swap matrix (&lt;a href=&quot;https://github.com/mostlygeek/llama-swap/issues/643&quot;&gt;#643&lt;/a&gt;)&lt;/li&gt; 
   &lt;li&gt;Automatic unloading of models after timeout by setting a &lt;code&gt;ttl&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;Reliable Docker and Podman support using &lt;code&gt;cmd&lt;/code&gt; and &lt;code&gt;cmdStop&lt;/code&gt; together&lt;/li&gt; 
   &lt;li&gt;Preload models on startup with &lt;code&gt;hooks&lt;/code&gt; (&lt;a href=&quot;https://github.com/mostlygeek/llama-swap/pull/235&quot;&gt;#235&lt;/a&gt;)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Web UI&lt;/h3&gt; 
&lt;p&gt;llama-swap includes a real time web interface with a playground for testing out all sorts of local models:&lt;/p&gt; 
&lt;img width=&quot;1125&quot; height=&quot;876&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/8ee41947-97af-463d-b0f0-8e9c478fac07&quot; /&gt; 
&lt;p&gt;View detailed token metrics:&lt;/p&gt; 
&lt;img width=&quot;1111&quot; height=&quot;515&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/64bfb280-d7a3-4126-971a-a128fd40410c&quot; /&gt; 
&lt;p&gt;Inspect request and responses:&lt;/p&gt; 
&lt;img width=&quot;1111&quot; height=&quot;720&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/24fe4aca-1448-4d7c-b9e8-a967589bda6c&quot; /&gt; 
&lt;p&gt;Manually load and unload models:&lt;/p&gt; 
&lt;img width=&quot;1109&quot; height=&quot;719&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/02b1e1f2-abd0-4050-84ae-facd66ff01c4&quot; /&gt; 
&lt;p&gt;Real time log streaming:&lt;/p&gt; 
&lt;img width=&quot;1107&quot; height=&quot;559&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/39669a10-cff2-409e-836a-5bad8bd0140c&quot; /&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;llama-swap can be installed in multiple ways&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Docker&lt;/li&gt; 
 &lt;li&gt;Homebrew (OSX and Linux)&lt;/li&gt; 
 &lt;li&gt;WinGet&lt;/li&gt; 
 &lt;li&gt;From release binaries&lt;/li&gt; 
 &lt;li&gt;From source&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Docker Install (&lt;a href=&quot;https://github.com/mostlygeek/llama-swap/pkgs/container/llama-swap&quot;&gt;download images&lt;/a&gt;)&lt;/h3&gt; 
&lt;p&gt;Nightly container images with llama-swap and llama-server are built for multiple platforms (cuda, vulkan, intel, etc.) including &lt;a href=&quot;https://raw.githubusercontent.com/mostlygeek/llama-swap/main/docs/container-security.md&quot;&gt;non-root variants with improved security&lt;/a&gt;. The stable-diffusion.cpp server is also included for the musa and vulkan platforms.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;$ docker pull ghcr.io/mostlygeek/llama-swap:cuda

# run with a custom configuration and models directory
$ docker run -it --rm --runtime nvidia -p 9292:8080 \
 -v /path/to/models:/models \
 -v /path/to/custom/config.yaml:/app/config.yaml \
 ghcr.io/mostlygeek/llama-swap:cuda

# configuration hot reload supported with a
# directory volume mount
$ docker run -it --rm --runtime nvidia -p 9292:8080 \
 -v /path/to/models:/models \
 -v /path/to/custom/config.yaml:/app/config.yaml \
 -v /path/to/config:/config \
 ghcr.io/mostlygeek/llama-swap:cuda -config /config/config.yaml -watch-config
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt; more examples &lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# pull latest images per platform
docker pull ghcr.io/mostlygeek/llama-swap:cpu
docker pull ghcr.io/mostlygeek/llama-swap:cuda
docker pull ghcr.io/mostlygeek/llama-swap:vulkan
docker pull ghcr.io/mostlygeek/llama-swap:intel
docker pull ghcr.io/mostlygeek/llama-swap:musa

# tagged llama-swap, platform and llama-server version images
docker pull ghcr.io/mostlygeek/llama-swap:v166-cuda-b6795

# non-root cuda
docker pull ghcr.io/mostlygeek/llama-swap:cuda-non-root

&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Homebrew Install (macOS/Linux)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;brew tap mostlygeek/llama-swap
brew install llama-swap
llama-swap --config path/to/config.yaml --listen localhost:8080
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;WinGet Install (Windows)&lt;/h3&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;WinGet is maintained by community contributor &lt;a href=&quot;https://github.com/Dvd-Znf&quot;&gt;Dvd-Znf&lt;/a&gt; (&lt;a href=&quot;https://github.com/mostlygeek/llama-swap/issues/327&quot;&gt;#327&lt;/a&gt;). It is not an official part of llama-swap.&lt;/p&gt; 
&lt;/div&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# install
C:\&amp;gt; winget install llama-swap

# upgrade
C:\&amp;gt; winget upgrade llama-swap
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Pre-built Binaries&lt;/h3&gt; 
&lt;p&gt;Binaries are available on the &lt;a href=&quot;https://github.com/mostlygeek/llama-swap/releases&quot;&gt;release&lt;/a&gt; page for Linux, Mac, Windows and FreeBSD.&lt;/p&gt; 
&lt;h3&gt;Building from source&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Building requires Go and Node.js (for UI).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git clone https://github.com/mostlygeek/llama-swap.git&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;make clean all&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;look in the &lt;code&gt;build/&lt;/code&gt; subdirectory for the llama-swap binary&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Configuration&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;# minimum viable config.yaml

models:
  model1:
    cmd: llama-server --port ${PORT} --model /path/to/model.gguf
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;That&#39;s all you need to get started:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;models&lt;/code&gt; - holds all model configurations&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;model1&lt;/code&gt; - the ID used in API calls&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cmd&lt;/code&gt; - the command to run to start the server.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;${PORT}&lt;/code&gt; - an automatically assigned port number&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Almost all configuration settings are optional and can be added one step at a time:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Advanced features 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;matrix&lt;/code&gt; to run concurrent models with a custom swap logic DSL&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;hooks&lt;/code&gt; to run things on startup&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;macros&lt;/code&gt; reusable snippets&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Model customization 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;ttl&lt;/code&gt; to automatically unload models&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;aliases&lt;/code&gt; to use familiar model names (e.g., &quot;gpt-4o-mini&quot;)&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;env&lt;/code&gt; to pass custom environment variables to inference servers&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;cmdStop&lt;/code&gt; gracefully stop Docker/Podman containers&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;useModelName&lt;/code&gt; to override model names sent to upstream servers&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;${PORT}&lt;/code&gt; automatic port variables for dynamic port assignment&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;filters&lt;/code&gt; rewrite parts of requests before sending to the upstream server&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/mostlygeek/llama-swap/main/docs/configuration.md&quot;&gt;configuration documentation&lt;/a&gt; for all options.&lt;/p&gt; 
&lt;h2&gt;How does llama-swap work?&lt;/h2&gt; 
&lt;p&gt;When a request is made to an OpenAI compatible endpoint, llama-swap will extract the &lt;code&gt;model&lt;/code&gt; value and load the appropriate server configuration to serve it. If the wrong upstream server is running, it will be replaced with the correct one. This is where the &quot;swap&quot; part comes in. The upstream server is automatically swapped to handle the request correctly.&lt;/p&gt; 
&lt;p&gt;In the most basic configuration llama-swap handles one model at a time. For more advanced use cases, using a &lt;code&gt;matrix&lt;/code&gt; allows multiple models to be loaded at the same time. You have complete control over how your system resources are used.&lt;/p&gt; 
&lt;h2&gt;Reverse Proxy Configuration (nginx)&lt;/h2&gt; 
&lt;p&gt;If you deploy llama-swap behind nginx, disable response buffering for streaming endpoints. By default, nginx buffers responses which breaks Server‑Sent Events (SSE) and streaming chat completion. (&lt;a href=&quot;https://github.com/mostlygeek/llama-swap/issues/236&quot;&gt;#236&lt;/a&gt;)&lt;/p&gt; 
&lt;p&gt;Recommended nginx configuration snippets:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-nginx&quot;&gt;# SSE for UI events/logs
location /api/events {
    proxy_pass http://your-llama-swap-backend;
    proxy_buffering off;
    proxy_cache off;
}

# Streaming chat completions (stream=true)
location /v1/chat/completions {
    proxy_pass http://your-llama-swap-backend;
    proxy_buffering off;
    proxy_cache off;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;As a safeguard, llama-swap also sets &lt;code&gt;X-Accel-Buffering: no&lt;/code&gt; on SSE responses. However, explicitly disabling &lt;code&gt;proxy_buffering&lt;/code&gt; at your reverse proxy is still recommended for reliable streaming behavior.&lt;/p&gt; 
&lt;h2&gt;Monitoring Logs on the CLI&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# sends up to the last 10KB of logs
$ curl http://host/logs

# streams combined logs
curl -Ns http://host/logs/stream

# stream llama-swap&#39;s proxy status logs
curl -Ns http://host/logs/stream/proxy

# stream logs from upstream processes that llama-swap loads
curl -Ns http://host/logs/stream/upstream

# stream logs only from a specific model
curl -Ns http://host/logs/stream/{model_id}

# stream and filter logs with linux pipes
curl -Ns http://host/logs/stream | grep &#39;eval time&#39;

# appending ?no-history will disable sending buffered history first
curl -Ns &#39;http://host/logs/stream?no-history&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Do I need to use llama.cpp&#39;s server (llama-server)?&lt;/h2&gt; 
&lt;p&gt;Any OpenAI compatible server would work. llama-swap was originally designed for llama-server and it is the best supported.&lt;/p&gt; 
&lt;p&gt;For Python based inference servers like vllm or tabbyAPI it is recommended to run them via podman or docker. This provides clean environment isolation as well as responding correctly to &lt;code&gt;SIGTERM&lt;/code&gt; signals for proper shutdown.&lt;/p&gt; 
&lt;h2&gt;Star History&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;⭐️ Star this project to help others discover it!&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.star-history.com/#mostlygeek/llama-swap&amp;amp;Date&quot;&gt;&lt;img src=&quot;https://api.star-history.com/svg?repos=mostlygeek/llama-swap&amp;amp;type=Date&quot; alt=&quot;Star History Chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/5efc38c5576b496214feafbf19483450df7a5c3a321d14204b0cf2fa5eb6342d/mostlygeek/llama-swap" medium="image" />
      
    </item>
    
    <item>
      <title>netbirdio/netbird</title>
      <link>https://github.com/netbirdio/netbird</link>
      <description>&lt;p&gt;Connect your devices into a secure WireGuard®-based overlay network with SSO, MFA and granular access controls.&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;br /&gt; 
 &lt;br /&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;img width=&quot;234&quot; src=&quot;https://raw.githubusercontent.com/netbirdio/netbird/main/docs/media/logo-full.png&quot; /&gt; &lt;/p&gt; 
 &lt;p&gt; &lt;a href=&quot;https://img.shields.io/badge/license-BSD--3-blue)&quot;&gt; &lt;img src=&quot;https://sonarcloud.io/api/project_badges/measure?project=netbirdio_netbird&amp;amp;metric=alert_status&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://github.com/netbirdio/netbird/raw/main/LICENSE&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/license-BSD--3-blue&quot; /&gt; &lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://docs.netbird.io/slack-url&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/slack-@netbird-red.svg?logo=slack&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://forum.netbird.io&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/community forum-@netbird-red.svg?logo=discourse&quot; /&gt; &lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://gurubase.io/g/netbird&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/Gurubase-Ask%20NetBird%20Guru-006BFF&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;/div&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt; Start using NetBird at &lt;a href=&quot;https://netbird.io/pricing&quot;&gt;netbird.io&lt;/a&gt; &lt;br /&gt; See &lt;a href=&quot;https://netbird.io/docs/&quot;&gt;Documentation&lt;/a&gt; &lt;br /&gt; Join our &lt;a href=&quot;https://docs.netbird.io/slack-url&quot;&gt;Slack channel&lt;/a&gt; or our &lt;a href=&quot;https://forum.netbird.io&quot;&gt;Community forum&lt;/a&gt; &lt;br /&gt; &lt;/strong&gt; &lt;br /&gt; &lt;strong&gt; 🚀 &lt;a href=&quot;https://careers.netbird.io&quot;&gt;We are hiring! Join us at careers.netbird.io&lt;/a&gt; &lt;/strong&gt; &lt;br /&gt; &lt;br /&gt; &lt;a href=&quot;https://registry.terraform.io/providers/netbirdio/netbird/latest&quot;&gt; New: NetBird terraform provider &lt;/a&gt; &lt;/p&gt; 
&lt;br /&gt; 
&lt;p&gt;&lt;strong&gt;NetBird combines a configuration-free peer-to-peer private network and a centralized access control system in a single platform, making it easy to create secure private networks for your organization or home.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Connect.&lt;/strong&gt; NetBird creates a WireGuard-based overlay network that automatically connects your machines over an encrypted tunnel, leaving behind the hassle of opening ports, complex firewall rules, VPN gateways, and so forth.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Secure.&lt;/strong&gt; NetBird enables secure remote access by applying granular access policies while allowing you to manage them intuitively from a single place. Works universally on any infrastructure.&lt;/p&gt; 
&lt;h3&gt;Open Source Network Security in a Single Platform&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/10cec749-bb56-4ab3-97af-4e38850108d2&quot;&gt;https://github.com/user-attachments/assets/10cec749-bb56-4ab3-97af-4e38850108d2&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Self-Host NetBird (Video)&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://youtu.be/bZAgpT6nzaQ&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/bZAgpT6nzaQ/0.jpg&quot; alt=&quot;Watch the video&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Key features&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Connectivity&lt;/th&gt; 
   &lt;th&gt;Management&lt;/th&gt; 
   &lt;th&gt;Security&lt;/th&gt; 
   &lt;th&gt;Automation&lt;/th&gt; 
   &lt;th&gt;Platforms&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] Kernel WireGuard&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://github.com/netbirdio/dashboard&quot;&gt;Admin Web UI&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/how-to/installation#running-net-bird-with-sso-login&quot;&gt;SSO &amp;amp; MFA support&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/api&quot;&gt;Public API&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] Linux&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] Peer-to-peer connections&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] Auto peer discovery and configuration&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/how-to/manage-network-access&quot;&gt;Access control - groups &amp;amp; rules&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/how-to/register-machines-using-setup-keys&quot;&gt;Setup keys for bulk network provisioning&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] Mac&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] Connection relay fallback&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/selfhosted/identity-providers&quot;&gt;IdP integrations&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/how-to/audit-events-logging&quot;&gt;Activity logging&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/selfhosted/selfhosted-quickstart&quot;&gt;Self-hosting quickstart script&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] Windows&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/how-to/routing-traffic-to-private-networks&quot;&gt;Routes to external networks&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/how-to/manage-dns-in-your-network&quot;&gt;Private DNS&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/how-to/manage-posture-checks&quot;&gt;Device posture checks&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] IdP groups sync with JWT&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] Android&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] NAT traversal with BPF&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/how-to/add-users-to-your-network&quot;&gt;Multiuser support&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] Peer-to-peer encryption&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] iOS&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://netbird.io/knowledge-hub/the-first-quantum-resistant-mesh-vpn&quot;&gt;Quantum-resistance with Rosenpass&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] OpenWRT&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/how-to/enforce-periodic-user-authentication&quot;&gt;Periodic re-authentication&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] &lt;a href=&quot;https://docs.netbird.io/how-to/netbird-on-faas&quot;&gt;Serverless&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;
    &lt;ul&gt;
     &lt;li&gt;- [x] Docker&lt;/li&gt;
    &lt;/ul&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Quickstart with NetBird Cloud&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Download and install NetBird at &lt;a href=&quot;https://app.netbird.io/install&quot;&gt;https://app.netbird.io/install&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Follow the steps to sign-up with Google, Microsoft, GitHub or your email address.&lt;/li&gt; 
 &lt;li&gt;Check NetBird &lt;a href=&quot;https://app.netbird.io/&quot;&gt;admin UI&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Add more machines.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Quickstart with self-hosted NetBird&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;This is the quickest way to try self-hosted NetBird. It should take around 5 minutes to get started if you already have a public domain and a VM. Follow the &lt;a href=&quot;https://docs.netbird.io/selfhosted/selfhosted-guide#advanced-guide-with-a-custom-identity-provider&quot;&gt;Advanced guide with a custom identity provider&lt;/a&gt; for installations with different IDPs.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;Infrastructure requirements:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;A Linux VM with at least &lt;strong&gt;1CPU&lt;/strong&gt; and &lt;strong&gt;2GB&lt;/strong&gt; of memory.&lt;/li&gt; 
 &lt;li&gt;The VM should be publicly accessible on TCP ports &lt;strong&gt;80&lt;/strong&gt; and &lt;strong&gt;443&lt;/strong&gt; and UDP port: &lt;strong&gt;3478&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Public domain&lt;/strong&gt; name pointing to the VM.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Software requirements:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Docker installed on the VM with the docker-compose plugin (&lt;a href=&quot;https://docs.docker.com/engine/install/&quot;&gt;Docker installation guide&lt;/a&gt;) or docker with docker-compose in version 2 or higher.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://jqlang.github.io/jq/&quot;&gt;jq&lt;/a&gt; installed. In most distributions Usually available in the official repositories and can be installed with &lt;code&gt;sudo apt install jq&lt;/code&gt; or &lt;code&gt;sudo yum install jq&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://curl.se/&quot;&gt;curl&lt;/a&gt; installed. Usually available in the official repositories and can be installed with &lt;code&gt;sudo apt install curl&lt;/code&gt; or &lt;code&gt;sudo yum install curl&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Download and run the installation script:&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export NETBIRD_DOMAIN=netbird.example.com; curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started.sh | bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;Once finished, you can manage the resources via &lt;code&gt;docker-compose&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;A bit on NetBird internals&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Every machine in the network runs &lt;a href=&quot;https://raw.githubusercontent.com/netbirdio/netbird/main/client/&quot;&gt;NetBird Agent (or Client)&lt;/a&gt; that manages WireGuard.&lt;/li&gt; 
 &lt;li&gt;Every agent connects to &lt;a href=&quot;https://raw.githubusercontent.com/netbirdio/netbird/main/management/&quot;&gt;Management Service&lt;/a&gt; that holds network state, manages peer IPs, and distributes network updates to agents (peers).&lt;/li&gt; 
 &lt;li&gt;NetBird agent uses WebRTC ICE implemented in &lt;a href=&quot;https://github.com/pion/ice&quot;&gt;pion/ice library&lt;/a&gt; to discover connection candidates when establishing a peer-to-peer connection between machines.&lt;/li&gt; 
 &lt;li&gt;Connection candidates are discovered with the help of &lt;a href=&quot;https://en.wikipedia.org/wiki/STUN&quot;&gt;STUN&lt;/a&gt; servers.&lt;/li&gt; 
 &lt;li&gt;Agents negotiate a connection through &lt;a href=&quot;https://raw.githubusercontent.com/netbirdio/netbird/main/signal/&quot;&gt;Signal Service&lt;/a&gt; passing p2p encrypted messages with candidates.&lt;/li&gt; 
 &lt;li&gt;Sometimes the NAT traversal is unsuccessful due to strict NATs (e.g. mobile carrier-grade NAT) and a p2p connection isn&#39;t possible. When this occurs the system falls back to a relay server called &lt;a href=&quot;https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT&quot;&gt;TURN&lt;/a&gt;, and a secure WireGuard tunnel is established via the TURN server.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/coturn/coturn&quot;&gt;Coturn&lt;/a&gt; is the one that has been successfully used for STUN and TURN in NetBird setups.&lt;/p&gt; 
&lt;p float=&quot;left&quot; align=&quot;middle&quot;&gt; &lt;img src=&quot;https://docs.netbird.io/docs-static/img/about-netbird/high-level-dia.png&quot; width=&quot;700&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;See a complete &lt;a href=&quot;https://docs.netbird.io/about-netbird/how-netbird-works#architecture&quot;&gt;architecture overview&lt;/a&gt; for details.&lt;/p&gt; 
&lt;h3&gt;Community projects&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/physk/netbird-installer&quot;&gt;NetBird installer script&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://galaxy.ansible.com/ui/repo/published/dominion_solutions/netbird/&quot;&gt;NetBird ansible collection by Dominion Solutions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/n0pashkov/netbird-tui&quot;&gt;netbird-tui&lt;/a&gt; — terminal UI for managing NetBird peers, routes, and settings&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The &lt;code&gt;main&lt;/code&gt; branch may be in an &lt;em&gt;unstable or even broken state&lt;/em&gt; during development. For stable versions, see &lt;a href=&quot;https://github.com/netbirdio/netbird/releases&quot;&gt;releases&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Support acknowledgement&lt;/h3&gt; 
&lt;p&gt;In November 2022, NetBird joined the &lt;a href=&quot;https://www.forschung-it-sicherheit-kommunikationssysteme.de/foerderung/bekanntmachungen/startup-secure&quot;&gt;StartUpSecure program&lt;/a&gt; sponsored by The Federal Ministry of Education and Research of The Federal Republic of Germany. Together with &lt;a href=&quot;https://cispa.de/en&quot;&gt;CISPA Helmholtz Center for Information Security&lt;/a&gt; NetBird brings the security best practices and simplicity to private networking.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/700848/203091324-c6d311a0-22b5-4b05-a288-91cbc6cdcc46.png&quot; alt=&quot;CISPA_Logo_BLACK_EN_RZ_RGB (1)&quot; /&gt;&lt;/p&gt; 
&lt;h3&gt;Testimonials&lt;/h3&gt; 
&lt;p&gt;We use open-source technologies like &lt;a href=&quot;https://www.wireguard.com/&quot;&gt;WireGuard®&lt;/a&gt;, &lt;a href=&quot;https://github.com/pion/ice&quot;&gt;Pion ICE (WebRTC)&lt;/a&gt;, &lt;a href=&quot;https://github.com/coturn/coturn&quot;&gt;Coturn&lt;/a&gt;, and &lt;a href=&quot;https://rosenpass.eu&quot;&gt;Rosenpass&lt;/a&gt;. We very much appreciate the work these guys are doing and we&#39;d greatly appreciate if you could support them in any way (e.g., by giving a star or a contribution).&lt;/p&gt; 
&lt;h3&gt;Legal&lt;/h3&gt; 
&lt;p&gt;This repository is licensed under BSD-3-Clause license that applies to all parts of the repository except for the directories management/, signal/ and relay/. Those directories are licensed under the GNU Affero General Public License version 3.0 (AGPLv3). See the respective LICENSE files inside each directory.&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;WireGuard&lt;/em&gt; and the &lt;em&gt;WireGuard&lt;/em&gt; logo are &lt;a href=&quot;https://www.wireguard.com/trademark-policy/&quot;&gt;registered trademarks&lt;/a&gt; of Jason A. Donenfeld.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/b81123c42fa3e5987e1d710b3872dd171f49534f65b4c9bd25526bdcf59a3b48/netbirdio/netbird" medium="image" />
      
    </item>
    
    <item>
      <title>rapidaai/voice-ai</title>
      <link>https://github.com/rapidaai/voice-ai</link>
      <description>&lt;p&gt;Rapida is an open-source, end-to-end voice AI orchestration platform for building real-time conversational voice agents with audio streaming, STT, TTS, VAD, multi-channel integration, agent state management, and observability.&lt;/p&gt;&lt;hr&gt;&lt;picture&gt; 
 &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://raw.githubusercontent.com/rapidaai/voice-ai/main/.github/banner-02.jpg&quot; /&gt; 
 &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://raw.githubusercontent.com/rapidaai/voice-ai/main/.github/banner-02.jpg&quot; /&gt; 
 &lt;img style=&quot;width:100%;&quot; src=&quot;https://raw.githubusercontent.com/rapidaai/voice-ai/main/.github/banner-02.jpg&quot; alt=&quot;Banner&quot; /&gt; 
&lt;/picture&gt; 
&lt;h1&gt;Rapida: End-to-End Voice Orchestration Platform&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://rapida.ai&quot;&gt;Rapida&lt;/a&gt; is an open-source platform for designing, building, and deploying voice agents at scale.&lt;br /&gt; It’s built around three core principles:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Reliable&lt;/strong&gt; — designed for production workloads, real-time audio, and fault-tolerant execution&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Observable&lt;/strong&gt; — deep visibility into calls, latency, metrics, and tool usage&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Customizable&lt;/strong&gt; — flexible architecture that adapts to any LLM, workflow, or enterprise stack&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Rapida provides both a &lt;strong&gt;platform&lt;/strong&gt; and a &lt;strong&gt;framework&lt;/strong&gt; for building real-world voice agents—from low-latency audio streaming to orchestration, monitoring, and integrations.&lt;/p&gt; 
&lt;p&gt;Rapida is written in &lt;strong&gt;Go&lt;/strong&gt;, using the highly optimized &lt;a href=&quot;https://github.com/grpc/grpc-go&quot;&gt;gRPC&lt;/a&gt; protocol for fast, efficient, bidirectional communication.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/rapidaai/voice-ai/stargazers/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/rapidaai/voice-ai?style=social&amp;amp;label=Star&amp;amp;maxAge=2592000&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://twitter.com/rapidaai&quot;&gt;&lt;img src=&quot;https://img.shields.io/twitter/follow/rapidaai&quot; alt=&quot;Twitter Follow&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/ZTZPsxD4St&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Discord-Join%20Us-5865F2?logo=discord&amp;amp;logoColor=white&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://cal.com/prashant-srivastav-u8duzh/30min&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Book%20a%20Meeting-Cal.com-blue&quot; alt=&quot;Book a Meeting&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://deepwiki.com/rapidaai/voice-ai&quot;&gt;&lt;img src=&quot;https://deepwiki.com/badge.svg?sanitize=true&quot; alt=&quot;Ask DeepWiki&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/rapidaai/voice-ai/actions/workflows/github-code-scanning/codeql&quot;&gt;&lt;img src=&quot;https://github.com/rapidaai/voice-ai/actions/workflows/github-code-scanning/codeql/badge.svg?sanitize=true&quot; alt=&quot;CodeQL&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/rapidaai/voice-ai/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/rapidaai/voice-ai&quot; alt=&quot;GitHub release (latest SemVer)&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Architecture&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rapidaai/voice-ai/main/.github/rapida-platform-architecture.svg?sanitize=true&quot; alt=&quot;Rapida Platform Architecture&quot; /&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Real-time Voice Orchestration&lt;/strong&gt;&lt;br /&gt; Stream and process audio with low latency using GRPC.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;LLM-Agnostic Architecture&lt;/strong&gt;&lt;br /&gt; Bring your own model—OpenAI, Anthropic, open-source models, or custom inference.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Production-grade Reliability&lt;/strong&gt;&lt;br /&gt; Built-in retries, error handling, call lifecycle management, and health checks.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Full Observability&lt;/strong&gt;&lt;br /&gt; Call logs, streaming events, tool traces, latency breakdowns, metrics, and dashboards.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Flexible Tooling System&lt;/strong&gt;&lt;br /&gt; Build custom tools and actions for your agents, or integrate with any backend.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Developer-friendly&lt;/strong&gt;&lt;br /&gt; Clear APIs, modular components, and simple configuration.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Enterprise-ready&lt;/strong&gt;&lt;br /&gt; Scalable design, efficient protocol, and predictable performance.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation &amp;amp; Guides&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://doc.rapida.ai&quot;&gt;https://doc.rapida.ai&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Docker&lt;/strong&gt; &amp;amp; &lt;strong&gt;Docker Compose&lt;/strong&gt; (&lt;a href=&quot;https://www.docker.com/&quot;&gt;Install&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;16GB+ RAM&lt;/strong&gt; (for all services)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Quick Start&lt;/h2&gt; 
&lt;p&gt;Get all services running in 4 commands:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Clone repo
git clone https://github.com/rapidaai/voice-ai.git &amp;amp;&amp;amp; cd voice-ai

# Setup &amp;amp; build
make setup-local &amp;amp;&amp;amp; make build-all

# Start all services
make up-all

# View running services
docker compose ps
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Services Ready (&lt;code&gt;make up-all&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;UI: &lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;API Gateway (nginx): &lt;a href=&quot;http://localhost:8080&quot;&gt;http://localhost:8080&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Web API: internal-only by default (container network)&lt;/li&gt; 
 &lt;li&gt;Assistant API: &lt;a href=&quot;http://localhost:9007&quot;&gt;http://localhost:9007&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Endpoint API: &lt;a href=&quot;http://localhost:9005&quot;&gt;http://localhost:9005&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Integration API: &lt;a href=&quot;http://localhost:9004&quot;&gt;http://localhost:9004&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To include knowledge services (OpenSearch + Document API), run:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;make up-all-with-knowledge
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Document API: &lt;a href=&quot;http://localhost:9010&quot;&gt;http://localhost:9010&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Stop services:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;make down-all
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Development&lt;/h2&gt; 
&lt;h3&gt;Work on Specific Services&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Start only database
make up-db

# Start only UI
make up-ui

# Start only Assistant API
make up-assistant

# List all start commands
make help
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;View Logs&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# All services
make logs-all

# Specific service
make logs-web
make logs-assistant
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Rebuild After Code Changes&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Rebuild and restart one service
make rebuild-assistant

# Rebuild all
make rebuild-all
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Configure Services&lt;/h3&gt; 
&lt;p&gt;Edit environment files before starting:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;docker/web-api/.web.env&lt;/code&gt; - Web API (port 9001)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;docker/assistant-api/.assistant.env&lt;/code&gt; - Assistant API (port 9007)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;docker/endpoint-api/.endpoint.env&lt;/code&gt; - Endpoint API (port 9005)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;docker/integration-api/.integration.env&lt;/code&gt; - Integration API (port 9004)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;docker/document-api/config.yaml&lt;/code&gt; - Document API (port 9010)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Add your API keys (OpenAI, Anthropic, Deepgram, Twilio, etc.) in these files.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Local Development (Without Docker)&lt;/h2&gt; 
&lt;h3&gt;Go Services&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Install dependencies
go mod download

# Build service
go build -o bin/web ./cmd/web

# Run service
./bin/web
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Requires PostgreSQL, Redis, OpenSearch running separately.&lt;/p&gt; 
&lt;h3&gt;React UI&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd ui

# Install &amp;amp; run
yarn install
yarn start:dev

# Build for production
yarn build
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Troubleshooting&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Port already in use:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;lsof -i :3000    # Find process
kill -9 &amp;lt;PID&amp;gt;    # Kill it
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Services won&#39;t start:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;make logs-all    # Check logs
docker compose ps  # Verify status
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Database issues:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Test connection
docker compose exec postgres psql -U rapida -d web_db -c &quot;SELECT 1&quot;

# Reset everything
make clean
make setup-local
make build-all
make up-all
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;All Commands&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;make help          # Show all available commands
make setup-local   # Create data directories
make build-all     # Build all Docker images
make up-all        # Start all services
make down-all      # Stop all services
make logs-all      # View all logs
make clean         # Remove containers &amp;amp; volumes
make restart-all   # Restart all services
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/rapidaai/voice-ai/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for guidelines.&lt;/p&gt; 
&lt;p&gt;Want to add:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;New STT/TTS provider? Check &lt;code&gt;api/assistant-api/internal/transformer/&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;New telephony channel? Check &lt;code&gt;api/assistant-api/internal/telephony/&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;SDKs &amp;amp; Tools&lt;/h2&gt; 
&lt;h3&gt;Client SDKs&lt;/h3&gt; 
&lt;p&gt;Client SDKs enable your frontend to include interactive, multi-user experiences.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Language&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Repo&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Docs&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Web (React)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://github.com/rapidaai/rapida-react&quot;&gt;rapida-react&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://doc.rapida.ai/api-reference/installation&quot;&gt;docs&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Web Widget (react)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://github.com/rapidaai/react-widget&quot;&gt;react-widget&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Server SDKs&lt;/h3&gt; 
&lt;p&gt;Server SDKs enable your backend to build and manage agents.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Language&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Repo&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Docs&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Go&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://github.com/rapidaai/rapida-go&quot;&gt;rapida-go&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://doc.rapida.ai/api-reference/installation&quot;&gt;docs&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Python&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://github.com/rapidaai/rapida-python&quot;&gt;rapida-python&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://doc.rapida.ai/api-reference/installation/&quot;&gt;docs&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;For those who&#39;d like to contribute code, see our &lt;a href=&quot;https://github.com/rapidaai/voice-ai/raw/main/CONTRIBUTING.md&quot;&gt;Contribution Guide&lt;/a&gt;. At the same time, please consider supporting RapidaAi by sharing it on social media and at events and conferences.&lt;/p&gt; 
&lt;h2&gt;Security disclosure&lt;/h2&gt; 
&lt;p&gt;To protect your privacy, please avoid posting security issues on GitHub. Instead, report issues to &lt;a href=&quot;mailto:contact@rapida.ai&quot;&gt;contact@rapida.ai&lt;/a&gt;, and our team will respond with detailed answer.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Rapida is open-source under the GPL-2.0 license, with additional conditions:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Open-source users must keep the Rapida logo visible in UI components.&lt;/li&gt; 
 &lt;li&gt;Future license terms may change; this does not affect released versions.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;A commercial license is available for enterprise use, which allows:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Removal of branding&lt;/li&gt; 
 &lt;li&gt;Closed-source usage&lt;/li&gt; 
 &lt;li&gt;Private modifications Contact &lt;a href=&quot;mailto:sales@rapida.ai&quot;&gt;sales@rapida.ai&lt;/a&gt; for details.&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/728562814/47321a03-2e3b-47ea-93b2-6bb472f5347a" medium="image" />
      
    </item>
    
    <item>
      <title>anthropics/anthropic-cli</title>
      <link>https://github.com/anthropics/anthropic-cli</link>
      <description>&lt;p&gt;The CLI for the Claude API&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Claude Platform CLI&lt;/h1&gt; 
&lt;p&gt;The official CLI for the &lt;a href=&quot;https://platform.claude.com/docs/en/api&quot;&gt;Claude Developer Platform&lt;/a&gt;.&lt;/p&gt; 
&lt;!-- x-release-please-start-version --&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;h3&gt;Installing with Homebrew&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;brew install anthropics/tap/ant
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Installing with Go&lt;/h3&gt; 
&lt;p&gt;To test or install the CLI locally, you need &lt;a href=&quot;https://go.dev/doc/install&quot;&gt;Go&lt;/a&gt; version 1.22 or later installed.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;go install &#39;github.com/anthropics/anthropic-cli/cmd/ant@latest&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Once you have run &lt;code&gt;go install&lt;/code&gt;, the binary is placed in your Go bin directory:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Default location&lt;/strong&gt;: &lt;code&gt;$HOME/go/bin&lt;/code&gt; (or &lt;code&gt;$GOPATH/bin&lt;/code&gt; if GOPATH is set)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Check your path&lt;/strong&gt;: Run &lt;code&gt;go env GOPATH&lt;/code&gt; to see the base directory&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If commands aren&#39;t found after installation, add the Go bin directory to your PATH:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# Add to your shell profile (.zshrc, .bashrc, etc.)
export PATH=&quot;$PATH:$(go env GOPATH)/bin&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;!-- x-release-please-end --&gt; 
&lt;h3&gt;Running Locally&lt;/h3&gt; 
&lt;p&gt;After cloning the git repository for this project, you can use the &lt;code&gt;scripts/run&lt;/code&gt; script to run the tool locally:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;./scripts/run args...
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;p&gt;The CLI follows a resource-based command structure:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;ant [resource] &amp;lt;command&amp;gt; [flags...]
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;ant messages create \
  --api-key my-anthropic-api-key \
  --max-tokens 1024 \
  --message &#39;{content: [{text: x, type: text}], role: user}&#39; \
  --model claude-sonnet-4-5-20250929
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For details about specific commands, use the &lt;code&gt;--help&lt;/code&gt; flag.&lt;/p&gt; 
&lt;h3&gt;Environment variables&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Environment variable&lt;/th&gt; 
   &lt;th&gt;Required&lt;/th&gt; 
   &lt;th&gt;Default value&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;no&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;no&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Global flags&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;--api-key&lt;/code&gt; (can also be set with &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; env var)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--auth-token&lt;/code&gt; (can also be set with &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;/code&gt; env var)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--help&lt;/code&gt; - Show command line usage&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--debug&lt;/code&gt; - Enable debug logging (includes HTTP request/response details)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--version&lt;/code&gt;, &lt;code&gt;-v&lt;/code&gt; - Show the CLI version&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--base-url&lt;/code&gt; - Use a custom API backend URL&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--format&lt;/code&gt; - Change the output format (&lt;code&gt;auto&lt;/code&gt;, &lt;code&gt;explore&lt;/code&gt;, &lt;code&gt;json&lt;/code&gt;, &lt;code&gt;jsonl&lt;/code&gt;, &lt;code&gt;pretty&lt;/code&gt;, &lt;code&gt;raw&lt;/code&gt;, &lt;code&gt;yaml&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--format-error&lt;/code&gt; - Change the output format for errors (&lt;code&gt;auto&lt;/code&gt;, &lt;code&gt;explore&lt;/code&gt;, &lt;code&gt;json&lt;/code&gt;, &lt;code&gt;jsonl&lt;/code&gt;, &lt;code&gt;pretty&lt;/code&gt;, &lt;code&gt;raw&lt;/code&gt;, &lt;code&gt;yaml&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--transform&lt;/code&gt; - Transform the data output using &lt;a href=&quot;https://github.com/tidwall/gjson/raw/master/SYNTAX.md&quot;&gt;GJSON syntax&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--transform-error&lt;/code&gt; - Transform the error output using &lt;a href=&quot;https://github.com/tidwall/gjson/raw/master/SYNTAX.md&quot;&gt;GJSON syntax&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Passing files as arguments&lt;/h3&gt; 
&lt;p&gt;To pass files to your API, you can use the &lt;code&gt;@myfile.ext&lt;/code&gt; syntax:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ant &amp;lt;command&amp;gt; --arg @abe.jpg
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Files can also be passed inside JSON or YAML blobs:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ant &amp;lt;command&amp;gt; --arg &#39;{image: &quot;@abe.jpg&quot;}&#39;
# Equivalent:
ant &amp;lt;command&amp;gt; &amp;lt;&amp;lt;YAML
arg:
  image: &quot;@abe.jpg&quot;
YAML
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you need to pass a string literal that begins with an &lt;code&gt;@&lt;/code&gt; sign, you can escape the &lt;code&gt;@&lt;/code&gt; sign to avoid accidentally passing a file.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ant &amp;lt;command&amp;gt; --username &#39;\@abe&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Explicit encoding&lt;/h4&gt; 
&lt;p&gt;For JSON endpoints, the CLI tool does filetype sniffing to determine whether the file contents should be sent as a string literal (for plain text files) or as a base64-encoded string literal (for binary files). If you need to explicitly send the file as either plain text or base64-encoded data, you can use &lt;code&gt;@file://myfile.txt&lt;/code&gt; (for string encoding) or &lt;code&gt;@data://myfile.dat&lt;/code&gt; (for base64-encoding). Note that absolute paths will begin with &lt;code&gt;@file://&lt;/code&gt; or &lt;code&gt;@data://&lt;/code&gt;, followed by a third &lt;code&gt;/&lt;/code&gt; (for example, &lt;code&gt;@file:///tmp/file.txt&lt;/code&gt;).&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ant &amp;lt;command&amp;gt; --arg @data://file.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Linking different Go SDK versions&lt;/h2&gt; 
&lt;p&gt;You can link the CLI against a different version of the Anthropic Go SDK for development purposes using the &lt;code&gt;./scripts/link&lt;/code&gt; script.&lt;/p&gt; 
&lt;p&gt;To link to a specific version from a repository (version can be a branch, git tag, or commit hash):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./scripts/link github.com/org/repo@version
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To link to a local copy of the SDK:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./scripts/link ../path/to/anthropic-go
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you run the link script without any arguments, it will default to &lt;code&gt;../anthropic-go&lt;/code&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/6b467a1b6661585d934dc6a7af47b33b87a23141301a640d8f533b654698b452/anthropics/anthropic-cli" medium="image" />
      
    </item>
    
    <item>
      <title>NoFxAiOS/nofx</title>
      <link>https://github.com/NoFxAiOS/nofx</link>
      <description>&lt;p&gt;Your personal AI trading assistant. Any market. Any model. Pay with USDC, not API keys.&lt;/p&gt;&lt;hr&gt;&lt;h1 align=&quot;center&quot;&gt;NOFX&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt;Your personal AI trading assistant.&lt;/strong&gt;&lt;br /&gt; &lt;strong&gt;Any market. Any model. Pay with USDC, not API keys.&lt;/strong&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/NoFxAiOS/nofx/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/NoFxAiOS/nofx?style=for-the-badge&quot; alt=&quot;Stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/NoFxAiOS/nofx/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/NoFxAiOS/nofx?style=for-the-badge&quot; alt=&quot;Release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/NoFxAiOS/nofx/raw/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-AGPL--3.0-blue.svg?style=for-the-badge&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://t.me/nofx_dev_community&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Telegram-Community-blue?style=for-the-badge&amp;amp;logo=telegram&quot; alt=&quot;Telegram&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://golang.org/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Go-1.21+-00ADD8?style=flat&amp;amp;logo=go&quot; alt=&quot;Go&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://reactjs.org/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/React-18+-61DAFB?style=flat&amp;amp;logo=react&quot; alt=&quot;React&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://x402.org&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/x402-USDC%20Payments-2775CA?style=flat&quot; alt=&quot;x402&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://claw402.ai&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Claw402-AI%20Gateway-FF6B35?style=flat&quot; alt=&quot;Claw402&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/README.md&quot;&gt;English&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/docs/i18n/zh-CN/README.md&quot;&gt;中文&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/docs/i18n/ja/README.md&quot;&gt;日本語&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/docs/i18n/ko/README.md&quot;&gt;한국어&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/docs/i18n/ru/README.md&quot;&gt;Русский&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/docs/i18n/uk/README.md&quot;&gt;Українська&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/docs/i18n/vi/README.md&quot;&gt;Tiếng Việt&lt;/a&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;NOFX is an open-source &lt;strong&gt;autonomous&lt;/strong&gt; AI trading assistant. Unlike traditional AI tools that require you to manually configure models, manage API keys, and wire up data sources — NOFX&#39;s AI &lt;strong&gt;perceives markets, selects models, and fetches data entirely on its own&lt;/strong&gt;. Zero human intervention. You set the strategy, the AI handles everything else.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Fully autonomous&lt;/strong&gt;: The AI decides which model to use, what market data to pull, when to trade — all by itself. No manual model configuration. No juggling API keys for different services. Just fund a USDC wallet and let it run.&lt;/p&gt; 
&lt;p&gt;What makes it different: &lt;strong&gt;built-in &lt;a href=&quot;https://x402.org&quot;&gt;x402&lt;/a&gt; micropayments&lt;/strong&gt;. No API keys. Fund a USDC wallet and pay per request. Your wallet is your identity.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Open &lt;strong&gt;&lt;a href=&quot;http://127.0.0.1:3000&quot;&gt;http://127.0.0.1:3000&lt;/a&gt;&lt;/strong&gt;. Done.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;How x402 Works&lt;/h2&gt; 
&lt;p&gt;Traditional flow: register account → buy credits → get API key → manage quota → rotate keys.&lt;/p&gt; 
&lt;p&gt;x402 flow:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Request → 402 (here&#39;s the price) → wallet signs USDC → retry → done
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;No accounts. No API keys. No prepaid credits. One wallet, every model.&lt;/p&gt; 
&lt;h3&gt;Built-in x402 Providers&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Provider&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Chain&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Models&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/icons/claw402.png&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;&lt;a href=&quot;https://claw402.ai&quot;&gt;Claw402&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Base&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;GPT-5.4, Claude Opus, DeepSeek, Qwen, Grok, Gemini, Kimi — 15+ models&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;What It Does&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Feature&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Multi-AI&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;DeepSeek, Qwen, GPT, Claude, Gemini, Grok, Kimi, MiniMax — switch anytime&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Multi-Exchange&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Binance, Bybit, OKX, Bitget, KuCoin, Gate, Hyperliquid, Aster, Lighter&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Strategy Studio&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Visual builder — coin sources, indicators, risk controls&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;AI Competition&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;AIs compete in real-time, leaderboard ranks performance&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Telegram Agent&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Chat with your trading assistant — streaming, tool calling, memory&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Live positions, P/L, AI decision logs with Chain of Thought&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Markets&lt;/h3&gt; 
&lt;p&gt;Crypto · US Stocks · Forex · Metals&lt;/p&gt; 
&lt;h3&gt;Exchanges (CEX)&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Exchange&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Status&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Register (Fee Discount)&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/exchange-icons/binance.jpg&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Binance&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://www.binance.com/join?ref=NOFXENG&quot;&gt;Register&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/exchange-icons/bybit.png&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Bybit&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://partner.bybit.com/b/83856&quot;&gt;Register&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/exchange-icons/okx.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;OKX&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://www.okx.com/join/1865360&quot;&gt;Register&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/exchange-icons/bitget.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Bitget&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://www.bitget.com/referral/register?from=referral&amp;amp;clacCode=c8a43172&quot;&gt;Register&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/exchange-icons/kucoin.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;KuCoin&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://www.kucoin.com/r/broker/CXEV7XKK&quot;&gt;Register&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/exchange-icons/gate.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Gate&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://www.gatenode.xyz/share/VQBGUAxY&quot;&gt;Register&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Exchanges (Perp-DEX)&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Exchange&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Status&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Register (Fee Discount)&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/exchange-icons/hyperliquid.png&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Hyperliquid&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://app.hyperliquid.xyz/join/AITRADING&quot;&gt;Register&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/exchange-icons/aster.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Aster DEX&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://www.asterdex.com/en/referral/fdfc0e&quot;&gt;Register&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/exchange-icons/lighter.png&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Lighter&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://app.lighter.xyz/?referral=68151432&quot;&gt;Register&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;AI Models (API Key Mode)&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;AI Model&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Status&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Get API Key&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/icons/deepseek.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;DeepSeek&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://platform.deepseek.com&quot;&gt;Get API Key&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/icons/qwen.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Qwen&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://dashscope.console.aliyun.com&quot;&gt;Get API Key&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/icons/openai.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;OpenAI (GPT)&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://platform.openai.com&quot;&gt;Get API Key&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/icons/claude.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Claude&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://console.anthropic.com&quot;&gt;Get API Key&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/icons/gemini.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Gemini&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://aistudio.google.com&quot;&gt;Get API Key&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/icons/grok.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Grok&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://console.x.ai&quot;&gt;Get API Key&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/icons/kimi.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;Kimi&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://platform.moonshot.cn&quot;&gt;Get API Key&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/web/public/icons/minimax.svg?sanitize=true&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;vertical-align: middle;&quot; /&gt; &lt;strong&gt;MiniMax&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✅&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://platform.minimaxi.com&quot;&gt;Get API Key&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;AI Models (x402 Mode — No API Key)&lt;/h3&gt; 
&lt;p&gt;15+ models via &lt;a href=&quot;https://claw402.ai&quot;&gt;Claw402&lt;/a&gt; — just a USDC wallet&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Config Page&lt;/b&gt;&lt;/summary&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;AI Models &amp;amp; Exchanges&lt;/th&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Traders List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/screenshots/config-ai-exchanges.png&quot; width=&quot;400&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/screenshots/config-traders-list.png&quot; width=&quot;400&quot; /&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Dashboard&lt;/b&gt;&lt;/summary&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Overview&lt;/th&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Market Chart&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/screenshots/dashboard-page.png&quot; width=&quot;400&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/screenshots/dashboard-market-chart.png&quot; width=&quot;400&quot; /&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Trading Stats&lt;/th&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Position History&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/screenshots/dashboard-trading-stats.png&quot; width=&quot;400&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/screenshots/dashboard-position-history.png&quot; width=&quot;400&quot; /&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Positions&lt;/th&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Trader Details&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/screenshots/dashboard-positions.png&quot; width=&quot;400&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/screenshots/details-page.png&quot; width=&quot;400&quot; /&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Strategy Studio&lt;/b&gt;&lt;/summary&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Strategy Editor&lt;/th&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Indicators Config&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/screenshots/strategy-studio.png&quot; width=&quot;400&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/screenshots/strategy-indicators.png&quot; width=&quot;400&quot; /&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Competition&lt;/b&gt;&lt;/summary&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Competition Mode&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/screenshots/competition-page.png&quot; width=&quot;400&quot; /&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Install&lt;/h2&gt; 
&lt;h3&gt;Linux / macOS&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Railway (Cloud)&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://railway.com/deploy/nofx?referralCode=nofx&quot;&gt;&lt;img src=&quot;https://railway.com/button.svg?sanitize=true&quot; alt=&quot;Deploy on Railway&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Docker&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -O https://raw.githubusercontent.com/NoFxAiOS/nofx/main/docker-compose.prod.yml
docker compose -f docker-compose.prod.yml up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Windows&lt;/h3&gt; 
&lt;p&gt;Install &lt;a href=&quot;https://www.docker.com/products/docker-desktop/&quot;&gt;Docker Desktop&lt;/a&gt;, then:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;curl -o docker-compose.prod.yml https://raw.githubusercontent.com/NoFxAiOS/nofx/main/docker-compose.prod.yml
docker compose -f docker-compose.prod.yml up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;From Source&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Prerequisites: Go 1.21+, Node.js 18+, TA-Lib
# macOS: brew install ta-lib
# Ubuntu: sudo apt-get install libta-lib0-dev

git clone https://github.com/NoFxAiOS/nofx.git &amp;amp;&amp;amp; cd nofx
go build -o nofx &amp;amp;&amp;amp; ./nofx          # backend
cd web &amp;amp;&amp;amp; npm install &amp;amp;&amp;amp; npm run dev  # frontend (new terminal)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Update&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Setup&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Beginner mode&lt;/strong&gt;: First-time users get a guided onboarding flow — select beginner mode at registration and the system walks you through AI, exchange, and strategy setup step by step.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Advanced mode&lt;/strong&gt;:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;AI&lt;/strong&gt; — Add API keys or configure x402 wallet&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Exchange&lt;/strong&gt; — Connect exchange API credentials&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Strategy&lt;/strong&gt; — Build in Strategy Studio&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Trader&lt;/strong&gt; — Combine AI + Exchange + Strategy&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Trade&lt;/strong&gt; — Launch from the dashboard&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Everything through the web UI at &lt;strong&gt;&lt;a href=&quot;http://127.0.0.1:3000&quot;&gt;http://127.0.0.1:3000&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Deploy to Server&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;HTTP (quick):&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash
# Access via http://YOUR_IP:3000
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;HTTPS (Cloudflare):&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Add domain to &lt;a href=&quot;https://dash.cloudflare.com&quot;&gt;Cloudflare&lt;/a&gt; (free plan)&lt;/li&gt; 
 &lt;li&gt;A record → your server IP (Proxied)&lt;/li&gt; 
 &lt;li&gt;SSL/TLS → Flexible&lt;/li&gt; 
 &lt;li&gt;Set &lt;code&gt;TRANSPORT_ENCRYPTION=true&lt;/code&gt; in &lt;code&gt;.env&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Architecture&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;                              NOFX
    ┌─────────────────────────────────────────────────┐
    │                 Web Dashboard                     │
    │           React + TypeScript + TradingView        │
    ├─────────────────────────────────────────────────┤
    │                  API Server (Go)                  │
    ├──────────┬──────────┬──────────┬────────────────┤
    │  Strategy  │      Telegram       │
    │   Engine   │       Agent         │
    ├──────────┴──────────┴──────────┴────────────────┤
    │               MCP AI Client Layer                │
    │    ┌───────────┐  ┌───────────┐  ┌───────────┐  │
    │    │  API Key   │  │   x402    │  │           │  │
    │    │ DeepSeek   │  │ Claw402   │  │           │  │
    │    │ GPT,Claude │  │           │  │           │  │
    │    └───────────┘  └───────────┘  └───────────┘  │
    ├─────────────────────────────────────────────────┤
    │             Exchange Connectors                   │
    │  Binance · Bybit · OKX · Bitget · KuCoin · Gate  │
    │      Hyperliquid · Aster DEX · Lighter            │
    └─────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Docs&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/docs/architecture/README.md&quot;&gt;Architecture&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;System design and module index&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/docs/architecture/STRATEGY_MODULE.md&quot;&gt;Strategy Module&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Coin selection, AI prompts, execution&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/docs/faq/README.md&quot;&gt;FAQ&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Common questions&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/docs/getting-started/README.md&quot;&gt;Getting Started&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Deployment guide&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/CONTRIBUTING.md&quot;&gt;Contributing Guide&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/CODE_OF_CONDUCT.md&quot;&gt;Code of Conduct&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/SECURITY.md&quot;&gt;Security Policy&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Contributor Airdrop Program&lt;/h3&gt; 
&lt;p&gt;All contributions are tracked. When NOFX generates revenue, contributors receive airdrops.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/NoFxAiOS/nofx/issues&quot;&gt;Pinned Issues&lt;/a&gt; get the highest rewards.&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Contribution&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Weight&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Pinned Issue PRs&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;★★★★★★&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Code (Merged PRs)&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;★★★★★&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Bug Fixes&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;★★★★&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Feature Ideas&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;★★★&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Bug Reports&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;★★&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Documentation&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;★★&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Links&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Website&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://nofxai.com&quot;&gt;nofxai.com&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Dashboard&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://nofxos.ai/dashboard&quot;&gt;nofxos.ai/dashboard&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;API Docs&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://nofxos.ai/api-docs&quot;&gt;nofxos.ai/api-docs&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Telegram&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://t.me/nofx_dev_community&quot;&gt;nofx_dev_community&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Twitter&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://x.com/nofx_official&quot;&gt;@nofx_official&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Risk Warning&lt;/strong&gt;: AI auto-trading carries significant risks. Recommended for learning/research or small amounts only.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Sponsors&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/pjl914335852-ux&quot;&gt;&lt;img src=&quot;https://github.com/pjl914335852-ux.png&quot; width=&quot;50&quot; height=&quot;50&quot; style=&quot;border-radius:50%&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/cat9999aaa&quot;&gt;&lt;img src=&quot;https://github.com/cat9999aaa.png&quot; width=&quot;50&quot; height=&quot;50&quot; style=&quot;border-radius:50%&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/1733055465&quot;&gt;&lt;img src=&quot;https://github.com/1733055465.png&quot; width=&quot;50&quot; height=&quot;50&quot; style=&quot;border-radius:50%&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/kolal2020&quot;&gt;&lt;img src=&quot;https://github.com/kolal2020.png&quot; width=&quot;50&quot; height=&quot;50&quot; style=&quot;border-radius:50%&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/CyberFFarm&quot;&gt;&lt;img src=&quot;https://github.com/CyberFFarm.png&quot; width=&quot;50&quot; height=&quot;50&quot; style=&quot;border-radius:50%&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/vip3001003&quot;&gt;&lt;img src=&quot;https://github.com/vip3001003.png&quot; width=&quot;50&quot; height=&quot;50&quot; style=&quot;border-radius:50%&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/mrtluh&quot;&gt;&lt;img src=&quot;https://github.com/mrtluh.png&quot; width=&quot;50&quot; height=&quot;50&quot; style=&quot;border-radius:50%&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/cpcp1117-source&quot;&gt;&lt;img src=&quot;https://github.com/cpcp1117-source.png&quot; width=&quot;50&quot; height=&quot;50&quot; style=&quot;border-radius:50%&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/match-007&quot;&gt;&lt;img src=&quot;https://github.com/match-007.png&quot; width=&quot;50&quot; height=&quot;50&quot; style=&quot;border-radius:50%&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/leiwuhen1715&quot;&gt;&lt;img src=&quot;https://github.com/leiwuhen1715.png&quot; width=&quot;50&quot; height=&quot;50&quot; style=&quot;border-radius:50%&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/SHAOXIA1991&quot;&gt;&lt;img src=&quot;https://github.com/SHAOXIA1991.png&quot; width=&quot;50&quot; height=&quot;50&quot; style=&quot;border-radius:50%&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/sponsors/NoFxAiOS&quot;&gt;Become a sponsor&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/NoFxAiOS/nofx/dev/LICENSE&quot;&gt;AGPL-3.0&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://star-history.com/#NoFxAiOS/nofx&amp;amp;Date&quot;&gt;&lt;img src=&quot;https://api.star-history.com/svg?repos=NoFxAiOS/nofx&amp;amp;type=Date&quot; alt=&quot;Star History Chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/bb81990dd5d7120aae725800b8ee08da22de9bc17cb8a45600eeae89087b412c/NoFxAiOS/nofx" medium="image" />
      
    </item>
    
    <item>
      <title>ollama/ollama</title>
      <link>https://github.com/ollama/ollama</link>
      <description>&lt;p&gt;Get up and running with Kimi-K2.5, GLM-5, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://ollama.com&quot;&gt; &lt;img src=&quot;https://github.com/ollama/ollama/assets/3325447/0d0b44e2-8f4a-4e99-9b52-a5c1c741c8f7&quot; alt=&quot;ollama&quot; width=&quot;200&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;h1&gt;Ollama&lt;/h1&gt; 
&lt;p&gt;Start building with open models.&lt;/p&gt; 
&lt;h2&gt;Download&lt;/h2&gt; 
&lt;h3&gt;macOS&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;curl -fsSL https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or &lt;a href=&quot;https://ollama.com/download/Ollama.dmg&quot;&gt;download manually&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Windows&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;irm https://ollama.com/install.ps1 | iex
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or &lt;a href=&quot;https://ollama.com/download/OllamaSetup.exe&quot;&gt;download manually&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Linux&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;curl -fsSL https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://docs.ollama.com/linux#manual-install&quot;&gt;Manual install instructions&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Docker&lt;/h3&gt; 
&lt;p&gt;The official &lt;a href=&quot;https://hub.docker.com/r/ollama/ollama&quot;&gt;Ollama Docker image&lt;/a&gt; &lt;code&gt;ollama/ollama&lt;/code&gt; is available on Docker Hub.&lt;/p&gt; 
&lt;h3&gt;Libraries&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ollama/ollama-python&quot;&gt;ollama-python&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ollama/ollama-js&quot;&gt;ollama-js&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Community&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://discord.gg/ollama&quot;&gt;Discord&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://x.com/ollama&quot;&gt;𝕏 (Twitter)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://reddit.com/r/ollama&quot;&gt;Reddit&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Get started&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;ollama
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You&#39;ll be prompted to run a model or connect Ollama to your existing agents or applications such as &lt;code&gt;Claude Code&lt;/code&gt;, &lt;code&gt;OpenClaw&lt;/code&gt;, &lt;code&gt;OpenCode&lt;/code&gt; , &lt;code&gt;Codex&lt;/code&gt;, &lt;code&gt;Copilot&lt;/code&gt;, and more.&lt;/p&gt; 
&lt;h3&gt;Coding&lt;/h3&gt; 
&lt;p&gt;To launch a specific integration:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ollama launch claude
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Supported integrations include &lt;a href=&quot;https://docs.ollama.com/integrations/claude-code&quot;&gt;Claude Code&lt;/a&gt;, &lt;a href=&quot;https://docs.ollama.com/integrations/codex&quot;&gt;Codex&lt;/a&gt;, &lt;a href=&quot;https://docs.ollama.com/integrations/copilot-cli&quot;&gt;Copilot CLI&lt;/a&gt;, &lt;a href=&quot;https://docs.ollama.com/integrations/droid&quot;&gt;Droid&lt;/a&gt;, and &lt;a href=&quot;https://docs.ollama.com/integrations/opencode&quot;&gt;OpenCode&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;AI assistant&lt;/h3&gt; 
&lt;p&gt;Use &lt;a href=&quot;https://docs.ollama.com/integrations/openclaw&quot;&gt;OpenClaw&lt;/a&gt; to turn Ollama into a personal AI assistant across WhatsApp, Telegram, Slack, Discord, and more:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ollama launch openclaw
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Chat with a model&lt;/h3&gt; 
&lt;p&gt;Run and chat with &lt;a href=&quot;https://ollama.com/library/gemma3&quot;&gt;Gemma 3&lt;/a&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ollama run gemma3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See &lt;a href=&quot;https://ollama.com/library&quot;&gt;ollama.com/library&lt;/a&gt; for the full list.&lt;/p&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://docs.ollama.com/quickstart&quot;&gt;quickstart guide&lt;/a&gt; for more details.&lt;/p&gt; 
&lt;h2&gt;REST API&lt;/h2&gt; 
&lt;p&gt;Ollama has a REST API for running and managing models.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;curl http://localhost:11434/api/chat -d &#39;{
  &quot;model&quot;: &quot;gemma3&quot;,
  &quot;messages&quot;: [{
    &quot;role&quot;: &quot;user&quot;,
    &quot;content&quot;: &quot;Why is the sky blue?&quot;
  }],
  &quot;stream&quot;: false
}&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://docs.ollama.com/api&quot;&gt;API documentation&lt;/a&gt; for all endpoints.&lt;/p&gt; 
&lt;h3&gt;Python&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;pip install ollama
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from ollama import chat

response = chat(model=&#39;gemma3&#39;, messages=[
  {
    &#39;role&#39;: &#39;user&#39;,
    &#39;content&#39;: &#39;Why is the sky blue?&#39;,
  },
])
print(response.message.content)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;JavaScript&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;npm i ollama
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;import ollama from &quot;ollama&quot;;

const response = await ollama.chat({
  model: &quot;gemma3&quot;,
  messages: [{ role: &quot;user&quot;, content: &quot;Why is the sky blue?&quot; }],
});
console.log(response.message.content);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Supported backends&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ggml-org/llama.cpp&quot;&gt;llama.cpp&lt;/a&gt; project founded by Georgi Gerganov.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.ollama.com/cli&quot;&gt;CLI reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.ollama.com/api&quot;&gt;REST API reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.ollama.com/import&quot;&gt;Importing models&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.ollama.com/modelfile&quot;&gt;Modelfile reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ollama/ollama/raw/main/docs/development.md&quot;&gt;Building from source&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Community Integrations&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Want to add your project? Open a pull request.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Chat Interfaces&lt;/h3&gt; 
&lt;h4&gt;Web&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/open-webui/open-webui&quot;&gt;Open WebUI&lt;/a&gt; - Extensible, self-hosted AI interface&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/onyx-dot-app/onyx&quot;&gt;Onyx&lt;/a&gt; - Connected AI workspace&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/danny-avila/LibreChat&quot;&gt;LibreChat&lt;/a&gt; - Enhanced ChatGPT clone with multi-provider support&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lobehub/lobe-chat&quot;&gt;Lobe Chat&lt;/a&gt; - Modern chat framework with plugin ecosystem (&lt;a href=&quot;https://lobehub.com/docs/self-hosting/examples/ollama&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web&quot;&gt;NextChat&lt;/a&gt; - Cross-platform ChatGPT UI (&lt;a href=&quot;https://docs.nextchat.dev/models/ollama&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ItzCrazyKns/Perplexica&quot;&gt;Perplexica&lt;/a&gt; - AI-powered search engine, open-source Perplexity alternative&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/enricoros/big-AGI&quot;&gt;big-AGI&lt;/a&gt; - AI suite for professionals&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ParisNeo/lollms-webui&quot;&gt;Lollms WebUI&lt;/a&gt; - Multi-model web interface&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sugarforever/chat-ollama&quot;&gt;ChatOllama&lt;/a&gt; - Chatbot with knowledge bases&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bionic-gpt/bionic-gpt&quot;&gt;Bionic GPT&lt;/a&gt; - On-premise AI platform&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ivanfioravanti/chatbot-ollama&quot;&gt;Chatbot UI&lt;/a&gt; - ChatGPT-style web interface&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/fmaclen/hollama&quot;&gt;Hollama&lt;/a&gt; - Minimal web interface&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Bin-Huang/Chatbox&quot;&gt;Chatbox&lt;/a&gt; - Desktop and web AI client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/swuecho/chat&quot;&gt;chat&lt;/a&gt; - Chat web app for teams&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/datvodinh/rag-chatbot.git&quot;&gt;Ollama RAG Chatbot&lt;/a&gt; - Chat with multiple PDFs using RAG&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/chyok/ollama-gui&quot;&gt;Tkinter-based client&lt;/a&gt; - Python desktop client&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Desktop&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/langgenius/dify&quot;&gt;Dify.AI&lt;/a&gt; - LLM app development platform&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Mintplex-Labs/anything-llm&quot;&gt;AnythingLLM&lt;/a&gt; - All-in-one AI app for Mac, Windows, and Linux&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Mobile-Artificial-Intelligence/maid&quot;&gt;Maid&lt;/a&gt; - Cross-platform mobile and desktop client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nbonamy/witsy&quot;&gt;Witsy&lt;/a&gt; - AI desktop app for Mac, Windows, and Linux&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kangfenmao/cherry-studio&quot;&gt;Cherry Studio&lt;/a&gt; - Multi-provider desktop client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/JHubi1/ollama-app&quot;&gt;Ollama App&lt;/a&gt; - Multi-platform client for desktop and mobile&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/szczyglis-dev/py-gpt&quot;&gt;PyGPT&lt;/a&gt; - AI desktop assistant for Linux, Windows, and Mac&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Jeffser/Alpaca&quot;&gt;Alpaca&lt;/a&gt; - GTK4 client for Linux and macOS&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/aws-samples/swift-chat&quot;&gt;SwiftChat&lt;/a&gt; - Cross-platform including iOS, Android, and Apple Vision Pro&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/AugustDev/enchanted&quot;&gt;Enchanted&lt;/a&gt; - Native macOS and iOS client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/josStorer/RWKV-Runner&quot;&gt;RWKV-Runner&lt;/a&gt; - Multi-model desktop runner&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dezoito/ollama-grid-search&quot;&gt;Ollama Grid Search&lt;/a&gt; - Evaluate and compare models&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Renset/macai&quot;&gt;macai&lt;/a&gt; - macOS client for Ollama and ChatGPT&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/MindWorkAI/AI-Studio&quot;&gt;AI Studio&lt;/a&gt; - Multi-provider desktop IDE&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ibrahimcetin/reins&quot;&gt;Reins&lt;/a&gt; - Parameter tuning and reasoning model support&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/1runeberg/confichat&quot;&gt;ConfiChat&lt;/a&gt; - Privacy-focused with optional encryption&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kartikm7/llocal&quot;&gt;LLocal.in&lt;/a&gt; - Electron desktop client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://mindmac.app&quot;&gt;MindMac&lt;/a&gt; - AI chat client for Mac&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://msty.app&quot;&gt;Msty&lt;/a&gt; - Multi-model desktop client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://boltai.com&quot;&gt;BoltAI for Mac&lt;/a&gt; - AI chat client for Mac&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://intellibar.app/&quot;&gt;IntelliBar&lt;/a&gt; - AI-powered assistant for macOS&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.kerlig.com/&quot;&gt;Kerlig AI&lt;/a&gt; - AI writing assistant for macOS&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://hillnote.com&quot;&gt;Hillnote&lt;/a&gt; - Markdown-first AI workspace&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.perfectmemory.ai/&quot;&gt;Perfect Memory AI&lt;/a&gt; - Productivity AI personalized by screen and meeting history&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Mobile&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sunshine0523/OllamaServer&quot;&gt;Ollama Android Chat&lt;/a&gt; - One-click Ollama on Android&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;SwiftChat, Enchanted, Maid, Ollama App, Reins, and ConfiChat listed above also support mobile platforms.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Code Editors &amp;amp; Development&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cline/cline&quot;&gt;Cline&lt;/a&gt; - VS Code extension for multi-file/whole-repo coding&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/continuedev/continue&quot;&gt;Continue&lt;/a&gt; - Open-source AI code assistant for any IDE&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/voideditor/void&quot;&gt;Void&lt;/a&gt; - Open source AI code editor, Cursor alternative&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/logancyang/obsidian-copilot&quot;&gt;Copilot for Obsidian&lt;/a&gt; - AI assistant for Obsidian&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rjmacarthy/twinny&quot;&gt;twinny&lt;/a&gt; - Copilot and Copilot chat alternative&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/karthink/gptel&quot;&gt;gptel Emacs client&lt;/a&gt; - LLM client for Emacs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bernardo-bruning/ollama-copilot&quot;&gt;Ollama Copilot&lt;/a&gt; - Use Ollama as GitHub Copilot&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pfrankov/obsidian-local-gpt&quot;&gt;Obsidian Local GPT&lt;/a&gt; - Local AI for Obsidian&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/s-kostyaev/ellama&quot;&gt;Ellama Emacs client&lt;/a&gt; - LLM tool for Emacs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xyproto/orbiton&quot;&gt;orbiton&lt;/a&gt; - Config-free text editor with Ollama tab completion&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/yaroslavyaroslav/OpenAI-sublime-text&quot;&gt;AI ST Completion&lt;/a&gt; - Sublime Text 4 AI assistant&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vinhnx/vtcode&quot;&gt;VT Code&lt;/a&gt; - Rust-based terminal coding agent with Tree-sitter&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Palm1r/QodeAssist&quot;&gt;QodeAssist&lt;/a&gt; - AI coding assistant for Qt Creator&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://aka.ms/ai-tooklit/ollama-docs&quot;&gt;AI Toolkit for VS Code&lt;/a&gt; - Microsoft-official VS Code extension&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.openinterpreter.com/language-model-setup/local-models/ollama&quot;&gt;Open Interpreter&lt;/a&gt; - Natural language interface for computers&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Libraries &amp;amp; SDKs&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/BerriAI/litellm&quot;&gt;LiteLLM&lt;/a&gt; - Unified API for 100+ LLM providers&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/semantic-kernel/tree/main/python/semantic_kernel/connectors/ai/ollama&quot;&gt;Semantic Kernel&lt;/a&gt; - Microsoft AI orchestration SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/langchain4j/langchain4j&quot;&gt;LangChain4j&lt;/a&gt; - Java LangChain (&lt;a href=&quot;https://github.com/langchain4j/langchain4j-examples/tree/main/ollama-examples/src/main/java&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tmc/langchaingo/&quot;&gt;LangChainGo&lt;/a&gt; - Go LangChain (&lt;a href=&quot;https://github.com/tmc/langchaingo/tree/main/examples/ollama-completion-example&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/spring-projects/spring-ai&quot;&gt;Spring AI&lt;/a&gt; - Spring framework AI support (&lt;a href=&quot;https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://python.langchain.com/docs/integrations/chat/ollama/&quot;&gt;LangChain&lt;/a&gt; and &lt;a href=&quot;https://js.langchain.com/docs/integrations/chat/ollama/&quot;&gt;LangChain.js&lt;/a&gt; with &lt;a href=&quot;https://js.langchain.com/docs/tutorials/local_rag/&quot;&gt;example&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/crmne/ruby_llm&quot;&gt;Ollama for Ruby&lt;/a&gt; - Ruby LLM library&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mozilla-ai/any-llm&quot;&gt;any-llm&lt;/a&gt; - Unified LLM interface by Mozilla&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/awaescher/OllamaSharp&quot;&gt;OllamaSharp for .NET&lt;/a&gt; - .NET SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Abraxas-365/langchain-rust&quot;&gt;LangChainRust&lt;/a&gt; - Rust LangChain (&lt;a href=&quot;https://github.com/Abraxas-365/langchain-rust/raw/main/examples/llm_ollama.rs&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/agents-flex/agents-flex&quot;&gt;Agents-Flex for Java&lt;/a&gt; - Java agent framework (&lt;a href=&quot;https://github.com/agents-flex/agents-flex/tree/main/agents-flex-llm/agents-flex-llm-ollama/src/test/java/com/agentsflex/llm/ollama&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/brainlid/langchain&quot;&gt;Elixir LangChain&lt;/a&gt; - Elixir LangChain&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pepperoni21/ollama-rs&quot;&gt;Ollama-rs for Rust&lt;/a&gt; - Rust SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tryAGI/LangChain&quot;&gt;LangChain for .NET&lt;/a&gt; - .NET LangChain (&lt;a href=&quot;https://github.com/tryAGI/LangChain/raw/main/examples/LangChain.Samples.OpenAI/Program.cs&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/philippgille/chromem-go&quot;&gt;chromem-go&lt;/a&gt; - Go vector database with Ollama embeddings (&lt;a href=&quot;https://github.com/philippgille/chromem-go/tree/v0.5.0/examples/rag-wikipedia-ollama&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/davidmigloz/langchain_dart&quot;&gt;LangChainDart&lt;/a&gt; - Dart LangChain&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lofcz/llmtornado&quot;&gt;LlmTornado&lt;/a&gt; - Unified C# interface for multiple inference APIs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ollama4j/ollama4j&quot;&gt;Ollama4j for Java&lt;/a&gt; - Java SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cloudstudio/ollama-laravel&quot;&gt;Ollama for Laravel&lt;/a&gt; - Laravel integration&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mattt/ollama-swift&quot;&gt;Ollama for Swift&lt;/a&gt; - Swift SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.llamaindex.ai/en/stable/examples/llm/ollama/&quot;&gt;LlamaIndex&lt;/a&gt; and &lt;a href=&quot;https://ts.llamaindex.ai/modules/llms/available_llms/ollama&quot;&gt;LlamaIndexTS&lt;/a&gt; - Data framework for LLM apps&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/deepset-ai/haystack-integrations/raw/main/integrations/ollama.md&quot;&gt;Haystack&lt;/a&gt; - AI pipeline framework&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://firebase.google.com/docs/genkit/plugins/ollama&quot;&gt;Firebase Genkit&lt;/a&gt; - Google AI framework&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jmont-dev/ollama-hpp&quot;&gt;Ollama-hpp for C++&lt;/a&gt; - C++ SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/svilupp/PromptingTools.jl&quot;&gt;PromptingTools.jl&lt;/a&gt; - Julia LLM toolkit (&lt;a href=&quot;https://svilupp.github.io/PromptingTools.jl/dev/examples/working_with_ollama&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/JBGruber/rollama&quot;&gt;Ollama for R - rollama&lt;/a&gt; - R SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://portkey.ai/docs/welcome/integration-guides/ollama&quot;&gt;Portkey&lt;/a&gt; - AI gateway&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://testcontainers.com/modules/ollama/&quot;&gt;Testcontainers&lt;/a&gt; - Container-based testing&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/theodo-group/LLPhant?tab=readme-ov-file#ollama&quot;&gt;LLPhant&lt;/a&gt; - PHP AI framework&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Frameworks &amp;amp; Agents&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Significant-Gravitas/AutoGPT/raw/master/docs/content/platform/ollama.md&quot;&gt;AutoGPT&lt;/a&gt; - Autonomous AI agent platform&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/crewAIInc/crewAI&quot;&gt;crewAI&lt;/a&gt; - Multi-agent orchestration framework&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/strands-agents/sdk-python&quot;&gt;Strands Agents&lt;/a&gt; - Model-driven agent building by AWS&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cheshire-cat-ai/core&quot;&gt;Cheshire Cat&lt;/a&gt; - AI assistant framework&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mozilla-ai/any-agent&quot;&gt;any-agent&lt;/a&gt; - Unified agent framework interface by Mozilla&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/stakpak/agent&quot;&gt;Stakpak&lt;/a&gt; - Open source DevOps agent&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/hexastack/hexabot&quot;&gt;Hexabot&lt;/a&gt; - Conversational AI builder&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cognizant-ai-lab/neuro-san-studio&quot;&gt;Neuro SAN&lt;/a&gt; - Multi-agent orchestration (&lt;a href=&quot;https://github.com/cognizant-ai-lab/neuro-san-studio/raw/main/docs/user_guide.md#ollama&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;RAG &amp;amp; Knowledge Bases&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/infiniflow/ragflow&quot;&gt;RAGFlow&lt;/a&gt; - RAG engine based on deep document understanding&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SciPhi-AI/R2R&quot;&gt;R2R&lt;/a&gt; - Open-source RAG engine&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/1Panel-dev/MaxKB/&quot;&gt;MaxKB&lt;/a&gt; - Ready-to-use RAG chatbot&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dmayboroda/minima&quot;&gt;Minima&lt;/a&gt; - On-premises or fully local RAG&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TilmanGriesel/chipper&quot;&gt;Chipper&lt;/a&gt; - AI interface with Haystack RAG&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xark-argo/argo&quot;&gt;ARGO&lt;/a&gt; - RAG and deep research on Mac/Windows/Linux&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nickthecook/archyve&quot;&gt;Archyve&lt;/a&gt; - RAG-enabling document library&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://casibase.org&quot;&gt;Casibase&lt;/a&gt; - AI knowledge base with RAG and SSO&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.nurgo-software.com/products/brainsoup&quot;&gt;BrainSoup&lt;/a&gt; - Native client with RAG and multi-agent automation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Bots &amp;amp; Messaging&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/RockChinQ/LangBot&quot;&gt;LangBot&lt;/a&gt; - Multi-platform messaging bots with agents and RAG&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Soulter/AstrBot/&quot;&gt;AstrBot&lt;/a&gt; - Multi-platform chatbot with RAG and plugins&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kevinthedang/discord-ollama&quot;&gt;Discord-Ollama Chat Bot&lt;/a&gt; - TypeScript Discord bot&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ruecat/ollama-telegram&quot;&gt;Ollama Telegram Bot&lt;/a&gt; - Telegram bot&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/innightwolfsleep/llm_telegram_bot&quot;&gt;LLM Telegram Bot&lt;/a&gt; - Telegram bot for roleplay&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Terminal &amp;amp; CLI&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sigoden/aichat&quot;&gt;aichat&lt;/a&gt; - All-in-one LLM CLI with Shell Assistant, RAG, and AI tools&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ggozad/oterm&quot;&gt;oterm&lt;/a&gt; - Terminal client for Ollama&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sammcj/gollama&quot;&gt;gollama&lt;/a&gt; - Go-based model manager for Ollama&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/yusufcanb/tlm&quot;&gt;tlm&lt;/a&gt; - Local shell copilot&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pythops/tenere&quot;&gt;tenere&lt;/a&gt; - TUI for LLMs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/paulrobello/parllama&quot;&gt;ParLlama&lt;/a&gt; - TUI for Ollama&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/taketwo/llm-ollama&quot;&gt;llm-ollama&lt;/a&gt; - Plugin for &lt;a href=&quot;https://llm.datasette.io/en/stable/&quot;&gt;Datasette&#39;s LLM CLI&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/djcopley/ShellOracle&quot;&gt;ShellOracle&lt;/a&gt; - Shell command suggestions&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mrdjohnson/llm-x&quot;&gt;LLM-X&lt;/a&gt; - Progressive web app for LLMs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pgibler/cmdh&quot;&gt;cmdh&lt;/a&gt; - Natural language to shell commands&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vinhnx/vt.ai&quot;&gt;VT&lt;/a&gt; - Minimal multimodal AI chat app&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Productivity &amp;amp; Apps&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/AppFlowy-IO/AppFlowy&quot;&gt;AppFlowy&lt;/a&gt; - AI collaborative workspace, self-hostable Notion alternative&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mediar-ai/screenpipe&quot;&gt;Screenpipe&lt;/a&gt; - 24/7 screen and mic recording with AI-powered search&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/thewh1teagle/vibe&quot;&gt;Vibe&lt;/a&gt; - Transcribe and analyze meetings&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/n4ze3m/page-assist&quot;&gt;Page Assist&lt;/a&gt; - Chrome extension for AI-powered browsing&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/NativeMindBrowser/NativeMindExtension&quot;&gt;NativeMind&lt;/a&gt; - Private, on-device browser AI assistant&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ParisNeo/ollama_proxy_server&quot;&gt;Ollama Fortress&lt;/a&gt; - Security proxy for Ollama&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/1Panel-dev/1Panel/&quot;&gt;1Panel&lt;/a&gt; - Web-based Linux server management&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Writeopia/Writeopia&quot;&gt;Writeopia&lt;/a&gt; - Text editor with Ollama integration&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/reid41/QA-Pilot&quot;&gt;QA-Pilot&lt;/a&gt; - GitHub code repository understanding&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/MassimilianoPasquini97/raycast_ollama&quot;&gt;Raycast extension&lt;/a&gt; - Ollama in Raycast&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mateuszmigas/painting-droid&quot;&gt;Painting Droid&lt;/a&gt; - Painting app with AI integrations&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/doolijb/serene-pub&quot;&gt;Serene Pub&lt;/a&gt; - AI roleplaying app&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gitlab.com/mayan-edms/mayan-edms&quot;&gt;Mayan EDMS&lt;/a&gt; - Document management with Ollama workflows&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.tagspaces.org&quot;&gt;TagSpaces&lt;/a&gt; - File management with &lt;a href=&quot;https://docs.tagspaces.org/ai/&quot;&gt;AI tagging&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Observability &amp;amp; Monitoring&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.comet.com/docs/opik/cookbook/ollama&quot;&gt;Opik&lt;/a&gt; - Debug, evaluate, and monitor LLM applications&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/openlit/openlit&quot;&gt;OpenLIT&lt;/a&gt; - OpenTelemetry-native monitoring for Ollama and GPUs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://lunary.ai/docs/integrations/ollama&quot;&gt;Lunary&lt;/a&gt; - LLM observability with analytics and PII masking&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://langfuse.com/docs/integrations/ollama&quot;&gt;Langfuse&lt;/a&gt; - Open source LLM observability&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.honeyhive.ai/integrations/ollama&quot;&gt;HoneyHive&lt;/a&gt; - AI observability and evaluation for agents&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://mlflow.org/docs/latest/llms/tracing/index.html#automatic-tracing&quot;&gt;MLflow Tracing&lt;/a&gt; - Open source LLM observability&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Database &amp;amp; Embeddings&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/timescale/pgai&quot;&gt;pgai&lt;/a&gt; - PostgreSQL as a vector database (&lt;a href=&quot;https://github.com/timescale/pgai/raw/main/docs/vectorizer-quick-start.md&quot;&gt;guide&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mindsdb/mindsdb/raw/staging/mindsdb/integrations/handlers/ollama_handler/README.md&quot;&gt;MindsDB&lt;/a&gt; - Connect Ollama with 200+ data platforms&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/philippgille/chromem-go/raw/v0.5.0/embed_ollama.go&quot;&gt;chromem-go&lt;/a&gt; - Embeddable vector database for Go (&lt;a href=&quot;https://github.com/philippgille/chromem-go/tree/v0.5.0/examples/rag-wikipedia-ollama&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dbkangaroo/kangaroo&quot;&gt;Kangaroo&lt;/a&gt; - AI-powered SQL client&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Infrastructure &amp;amp; Deployment&lt;/h3&gt; 
&lt;h4&gt;Cloud&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://cloud.google.com/run/docs/tutorials/gpu-gemma2-with-ollama&quot;&gt;Google Cloud&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://fly.io/docs/python/do-more/add-ollama/&quot;&gt;Fly.io&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.koyeb.com/deploy/ollama&quot;&gt;Koyeb&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/av/harbor&quot;&gt;Harbor&lt;/a&gt; - Containerized LLM toolkit with Ollama as default backend&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Package Managers&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://archlinux.org/packages/extra/x86_64/ollama/&quot;&gt;Pacman&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://formulae.brew.sh/formula/ollama&quot;&gt;Homebrew&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://search.nixos.org/packages?show=ollama&amp;amp;from=0&amp;amp;size=50&amp;amp;sort=relevance&amp;amp;type=packages&amp;amp;query=ollama&quot;&gt;Nix package&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://artifacthub.io/packages/helm/ollama-helm/ollama&quot;&gt;Helm Chart&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gentoo/guru/tree/master/app-misc/ollama&quot;&gt;Gentoo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://flox.dev/blog/ollama-part-one&quot;&gt;Flox&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://codeberg.org/tusharhero/ollama-guix&quot;&gt;Guix channel&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/a5a8278a0ac58e54edfbb25743ff89b2f0a24a38db5d577260c329041bb80910/ollama/ollama" medium="image" />
      
    </item>
    
    <item>
      <title>cloudwego/eino</title>
      <link>https://github.com/cloudwego/eino</link>
      <description>&lt;p&gt;The ultimate LLM/AI application development framework in Go.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Eino&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/cloudwego/eino/badges/.badges/main/coverage.svg?sanitize=true&quot; alt=&quot;coverage&quot; /&gt; &lt;a href=&quot;https://github.com/cloudwego/eino/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/cloudwego/eino&quot; alt=&quot;Release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.cloudwego.io/&quot;&gt;&lt;img src=&quot;https://img.shields.io/website?up_message=cloudwego&amp;amp;url=https%3A%2F%2Fwww.cloudwego.io%2F&quot; alt=&quot;WebSite&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/cloudwego/eino/raw/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/cloudwego/eino&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://goreportcard.com/report/github.com/cloudwego/eino&quot;&gt;&lt;img src=&quot;https://goreportcard.com/badge/github.com/cloudwego/eino&quot; alt=&quot;Go Report Card&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/cloudwego/kitex/eino&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues/cloudwego/eino&quot; alt=&quot;OpenIssue&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/cloudwego/eino/issues?q=is%3Aissue+is%3Aclosed&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues-closed/cloudwego/eino&quot; alt=&quot;ClosedIssue&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/stars/cloudwego/eino&quot; alt=&quot;Stars&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/forks/cloudwego/eino&quot; alt=&quot;Forks&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;English | &lt;a href=&quot;https://raw.githubusercontent.com/cloudwego/eino/main/README.zh_CN.md&quot;&gt;中文&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Overview&lt;/h1&gt; 
&lt;p&gt;&lt;strong&gt;Eino[&#39;aino]&lt;/strong&gt; is an LLM application development framework in Golang. It draws from LangChain, Google ADK, and other open-source frameworks, and is designed to follow Golang conventions.&lt;/p&gt; 
&lt;p&gt;Eino provides:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/cloudwego/eino-ext&quot;&gt;Components&lt;/a&gt;&lt;/strong&gt;: reusable building blocks like &lt;code&gt;ChatModel&lt;/code&gt;, &lt;code&gt;Tool&lt;/code&gt;, &lt;code&gt;Retriever&lt;/code&gt;, and &lt;code&gt;ChatTemplate&lt;/code&gt;, with official implementations for OpenAI, Ollama, and more.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Agent Development Kit (ADK)&lt;/strong&gt;: build AI agents with tool use, multi-agent coordination, context management, interrupt/resume for human-in-the-loop, and ready-to-use agent patterns.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Composition&lt;/strong&gt;: connect components into graphs and workflows that can run standalone or be exposed as tools for agents.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/cloudwego/eino-examples&quot;&gt;Examples&lt;/a&gt;&lt;/strong&gt;: working code for common patterns and real-world use cases.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/cloudwego/eino/main/.github/static/img/eino/eino_concept.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; 
&lt;h1&gt;Quick Start&lt;/h1&gt; 
&lt;h2&gt;ChatModelAgent&lt;/h2&gt; 
&lt;p&gt;Configure a ChatModel, optionally add tools, and you have a working agent:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-Go&quot;&gt;chatModel, _ := openai.NewChatModel(ctx, &amp;amp;openai.ChatModelConfig{
    Model:  &quot;gpt-4o&quot;,
    APIKey: os.Getenv(&quot;OPENAI_API_KEY&quot;),
})

agent, _ := adk.NewChatModelAgent(ctx, &amp;amp;adk.ChatModelAgentConfig{
    Model: chatModel,
})

runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
iter := runner.Query(ctx, &quot;Hello, who are you?&quot;)
for {
    event, ok := iter.Next()
    if !ok {
        break
    }
    fmt.Println(event.Message.Content)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Add tools to give the agent capabilities:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-Go&quot;&gt;agent, _ := adk.NewChatModelAgent(ctx, &amp;amp;adk.ChatModelAgentConfig{
    Model: chatModel,
    ToolsConfig: adk.ToolsConfig{
        ToolsNodeConfig: compose.ToolsNodeConfig{
            Tools: []tool.BaseTool{weatherTool, calculatorTool},
        },
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The agent handles the ReAct loop internally — it decides when to call tools and when to respond.&lt;/p&gt; 
&lt;p&gt;→ &lt;a href=&quot;https://github.com/cloudwego/eino-examples/tree/main/adk/intro&quot;&gt;ChatModelAgent examples&lt;/a&gt; · &lt;a href=&quot;https://www.cloudwego.io/docs/eino/core_modules/eino_adk/agent_implementation/chat_model/&quot;&gt;docs&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;DeepAgent&lt;/h2&gt; 
&lt;p&gt;For complex tasks, use DeepAgent. It breaks down problems into steps, delegates to sub-agents, and tracks progress:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-Go&quot;&gt;deepAgent, _ := deep.New(ctx, &amp;amp;deep.Config{
    ChatModel: chatModel,
    SubAgents: []adk.Agent{researchAgent, codeAgent},
    ToolsConfig: adk.ToolsConfig{
        ToolsNodeConfig: compose.ToolsNodeConfig{
            Tools: []tool.BaseTool{shellTool, pythonTool, webSearchTool},
        },
    },
})

runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: deepAgent})
iter := runner.Query(ctx, &quot;Analyze the sales data in report.csv and generate a summary chart&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;DeepAgent can be configured to coordinate multiple specialized agents, run shell commands, execute Python code, and search the web.&lt;/p&gt; 
&lt;p&gt;→ &lt;a href=&quot;https://github.com/cloudwego/eino-examples/tree/main/adk/multiagent/deep&quot;&gt;DeepAgent example&lt;/a&gt; · &lt;a href=&quot;https://www.cloudwego.io/docs/eino/core_modules/eino_adk/agent_implementation/deepagents/&quot;&gt;docs&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Composition&lt;/h2&gt; 
&lt;p&gt;When you need precise control over execution flow, use &lt;code&gt;compose&lt;/code&gt; to build graphs and workflows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-Go&quot;&gt;graph := compose.NewGraph[*Input, *Output]()
graph.AddLambdaNode(&quot;validate&quot;, validateFn)
graph.AddChatModelNode(&quot;generate&quot;, chatModel)
graph.AddLambdaNode(&quot;format&quot;, formatFn)

graph.AddEdge(compose.START, &quot;validate&quot;)
graph.AddEdge(&quot;validate&quot;, &quot;generate&quot;)
graph.AddEdge(&quot;generate&quot;, &quot;format&quot;)
graph.AddEdge(&quot;format&quot;, compose.END)

runnable, _ := graph.Compile(ctx)
result, _ := runnable.Invoke(ctx, input)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Compositions can be exposed as tools for agents, bridging deterministic workflows with autonomous behavior:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-Go&quot;&gt;tool, _ := graphtool.NewInvokableGraphTool(graph, &quot;data_pipeline&quot;, &quot;Process and validate data&quot;)

agent, _ := adk.NewChatModelAgent(ctx, &amp;amp;adk.ChatModelAgentConfig{
    Model: chatModel,
    ToolsConfig: adk.ToolsConfig{
        ToolsNodeConfig: compose.ToolsNodeConfig{
            Tools: []tool.BaseTool{tool},
        },
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This lets you build domain-specific pipelines with exact control, then let agents decide when to use them.&lt;/p&gt; 
&lt;p&gt;→ &lt;a href=&quot;https://github.com/cloudwego/eino-examples/tree/main/adk/common/tool/graphtool&quot;&gt;GraphTool examples&lt;/a&gt; · &lt;a href=&quot;https://www.cloudwego.io/docs/eino/core_modules/chain_and_graph_orchestration/&quot;&gt;compose docs&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Key Features&lt;/h1&gt; 
&lt;h2&gt;Component Ecosystem&lt;/h2&gt; 
&lt;p&gt;Eino defines component abstractions (ChatModel, Tool, Retriever, Embedding, etc.) with official implementations for OpenAI, Claude, Gemini, Ark, Ollama, Elasticsearch, and more.&lt;/p&gt; 
&lt;p&gt;→ &lt;a href=&quot;https://github.com/cloudwego/eino-ext&quot;&gt;eino-ext&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Stream Processing&lt;/h2&gt; 
&lt;p&gt;Eino automatically handles streaming throughout orchestration: concatenating, boxing, merging, and copying streams as data flows between nodes. Components only implement the streaming paradigms that make sense for them; the framework handles the rest.&lt;/p&gt; 
&lt;p&gt;→ &lt;a href=&quot;https://www.cloudwego.io/docs/eino/core_modules/chain_and_graph_orchestration/stream_programming_essentials/&quot;&gt;docs&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Callback Aspects&lt;/h2&gt; 
&lt;p&gt;Inject logging, tracing, and metrics at fixed points (OnStart, OnEnd, OnError, OnStartWithStreamInput, OnEndWithStreamOutput) across components, graphs, and agents.&lt;/p&gt; 
&lt;p&gt;→ &lt;a href=&quot;https://www.cloudwego.io/docs/eino/core_modules/chain_and_graph_orchestration/callback_manual/&quot;&gt;docs&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Interrupt/Resume&lt;/h2&gt; 
&lt;p&gt;Any agent or tool can pause execution for human input and resume from checkpoint. The framework handles state persistence and routing.&lt;/p&gt; 
&lt;p&gt;→ &lt;a href=&quot;https://www.cloudwego.io/docs/eino/core_modules/eino_adk/agent_hitl/&quot;&gt;docs&lt;/a&gt; · &lt;a href=&quot;https://github.com/cloudwego/eino-examples/tree/main/adk/human-in-the-loop&quot;&gt;examples&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Framework Structure&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/cloudwego/eino/main/.github/static/img/eino/eino_framework.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;The Eino framework consists of:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Eino (this repo): Type definitions, streaming mechanism, component abstractions, orchestration, agent implementations, aspect mechanisms&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/cloudwego/eino-ext&quot;&gt;EinoExt&lt;/a&gt;: Component implementations, callback handlers, usage examples, evaluators, prompt optimizers&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/cloudwego/eino-ext/tree/main/devops&quot;&gt;Eino Devops&lt;/a&gt;: Visualized development and debugging&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/cloudwego/eino-examples&quot;&gt;EinoExamples&lt;/a&gt;: Example applications and best practices&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.cloudwego.io/zh/docs/eino/&quot;&gt;Eino User Manual&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.cloudwego.io/zh/docs/eino/quick_start/&quot;&gt;Eino: Quick Start&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Dependencies&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Go 1.18 and above.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Code Style&lt;/h2&gt; 
&lt;p&gt;This repo uses &lt;code&gt;golangci-lint&lt;/code&gt;. Check locally with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;golangci-lint run ./...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Rules enforced:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Exported functions, interfaces, packages, etc. should have GoDoc comments&lt;/li&gt; 
 &lt;li&gt;Code should be formatted with &lt;code&gt;gofmt -s&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Import order should follow &lt;code&gt;goimports&lt;/code&gt; (std -&amp;gt; third party -&amp;gt; local)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Security&lt;/h2&gt; 
&lt;p&gt;If you discover a potential security issue in this project, or think you may have discovered a security issue, we ask that you notify Bytedance Security via our &lt;a href=&quot;https://security.bytedance.com/src&quot;&gt;security center&lt;/a&gt; or &lt;a href=&quot;mailto:sec@bytedance.com?subject=Feedback%20On%20Eino&quot;&gt;vulnerability reporting email&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Do &lt;strong&gt;not&lt;/strong&gt; create a public GitHub issue.&lt;/p&gt; 
&lt;h2&gt;Contact&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Membership: &lt;a href=&quot;https://github.com/cloudwego/community/raw/main/COMMUNITY_MEMBERSHIP.md&quot;&gt;COMMUNITY MEMBERSHIP&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Issues: &lt;a href=&quot;https://github.com/cloudwego/eino/issues&quot;&gt;Issues&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Lark: Scan the QR code below with &lt;a href=&quot;https://www.feishu.cn/en/&quot;&gt;Feishu&lt;/a&gt; to join the CloudWeGo/eino user group.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;    &lt;img src=&quot;https://raw.githubusercontent.com/cloudwego/eino/main/.github/static/img/eino/lark_group_zh.png&quot; alt=&quot;LarkGroup&quot; width=&quot;200&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;This project is licensed under the &lt;a href=&quot;https://raw.githubusercontent.com/cloudwego/eino/main/LICENSE-APACHE&quot;&gt;Apache-2.0 License&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/9367f47c80c423607c37d1fadb5e26c9684f4c7107517ad7f6d3cfe02c20fde6/cloudwego/eino" medium="image" />
      
    </item>
    
    <item>
      <title>kyverno/kyverno</title>
      <link>https://github.com/kyverno/kyverno</link>
      <description>&lt;p&gt;Unified Policy as Code&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Kyverno &lt;a href=&quot;https://twitter.com/intent/tweet?text=Cloud%20Native%20Policy%20Management.%20No%20new%20language%20required%251&amp;amp;url=https://github.com/kyverno/kyverno/&amp;amp;hashtags=kubernetes,devops&quot;&gt;&lt;img src=&quot;https://img.shields.io/twitter/url/http/shields.io.svg?style=social&quot; alt=&quot;Tweet&quot; /&gt;&lt;/a&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;strong&gt;Cloud Native Policy Management 🎉&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/kyverno/kyverno/actions&quot;&gt;&lt;img src=&quot;https://github.com/kyverno/kyverno/actions/workflows/test.yml/badge.svg?sanitize=true&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://goreportcard.com/report/github.com/kyverno/kyverno&quot;&gt;&lt;img src=&quot;https://goreportcard.com/badge/github.com/kyverno/kyverno&quot; alt=&quot;Go Report Card&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/license/kyverno/kyverno?color=blue&quot; alt=&quot;License: Apache-2.0&quot; /&gt; &lt;a href=&quot;https://github.com/kyverno/kyverno/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/kyverno/kyverno&quot; alt=&quot;GitHub Repo stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://bestpractices.coreinfrastructure.org/projects/5327&quot;&gt;&lt;img src=&quot;https://bestpractices.coreinfrastructure.org/projects/5327/badge&quot; alt=&quot;CII Best Practices&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://securityscorecards.dev/viewer/?uri=github.com/kyverno/kyverno&quot;&gt;&lt;img src=&quot;https://api.securityscorecards.dev/projects/github.com/kyverno/kyverno/badge&quot; alt=&quot;OpenSSF Scorecard&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://slsa.dev&quot;&gt;&lt;img src=&quot;https://slsa.dev/images/gh-badge-level3.svg?sanitize=true&quot; alt=&quot;SLSA 3&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://artifacthub.io/packages/search?repo=kyverno&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/kyverno&quot; alt=&quot;Artifact HUB&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://app.codecov.io/gh/kyverno/kyverno/branch/main&quot;&gt;&lt;img src=&quot;https://codecov.io/gh/kyverno/kyverno/branch/main/graph/badge.svg?sanitize=true&quot; alt=&quot;codecov&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://app.fossa.com/projects/git%2Bgithub.com%2Fkyverno%2Fkyverno?ref=badge_shield&quot;&gt;&lt;img src=&quot;https://app.fossa.com/api/projects/git%2Bgithub.com%2Fkyverno%2Fkyverno.svg?type=shield&quot; alt=&quot;FOSSA Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://kyverno.io&quot; rel=&quot;kyverno.io&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/img/Kyverno_Horizontal.png&quot; alt=&quot;Kyverno Logo&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;📑 Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/#about-kyverno&quot;&gt;About Kyverno&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/#-documentation&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/#-demos--tutorials&quot;&gt;Demos &amp;amp; Tutorials&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/#-popular-use-cases&quot;&gt;Popular Use Cases&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/#-explore-the-policy-library&quot;&gt;Explore the Policy Library&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/#-getting-help&quot;&gt;Getting Help&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/#-contributing&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/#-software-bill-of-materials&quot;&gt;Software Bill of Materials&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/#-contributors&quot;&gt;Contributors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/#-license&quot;&gt;License&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;About Kyverno&lt;/h2&gt; 
&lt;p&gt;Kyverno is a Kubernetes-native policy engine designed for platform engineering teams. It enables security, compliance, automation, and governance through policy-as-code. Kyverno can:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Validate, mutate, generate, and clean up resources using Kubernetes admission controls and background scans.&lt;/li&gt; 
 &lt;li&gt;Verify container image signatures for supply chain security.&lt;/li&gt; 
 &lt;li&gt;Operate with tools you already use — like &lt;code&gt;kubectl&lt;/code&gt;, &lt;code&gt;kustomize&lt;/code&gt;, and Git.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;a href=&quot;https://opensourcesecurityindex.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; &lt;img src=&quot;https://opensourcesecurityindex.io/badge.svg?sanitize=true&quot; alt=&quot;Open Source Security Index badge&quot; width=&quot;282&quot; height=&quot;56&quot; /&gt; &lt;/a&gt; 
&lt;h2&gt;📙 Documentation&lt;/h2&gt; 
&lt;p&gt;Kyverno installation and reference documentation is available at &lt;a href=&quot;https://kyverno.io&quot;&gt;kyverno.io&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;👉 &lt;strong&gt;&lt;a href=&quot;https://kyverno.io/docs/introduction/#quick-start&quot;&gt;Quick Start&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;👉 &lt;strong&gt;&lt;a href=&quot;https://kyverno.io/docs/installation/&quot;&gt;Installation Guide&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;👉 &lt;strong&gt;&lt;a href=&quot;https://kyverno.io/policies/&quot;&gt;Policy Library&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🎥 Demos &amp;amp; Tutorials&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;▶️ &lt;a href=&quot;https://www.youtube.com/results?search_query=kyverno+tutorial&quot;&gt;Getting Started with Kyverno – YouTube&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🧪 &lt;a href=&quot;https://playground.kyverno.io/&quot;&gt;Kyverno Playground&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🎯 Popular Use Cases&lt;/h2&gt; 
&lt;p&gt;Kyverno helps platform teams enforce best practices and security standards. Some common use cases include:&lt;/p&gt; 
&lt;h3&gt;1. &lt;strong&gt;Security &amp;amp; Compliance&lt;/strong&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Enforce Pod Security Standards (PSS)&lt;/li&gt; 
 &lt;li&gt;Require specific security contexts&lt;/li&gt; 
 &lt;li&gt;Validate container image sources and signatures&lt;/li&gt; 
 &lt;li&gt;Enforce CIS Benchmark policies&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;2. &lt;strong&gt;Operational Excellence&lt;/strong&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Auto-label workloads&lt;/li&gt; 
 &lt;li&gt;Enforce naming conventions&lt;/li&gt; 
 &lt;li&gt;Generate default configurations (e.g., NetworkPolicies)&lt;/li&gt; 
 &lt;li&gt;Validate YAML and Helm manifests&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;3. &lt;strong&gt;Cost Optimization&lt;/strong&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Enforce resource quotas and limits&lt;/li&gt; 
 &lt;li&gt;Require cost allocation labels&lt;/li&gt; 
 &lt;li&gt;Validate instance types&lt;/li&gt; 
 &lt;li&gt;Clean up unused resources&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;4. &lt;strong&gt;Developer Guardrails&lt;/strong&gt;&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Require readiness/liveness probes&lt;/li&gt; 
 &lt;li&gt;Enforce ingress/egress policies&lt;/li&gt; 
 &lt;li&gt;Validate container image versions&lt;/li&gt; 
 &lt;li&gt;Auto-inject config maps or secrets&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📚 Explore the Policy Library&lt;/h2&gt; 
&lt;p&gt;Discover hundreds of production-ready Kyverno policies for security, operations, cost control, and developer enablement.&lt;/p&gt; 
&lt;p&gt;👉 &lt;a href=&quot;https://kyverno.io/policies/&quot;&gt;Browse the Policy Library&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;🙋 Getting Help&lt;/h2&gt; 
&lt;p&gt;We’re here to help:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;🐞 File a &lt;a href=&quot;https://github.com/kyverno/kyverno/issues&quot;&gt;GitHub Issue&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;💬 Join the &lt;a href=&quot;https://slack.k8s.io/#kyverno&quot;&gt;Kyverno Slack Channel&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;📅 Attend &lt;a href=&quot;https://kyverno.io/community/#community-meetings&quot;&gt;Community Meetings&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;⭐️ &lt;a href=&quot;https://github.com/kyverno/kyverno/stargazers&quot;&gt;Star this repository&lt;/a&gt; to stay updated&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;➕ Contributing&lt;/h2&gt; 
&lt;p&gt;Thank you for your interest in contributing to Kyverno!&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;✅ Read the &lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/CONTRIBUTING.md&quot;&gt;Contribution Guidelines&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🤖 Read The &lt;a href=&quot;https://github.com/kyverno/community/raw/main/AI_USAGE_POLICY.md&quot;&gt;AI_Usage_Policy&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🧵 Join &lt;a href=&quot;https://github.com/kyverno/kyverno/discussions&quot;&gt;GitHub Discussions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;📖 Read the &lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/DEVELOPMENT.md&quot;&gt;Development Guide&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🏁 Check &lt;a href=&quot;https://github.com/kyverno/kyverno/labels/good%20first%20issue&quot;&gt;Good First Issues&lt;/a&gt; and request with &lt;code&gt;/assign&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;🌱 Explore the &lt;a href=&quot;https://kyverno.io/community/&quot;&gt;Community page&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🧾 Software Bill of Materials&lt;/h2&gt; 
&lt;p&gt;All Kyverno images include a Software Bill of Materials (SBOM) in &lt;a href=&quot;https://cyclonedx.org/&quot;&gt;CycloneDX&lt;/a&gt; format. SBOMs are available at:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;👉 &lt;a href=&quot;https://github.com/orgs/kyverno/packages?tab=packages&amp;amp;q=sbom&quot;&gt;&lt;code&gt;ghcr.io/kyverno/sbom&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;👉 &lt;a href=&quot;https://kyverno.io/docs/security/#fetching-the-sbom-for-kyverno&quot;&gt;Fetching the SBOM&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;👥 Contributors&lt;/h2&gt; 
&lt;p&gt;Kyverno is built and maintained by our growing community of contributors!&lt;/p&gt; 
&lt;a href=&quot;https://github.com/kyverno/kyverno/graphs/contributors&quot;&gt; &lt;img src=&quot;https://contrib.rocks/image?repo=kyverno/kyverno&quot; alt=&quot;Contributors image&quot; /&gt; &lt;/a&gt; 
&lt;p&gt;&lt;em&gt;Made with &lt;a href=&quot;https://contrib.rocks&quot;&gt;contributors-img&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;h2&gt;📄 License&lt;/h2&gt; 
&lt;p&gt;Copyright 2026, the Kyverno project. All rights reserved.&lt;br /&gt; Kyverno is licensed under the &lt;a href=&quot;https://raw.githubusercontent.com/kyverno/kyverno/main/LICENSE&quot;&gt;Apache License 2.0&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Kyverno is a &lt;a href=&quot;https://www.cncf.io/projects/&quot;&gt;Cloud Native Computing Foundation (CNCF) Incubating project&lt;/a&gt; and was contributed by &lt;a href=&quot;https://nirmata.com/?utm_source=github&amp;amp;utm_medium=repository&quot;&gt;Nirmata&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/169108858/35923880-823a-11e9-9089-0c9c102f9e6f" medium="image" />
      
    </item>
    
    <item>
      <title>XIU2/CloudflareSpeedTest</title>
      <link>https://github.com/XIU2/CloudflareSpeedTest</link>
      <description>&lt;p&gt;🌩「自选优选 IP」测试 Cloudflare CDN 延迟和速度，获取最快 IP ！当然也支持其他 CDN / 多个解析 IP 的网站 ~&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;XIU2/CloudflareSpeedTest&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/go-mod/go-version/XIU2/CloudflareSpeedTest.svg?style=flat-square&amp;amp;label=Go&amp;amp;color=00ADD8&amp;amp;logo=go&quot; alt=&quot;Go Version&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/XIU2/CloudflareSpeedTest.svg?style=flat-square&amp;amp;label=Release&amp;amp;color=00ADD8&amp;amp;logo=github&quot; alt=&quot;Release Version&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/XIU2/CloudflareSpeedTest.svg?style=flat-square&amp;amp;label=License&amp;amp;color=00ADD8&amp;amp;logo=github&quot; alt=&quot;GitHub license&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/XIU2/CloudflareSpeedTest.svg?style=flat-square&amp;amp;label=Star&amp;amp;color=00ADD8&amp;amp;logo=github&quot; alt=&quot;GitHub Star&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/forks/XIU2/CloudflareSpeedTest.svg?style=flat-square&amp;amp;label=Fork&amp;amp;color=00ADD8&amp;amp;logo=github&quot; alt=&quot;GitHub Fork&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;国外很多网站都在使用 Cloudflare CDN，但分配给中国内地访客的 IP 并不友好（延迟高、丢包多、速度慢）。&lt;br /&gt; 虽然 Cloudflare 公开了所有 &lt;a href=&quot;https://www.cloudflare.com/zh-cn/ips/&quot;&gt;IP 段&lt;/a&gt; ，但想要在这么多 IP 中找到适合自己的，怕是要累死，于是就有了这个软件。&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;「自选优选 IP」测试 Cloudflare CDN 延迟和速度，获取最快 IP (IPv4+IPv6)&lt;/strong&gt;！好用的话&lt;strong&gt;点个&lt;code&gt;⭐&lt;/code&gt;鼓励一下叭~&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;em&gt;分享我其他开源项目：&lt;a href=&quot;https://github.com/XIU2/TrackersListCollection&quot;&gt;&lt;strong&gt;TrackersList.com&lt;/strong&gt; - 全网热门 BT Tracker 列表！有效提高 BT 下载速度~&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/stars/XIU2/TrackersListCollection.svg?style=flat-square&amp;amp;label=Star&amp;amp;color=4285dd&amp;amp;logo=github&quot; height=&quot;16px&quot; /&gt;&lt;/em&gt;&lt;br /&gt; &lt;em&gt;&lt;a href=&quot;https://github.com/XIU2/UserScript&quot;&gt;&lt;strong&gt;UserScript&lt;/strong&gt; - 🐵 Github 高速下载、知乎增强、自动无缝翻页、护眼模式 等十几个&lt;strong&gt;油猴脚本&lt;/strong&gt;~&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/stars/XIU2/UserScript.svg?style=flat-square&amp;amp;label=Star&amp;amp;color=4285dd&amp;amp;logo=github&quot; height=&quot;16px&quot; /&gt;&lt;/em&gt;&lt;br /&gt; &lt;em&gt;&lt;a href=&quot;https://github.com/XIU2/SNIProxy&quot;&gt;&lt;strong&gt;SNIProxy&lt;/strong&gt; - 🧷 自用的简单 SNI Proxy（支持全平台、全系统、前置代理、配置简单等~&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/stars/XIU2/SNIProxy.svg?style=flat-square&amp;amp;label=Star&amp;amp;color=4285dd&amp;amp;logo=github&quot; height=&quot;16px&quot; /&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;当然了，本项目也支持对 &lt;strong&gt;&lt;code&gt;其他 CDN / 多个解析 IP 的网站&lt;/code&gt;&lt;/strong&gt; 延迟测速，但相对应的下载测速地址需自行寻找。&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;Cloudflare CDN 已&lt;strong&gt;明文禁止代理&lt;/strong&gt;方式使用，对于&lt;strong&gt;代理套 CDN&lt;/strong&gt; 的自行承担风险，请勿过度依赖 &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/382&quot;&gt;#382&lt;/a&gt; &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/383&quot;&gt;#383&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;# 快速使用&lt;/h2&gt; 
&lt;h3&gt;下载运行&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;下载编译好的可执行文件（ &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/releases&quot;&gt;Github Releases&lt;/a&gt; / &lt;a href=&quot;https://xiu.lanzoub.com/b0742hkxe&quot;&gt;蓝奏云&lt;/a&gt; ）并解压。&lt;/li&gt; 
 &lt;li&gt;双击运行 &lt;code&gt;cfst.exe&lt;/code&gt; 文件（Windows 系统），等待测速完成...&lt;/li&gt; 
&lt;/ol&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击查看 Windows 系统下其他安装方式」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;如果你有 scoop(Windows 下的命令行安装程序)，则可以这样安装:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# 添加最多人使用的中文软件包仓库：dorado
scoop bucket add dorado https://github.com/chawyehsu/dorado
# 安装cloudflare-speedtest
scoop install dorado/cloudflare-speedtest
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击查看 Linux 系统下的使用示例 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;以下命令仅为示例，版本号和文件名请前往 &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/releases&quot;&gt;&lt;strong&gt;Releases&lt;/strong&gt;&lt;/a&gt; 查看。&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;# 如果是第一次使用，则建议创建新文件夹（后续更新时，跳过该步骤）
mkdir cfst

# 进入文件夹（后续更新，只需要从这里重复下面的下载、解压命令即可）
cd cfst

# 下载 CFST 压缩包（自行根据需求替换 URL 中 [版本号] 和 [文件名]）
wget -N https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_amd64.tar.gz
# 如果你是在国内网络环境中下载，那么请使用下面这几个镜像加速之一：
# wget -N https://wget.la/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_amd64.tar.gz
# wget -N https://ghfast.top/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_amd64.tar.gz
# wget -N https://ghproxy.it/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_amd64.tar.gz
# wget -N https://gh-proxy.org/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_amd64.tar.gz
# wget -N https://cdn.gh-proxy.org/https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_amd64.tar.gz
# 如果下载失败的话，尝试删除 -N 参数（如果是为了更新，则记得提前删除旧压缩包 rm cfst_linux_amd64.tar.gz ）

# 解压（不需要删除旧文件，会直接覆盖，自行根据需求替换 文件名）
tar -zxf cfst_linux_amd64.tar.gz

# 赋予执行权限
chmod +x cfst

# 运行（不带参数）
./cfst

# 运行（带参数示例）
./cfst -tl 200 -dn 20
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;如果平&lt;strong&gt;均延迟非常低&lt;/strong&gt;（如 0.xx），则说明 CFST &lt;strong&gt;测速时走了代理&lt;/strong&gt;，请先关闭代理软件后再测速。&lt;br /&gt; 如果在&lt;strong&gt;路由器&lt;/strong&gt;上运行，建议先关闭路由器内的代理（或将其排除），否则测速结果可能会&lt;strong&gt;不准确/无法使用&lt;/strong&gt;。&lt;/p&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;em&gt;在&lt;strong&gt;手机&lt;/strong&gt;上独立运行 CFST 测速的简单教程：&lt;strong&gt;&lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/61&quot;&gt;Android&lt;/a&gt;、&lt;a href=&quot;https://github.com/Hsia97/CFSTAPP&quot;&gt;Android APP&lt;/a&gt;、&lt;a href=&quot;https://github.com/xianshenglu/cloudflare-ip-tester-app&quot;&gt;Android APP&lt;/a&gt;、&lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/321&quot;&gt;IOS&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;注意！本软件仅适用于网站，&lt;strong&gt;不支持给使用 UDP 协议的 Cloudflare WARP 优选 IP&lt;/strong&gt;，具体见：&lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/392&quot;&gt;#392&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;结果示例&lt;/h3&gt; 
&lt;p&gt;测速完毕后，默认会显示&lt;strong&gt;最快的 10 个 IP&lt;/strong&gt;，示例（仅为输出内容示例）：&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;IP 地址           已发送  已接收  丢包率  平均延迟  下载速度(MB/s)  地区码
104.27.200.69     4      4       0.00   146.23    28.64          LAX
172.67.60.78      4      4       0.00   139.82    15.02          SEA
104.25.140.153    4      4       0.00   146.49    14.90          SJC
104.27.192.65     4      4       0.00   140.28    14.07          LAX
172.67.62.214     4      4       0.00   139.29    12.71          LAX
104.27.207.5      4      4       0.00   145.92    11.95          LAX
172.67.54.193     4      4       0.00   146.71    11.55          LAX
104.22.66.8       4      4       0.00   147.42    11.11          SEA
104.27.197.63     4      4       0.00   131.29    10.26          FRA
172.67.58.91      4      4       0.00   140.19    9.14           SJC
...

# 如果平均延迟非常低（如 0.xx），则说明 CFST 测速时走了代理，请先关闭代理软件后再测速。
# 如果在路由器上运行，请先关闭路由器内的代理（或将其排除），否则测速结果可能会不准确/无法使用。

# 因为每次测速都是在每个 IP 段中随机 IP，所以每次的测速结果都不可能相同，这是正常的！

# 注意！我发现电脑开机后第一次测速延迟会明显偏高（手动 TCPing 也一样），后续测速都正常
# 因此建议大家开机后第一次正式测速前，先随便测几个 IP（无需等待延迟测速完成，只要进度条动了就可以直接关了）

# 软件在 默认参数 下的整个流程大概步骤：
# 1. 延迟测速（默认 TCPing 模式，HTTPing 模式需要手动加上参数）
# 2. 延迟排序（延迟 从低到高 排序并按条件过滤，不同丢包率会分开排序，因此可能会有一些延迟低但丢包的 IP 排到后面）
# 3. 下载测速（从延迟最低的 IP 开始依次下载测速，默认测够 10 个就会停止）
# 4. 速度排序（速度从高到低排序）
# 5. 输出结果（通过参数控制是否输出到命令行(-p 0)或输出到文件(-o &quot;&quot;)）

# 注意：输出的结果文件 result.csv 通过微软 Excel 表格打开会中文乱码，这是正常的，其他表格软件/记事本都显示正常
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;测速结果第一行就是&lt;strong&gt;既下载速度最快、又平均延迟最低的最快 IP&lt;/strong&gt;！&lt;/p&gt; 
&lt;p&gt;完整结果保存在当前目录下的 &lt;code&gt;result.csv&lt;/code&gt; 文件中，用&lt;strong&gt;记事本/表格软件&lt;/strong&gt;打开，格式如下：&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;IP 地址,已发送,已接收,丢包率,平均延迟,下载速度(MB/s),地区码
104.27.200.69,4,4,0.00,146.23,28.64,LAX
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;em&gt;如果你发现&lt;strong&gt;下载速度为 0.00&lt;/strong&gt;，那么可以用&lt;strong&gt;调试模式 &lt;code&gt;-debug&lt;/code&gt;&lt;/strong&gt; 排查一下，详见：&lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest#-%E4%B8%8B%E8%BD%BD%E6%B5%8B%E9%80%9F%E9%83%BD%E6%98%AF-000-&quot;&gt;&lt;strong&gt;# 下载测速都是 0.00 ？&lt;/strong&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;em&gt;大家可以按自己需求，对完整结果&lt;strong&gt;进一步筛选处理&lt;/strong&gt;，或者去看一看进阶使用&lt;strong&gt;指定过滤条件&lt;/strong&gt;！&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;# 进阶使用&lt;/h2&gt; 
&lt;p&gt;直接运行使用的是默认参数，如果想要&lt;strong&gt;更好更高效的寻找最适合自己的&lt;/strong&gt; IP，那么就需要善用各个参数的搭配组合：&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-Dart&quot;&gt;C:\&amp;gt;cfst -h

CloudflareSpeedTest vX.X.X
测试各个 CDN 或网站所有 IP 的延迟和速度，获取最快 IP (IPv4+IPv6)！
https://github.com/XIU2/CloudflareSpeedTest

参数：
    -n 200
        延迟测速线程；越多延迟测速越快，性能弱的设备 (如路由器) 请勿太高；(默认 200 最多 1000)
    -t 4
        延迟测速次数；单个 IP 延迟测速的次数；(默认 4 次)
    -dn 10
        下载测速数量；延迟测速并排序后，从最低延迟起下载测速的数量；(默认 10 个)
    -dt 10
        下载测速时间；单个 IP 下载测速最长时间，不能太短；(默认 10 秒)
    -tp 443
        指定测速端口；延迟测速/下载测速时使用的端口；(默认 443 端口)
    -url https://cf.xiu2.xyz/url
        指定测速地址；延迟测速(HTTPing)/下载测速时使用的地址，默认地址不保证可用性，建议自建；
        当下载测速时，软件会从 HTTP 响应头中获取该 IP 当前地区码（支持 Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny 等 CDN）并显示出来。

    -httping
        切换测速模式；延迟测速模式改为 HTTP 协议，所用测试地址为 [-url] 参数；(默认 TCPing)
        当使用 HTTP 测速模式时，软件会从 HTTP 响应头中获取该 IP 当前地区码（支持 Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny 等 CDN）并显示出来。
        注意：HTTPing 本质上也算一种 网络扫描 行为，因此如果你在服务器上面运行，需要降低并发(-n)，否则可能会被一些严格的商家暂停服务。
        如果你遇到 HTTPing 首次测速可用 IP 数量正常，后续测速越来越少甚至直接为 0，但停一段时间后又恢复了的情况，那么也可能是被 运营商、Cloudflare CDN 认为你在网络扫描而 触发临时限制机制，因此才会过一会儿就恢复了，建议降低并发(-n)减少这种情况的发生。
    -httping-code 200
        有效状态代码；HTTPing 延迟测速时网页返回的有效 HTTP 状态码，仅限一个；(默认 200 301 302)
    -cfcolo HKG,KHH,NRT,LAX,SEA,SJC,FRA,MAD
        匹配指定地区；IATA 机场地区码或国家/城市码，英文逗号分隔，大小写均可，仅 HTTPing 模式可用；(默认 所有地区)
        支持 Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny 等 CDN
        其中 Cloudflare、AWS CloudFront、Fastly 使用的是 IATA 三字机场地区码，如：HKG,LAX
        其中 CDN77、Bunny 使用的是 二字国家/区域码，如：US,CN
        其中 Gcore 使用的是 二字城市码，如：FR,AM
        因此大家使用 -cfcolo 指定地区码时要根据不同的 CDN 来指定不同类型的地区码。

    -tl 200
        平均延迟上限；只输出低于指定平均延迟的 IP，各上下限条件可搭配使用；(默认 9999 ms)
    -tll 40
        平均延迟下限；只输出高于指定平均延迟的 IP；(默认 0 ms)
    -tlr 0.2
        丢包几率上限；只输出低于/等于指定丢包率的 IP，范围 0.00~1.00，0 过滤掉任何丢包的 IP；(默认 1.00)
    -sl 5
        下载速度下限；只输出高于指定下载速度的 IP，凑够指定数量 [-dn] 才会停止测速；(默认 0.00 MB/s)

    -p 10
        显示结果数量；测速后直接显示指定数量的结果，为 0 时不显示结果直接退出；(默认 10 个)
    -f ip.txt
        IP段数据文件；如路径含有空格请加上引号；支持其他 CDN IP段；(默认 ip.txt)
    -ip 1.1.1.1,2.2.2.2/24,2606:4700::/32
        指定IP段数据；直接通过参数指定要测速的 IP 段数据，英文逗号分隔；(默认 空)
    -o result.csv
        写入结果文件；如路径含有空格请加上引号；值为空时不写入文件 [-o &quot;&quot;]；(默认 result.csv)
        注意：在一些环境下使用 -o &quot;&quot; 可能会被忽略掉这个空参数导致报错，可加个空格 -o &quot; &quot; 解决

    -dd
        禁用下载测速；禁用后测速结果会按延迟排序 (默认按下载速度排序)；(默认 启用)
    -allip
        测速全部的IP；对 IP 段中的每个 IP (仅支持 IPv4) 进行测速；(默认 每个 /24 段随机测速一个 IP)

    -debug
        调试输出模式；会在一些非预期情况下输出更多日志以便判断原因；(默认 关闭)
        目前该功能仅针对 HTTPing 延迟测速过程 及 下载测速过程，当过程中因为各种原因导致当前 IP 测速中断都会输出错误原因
        例如：HTTPing 延迟测速过程中，因为 HTTP 状态码不符合或测速地址有问题或超时等原因而终止测速
        例如：下载测速过程中，因为下载测速地址有问题（被阻断、403状态码、超时）等原因而终止测速（导致显示 0.00）

    -v
        打印程序版本 + 检查版本更新
    -h
        打印帮助说明
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;界面解释&lt;/h3&gt; 
&lt;p&gt;为了避免大家对测速过程中的&lt;strong&gt;输出内容产生误解（可用、队列等数字，下载测速一半就&quot;中断&quot;？下载测速&quot;卡住&quot;不动？）&lt;/strong&gt;，我特意解释下。&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;该示例把常用参数都给加上了，即为：&lt;code&gt;-tll 40 -tl 150 -sl 1 -dn 5&lt;/code&gt;，最后输出结果如下：&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# XIU2/CloudflareSpeedTest vX.X.X

开始延迟测速（模式：TCP, 端口：443, 范围：40 ~ 150 ms, 丢包：1.00)
321 / 321 [-----------------------------------------------------------] 可用: 30
开始下载测速（下限：1.00 MB/s, 数量：5, 队列：10）
3 / 5 [-----------------------------------------↗--------------------]
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度(MB/s)  地区码
XXX.XXX.XXX.XXX   4      4       0.00   83.32     3.66           LAX
XXX.XXX.XXX.XXX   4      4       0.00   107.81    2.49           LAX
XXX.XXX.XXX.XXX   4      3       0.25   149.59    1.04           N/A

完整测速结果已写入 result.csv 文件，可使用记事本/表格软件查看。
按下 回车键 或 Ctrl+C 退出。
&lt;/code&gt;&lt;/pre&gt; 
 &lt;hr /&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;刚接触 CFST 的人，可能会迷惑&lt;strong&gt;明明延迟测速可用 IP 有 30 个，怎么最后只剩下 3 个了呢？&lt;/strong&gt;&lt;br /&gt; 下载测速里的队列又是什么意思？难道我下载测速还要排队？&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;CFST 会先延迟测速，在这过程中进度条右侧会实时显示可用 IP 数量（&lt;code&gt;可用: 30&lt;/code&gt;），但注意该可用数量指的是&lt;strong&gt;测试通过没有超时的 IP 数量&lt;/strong&gt;，和延迟上下限、丢包条件无关。当延迟测速完成后，因为还指定了&lt;strong&gt;延迟上下限、丢包&lt;/strong&gt;的条件，所以按照条件过滤后只剩下 &lt;code&gt;10&lt;/code&gt; 个了（也就是等待下载测速的 &lt;code&gt;队列：10&lt;/code&gt;）。&lt;/p&gt; 
 &lt;p&gt;即以上示例中，&lt;code&gt;321&lt;/code&gt; 个 IP 延迟测速完成后，只有 &lt;code&gt;30&lt;/code&gt; 个 IP 测试通过没有超时，然后根据延迟上下限范围：&lt;code&gt;40 ~ 150 ms&lt;/code&gt; 及丢包上限条件过滤后，只剩下 &lt;code&gt;10&lt;/code&gt; 个满足要求的 IP 了。如果你 &lt;code&gt;-dd&lt;/code&gt; 禁用了下载测速，那么就会直接输出这 &lt;code&gt;10&lt;/code&gt; 个 IP 了。当然该示例并未禁用，因此接下来软件会继续对这 &lt;code&gt;10&lt;/code&gt; 个 IP 进行下载测速（&lt;code&gt;队列：10&lt;/code&gt;）。&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;因为下载测速是单线程一个个 IP 挨着排队测速的，因此等待下载测速的 IP 数量才会叫做 &lt;code&gt;队列&lt;/code&gt;。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;hr /&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;你可能注意到了，&lt;strong&gt;明明指定了要找到 5 个满足下载速度条件的 IP，怎么才 3 个就 “中断” 了呢？&lt;/strong&gt;&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;下载测速进度条中的 &lt;code&gt;3 / 5&lt;/code&gt;，前者指的是找到了 &lt;code&gt;3&lt;/code&gt; 个满足下载速度下限条件的 IP（即下载速度高于 &lt;code&gt;1 MB/s&lt;/code&gt; ），后者 &lt;code&gt;5&lt;/code&gt; 指的是你要求找到 &lt;code&gt;5&lt;/code&gt; 个满足下载速度下限条件的 IP（&lt;code&gt;-dn 5&lt;/code&gt;）。&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;另外，提醒一下，如果你指定的 &lt;code&gt;-dn&lt;/code&gt; 大于下载测速队列，比如你延迟测速后只剩下 &lt;code&gt;4&lt;/code&gt; 个 IP 了，那么下载测速进度条中后面的数字就会和下载测速队列一样都是 &lt;code&gt;4&lt;/code&gt; 个，而非你 &lt;code&gt;-dn&lt;/code&gt; 指定的 &lt;code&gt;5&lt;/code&gt; 个了。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;软件在测速完这 &lt;code&gt;10&lt;/code&gt; 个 IP 后，只找到了 &lt;code&gt;3&lt;/code&gt; 个下载速度高于 &lt;code&gt;1 MB/s&lt;/code&gt; 的 IP，剩下的 &lt;code&gt;7&lt;/code&gt; 个 IP 都是 “不及格” 的。&lt;/p&gt; 
 &lt;p&gt;因此，这不是 &lt;code&gt;“每次测速都不到 5 就中断了”&lt;/code&gt;，而是所有 IP 都下载测速完了，但却只找到了 &lt;code&gt;3&lt;/code&gt; 个满足条件的。&lt;/p&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;还有一种情况，那就是当可用 IP 很多时（几百几千），你还设置了下载速度条件，那么可能就会遇到：&lt;strong&gt;怎么下载测速进度条老是卡在 &lt;code&gt;X / 5&lt;/code&gt; 了呢？&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;这其实并不是卡住了，而是只有当找到一个满足条件的 IP 时，进度条才会 +1，因此如果一直找不到，那么 CFST 就会一直下载测速下去，因此在表现为进度条卡住不动，但这也是在提醒你：你设置的下载速度条件对你来说已经高于实际了，你需要适当调低预期。&lt;/p&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;如果不想遇到这种全部测速一遍都没几个满足条件的情况，那么就要&lt;strong&gt;调低下载速度上限参数 &lt;code&gt;-sl&lt;/code&gt;&lt;/strong&gt;，或者移除。&lt;/p&gt; 
 &lt;p&gt;因为只要指定了 &lt;code&gt;-sl&lt;/code&gt; 参数，那么只要没有凑够 &lt;code&gt;-dn&lt;/code&gt; 的数量（默认 10 个），就会一直测速下去，直到凑够或全部测速完。移除 &lt;code&gt;-sl&lt;/code&gt; 并添加 &lt;code&gt;-dn 20&lt;/code&gt; 参数，这样就是只测速延迟最低的前 20 个 IP，测速完就停止，节省时间。&lt;/p&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;另外，如果全部队列 IP 都测速完了，但一个满足下载速度条件的 IP 都没有，你可能需要调低预期的下载测速下限条件，但你需要知道当前的大概测速速度都在什么范围，那么你就可以加上 &lt;code&gt;-debug&lt;/code&gt; 参数开启调试模式，这样再遇到这种情况时，就会&lt;strong&gt;忽略条件返回所有测速结果&lt;/strong&gt;，你就能看到这些 IP 的下载速度都有多少，心里也就有数了，然后&lt;strong&gt;适当调低 &lt;code&gt;-sl&lt;/code&gt; 再试试&lt;/strong&gt;。&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;注意，如果你&lt;strong&gt;没有指定&lt;/strong&gt;下载测速下限 &lt;code&gt;-sl&lt;/code&gt; 条件，那么无论什么情况下 CFST 都会&lt;strong&gt;输出所有测速结果&lt;/strong&gt;。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;同样，延迟测速方面，&lt;code&gt;可用: 30&lt;/code&gt;、&lt;code&gt;队列：10&lt;/code&gt; 这两个数值也可以让你清楚，你设置的延迟条件对你来说是否过于苛刻。如果可用 IP 一大堆，但条件过滤后只剩下 2、3 个，那不用说就知道需要&lt;strong&gt;调低预期的延迟/丢包条件&lt;/strong&gt;了。&lt;/p&gt; 
 &lt;p&gt;这两个机制，一个是告诉你&lt;strong&gt;延迟丢包条件&lt;/strong&gt;是否合适的，一个是告诉你&lt;strong&gt;下载速度条件&lt;/strong&gt;是否合适的。&lt;/p&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h3&gt;使用示例&lt;/h3&gt; 
&lt;p&gt;Windows 要指定参数需要在 CMD 中运行，或者把参数添加到快捷方式目标中。&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;各参数均有&lt;strong&gt;默认值&lt;/strong&gt;，当使用默认值时参数可以省略（&lt;strong&gt;按需选择&lt;/strong&gt;），参数&lt;strong&gt;不分前后顺序&lt;/strong&gt;。&lt;/li&gt; 
  &lt;li&gt;Windows &lt;strong&gt;PowerShell&lt;/strong&gt; 只需把下面命令中的 &lt;code&gt;cfst&lt;/code&gt; 改为 &lt;code&gt;.\cfst&lt;/code&gt; 即可。&lt;/li&gt; 
  &lt;li&gt;Linux / macOS 系统只需要把下面命令中的 &lt;code&gt;cfst&lt;/code&gt; 改为 &lt;code&gt;./cfst&lt;/code&gt; 即可。&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# CMD 带参数运行&lt;/h4&gt; 
&lt;p&gt;对命令行程序不熟悉的人，可能不知道该如何带参数运行，我就简单说一下。&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;很多人打开 CMD 直接就以&lt;strong&gt;绝对路径&lt;/strong&gt;运行 CFST 会报错，这是因为默认的 &lt;code&gt;-f ip.txt&lt;/code&gt; 参数是相对路径，需要指定绝对路径的 ip.txt 才行，但这样毕竟太麻烦了，因此还是建议进入 CFST 程序目录下，以&lt;strong&gt;相对路径&lt;/strong&gt;方式运行：&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;方式 一&lt;/strong&gt;：&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;打开 CFST 程序所在目录&lt;/li&gt; 
  &lt;li&gt;空白处按下 &lt;kbd&gt;Shift + 鼠标右键&lt;/kbd&gt; 显示右键菜单&lt;/li&gt; 
  &lt;li&gt;选择 &lt;strong&gt;[在此处打开命令窗口]&lt;/strong&gt; 来打开 CMD 窗口，此时默认就位于当前目录下&lt;/li&gt; 
  &lt;li&gt;输入带参数的命令，如：&lt;code&gt;cfst -tl 200 -dn 20&lt;/code&gt; 即可运行&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;&lt;strong&gt;方式 二&lt;/strong&gt;：&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;打开 CFST 程序所在目录&lt;/li&gt; 
  &lt;li&gt;直接在文件夹地址栏中全选(或清空)并输入 &lt;code&gt;cmd&lt;/code&gt; 回车就能打开 CMD 窗口，此时默认就位于当前目录下&lt;/li&gt; 
  &lt;li&gt;输入带参数的命令，如：&lt;code&gt;cfst -tl 200 -dn 20&lt;/code&gt; 即可运行&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;当然你也可以随便打开一个 CMD 窗口，然后输入如 &lt;code&gt;cd /d &quot;D:\Program Files\cfst&quot;&lt;/code&gt; 来进入程序目录&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：如果用的是 &lt;strong&gt;PowerShell&lt;/strong&gt; 只需把命令中的 &lt;code&gt;cfst&lt;/code&gt; 改为 &lt;code&gt;.\cfst&lt;/code&gt; 即可。&lt;br /&gt; &lt;strong&gt;注意&lt;/strong&gt;：在 &lt;strong&gt;PowerShell&lt;/strong&gt; 下使用 &lt;code&gt;-o &quot;&quot;&lt;/code&gt; 会被忽略掉空参数导致报错，可加个空格 &lt;code&gt;-o &quot; &quot;&lt;/code&gt; 解决&lt;/p&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# Windows 快捷方式带参数运行&lt;/h4&gt; 
&lt;p&gt;如果不经常修改运行参数（比如平时都是直接双击运行）的人，建议使用快捷方式，更方便点。&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;右键 &lt;code&gt;cfst.exe&lt;/code&gt; 文件 - &lt;strong&gt;[创建快捷方式]&lt;/strong&gt;，然后右键该快捷方式 - &lt;strong&gt;[属性]&lt;/strong&gt;，修改其&lt;strong&gt;目标&lt;/strong&gt;：&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 如果要不输出结果文件，那么请加上 -o &quot; &quot;，引号里的是空格（不加空格会导致该空参数被忽略从而报错）。
D:\ABC\cfst\cfst.exe -tl 200 -dn 20 -o &quot; &quot;

# 如果文件路径包含引号，则需要把启动参数放在引号外面，记得引号和 - 之间有空格。
&quot;D:\Program Files\cfst\cfst.exe&quot; -tl 200 -dn 20 -o &quot; &quot;

# 注意！快捷方式 - 起始位置 不能是空的，否则就会因为绝对路径而找不到 ip.txt 文件
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# IPv4/IPv6&lt;/h4&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 指定自带的 IPv4 数据文件可测速这些 IPv4 地址（-f 默认值就是 ip.txt，所以该参数可省略）
cfst -f ip.txt

# 指定自带的 IPv6 数据文件可测速这些 IPv6 地址
# 另外，v2.1.0 版本后支持 IPv4+IPv6 混合测速并移除了 -ipv6 参数，因此一个文件内可以同时包含 IPv4+IPv6 地址
cfst -f ipv6.txt

# 也可以直接通过参数指定要测速的 IP
cfst -ip 1.1.1.1,2606:4700::/32
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;测速 IPv6 时，可能会注意到每次测速数量都不一样，了解原因： &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/issues/120&quot;&gt;#120&lt;/a&gt;&lt;br /&gt; 因为 IPv6 太多（以亿为单位），且绝大部分 IP 段压根未启用，所以我只扫了一部分可用的 IPv6 段写到 &lt;code&gt;ipv6.txt&lt;/code&gt; 文件中，有兴趣的可以自行扫描增删，ASN 数据源来自：&lt;a href=&quot;https://bgp.he.net/AS13335#_prefixes6&quot;&gt;bgp.he.net&lt;/a&gt;&lt;/p&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# HTTPing&lt;/h4&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;目前有两种延迟测速模式，分别为 &lt;strong&gt;TCP 协议、HTTP 协议&lt;/strong&gt;。&lt;br /&gt; TCP 协议耗时更短、消耗资源更少，超时时间为 1 秒，该协议为默认模式。&lt;br /&gt; HTTP 协议适用于快速测试某域名指向某 IP 时是否可以访问，超时时间为 2 秒。&lt;br /&gt; 同一个 IP，各协议去 Ping 得到的延迟一般为：&lt;strong&gt;ICMP &amp;lt; TCP &amp;lt; HTTP&lt;/strong&gt;，越靠右对丢包等网络波动越敏感。&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;注意：HTTPing 本质上也算一种&lt;strong&gt;网络扫描&lt;/strong&gt;行为，因此如果你在服务器上面运行，需要&lt;strong&gt;降低并发&lt;/strong&gt;(&lt;code&gt;-n&lt;/code&gt;)，否则可能会被一些严格的商家暂停服务。如果你遇到 HTTPing 首次测速可用 IP 数量正常，后续测速越来越少甚至直接为 0，但停一段时间后又恢复了的情况，那么也可能是被 运营商、Cloudflare CDN 认为你在网络扫描而&lt;strong&gt;触发临时限制机制&lt;/strong&gt;，因此才会过一会儿就恢复了，建议&lt;strong&gt;降低并发&lt;/strong&gt;(&lt;code&gt;-n&lt;/code&gt;)减少这种情况的发生。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;另外，本软件 HTTPing 仅获取&lt;strong&gt;响应头(response headers)&lt;/strong&gt;，并不获取正文内容（即 URL 文件大小不影响 HTTPing 测试，但如果你还要下载测速的话，那么还是需要一个大文件的），类似于 curl -i 功能。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;另外，HTTPing 过程中，软件会从 HTTP 响应头中获取该 IP 当前地区码（支持 Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny 等 CDN）并显示出来，而 TCPing 过程中无法这样做（但 下载测速 时也会这样做来获取地区码，毕竟下载测速也是个 HTTP 链接）&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 只需加上 -httping 参数即可切换到 HTTP 协议延迟测速模式
cfst -httping

# 软件会根据访问时网页返回的有效 HTTP 状态码来判断可用性（当然超时也算），默认对返回 200 301 302 这三个 HTTP 状态码的视为有效，可以手动指定认为有效的 HTTP 状态码，但只能指定一个（你需要提前确定测试地址正常情况下会返回哪个状态码）
cfst -httping -httping-code 200

# 通过 -url 参数来指定 HTTPing 测试地址（可以是任意网页 URL，不局限于具体文件地址）
cfst -httping -url https://cf.xiu2.xyz/url
# 如果你要 HTTPing 测试其他网站/CDN，那么指定一个该网站/使用该 CDN 的地址（因为软件默认地址是 Cloudflare 的，只能用于测试 Cloudflare 的 IP）

# 注意：如果测速地址为 HTTP 协议，记得加上 -tp 80（这个参数会影响 延迟测速/下载测速 时使用的端口）
# 同理，如果要测速 80 端口，那么也需要加上 -url 参数来指定一个 http:// 协议的地址才行（且该地址不会强制重定向至 HTTPS），如果是非 80 443 端口，那么需要确定该下载测速地址是否支持通过该端口访问。
cfst -httping -tp 80 -url http://cdn.cloudflare.steamstatic.com/steam/apps/5952/movie_max.webm
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# 匹配指定地区&lt;/h4&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;Cloudflare CDN 的节点 IP 是 Anycast IP，即每个 IP 对应的服务器节点及地区不是固定的，而是动态变化的，&lt;strong&gt;不同地区、不同运营商、不同时间段&lt;/strong&gt;访问&lt;strong&gt;同一个 IP&lt;/strong&gt; 分配到的服务器节点地区和路线也都是不一样的（比如同一个 IP，美国人访问就是分配到就近的美国节点服务器，日本人访问则就又变成了就近的日本节点服务器了，国内内地就比较特殊了，只能给你分配到其他国家，当然不同的 IP 段路由变化/分配逻辑也是不同的，有的 IP 段会较为固定）。&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;！虽然 Cloudflare CDN 有很多亚洲节点，但&lt;strong&gt;不代表你就能用上&lt;/strong&gt;，新加坡人测速可能随便一抓一大把的新加坡节点，但你全部扫一遍可能都遇不到一个，因为这是由 CDN 控制的。Anycast IP 的路由是经常变的，同一个 IP 今天可能是美国，明天你再访问可能就又分配到欧洲节点了（当然这只是个例子，一般没有那么频繁，这也和很多因素有关，比如线路拥塞程度，成本变动等），因此&lt;strong&gt;不要对该功能有过高期待&lt;/strong&gt;~&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;或者你随便找个 Cloudflare CDN 的 IP（比如官网域名的解析 IP &lt;code&gt;104.16.123.96&lt;/code&gt;），然后去那些有全球节点的&lt;a href=&quot;https://ping.sx/ping?t=104.16.123.96&quot;&gt;在线 Ping 测试&lt;/a&gt;网站，你就会发现这个 IP 在全球大部分地区的延迟都是个位数（而且很多都是 0.X ms），就算一些地方延迟高一些但也基本都控制在 几十ms，只有在国内才会发现突然变成了 上百ms 了。&lt;/p&gt; 
 &lt;p&gt;这就是 Anycast 技术，也就只有国内大陆这种特殊的网络情况，才需要对 Anycast 的 CDN IP 进行优选。&lt;/p&gt; 
 &lt;p&gt;因此，对于这种 Anycast IP 的实际服务器位置，就不能靠那些在线 IP 地址位置查询网站来判断了。&lt;/p&gt; 
 &lt;p&gt;除了通过 &lt;strong&gt;HTTP 响应头&lt;/strong&gt;获取地区码外（该功能的实现方式），还可以手动访问 &lt;code&gt;http://CloudflareIP/cdn-cgi/trace&lt;/code&gt; 来获知 CDN 分配给你的实际节点地区码。&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;该功能支持 &lt;strong&gt;Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny&lt;/strong&gt; 等 CDN。&lt;br /&gt; 但注意，不是所有 CDN 都支持 Anycast 技术的，很多 CDN 会限制一个网站能使用的 IP 范围。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;其中 &lt;strong&gt;Cloudflare、AWS CloudFront、Fastly&lt;/strong&gt; 都使用的是 &lt;strong&gt;&lt;code&gt;IATA 三字机场地区码&lt;/code&gt;&lt;/strong&gt;，如：HKG,LAX&lt;br /&gt; 而 &lt;strong&gt;CDN77、Bunny&lt;/strong&gt; 使用的是 &lt;strong&gt;&lt;code&gt;二字国家/区域码&lt;/code&gt;&lt;/strong&gt;，如：US,CN&lt;br /&gt; &lt;strong&gt;Gcore&lt;/strong&gt; 则使用的是 &lt;strong&gt;&lt;code&gt;二字城市码&lt;/code&gt;&lt;/strong&gt;，如：FR,AM&lt;br /&gt; 因此大家使用 &lt;code&gt;-cfcolo&lt;/code&gt; 指定地区码时要根据不同的 CDN 来指定不同类型的地区码。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果你要用于筛选 AWS CloudFront CDN 地区，那么要通过 &lt;code&gt;-url&lt;/code&gt; 参数指定一个使用 AWS CloudFront CDN 的下载测速地址（因为软件默认下载测速地址是 Cloudflare CDN 的），另外有时候 HTTPing 模式测速一些 AWS CloudFront 地址会返回 403 错误，这种情况下需要加上 &lt;code&gt;-httping-code 403&lt;/code&gt; 才能正确获取地区码。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 指定地区名后，延迟测速后得到的结果就都是指定地区的 IP 了（如果没有指定 -dd 的话则会继续进行下载测速）
# 如果延迟测速后结果为 0，则说明没有找到任何一个（未超时可用的）指定地区的 IP。
# 节点地区名为当地 IATA 机场地区码或国家/城市码，指定多个时用英文逗号分隔，v2.2.3 版本后支持小写

cfst -httping -cfcolo HKG,KHH,NRT,LAX,SEA,SJC,FRA,MAD

# 注意，该参数只有在 HTTPing 延迟测速模式下才可用（因为软件是通过 HTTP 链接中的响应头来获得该 IP 的实际地区码）

# 另外，HTTPing 过程中，软件会从 HTTP 响应头中获取该 IP 当前地区码（支持 Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny 等 CDN）并显示出来，而 TCPing 过程中无法这样做（但 下载测速 时也会这样做来获取地区码，毕竟下载测速也是个 HTTP 链接）
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;&lt;code&gt;IATA 三字机场地区码&lt;/code&gt;&lt;/strong&gt;，可见：&lt;a href=&quot;https://www.cloudflarestatus.com/&quot;&gt;https://www.cloudflarestatus.com/&lt;/a&gt;&lt;br /&gt; &lt;strong&gt;&lt;code&gt;二字国家码&lt;/code&gt;&lt;/strong&gt;，可见：&lt;a href=&quot;https://zh.wikipedia.org/wiki/ISO_3166-1%E4%BA%8C%E4%BD%8D%E5%AD%97%E6%AF%8D%E4%BB%A3%E7%A0%81#%E6%AD%A3%E5%BC%8F%E5%88%86%E9%85%8D%E4%BB%A3%E7%A0%81&quot;&gt;https://zh.wikipedia.org/wiki/ISO_3166-1二位字母代码#正式分配代码&lt;/a&gt;&lt;/p&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# 文件相对/绝对路径&lt;/h4&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 指定 IPv4 数据文件，不显示结果直接退出，输出结果到文件（-p 值为 0）
cfst -f 1.txt -p 0 -dd

# 指定 IPv4 数据文件，不输出结果到文件，直接显示结果（-p 值为 10 条，-o 值为空但引号不能少）
cfst -f 2.txt -o &quot;&quot; -p 10 -dd

# 指定 IPv4 数据文件 及 输出结果到文件（相对路径，即当前目录下，如含空格请加上引号）
cfst -f 3.txt -o result.txt -dd


# 指定 IPv4 数据文件 及 输出结果到文件（相对路径，即当前目录内的 abc 文件夹下，如含空格请加上引号）
# Linux（CFST 程序所在目录内的 abc 文件夹下）
./cfst -f abc/3.txt -o abc/result.txt -dd

# Windows（注意是反斜杠）
cfst -f abc\3.txt -o abc\result.txt -dd


# 指定 IPv4 数据文件 及 输出结果到文件（绝对路径，即 C:\abc\ 目录下，如含空格请加上引号）
# Linux（/abc/ 目录下）
./cfst -f /abc/4.txt -o /abc/result.csv -dd

# Windows（注意是反斜杠）
cfst -f C:\abc\4.txt -o C:\abc\result.csv -dd


# 如果要以【绝对路径】运行 CFST，那么 -f / -o 参数中的文件名也必须是【绝对路径】，否则会报错找不到文件！
# Linux（/abc/ 目录下）
/abc/cfst -f /abc/4.txt -o /abc/result.csv -dd

# Windows（注意是反斜杠）
C:\abc\cfst -f C:\abc\4.txt -o C:\abc\result.csv -dd
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# 测速其他端口&lt;/h4&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 如果你想要测速非默认 443 的其他端口，则需要通过 -tp 参数指定（该参数会影响 延迟测速/下载测速 时使用的端口）

# 如果要延迟测速 80 端口+下载测速（如果 -dd 禁用了下载测速则不需要），那么还需要指定 http:// 协议的下载测速地址才行（且该地址不会强制重定向至 HTTPS，因为那样就变成 443 端口了）
cfst -tp 80 -url http://speed.cloudflare.com/__down?bytes=99999999

# 如果是非 80 443 的其他端口，那么需要确定你使用的下载测速地址是否支持通过该非标端口访问。
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# 自定义测速地址&lt;/h4&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 该参数适用于下载测速 及 HTTP 协议的延迟测速，对于后者该地址可以是任意网页 URL（不局限于具体文件地址）

# 地址要求：可以直接下载、文件大小超过 200MB、用的是 Cloudflare CDN
cfst -url https://cf.xiu2.xyz/url

# 注意：如果测速地址为 HTTP 协议（该地址不能强制重定向至 HTTPS），记得加上 -tp 80（这个参数会影响 延迟测速/下载测速 时使用的端口），如果是非 80 443 端口，那么需要确定下载测速地址是否支持通过该端口访问。
cfst -tp 80 -url http://speed.cloudflare.com/__down?bytes=99999999
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# 自定义测速条件（指定 延迟/丢包/下载速度 的目标范围）&lt;/h4&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;注意：延迟测速进度条右边的&lt;strong&gt;可用数量&lt;/strong&gt;，仅指延迟测速过程中&lt;strong&gt;未超时的 IP 数量&lt;/strong&gt;，和延迟上下限条件无关。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;ul&gt; 
  &lt;li&gt;仅指定 &lt;strong&gt;[平均延迟上限]&lt;/strong&gt; 条件&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 平均延迟上限：200 ms，下载速度下限：0 MB/s
# 即找到平均延迟低于 200 ms 的 IP，然后再按延迟从低到高进行 10 次下载测速
cfst -tl 200
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;如果&lt;strong&gt;没有找到一个满足延迟&lt;/strong&gt;条件的 IP，那么不会输出任何内容。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;hr /&gt; 
 &lt;ul&gt; 
  &lt;li&gt;指定 &lt;strong&gt;[平均延迟上限]&lt;/strong&gt; 条件，且&lt;strong&gt;只延迟测速，不下载测速&lt;/strong&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 平均延迟上限：200 ms，下载速度下限：0 MB/s，数量：不知道多少 个
# 即只输出低于 200ms 的 IP，且不再下载测速（因为不再下载测速，所以 -dn 参数就无效了）
cfst -tl 200 -dd
&lt;/code&gt;&lt;/pre&gt; 
 &lt;hr /&gt; 
 &lt;ul&gt; 
  &lt;li&gt;同时指定 &lt;strong&gt;[平均延迟下限] + [平均延迟上限]&lt;/strong&gt; 条件&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 平均延迟下限：60 ms，平均延迟下限：200 ms，下载速度下限：0 MB/s
# 即找到平均延迟高于 60 ms 且低于 200 ms 的 IP（也就是 60~200ms 之间的），然后再按延迟从低到高进行 10 次下载测速
cfst -tll 60 -tl 200
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;可能很多纳闷延迟不是越低越好吗？为什么还要丢掉低延迟的 IP ？&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;一方面是：一些人确实存在个性化需求，需要指定延迟区间。&lt;/li&gt; 
   &lt;li&gt;另一方面则是：&lt;strong&gt;延迟和丢包最低的 IP 不一定就速度更快&lt;/strong&gt;（当然一般情况下延迟更低且不丢包是更好的，因为这意味着 &lt;strong&gt;&quot;物理距离近+中间路由环节少+网络稳定&quot;&lt;/strong&gt;，因此显然这种网络质量遇到速度快的概率更高），但网络质量好就不一定速度更快，因为传输速度是可以被控制的（比如 QOS），因此也会出现一些明明延迟更高，但是速度反而更快的情况（仅限于延迟差异，如果还涉及到丢包，那么因为丢包对传输速度影响&lt;strong&gt;极大&lt;/strong&gt;，也会导致这种情况）&lt;/li&gt; 
   &lt;li&gt;比如国内移动用户默认参数测速结果基本上都是清一色的 几十ms 的香港节点 IP，但容易遇到延迟很低还不丢包，但就是速度很差，或者时快时慢的，很折磨人，此时改用其它地区的虽然延迟更高但可能反而速度更快，就可以使用 &lt;code&gt;-tll&lt;/code&gt; 来过滤掉这些香港的（除此之外就只有 httping 模式下的 colo 参数可以过滤了）&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/blockquote&gt; 
 &lt;hr /&gt; 
 &lt;ul&gt; 
  &lt;li&gt;仅指定 &lt;strong&gt;[丢包几率上限]&lt;/strong&gt; 条件&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 丢包几率上限：0.25
# 即找到丢包率低于等于 0.25 的 IP，范围 0.00~1.00，如果 -tlr 0 则代表过滤掉任何丢包的 IP
cfst -tlr 0.25
&lt;/code&gt;&lt;/pre&gt; 
 &lt;hr /&gt; 
 &lt;ul&gt; 
  &lt;li&gt;仅指定 &lt;strong&gt;[下载速度下限]&lt;/strong&gt; 条件&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 平均延迟上限：9999 ms，下载速度下限：5 MB/s，数量：10 个（可选）
# 即需要找到 10 个平均延迟低于 9999 ms 且下载速度高于 5 MB/s 的 IP 才会停止测速
cfst -sl 5 -dn 10
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;如果&lt;strong&gt;没有找到一个满足速度&lt;/strong&gt;条件的 IP，那么不会输出任何内容，你可能需要调低预期的下载测速下限条件，但你需要知道当前的大概测速速度都在什么范围，那么你就可以加上 &lt;code&gt;-debug&lt;/code&gt; 参数开启调试模式，这样再遇到这种情况时，就会&lt;strong&gt;忽略条件返回所有测速结果&lt;/strong&gt;，你就能看到这些 IP 的下载速度都有多少，心里也就有数了，然后&lt;strong&gt;适当调低 &lt;code&gt;-sl&lt;/code&gt; 再试试&lt;/strong&gt;。&lt;br /&gt; 注意，如果你&lt;strong&gt;没有指定&lt;/strong&gt;下载测速下限 &lt;code&gt;-sl&lt;/code&gt; 条件，那么无论什么情况下 CFST 都会&lt;strong&gt;输出所有测速结果&lt;/strong&gt;。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;没有指定平均延迟上限时，如果一直&lt;strong&gt;凑不够&lt;/strong&gt;满足条件的 IP 数量，就会&lt;strong&gt;一直测速&lt;/strong&gt;下去。&lt;br /&gt; 建议&lt;strong&gt;同时指定 [下载速度下限] + [平均延迟上限]&lt;/strong&gt;，这样测速到指定延迟上限还没凑够数量，就会终止测速。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;hr /&gt; 
 &lt;ul&gt; 
  &lt;li&gt;同时指定 &lt;strong&gt;[平均延迟上限] + [下载速度下限]&lt;/strong&gt; 条件&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 平均延迟上限、下载速度下限均支持小数（如 -sl 0.5）
# 平均延迟上限：200 ms，下载速度下限：5.6 MB/s，数量：10 个（可选）
# 即需要找到 10 个平均延迟低于 200 ms 且下载速度高于 5 .6MB/s 的 IP 才会停止测速
cfst -tl 200 -sl 5.6 -dn 10
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;如果&lt;strong&gt;没有找到一个满足延迟&lt;/strong&gt;条件的 IP，那么不会输出任何内容。&lt;br /&gt; 如果&lt;strong&gt;没有找到一个满足速度&lt;/strong&gt;条件的 IP，那么不会输出任何内容，但可以通过加上 &lt;code&gt;-debug&lt;/code&gt; 参数开启调试模式，这时会忽略条件输出所有 IP 测速结果（方便你下次测速时调整条件）。&lt;br /&gt; 所以建议先不指定条件测速一遍，看看平均延迟和下载速度大概在什么范围，避免指定条件&lt;strong&gt;过低/过高&lt;/strong&gt;！&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;因为 Cloudflare 公开的 IP 段是&lt;strong&gt;回源 IP+任播 IP&lt;/strong&gt;，而&lt;strong&gt;回源 IP&lt;/strong&gt;是无法使用的，所以下载测速是 0.00。&lt;br /&gt; 运行时可以加上 &lt;code&gt;-sl 0.01&lt;/code&gt;（下载速度下限），过滤掉&lt;strong&gt;回源 IP&lt;/strong&gt;（下载测速低于 0.01MB/s 的结果）。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;为了避免大家迷糊，我列出了在各种条件组合下的预期输出结果都是什么样的。&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;没有指定任何 延迟/速度条件 (即都是默认值)：&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;无论如何，都直接输出 &lt;strong&gt;所有测速结果&lt;/strong&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;&lt;strong&gt;指定了任何 延迟条件（&lt;code&gt;-tl&lt;/code&gt; &lt;code&gt;-tll&lt;/code&gt;，且无论是否开启调试模式 &lt;code&gt;-debug&lt;/code&gt; 都一样）：&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;如果找到最少 1 个满足条件的 IP，则只输出 &lt;strong&gt;这几个满足条件的 IP&lt;/strong&gt;（如没有禁用下载测速，则会继续下载测速）&lt;/li&gt; 
  &lt;li&gt;如果没找到任何满足条件的 IP，则会输出 &lt;strong&gt;空&lt;/strong&gt;（如没有禁用下载测速，也会因为数量为 0 而跳过下载测速）&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;&lt;strong&gt;指定了任何 下载速度条件 (&lt;code&gt;-sl&lt;/code&gt;)：&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;且当 &lt;strong&gt;关闭 调试模式&lt;/strong&gt; 时（即没加上 &lt;code&gt;-debug&lt;/code&gt; 参数，这种情况下和延迟测速的逻辑完全一致）：&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;如果找到最少 1 个满足条件的 IP，则只输出 &lt;strong&gt;这几个满足条件的 IP&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;如果没找到任何满足条件的 IP，则输出 &lt;strong&gt;空&lt;/strong&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;且当 &lt;strong&gt;开启 调试模式&lt;/strong&gt; 时（即加上了 &lt;code&gt;-debug&lt;/code&gt; 参数，延迟测速并没有加上下面第二条里的逻辑，所以依然输出 空）：&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;如果找到最少 1 个满足条件的 IP，则只输出 &lt;strong&gt;这几个满足条件的 IP&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;如果没找到任何满足条件的 IP，则直接输出 &lt;strong&gt;所有测速结果&lt;/strong&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# 单独对一个或多个 IP 测速&lt;/h4&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;&lt;strong&gt;方式 一&lt;/strong&gt;： 直接通过参数指定要测速的 IP 段数据。&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 先进入 CFST 所在目录，然后运行：
# Windows 系统（在 CMD 中运行）
cfst -ip 1.1.1.1,2.2.2.2/24,2606:4700::/32

# Linux 系统
./cfst -ip 1.1.1.1,2.2.2.2/24,2606:4700::/32
&lt;/code&gt;&lt;/pre&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;&lt;strong&gt;方式 二&lt;/strong&gt;： 或者把这些 IP 按如下格式写入到任意文本文件中，例如：&lt;code&gt;1.txt&lt;/code&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;1.1.1.1
1.1.1.200
1.0.0.1/24
2606:4700::/32
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;单个 IP 的话可以省略 &lt;code&gt;/32&lt;/code&gt; 子网掩码了（即 &lt;code&gt;1.1.1.1&lt;/code&gt;等同于 &lt;code&gt;1.1.1.1/32&lt;/code&gt;）。&lt;br /&gt; 子网掩码 &lt;code&gt;/24&lt;/code&gt; 指的是这个 IP 最后一段，即 &lt;code&gt;1.0.0.1~1.0.0.255&lt;/code&gt;。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;然后运行 CFST 时加上启动参数 &lt;code&gt;-f 1.txt&lt;/code&gt; 来指定 IP 段数据文件。&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 先进入 CFST 所在目录，然后运行：
# Windows 系统（在 CMD 中运行）
cfst -f 1.txt

# Linux 系统
./cfst -f 1.txt

# 对于 1.0.0.1/24 这样的 IP 段只会随机最后一段（1.0.0.1~255），如果要测速该 IP 段中的所有 IP，请加上 -allip 参数。
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# 下载测速都是 0.00 ？&lt;/h4&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;&lt;strong&gt;## 原理简单解释：&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;首先要明白，CFST 下载测速过程，本质上和你将 &lt;code&gt;IP 下载测速地址域名&lt;/code&gt; 写入 hosts 文件，然后浏览器去访问下载测速地址是一样的，只不过软件将其自动化了（类似于 &lt;code&gt;curl -I --resolve 下载测速地址域名:443:IP https://下载测速地址&lt;/code&gt;）。&lt;/p&gt; 
 &lt;p&gt;因此如果下载测速结果全都是 0.00 MB/s，那么代表&lt;strong&gt;下载测速过程中出问题报错&lt;/strong&gt;，导致直接终止测速了（并最终显示为 0.00），就只有这几种可能性：&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;strong&gt;下载测速地址有问题&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;测速的 IP 地址有问题&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;你的网络有问题&lt;/strong&gt;&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;&lt;strong&gt;## 调试模式排查：&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;接下来&lt;strong&gt;请务必&lt;/strong&gt;先在你原先使用的 CFST 运行命令后&lt;strong&gt;追加一个 &lt;code&gt;-debug&lt;/code&gt; 参数来开启调试模式&lt;/strong&gt;，重新跑一遍测速，这样下载测速过程中出现任何报错都会显示具体原因方便你排查。&lt;/p&gt; 
 &lt;p&gt;常见的下载测速失败报错原因有（因为是 Go 语言的原生报错信息，因此基本都是英文）：&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;code&gt;... read: connection reset by peer ... &lt;/code&gt;&lt;br /&gt; &lt;strong&gt;链接被重置&lt;/strong&gt;，可能是下载测速地址被阻断了 或测速 IP 被针对性 HTTPS 阻断了，可能是蔷干的，也可能是运营商干的（比如移动或部分地区的白名单），当然也可能是测速 IP 服务器单纯的重置了你这个不合法的链接请求&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;... HTTP 状态码: 403 ...&lt;/code&gt;&lt;br /&gt; 像这种直接提示 &lt;strong&gt;HTTP 状态码&lt;/strong&gt;的，比较好判断，如 403 就是下载测速地址禁止你访问，404 就是下载测速地址路径对应的文件找不到（具体其他的可以搜索 HTTP 状态码含义）&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;... context deadline exceeded (Client.Timeout exceeded while awaiting headers) ...&lt;/code&gt;&lt;br /&gt; 这种一般是&lt;strong&gt;请求超时&lt;/strong&gt;引起的，可能是 IP 或网络问题，也可能是 &lt;code&gt;-dt&lt;/code&gt; 下载测速时间设置的太短了（当然默认的 10 秒肯定算不上短）&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;... tls: handshake failure ...&lt;/code&gt; 或 &lt;code&gt;... tls: failed to verify certificate ...&lt;/code&gt;&lt;br /&gt; 这种 &lt;strong&gt;TLS 握手失败/SSL 证书错误&lt;/strong&gt; 代表下载测速地址和测速 IP 服务器不匹配，也就是下载测速地址与测速 IP 其中一方有误（例如下载测速地址是托管在 Fastly CDN 的，但测速 IP 是 Cloudflare CDN 的，或者反过来，总之就是你访问下载测速地址时该测速的 IP 服务器告诉你这个网站域名它不认识并把你拒之门外）&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;... tls: failed to verify certificate: x509: certificate is valid for XXX.XX, not YYY.YY ...&lt;/code&gt;&lt;br /&gt; 这种是 &lt;strong&gt;SSL 证书里没有包含你下载测速地址的域名&lt;/strong&gt;，要么是下载测速地址证书配置有问题，要么就是该测速服务器 IP 上并没有该下载测速地址域名对应的 SSL 证书，也就意味着这个服务器 IP 是不能用于该下载测速地址域名的（比如你用谷歌的服务器 IP 去下载测速百度的域名就会这样，或像上面 4 的原因一样）&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;... tls: failed to verify certificate: x509: certificate has expired or is not yet valid: current time ...&lt;/code&gt;&lt;br /&gt; 这种是 &lt;strong&gt;SSL 证书过期了或者尚未到有效时间&lt;/strong&gt;，除了这个原因外，也可能是和上面 4、5 的原因一样（这 4、5、6 三种报错可能会同时出现在同一个服务器 IP 上）&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;... tls: failed to verify certificate: x509: certificate signed by unknown authority.&lt;/code&gt;&lt;br /&gt; 这种代表&lt;strong&gt;系统证书配置有问题&lt;/strong&gt;，导致 TLS 握手时无法验证证书，目前只在 Termux 内遇到过（解决方法见：&lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/61&quot;&gt;https://github.com/XIU2/CloudflareSpeedTest/discussions/61&lt;/a&gt; 帖子末尾）&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;如果你遇到了其他报错原因，且翻译后还是不懂，可以发 Issues 或 Discussions 询问，我也会更新到这里。&lt;br /&gt; 但注意，发 Issues 或 Discussions 询问时，请记得带上&lt;strong&gt;调试模式下 CFST 输出的完整内容（或者完整截图）&lt;/strong&gt;。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;根据上面的报错原因排查一遍后，如果还是无法解决，那么可以尝试下面这些进一步排查：&lt;/p&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;&lt;strong&gt;一、下载测速地址有问题&lt;/strong&gt;：&lt;/p&gt; 
 &lt;p&gt;先去 &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/490&quot;&gt;#490&lt;/a&gt; 找几个其他的下载测速地址都试试。&lt;/p&gt; 
 &lt;p&gt;如果其中有能下载测速出结果的，则就代表你之前使用的下载测速地址有问题（注意，目前默认下载测速地址仅为一个带负载均衡轮询的重定向链接，会自动重定向到上面帖子里大家分享的公益下载测速地址，而这些地址在&lt;strong&gt;不同地区的可用性可能有差异&lt;/strong&gt;，因此可能出现之前不行现在又正常的情况，如果&lt;strong&gt;想要稳定，建议自建&lt;/strong&gt;，上面帖子写了几种自建方法）。&lt;/p&gt; 
 &lt;p&gt;如果找了很多，都是一样 0.00，那么就要考虑其他可能性了。&lt;/p&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;&lt;strong&gt;二、测速的 IP 地址有问题&lt;/strong&gt;：&lt;/p&gt; 
 &lt;p&gt;你用来测速的 IP 地址，可能一些 TCP 测试是通的，但实际上因为各种原因导致不能建立 HTTP 链接（比如是回源 IP，比如是企业用户专用 IP 等等），因此你可以多尝试一些其他的 IP 看是否可行。&lt;/p&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;&lt;strong&gt;三、你的网络有问题&lt;/strong&gt;：&lt;/p&gt; 
 &lt;p&gt;这个就比较麻烦了，如果你现在是用电脑+宽带来使用 CFST 测速的，那么可以尝试关闭手机 WIFI 并打开流量，然后数据线连接电脑，设置好 USB 网络共享（不同手机系统不太一样，具体自行搜索哈），并拔掉电脑的网线，这样你的电脑现在就是走的手机流量数据网络了（如果手机流量数据和宽带不是一个运营商会更好排查），然后再次运行 CFST 测速看看结果是否改变（也可以同时尝试上面的排查方法来交叉验证）。&lt;/p&gt; 
 &lt;p&gt;如果测速结果正常了，那么显然就是宽带网络的问题，如果还是一样的 0.00，那么就麻烦了。。。&lt;/p&gt; 
 &lt;hr /&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# 一劳永逸加速所有使用 Cloudflare CDN 的网站（不需要再一个个添加域名到 Hosts 了）&lt;/h4&gt; 
&lt;p&gt;我以前说过，开发该软件项目的目的就是为了通过&lt;strong&gt;改 Hosts 的方式来加速访问使用 Cloudflare CDN 的网站&lt;/strong&gt;。&lt;/p&gt; 
&lt;p&gt;但就如 &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/issues/8&quot;&gt;&lt;strong&gt;#8&lt;/strong&gt;&lt;/a&gt; 所说，一个个添加域名到 Hosts 实在&lt;strong&gt;太麻烦&lt;/strong&gt;了，于是我就找到了个&lt;strong&gt;一劳永逸&lt;/strong&gt;的办法！可以看这个 &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/71&quot;&gt;&lt;strong&gt;还在一个个添加 Hosts？完美本地加速所有使用 Cloudflare CDN 的网站方法来了！&lt;/strong&gt;&lt;/a&gt; 和另一个&lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/317&quot;&gt;依靠本地 DNS 服务来修改域名解析 IP 为自选 IP&lt;/a&gt; 的教程。&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h4&gt;# 自动更新 Hosts&lt;/h4&gt; 
&lt;p&gt;考虑到很多人获得最快 Cloudflare CDN IP 后，需要替换 Hosts 文件中的 IP。&lt;/p&gt; 
&lt;p&gt;可以看这个 &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/312&quot;&gt;&lt;strong&gt;Issues&lt;/strong&gt;&lt;/a&gt; 获取 &lt;strong&gt;Windows/Linux 自动更新 Hosts 脚本&lt;/strong&gt;！&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;问题反馈&lt;/h2&gt; 
&lt;p&gt;如果你遇到什么问题，可以先去 &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/issues&quot;&gt;&lt;strong&gt;Issues&lt;/strong&gt;&lt;/a&gt;、&lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions&quot;&gt;Discussions&lt;/a&gt; 里看看是否有别人问过了（记得去看下 &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/issues?q=is%3Aissue+is%3Aclosed&quot;&gt;&lt;strong&gt;Closed&lt;/strong&gt;&lt;/a&gt; 的）。&lt;br /&gt; 如果没找到类似问题，请新开个 &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/issues/new&quot;&gt;&lt;strong&gt;Issues&lt;/strong&gt;&lt;/a&gt; 来告诉我！&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;！&lt;em&gt;与 CFST 本身 &lt;code&gt;反馈问题、功能建议&lt;/code&gt; 无关的，请前往项目内部 论坛 讨论（顶部的 &lt;code&gt;💬 Discussions&lt;/code&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;如果帮到你的话就 &quot;打赏&quot; 一下吧~🎉✨&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/XIU2/XIU2/raw/master/img/zs-01.png&quot; alt=&quot;微信赞赏&quot; /&gt;&lt;img src=&quot;https://github.com/XIU2/XIU2/raw/master/img/zs-02.png&quot; alt=&quot;支付宝赞赏&quot; /&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;衍生项目&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://github.com/Hsia97/CFSTAPP&quot;&gt;https://github.com/Hsia97/CFSTAPP&lt;/a&gt;&lt;/em&gt;&lt;br /&gt; &lt;em&gt;&lt;strong&gt;CFST 安卓版 APP &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/638&quot;&gt;#638&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;_&lt;a href=&quot;https://github.com/xianshenglu/cloudflare-ip-tester-app_&quot;&gt;https://github.com/xianshenglu/cloudflare-ip-tester-app_&lt;/a&gt;&lt;br /&gt; &lt;em&gt;&lt;strong&gt;CFST 安卓版 APP &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/320&quot;&gt;#202&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;_&lt;a href=&quot;https://github.com/mingxiaoyu/luci-app-cloudflarespeedtest_&quot;&gt;https://github.com/mingxiaoyu/luci-app-cloudflarespeedtest_&lt;/a&gt;&lt;br /&gt; &lt;em&gt;&lt;strong&gt;CFST OpenWrt 路由器插件版 &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/319&quot;&gt;#174&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;_&lt;a href=&quot;https://github.com/immortalwrt-collections/openwrt-cdnspeedtest_&quot;&gt;https://github.com/immortalwrt-collections/openwrt-cdnspeedtest_&lt;/a&gt;&lt;br /&gt; &lt;em&gt;&lt;strong&gt;CFST OpenWrt 原生编译版本 &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/discussions/64&quot;&gt;#64&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;_&lt;a href=&quot;https://github.com/GuangYu-yu/CloudflareST-Rust_&quot;&gt;https://github.com/GuangYu-yu/CloudflareST-Rust_&lt;/a&gt;&lt;br /&gt; &lt;em&gt;&lt;strong&gt;CFST Rust 版本&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;_&lt;a href=&quot;https://github.com/masgzy/CloudflareST_&quot;&gt;https://github.com/masgzy/CloudflareST_&lt;/a&gt;&lt;br /&gt; &lt;em&gt;&lt;strong&gt;CFST 的分支衍生版本（依然是 Go）&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;_&lt;a href=&quot;https://github.com/hoseinnikkhah/CloudflareSpeedTest-English_&quot;&gt;https://github.com/hoseinnikkhah/CloudflareSpeedTest-English_&lt;/a&gt;&lt;br /&gt; &lt;em&gt;&lt;strong&gt;English language version of CFST (Text language differences only) &lt;a href=&quot;https://github.com/XIU2/CloudflareSpeedTest/issues/68&quot;&gt;#64&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;em&gt;此处仅收集了在本项目中宣传过的部分 CFST 相关衍生项目，如果有遗漏可以告诉我~&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;感谢项目&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;_&lt;a href=&quot;https://github.com/Spedoske/CloudflareScanner_&quot;&gt;https://github.com/Spedoske/CloudflareScanner_&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;em&gt;因为该项目已经很长时间没更新了，而我又产生了很多功能需求，所以我临时学了下 Go 语言就上手了 (菜)...&lt;/em&gt;&lt;br /&gt; &lt;em&gt;本软件基于该项目，但&lt;strong&gt;已彻底重构并添加大量功能/修复BUG&lt;/strong&gt;，根据大家的使用反馈积极添加/优化功能 (闲)...&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;手动编译&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;code&gt;&lt;strong&gt;「 点击展开 查看内容 」&lt;/strong&gt;&lt;/code&gt;&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;为了方便，我是在编译的时候将版本号写入代码中的 version 变量，因此你手动编译时，需要像下面这样在 &lt;code&gt;go build&lt;/code&gt; 命令后面加上 &lt;code&gt;-ldflags&lt;/code&gt; 参数来指定版本号：&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go build -ldflags &quot;-s -w -X main.version=v1.0.0&quot;
# 在 CloudflareSpeedTest 目录中通过命令行（例如 CMD、Bat 脚本）运行该命令，即可编译一个可在和当前设备同样系统、位数、架构的环境下运行的二进制程序（Go 会自动检测你的系统位数、架构）且版本号为 v1.0.0
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;如果想要在 Windows 64位系统下编译&lt;strong&gt;其他系统、架构、位数&lt;/strong&gt;，那么需要指定 &lt;strong&gt;GOOS&lt;/strong&gt; 和 &lt;strong&gt;GOARCH&lt;/strong&gt; 变量。&lt;/p&gt; 
 &lt;p&gt;例如在 Windows 系统下编译一个适用于 &lt;strong&gt;Linux 系统 amd 架构 64 位&lt;/strong&gt;的二进制程序：&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bat&quot;&gt;SET GOOS=linux
SET GOARCH=amd64
go build -ldflags &quot;-s -w -X main.version=v1.0.0&quot;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;例如在 Linux 系统下编译一个适用于 &lt;strong&gt;Windows 系统 amd 架构 32 位&lt;/strong&gt;的二进制程序：&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;GOOS=windows
GOARCH=386
go build -ldflags &quot;-s -w -X main.version=v1.0.0&quot;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;可以运行 &lt;code&gt;go tool dist list&lt;/code&gt; 来查看当前 Go 版本支持编译哪些组合。&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;当然，为了方便批量编译，我会专门指定一个变量为版本号，后续编译直接调用该版本号变量即可。&lt;br /&gt; 同时，批量编译的话，还需要分开放到不同文件夹才行（或者文件名不同），需要加上 &lt;code&gt;-o&lt;/code&gt; 参数指定。&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bat&quot;&gt;:: Windows 系统下是这样：
SET version=v1.0.0
SET GOOS=linux
SET GOARCH=amd64
go build -o Releases\cfst_linux_amd64\cfst -ldflags &quot;-s -w -X main.version=%version%&quot;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Linux 系统下是这样：
version=v1.0.0
GOOS=windows
GOARCH=386
go build -o Releases/cfst_windows_386/cfst.exe -ldflags &quot;-s -w -X main.version=${version}&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;The GPL-3.0 License.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/37e31c869ce7affe42bd96cdfd6b0fb7b3165b7af853f58058aa79c7f0a7614b/XIU2/CloudflareSpeedTest" medium="image" />
      
    </item>
    
    <item>
      <title>grpc/grpc-go</title>
      <link>https://github.com/grpc/grpc-go</link>
      <description>&lt;p&gt;The Go language implementation of gRPC. HTTP/2 based RPC&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;gRPC-Go&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://pkg.go.dev/google.golang.org/grpc&quot;&gt;&lt;img src=&quot;https://pkg.go.dev/badge/google.golang.org/grpc&quot; alt=&quot;GoDoc&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://goreportcard.com/report/github.com/grpc/grpc-go&quot;&gt;&lt;img src=&quot;https://goreportcard.com/badge/grpc/grpc-go&quot; alt=&quot;GoReportCard&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://codecov.io/gh/grpc/grpc-go&quot;&gt;&lt;img src=&quot;https://codecov.io/gh/grpc/grpc-go/graph/badge.svg?sanitize=true&quot; alt=&quot;codecov&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;The &lt;a href=&quot;https://golang.org&quot;&gt;Go&lt;/a&gt; implementation of &lt;a href=&quot;https://grpc.io&quot;&gt;gRPC&lt;/a&gt;: A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. For more information see the &lt;a href=&quot;https://grpc.io/docs/languages/go&quot;&gt;Go gRPC docs&lt;/a&gt;, or jump directly into the &lt;a href=&quot;https://grpc.io/docs/languages/go/quickstart&quot;&gt;quick start&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://golang.org&quot;&gt;Go&lt;/a&gt;&lt;/strong&gt;: any one of the &lt;strong&gt;two latest major&lt;/strong&gt; &lt;a href=&quot;https://golang.org/doc/devel/release.html&quot;&gt;releases&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;Simply add the following import to your code, and then &lt;code&gt;go [build|run|test]&lt;/code&gt; will automatically fetch the necessary dependencies:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;import &quot;google.golang.org/grpc&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you are trying to access &lt;code&gt;grpc-go&lt;/code&gt; from &lt;strong&gt;China&lt;/strong&gt;, see the &lt;a href=&quot;https://raw.githubusercontent.com/grpc/grpc-go/master/#FAQ&quot;&gt;FAQ&lt;/a&gt; below.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;Learn more&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grpc.io/docs/languages/go&quot;&gt;Go gRPC docs&lt;/a&gt;, which include a &lt;a href=&quot;https://grpc.io/docs/languages/go/quickstart&quot;&gt;quick start&lt;/a&gt; and &lt;a href=&quot;https://pkg.go.dev/google.golang.org/grpc&quot;&gt;API reference&lt;/a&gt; among other resources&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/grpc/grpc-go/master/Documentation&quot;&gt;Low-level technical docs&lt;/a&gt; from this repository&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://performance-dot-grpc-testing.appspot.com/explore?dashboard=5180705743044608&quot;&gt;Performance benchmark&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/grpc/grpc-go/master/examples&quot;&gt;Examples&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/grpc/grpc-go/master/CONTRIBUTING.md&quot;&gt;Contribution guidelines&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;FAQ&lt;/h2&gt; 
&lt;h3&gt;I/O Timeout Errors&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;golang.org&lt;/code&gt; domain may be blocked from some countries. &lt;code&gt;go get&lt;/code&gt; usually produces an error like the following when this happens:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ go get -u google.golang.org/grpc
package google.golang.org/grpc: unrecognized import path &quot;google.golang.org/grpc&quot; (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To build Go code, there are several options:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Set up a VPN and access &lt;a href=&quot;http://google.golang.org&quot;&gt;google.golang.org&lt;/a&gt; through that.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;With Go module support: it is possible to use the &lt;code&gt;replace&lt;/code&gt; feature of &lt;code&gt;go mod&lt;/code&gt; to create aliases for &lt;a href=&quot;http://golang.org&quot;&gt;golang.org&lt;/a&gt; packages. In your project&#39;s directory:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;go mod edit -replace=google.golang.org/grpc=github.com/grpc/grpc-go@latest
go mod tidy
go mod vendor
go build -mod=vendor
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Again, this will need to be done for all transitive dependencies hosted on &lt;a href=&quot;http://golang.org&quot;&gt;golang.org&lt;/a&gt; as well. For details, refer to &lt;a href=&quot;https://github.com/golang/go/issues/28652&quot;&gt;golang/go issue #28652&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Compiling error, undefined: grpc.SupportPackageIsVersion&lt;/h3&gt; 
&lt;p&gt;Please update to the latest version of gRPC-Go using &lt;code&gt;go get google.golang.org/grpc&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;How to turn on logging&lt;/h3&gt; 
&lt;p&gt;The default logger is controlled by environment variables. Turn everything on like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ export GRPC_GO_LOG_VERBOSITY_LEVEL=99
$ export GRPC_GO_LOG_SEVERITY_LEVEL=info
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;The RPC failed with error &lt;code&gt;&quot;code = Unavailable desc = transport is closing&quot;&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;This error means the connection the RPC is using was closed, and there are many possible reasons, including:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;mis-configured transport credentials, connection failed on handshaking&lt;/li&gt; 
 &lt;li&gt;bytes disrupted, possibly by a proxy in between&lt;/li&gt; 
 &lt;li&gt;server shutdown&lt;/li&gt; 
 &lt;li&gt;Keepalive parameters caused connection shutdown, for example if you have configured your server to terminate connections regularly to &lt;a href=&quot;https://github.com/grpc/grpc-go/issues/3170#issuecomment-552517779&quot;&gt;trigger DNS lookups&lt;/a&gt;. If this is the case, you may want to increase your &lt;a href=&quot;https://pkg.go.dev/google.golang.org/grpc/keepalive?tab=doc#ServerParameters&quot;&gt;MaxConnectionAgeGrace&lt;/a&gt;, to allow longer RPC calls to finish.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;It can be tricky to debug this because the error happens on the client side but the root cause of the connection being closed is on the server side. Turn on logging on &lt;strong&gt;both client and server&lt;/strong&gt;, and see if there are any transport errors.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/5da421d842b5aa4089d33235b8b64a3b7008fb8f0f417e7068d2c01a0246c5b3/grpc/grpc-go" medium="image" />
      
    </item>
    
    <item>
      <title>grafana/loki</title>
      <link>https://github.com/grafana/loki</link>
      <description>&lt;p&gt;Like Prometheus, but for logs.&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/grafana/loki/main/docs/sources/logo_and_name.png&quot; alt=&quot;Loki Logo&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/grafana/loki/actions/workflows/check.yml&quot;&gt;&lt;img src=&quot;https://github.com/grafana/loki/actions/workflows/check.yml/badge.svg?sanitize=true&quot; alt=&quot;Check&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://goreportcard.com/report/github.com/grafana/loki&quot;&gt;&lt;img src=&quot;https://goreportcard.com/badge/github.com/grafana/loki&quot; alt=&quot;Go Report Card&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://slack.grafana.com/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/join%20slack-%23loki-brightgreen.svg?sanitize=true&quot; alt=&quot;Slack&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&amp;amp;can=1&amp;amp;q=proj:loki&quot;&gt;&lt;img src=&quot;https://oss-fuzz-build-logs.storage.googleapis.com/badges/loki.svg?sanitize=true&quot; alt=&quot;Fuzzing Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Loki: like Prometheus, but for logs.&lt;/h1&gt; 
&lt;p&gt;Loki is a horizontally-scalable, highly-available, multi-tenant log aggregation system inspired by &lt;a href=&quot;https://prometheus.io/&quot;&gt;Prometheus&lt;/a&gt;. It is designed to be very cost effective and easy to operate. It does not index the contents of the logs, but rather a set of labels for each log stream.&lt;/p&gt; 
&lt;p&gt;Compared to other log aggregation systems, Loki:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;does not do full text indexing on logs. By storing compressed, unstructured logs and only indexing metadata, Loki is simpler to operate and cheaper to run.&lt;/li&gt; 
 &lt;li&gt;indexes and groups log streams using the same labels you’re already using with Prometheus, enabling you to seamlessly switch between metrics and logs using the same labels that you’re already using with Prometheus.&lt;/li&gt; 
 &lt;li&gt;is an especially good fit for storing &lt;a href=&quot;https://kubernetes.io/&quot;&gt;Kubernetes&lt;/a&gt; Pod logs. Metadata such as Pod labels is automatically scraped and indexed.&lt;/li&gt; 
 &lt;li&gt;has native support in Grafana (needs Grafana v6.0).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;A Loki-based logging stack consists of 3 components:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/grafana/alloy&quot;&gt;Alloy&lt;/a&gt; is agent, responsible for gathering logs and sending them to Loki.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/grafana/loki&quot;&gt;Loki&lt;/a&gt; is the main service, responsible for storing logs and processing queries.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/grafana/grafana&quot;&gt;Grafana&lt;/a&gt; for querying and displaying the logs.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Note that Alloy replaced Promtail in the stack, because Promtail is considered to be feature complete, and future development for logs collection will be in &lt;a href=&quot;https://github.com/grafana/alloy&quot;&gt;Grafana Alloy&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Loki is like Prometheus, but for logs: we prefer a multidimensional label-based approach to indexing, and want a single-binary, easy to operate system with no dependencies. Loki differs from Prometheus by focusing on logs instead of metrics, and delivering logs via push, instead of pull.&lt;/p&gt; 
&lt;h2&gt;Getting started&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/installation/&quot;&gt;Installing Loki&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/send-data/alloy/&quot;&gt;Installing Alloy&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/get-started/&quot;&gt;Getting Started&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;⚠️ Helm Chart Migration&lt;/h3&gt; 
&lt;p&gt;Effective March 16, 2026, the Grafana Loki Helm chart will be forked to a new repository &lt;a href=&quot;https://github.com/grafana-community/helm-charts&quot;&gt;grafana-community/helm-charts&lt;/a&gt;. The chart in the Loki repository will continue to be maintained for GEL users only. See &lt;a href=&quot;https://github.com/grafana/loki/issues/20705&quot;&gt;#20705&lt;/a&gt; for details.&lt;/p&gt; 
&lt;h2&gt;Upgrading&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/upgrading/&quot;&gt;Upgrading Loki&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/&quot;&gt;Latest release&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/next/&quot;&gt;Upcoming release&lt;/a&gt;, at the tip of the main branch&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Commonly used sections:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/api/&quot;&gt;API documentation&lt;/a&gt; for getting logs into Loki.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/getting-started/labels/&quot;&gt;Labels&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/operations/&quot;&gt;Operations&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/clients/docker-driver/&quot;&gt;Docker Driver Client&lt;/a&gt; is a Docker plugin to send logs directly to Loki from Docker containers.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/query/logcli/&quot;&gt;LogCLI&lt;/a&gt; provides a command-line interface for querying logs.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/operations/loki-canary/&quot;&gt;Loki Canary&lt;/a&gt; monitors your Loki installation for missing logs.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/operations/troubleshooting/&quot;&gt;Troubleshooting&lt;/a&gt; presents help dealing with error messages.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/operations/grafana/&quot;&gt;Loki in Grafana&lt;/a&gt; describes how to set up a Loki datasource in Grafana.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Getting Help&lt;/h2&gt; 
&lt;p&gt;If you have any questions or feedback regarding Loki:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Search existing thread in the Grafana Labs community forum for Loki: &lt;a href=&quot;https://community.grafana.com/c/grafana-loki/&quot;&gt;https://community.grafana.com&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Ask a question on the Loki Slack channel. To invite yourself to the Grafana Slack, visit &lt;a href=&quot;https://slack.grafana.com/&quot;&gt;https://slack.grafana.com/&lt;/a&gt; and join the #loki channel.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/grafana/loki/issues/new&quot;&gt;File an issue&lt;/a&gt; for bugs, issues and feature suggestions.&lt;/li&gt; 
 &lt;li&gt;Send an email to &lt;a href=&quot;mailto:lokiproject@googlegroups.com&quot;&gt;lokiproject@googlegroups.com&lt;/a&gt;, or use the &lt;a href=&quot;https://groups.google.com/forum/#!forum/lokiproject&quot;&gt;web interface&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;UI issues should be filed directly in &lt;a href=&quot;https://github.com/grafana/grafana/issues/new&quot;&gt;Grafana&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Your feedback is always welcome.&lt;/p&gt; 
&lt;h2&gt;Further Reading&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;The original &lt;a href=&quot;https://docs.google.com/document/d/11tjK_lvp1-SVsFZjgOTr1vV3-q6vBAsZYIQ5ZeYBkyM/view&quot;&gt;design doc&lt;/a&gt; for Loki is a good source for discussion of the motivation and design decisions.&lt;/li&gt; 
 &lt;li&gt;Callum Styan&#39;s March 2019 DevOpsDays Vancouver talk &quot;&lt;a href=&quot;https://grafana.com/blog/2019/05/06/how-loki-correlates-metrics-and-logs-and-saves-you-money/&quot;&gt;Grafana Loki: Log Aggregation for Incident Investigations&lt;/a&gt;&quot;.&lt;/li&gt; 
 &lt;li&gt;Grafana Labs blog post &quot;&lt;a href=&quot;https://grafana.com/blog/2019/04/15/how-we-designed-loki-to-work-easily-both-as-microservices-and-as-monoliths/&quot;&gt;How We Designed Loki to Work Easily Both as Microservices and as Monoliths&lt;/a&gt;&quot;.&lt;/li&gt; 
 &lt;li&gt;Tom Wilkie&#39;s early-2019 CNCF Paris/FOSDEM talk &quot;&lt;a href=&quot;https://fosdem.org/2019/schedule/event/loki_prometheus_for_logs/&quot;&gt;Grafana Loki: like Prometheus, but for logs&lt;/a&gt;&quot; (&lt;a href=&quot;https://speakerdeck.com/grafana/grafana-loki-like-prometheus-but-for-logs&quot;&gt;slides&lt;/a&gt;, &lt;a href=&quot;https://mirror.as35701.net/video.fosdem.org/2019/UB2.252A/loki_prometheus_for_logs.mp4&quot;&gt;video&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;David Kaltschmidt&#39;s KubeCon 2018 talk &quot;&lt;a href=&quot;https://kccna18.sched.com/event/GrXC/on-the-oss-path-to-full-observability-with-grafana-david-kaltschmidt-grafana-labs&quot;&gt;On the OSS Path to Full Observability with Grafana&lt;/a&gt;&quot; (&lt;a href=&quot;https://speakerdeck.com/davkal/on-the-path-to-full-observability-with-oss-and-launch-of-loki&quot;&gt;slides&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=U7C5SpRtK74&amp;amp;list=PLj6h78yzYM2PZf9eA7bhWnIh_mK1vyOfU&amp;amp;index=346&quot;&gt;video&lt;/a&gt;) on how Loki fits into a cloud-native environment.&lt;/li&gt; 
 &lt;li&gt;Goutham Veeramachaneni&#39;s blog post &quot;&lt;a href=&quot;https://grafana.com/blog/2018/12/12/loki-prometheus-inspired-open-source-logging-for-cloud-natives/&quot;&gt;Loki: Prometheus-inspired, open source logging for cloud natives&lt;/a&gt;&quot; on details of the Loki architecture.&lt;/li&gt; 
 &lt;li&gt;David Kaltschmidt&#39;s blog post &quot;&lt;a href=&quot;https://grafana.com/blog/2019/01/02/closer-look-at-grafanas-user-interface-for-loki/&quot;&gt;Closer look at Grafana&#39;s user interface for Loki&lt;/a&gt;&quot; on the ideas that went into the logging user interface.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Refer to &lt;a href=&quot;https://raw.githubusercontent.com/grafana/loki/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Building from source&lt;/h3&gt; 
&lt;p&gt;Loki can be run in a single host, no-dependencies mode using the following commands.&lt;/p&gt; 
&lt;p&gt;You need an up-to-date version of &lt;a href=&quot;https://go.dev/&quot;&gt;Go&lt;/a&gt;, we recommend using the version found in our &lt;a href=&quot;https://github.com/grafana/loki/raw/main/Makefile&quot;&gt;Makefile&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Checkout source code
$ git clone https://github.com/grafana/loki
$ cd loki

# Build binary
$ go build ./cmd/loki

# Run executable
$ ./loki -config.file=./cmd/loki/loki-local-config.yaml
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Alternatively, on Unix systems you can use &lt;code&gt;make&lt;/code&gt; to build the binary, which adds additional arguments to the &lt;code&gt;go build&lt;/code&gt; command.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Build binary
$ make loki

# Run executable
$ ./cmd/loki/loki -config.file=./cmd/loki/loki-local-config.yaml
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To run multiple Loki tenants locally, ensure that auth_enabled is set to true and provide a runtime config with any tenant specific overrides.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Build binary
$ make loki

# Run executable
./loki -config.file=./cmd/loki/loki-local-multi-tenant-config.yaml -runtime-config.file=./cmd/loki/loki-overrides.yaml
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Adopters&lt;/h2&gt; 
&lt;p&gt;Please see &lt;a href=&quot;https://raw.githubusercontent.com/grafana/loki/main/ADOPTERS.md&quot;&gt;ADOPTERS.md&lt;/a&gt; for some of the organizations using Loki today. If you would like to add your organization to the list, please open a PR to add it to the list.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Grafana Loki is distributed under &lt;a href=&quot;https://raw.githubusercontent.com/grafana/loki/main/LICENSE&quot;&gt;AGPL-3.0-only&lt;/a&gt;. For Apache-2.0 exceptions, see &lt;a href=&quot;https://raw.githubusercontent.com/grafana/loki/main/LICENSING.md&quot;&gt;LICENSING.md&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/bec55eec8c6d12db8cddf1a2fc38bfea6bd5baa084982f0e45b454ae8c14c475/grafana/loki" medium="image" />
      
    </item>
    
    <item>
      <title>harness/harness</title>
      <link>https://github.com/harness/harness</link>
      <description>&lt;p&gt;Harness Open Source is an end-to-end developer platform with Source Control Management, CI/CD Pipelines, Hosted Developer Environments, and Artifact Registries.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Harness&lt;/h1&gt; 
&lt;p&gt;Harness Open Source is an open source development platform packed with the power of code hosting, automated DevOps pipelines, hosted development environments (Gitspaces), and artifact registries.&lt;/p&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;Harness Open source is an open source development platform packed with the power of code hosting, automated DevOps pipelines, Gitspaces, and artifact registries.&lt;/p&gt; 
&lt;h2&gt;Running Harness locally&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;The latest publicly released docker image can be found on &lt;a href=&quot;https://hub.docker.com/r/harness/harness&quot;&gt;harness/harness&lt;/a&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;To install Harness yourself, simply run the command below. Once the container is up, you can visit &lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt; in your browser.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run -d \
  -p 3000:3000 \
  -p 3022:3022 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /tmp/harness:/data \
  --name harness \
  --restart always \
  harness/harness
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;The Harness image uses a volume to store the database and repositories. It is highly recommended to use a bind mount or named volume as otherwise all data will be lost once the container is stopped.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;See &lt;a href=&quot;https://developer.harness.io/docs/open-source&quot;&gt;developer.harness.io&lt;/a&gt; to learn how to get the most out of Harness.&lt;/p&gt; 
&lt;h2&gt;Where is Drone?&lt;/h2&gt; 
&lt;p&gt;Harness Open Source represents a massive investment in the next generation of Drone. Where Drone focused solely on continuous integration, Harness adds source code hosting, developer environments (gitspaces), and artifact registries; providing teams with an end-to-end, open source DevOps platform.&lt;/p&gt; 
&lt;p&gt;The goal is for Harness to eventually be at full parity with Drone in terms of pipeline capabilities, allowing users to seamlessly migrate from Drone to Harness.&lt;/p&gt; 
&lt;p&gt;But, we expect this to take some time, which is why we took a snapshot of Drone as a feature branch &lt;a href=&quot;https://github.com/harness/harness/tree/drone&quot;&gt;drone&lt;/a&gt; (&lt;a href=&quot;https://github.com/harness/harness/raw/drone/.github/readme.md&quot;&gt;README&lt;/a&gt;) so it can continue development.&lt;/p&gt; 
&lt;p&gt;As for Harness, the development is taking place on the &lt;a href=&quot;https://github.com/harness/harness/tree/main&quot;&gt;main&lt;/a&gt; branch.&lt;/p&gt; 
&lt;p&gt;For more information on Harness, please visit &lt;a href=&quot;https://developer.harness.io/&quot;&gt;developer.harness.io&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For more information on Drone, please visit &lt;a href=&quot;https://www.drone.io/&quot;&gt;drone.io&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Harness Open Source Development&lt;/h2&gt; 
&lt;h3&gt;Pre-Requisites&lt;/h3&gt; 
&lt;p&gt;Install the latest stable version of Node and Go version 1.20 or higher, and then install the below Go programs. Ensure the GOPATH &lt;a href=&quot;https://go.dev/doc/gopath_code#GOPATH&quot;&gt;bin directory&lt;/a&gt; is added to your PATH.&lt;/p&gt; 
&lt;p&gt;Install protobuf&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Check if you&#39;ve already installed protobuf &lt;code&gt;protoc --version&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;If your version is different than v3.21.11, run &lt;code&gt;brew unlink protobuf&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Get v3.21.11 &lt;code&gt;curl -s https://raw.githubusercontent.com/Homebrew/homebrew-core/9de8de7a533609ebfded833480c1f7c05a3448cb/Formula/protobuf.rb &amp;gt; /tmp/protobuf.rb&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Install it &lt;code&gt;brew install /tmp/protobuf.rb&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Check out your version &lt;code&gt;protoc --version&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Install protoc-gen-go and protoc-gen-go-rpc:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Install protoc-gen-go v1.28.1 &lt;code&gt;go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.1&lt;/code&gt; (Note that this will install a binary in $GOBIN so make sure $GOBIN is in your $PATH)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Install protoc-gen-go-grpc v1.2.0 &lt;code&gt;go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2.0&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ make dep
$ make tools
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Build&lt;/h3&gt; 
&lt;p&gt;First step is to build the user interface artifacts:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ pushd web
$ yarn install
$ yarn build
$ popd
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;After that, you can build the Harness binary:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ make build
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Run&lt;/h3&gt; 
&lt;p&gt;This project supports all operating systems and architectures supported by Go. This means you can build and run the system on your machine; docker containers are not required for local development and testing.&lt;/p&gt; 
&lt;p&gt;To start the server at &lt;code&gt;localhost:3000&lt;/code&gt;, simply run the following command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./gitness server .local.env
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Docker Configuration for Pipelines&lt;/h3&gt; 
&lt;p&gt;Harness pipelines run inside Docker containers. The application automatically negotiates the Docker API version with your Docker daemon, so it works with various Docker versions including Docker Desktop, Rancher Desktop, Colima, and native Docker on Linux.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Docker Socket Location&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;By default, Harness expects the Docker socket at &lt;code&gt;/var/run/docker.sock&lt;/code&gt;. If you&#39;re using an alternative Docker runtime, you may need to configure the socket location:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Runtime&lt;/th&gt; 
   &lt;th&gt;Socket Location&lt;/th&gt; 
   &lt;th&gt;Configuration&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Docker Desktop&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/var/run/docker.sock&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Works by default&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Rancher Desktop&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;~/.rd/docker.sock&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Create symlink or set &lt;code&gt;GITNESS_DOCKER_HOST&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Colima&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;~/.colima/default/docker.sock&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Create symlink or set &lt;code&gt;GITNESS_DOCKER_HOST&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Linux (native)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/var/run/docker.sock&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Works by default&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Option 1: Create a symlink (recommended)&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# For Rancher Desktop
sudo ln -sf ~/.rd/docker.sock /var/run/docker.sock

# For Colima
sudo ln -sf ~/.colima/default/docker.sock /var/run/docker.sock
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Option 2: Set environment variable&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Add to your &lt;code&gt;.local.env&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# For Rancher Desktop
GITNESS_DOCKER_HOST=unix:///Users/&amp;lt;username&amp;gt;/.rd/docker.sock

# For Colima
GITNESS_DOCKER_HOST=unix:///Users/&amp;lt;username&amp;gt;/.colima/default/docker.sock
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Pinning Docker API Version&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;The application automatically negotiates the API version with your Docker daemon. If you need to pin a specific version (e.g., for compatibility testing), you can set:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;GITNESS_DOCKER_API_VERSION=1.45
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Auto-Generate Harness API Client used by UI using Swagger&lt;/h3&gt; 
&lt;p&gt;Please make sure to update the autogenerated client code used by the UI when adding new rest APIs.&lt;/p&gt; 
&lt;p&gt;To regenerate the code, please execute the following steps:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Regenerate swagger with latest Harness binary &lt;code&gt;./gitness swagger &amp;gt; web/src/services/code/swagger.yaml&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;navigate to the &lt;code&gt;web&lt;/code&gt; folder and run &lt;code&gt;yarn services&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The latest API changes should now be reflected in &lt;code&gt;web/src/services/code/index.tsx&lt;/code&gt;&lt;/p&gt; 
&lt;h1&gt;Run Registry Conformance Tests&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;make conformance-test
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For running conformance tests with existing running service, use:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;make hot-conformance-test
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;User Interface&lt;/h2&gt; 
&lt;p&gt;This project includes a full user interface for interacting with the system. When you run the application, you can access the user interface by navigating to &lt;code&gt;http://localhost:3000&lt;/code&gt; in your browser.&lt;/p&gt; 
&lt;h2&gt;REST API&lt;/h2&gt; 
&lt;p&gt;This project includes a swagger specification. When you run the application, you can access the swagger specification by navigating to &lt;code&gt;http://localhost:3000/swagger&lt;/code&gt; in your browser (for raw yaml see &lt;code&gt;http://localhost:3000/openapi.yaml&lt;/code&gt;). For registry endpoints, currently swagger is located on different endpoint &lt;code&gt;http://localhost:3000/registry/swagger/&lt;/code&gt; (for raw json see &lt;code&gt;http://localhost:3000/registry/swagger.json&lt;/code&gt;). These will be later moved to the main swagger endpoint.&lt;/p&gt; 
&lt;p&gt;For testing, it&#39;s simplest to just use the cli to create a token (this requires Harness server to run):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# LOGIN (user: admin, pw: changeit)
$ ./gitness login

# GENERATE PAT (1 YEAR VALIDITY)
$ ./gitness user pat &quot;my-pat-uid&quot; 2592000
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The command outputs a valid PAT that has been granted full access as the user. The token can then be send as part of the &lt;code&gt;Authorization&lt;/code&gt; header with Postman or curl:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ curl http://localhost:3000/api/v1/user \
-H &quot;Authorization: Bearer $TOKEN&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;CLI&lt;/h2&gt; 
&lt;p&gt;This project includes VERY basic command line tools for development and running the service. Please remember that you must start the server before you can execute commands.&lt;/p&gt; 
&lt;p&gt;For a full list of supported operations, please see&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ ./gitness --help
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Refer to &lt;a href=&quot;https://github.com/harness/harness/raw/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Apache License 2.0, see &lt;a href=&quot;https://github.com/harness/harness/raw/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/7aacdb6c5358c2397ff507b0d08068371bad09937d8d6bfe8d7a504990505fcd/harness/harness" medium="image" />
      
    </item>
    
    <item>
      <title>glanceapp/glance</title>
      <link>https://github.com/glanceapp/glance</link>
      <description>&lt;p&gt;A self-hosted dashboard that puts all your feeds in one place&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/glanceapp/glance/main/docs/logo.png&quot; /&gt;&lt;/p&gt; 
&lt;h1 align=&quot;center&quot;&gt;Glance&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/glanceapp/glance/main/#installation&quot;&gt;Install&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/glanceapp/glance/main/docs/configuration.md#configuring-glance&quot;&gt;Configuration&lt;/a&gt; • &lt;a href=&quot;https://discord.com/invite/7KQ7Xa9kJd&quot;&gt;Discord&lt;/a&gt; • &lt;a href=&quot;https://github.com/sponsors/glanceapp&quot;&gt;Sponsor&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/glanceapp/community-widgets&quot;&gt;Community widgets&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/glanceapp/glance/main/docs/preconfigured-pages.md&quot;&gt;Preconfigured pages&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/glanceapp/glance/main/docs/themes.md&quot;&gt;Themes&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;A lightweight, highly customizable dashboard that displays&lt;br /&gt; your feeds in a beautiful, streamlined interface&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/glanceapp/glance/main/docs/images/readme-main-image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;h3&gt;Various widgets&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;RSS feeds&lt;/li&gt; 
 &lt;li&gt;Subreddit posts&lt;/li&gt; 
 &lt;li&gt;Hacker News posts&lt;/li&gt; 
 &lt;li&gt;Weather forecasts&lt;/li&gt; 
 &lt;li&gt;YouTube channel uploads&lt;/li&gt; 
 &lt;li&gt;Twitch channels&lt;/li&gt; 
 &lt;li&gt;Market prices&lt;/li&gt; 
 &lt;li&gt;Docker containers status&lt;/li&gt; 
 &lt;li&gt;Server stats&lt;/li&gt; 
 &lt;li&gt;Custom widgets&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/glanceapp/glance/main/docs/configuration.md#configuring-glance&quot;&gt;and many more...&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Fast and lightweight&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Low memory usage&lt;/li&gt; 
 &lt;li&gt;Few dependencies&lt;/li&gt; 
 &lt;li&gt;Minimal vanilla JS&lt;/li&gt; 
 &lt;li&gt;Single &amp;lt;20mb binary available for multiple OSs &amp;amp; architectures and just as small Docker container&lt;/li&gt; 
 &lt;li&gt;Uncached pages usually load within ~1s (depending on internet speed and number of widgets)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Tons of customizability&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Different layouts&lt;/li&gt; 
 &lt;li&gt;As many pages/tabs as you need&lt;/li&gt; 
 &lt;li&gt;Numerous configuration options for each widget&lt;/li&gt; 
 &lt;li&gt;Multiple styles for some widgets&lt;/li&gt; 
 &lt;li&gt;Custom CSS&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Optimized for mobile devices&lt;/h3&gt; 
&lt;p&gt;Because you&#39;ll want to take it with you on the go.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/glanceapp/glance/main/docs/images/mobile-preview.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; 
&lt;h3&gt;Themeable&lt;/h3&gt; 
&lt;p&gt;Easily create your own theme by tweaking a few numbers or choose from one of the &lt;a href=&quot;https://raw.githubusercontent.com/glanceapp/glance/main/docs/themes.md&quot;&gt;already available themes&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/glanceapp/glance/main/docs/images/themes-example.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;Configuration&lt;/h2&gt; 
&lt;p&gt;Configuration is done through YAML files, to learn more about how the layout works, how to add more pages and how to configure widgets, visit the &lt;a href=&quot;https://raw.githubusercontent.com/glanceapp/glance/main/docs/configuration.md#configuring-glance&quot;&gt;configuration documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Preview example configuration file&lt;/strong&gt;&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;pages:
  - name: Home
    columns:
      - size: small
        widgets:
          - type: calendar
            first-day-of-week: monday

          - type: rss
            limit: 10
            collapse-after: 3
            cache: 12h
            feeds:
              - url: https://selfh.st/rss/
                title: selfh.st
                limit: 4
              - url: https://ciechanow.ski/atom.xml
              - url: https://www.joshwcomeau.com/rss.xml
                title: Josh Comeau
              - url: https://samwho.dev/rss.xml
              - url: https://ishadeed.com/feed.xml
                title: Ahmad Shadeed

          - type: twitch-channels
            channels:
              - theprimeagen
              - j_blow
              - piratesoftware
              - cohhcarnage
              - christitustech
              - EJ_SA

      - size: full
        widgets:
          - type: group
            widgets:
              - type: hacker-news
              - type: lobsters

          - type: videos
            channels:
              - UCXuqSBlHAE6Xw-yeJA0Tunw # Linus Tech Tips
              - UCR-DXc1voovS8nhAvccRZhg # Jeff Geerling
              - UCsBjURrPoezykLs9EqgamOA # Fireship
              - UCBJycsmduvYEL83R_U4JriQ # Marques Brownlee
              - UCHnyfMqiRRG1u-2MsSQLbXA # Veritasium

          - type: group
            widgets:
              - type: reddit
                subreddit: technology
                show-thumbnails: true
              - type: reddit
                subreddit: selfhosted
                show-thumbnails: true

      - size: small
        widgets:
          - type: weather
            location: London, United Kingdom
            units: metric
            hour-format: 12h

          - type: markets
            markets:
              - symbol: SPY
                name: S&amp;amp;P 500
              - symbol: BTC-USD
                name: Bitcoin
              - symbol: NVDA
                name: NVIDIA
              - symbol: AAPL
                name: Apple
              - symbol: MSFT
                name: Microsoft

          - type: releases
            cache: 1d
            repositories:
              - glanceapp/glance
              - go-gitea/gitea
              - immich-app/immich
              - syncthing/syncthing
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;br /&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;Choose one of the following methods:&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Docker compose using provided directory structure (recommended)&lt;/strong&gt;&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;p&gt;Create a new directory called &lt;code&gt;glance&lt;/code&gt; as well as the template files within it by running:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir glance &amp;amp;&amp;amp; cd glance &amp;amp;&amp;amp; curl -sL https://github.com/glanceapp/docker-compose-template/archive/refs/heads/main.tar.gz | tar -xzf - --strip-components 2
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://github.com/glanceapp/docker-compose-template/tree/main/root&quot;&gt;click here to view the files that will be created&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; 
 &lt;p&gt;Then, edit the following files as desired:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt; to configure the port, volumes and other containery things&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;config/home.yml&lt;/code&gt; to configure the widgets or layout of the home page&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;config/glance.yml&lt;/code&gt; if you want to change the theme or add more pages&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;details&gt; 
  &lt;summary&gt;Other files you may want to edit&lt;/summary&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;.env&lt;/code&gt; to configure environment variables that will be available inside configuration files&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;assets/user.css&lt;/code&gt; to add custom CSS&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/details&gt; 
 &lt;p&gt;When ready, run:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose up -d
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;If you encounter any issues, you can check the logs by running:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose logs
&lt;/code&gt;&lt;/pre&gt; 
 &lt;hr /&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Docker compose manual&lt;/strong&gt;&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;p&gt;Create a &lt;code&gt;docker-compose.yml&lt;/code&gt; file with the following contents:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;services:
  glance:
    container_name: glance
    image: glanceapp/glance
    restart: unless-stopped
    volumes:
      - ./config:/app/config
    ports:
      - 8080:8080
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Then, create a new directory called &lt;code&gt;config&lt;/code&gt; and download the example starting &lt;a href=&quot;https://github.com/glanceapp/glance/raw/main/docs/glance.yml&quot;&gt;&lt;code&gt;glance.yml&lt;/code&gt;&lt;/a&gt; file into it by running:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir config &amp;amp;&amp;amp; wget -O config/glance.yml https://raw.githubusercontent.com/glanceapp/glance/refs/heads/main/docs/glance.yml
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Feel free to edit the &lt;code&gt;glance.yml&lt;/code&gt; file to your liking, and when ready run:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose up -d
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;If you encounter any issues, you can check the logs by running:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker logs glance
&lt;/code&gt;&lt;/pre&gt; 
 &lt;hr /&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Manual binary installation&lt;/strong&gt;&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;p&gt;Precompiled binaries are available for Linux, Windows and macOS (x86, x86_64, ARM and ARM64 architectures).&lt;/p&gt; 
 &lt;h3&gt;Linux&lt;/h3&gt; 
 &lt;p&gt;Visit the &lt;a href=&quot;https://github.com/glanceapp/glance/releases/latest&quot;&gt;latest release page&lt;/a&gt; for available binaries. You can place the binary in &lt;code&gt;/opt/glance/&lt;/code&gt; and have it start with your server via a &lt;a href=&quot;https://linuxhandbook.com/create-systemd-services/&quot;&gt;systemd service&lt;/a&gt;. By default, when running the binary, it will look for a &lt;code&gt;glance.yml&lt;/code&gt; file in the directory it&#39;s placed in. To specify a different path for the config file, use the &lt;code&gt;--config&lt;/code&gt; option:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;/opt/glance/glance --config /etc/glance.yml
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;To grab a starting template for the config file, run:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;wget https://raw.githubusercontent.com/glanceapp/glance/refs/heads/main/docs/glance.yml
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;Windows&lt;/h3&gt; 
 &lt;p&gt;Download and extract the executable from the &lt;a href=&quot;https://github.com/glanceapp/glance/releases/latest&quot;&gt;latest release&lt;/a&gt; (most likely the file called &lt;code&gt;glance-windows-amd64.zip&lt;/code&gt; if you&#39;re on a 64-bit system) and place it in a folder of your choice. Then, create a new text file called &lt;code&gt;glance.yml&lt;/code&gt; in the same folder and paste the content from &lt;a href=&quot;https://raw.githubusercontent.com/glanceapp/glance/refs/heads/main/docs/glance.yml&quot;&gt;here&lt;/a&gt; in it. You should then be able to run the executable and access the dashboard by visiting &lt;code&gt;http://localhost:8080&lt;/code&gt; in your browser.&lt;/p&gt; 
 &lt;hr /&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Other&lt;/strong&gt;&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;p&gt;Glance can also be installed through the following 3rd party channels:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://community-scripts.github.io/ProxmoxVE/scripts?id=glance&quot;&gt;Proxmox VE Helper Script&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://search.nixos.org/packages?channel=unstable&amp;amp;show=glance&quot;&gt;NixOS package&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://coolify.io/docs/services/glance/&quot;&gt;Coolify.io&lt;/a&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;hr /&gt; 
&lt;/details&gt; 
&lt;br /&gt; 
&lt;h2&gt;Common issues&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Requests timing out&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;The most common cause of this is when using Pi-Hole, AdGuard Home or other ad-blocking DNS services, which by default have a fairly low rate limit. Depending on the number of widgets you have in a single page, this limit can very easily be exceeded. To fix this, increase the rate limit in the settings of your DNS service.&lt;/p&gt; 
 &lt;p&gt;If using Podman, in some rare cases the timeout can be caused by an unknown issue, in which case it may be resolved by adding the following to the bottom of your &lt;code&gt;docker-compose.yml&lt;/code&gt; file:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;networks:
  podman:
    external: true
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Broken layout for markets, bookmarks or other widgets&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;This is almost always caused by the browser extension Dark Reader. To fix this, disable dark mode for the domain where Glance is hosted.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;cannot unmarshal !!map into []glance.page&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;The most common cause of this is having a &lt;code&gt;pages&lt;/code&gt; key in your &lt;code&gt;glance.yml&lt;/code&gt; and then also having a &lt;code&gt;pages&lt;/code&gt; key inside one of your included pages. To fix this, remove the &lt;code&gt;pages&lt;/code&gt; key from the top of your included pages.&lt;/p&gt; 
&lt;/details&gt; 
&lt;br /&gt; 
&lt;h2&gt;FAQ&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Does the information on the page update automatically?&lt;/strong&gt;&lt;/summary&gt; No, a page refresh is required to update the information. Some things do dynamically update where it makes sense, like the clock widget and the relative time showing how long ago something happened. 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;How frequently do widgets update?&lt;/strong&gt;&lt;/summary&gt; No requests are made periodically in the background, information is only fetched upon loading the page and then cached. The default cache lifetime is different for each widget and can be configured. 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Can I create my own widgets?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Yes, there are multiple ways to create custom widgets:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;iframe&lt;/code&gt; widget - allows you to embed things from other websites&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;html&lt;/code&gt; widget - allows you to insert your own static HTML&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;extension&lt;/code&gt; widget - fetch HTML from a URL&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;custom-api&lt;/code&gt; widget - fetch JSON from a URL and render it using custom HTML&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Can I change the title of a widget?&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Yes, the title of all widgets can be changed by specifying the &lt;code&gt;title&lt;/code&gt; property in the widget&#39;s configuration:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;- type: rss
  title: My custom title

- type: markets
  title: My custom title

- type: videos
  title: My custom title

# and so on for all widgets...
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;br /&gt; 
&lt;h2&gt;Feature requests&lt;/h2&gt; 
&lt;p&gt;New feature suggestions are always welcome and will be considered, though please keep in mind that some of them may be out of scope for what the project is trying to achieve (or is reasonably capable of). If you have an idea for a new feature and would like to share it, you can do so &lt;a href=&quot;https://github.com/glanceapp/glance/issues/new?template=feature_request.yml&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Feature requests are tagged with one of the following:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/glanceapp/glance/labels/roadmap&quot;&gt;Roadmap&lt;/a&gt; - will be implemented in a future release&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/glanceapp/glance/labels/backlog&quot;&gt;Backlog&lt;/a&gt; - may be implemented in the future but needs further feedback or interest from the community&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/glanceapp/glance/labels/icebox&quot;&gt;Icebox&lt;/a&gt; - no plans to implement as it doesn&#39;t currently align with the project&#39;s goals or capabilities, may be revised at a later date&lt;/li&gt; 
&lt;/ul&gt; 
&lt;br /&gt; 
&lt;h2&gt;Building from source&lt;/h2&gt; 
&lt;p&gt;Choose one of the following methods:&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Build binary with Go&lt;/strong&gt;&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;p&gt;Requirements: &lt;a href=&quot;https://go.dev/dl/&quot;&gt;Go&lt;/a&gt; &amp;gt;= v1.23&lt;/p&gt; 
 &lt;p&gt;To build the project for your current OS and architecture, run:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go build -o build/glance .
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;To build for a specific OS and architecture, run:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;GOOS=linux GOARCH=amd64 go build -o build/glance .
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;a href=&quot;https://go.dev/doc/install/source#:~:text=$GOOS%20and%20$GOARCH&quot;&gt;&lt;em&gt;click here for a full list of GOOS and GOARCH combinations&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;Alternatively, if you just want to run the app without creating a binary, like when you&#39;re testing out changes, you can run:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go run .
&lt;/code&gt;&lt;/pre&gt; 
 &lt;hr /&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Build project and Docker image with Docker&lt;/strong&gt;&lt;/summary&gt; 
 &lt;br /&gt; 
 &lt;p&gt;Requirements: &lt;a href=&quot;https://docs.docker.com/engine/install/&quot;&gt;Docker&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;To build the project and image using just Docker, run:&lt;/p&gt; 
 &lt;p&gt;&lt;em&gt;(replace &lt;code&gt;owner&lt;/code&gt; with your name or organization)&lt;/em&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker build -t owner/glance:latest .
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;If you wish to push the image to a registry (by default Docker Hub), run:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker push owner/glance:latest
&lt;/code&gt;&lt;/pre&gt; 
 &lt;hr /&gt; 
&lt;/details&gt; 
&lt;br /&gt; 
&lt;h2&gt;Contributing guidelines&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Before working on a new feature it&#39;s preferable to submit a feature request first and state that you&#39;d like to implement it yourself&lt;/li&gt; 
 &lt;li&gt;Please don&#39;t submit PRs for feature requests that are either in the roadmap&lt;sup&gt;[1]&lt;/sup&gt;, backlog&lt;sup&gt;[2]&lt;/sup&gt; or icebox&lt;sup&gt;[3]&lt;/sup&gt;&lt;/li&gt; 
 &lt;li&gt;Use &lt;code&gt;dev&lt;/code&gt; for the base branch if you&#39;re adding new features or fixing bugs, otherwise use &lt;code&gt;main&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Avoid introducing new dependencies&lt;/li&gt; 
 &lt;li&gt;Avoid making backwards-incompatible configuration changes&lt;/li&gt; 
 &lt;li&gt;Avoid introducing new colors or hard-coding colors, use the standard &lt;code&gt;primary&lt;/code&gt;, &lt;code&gt;positive&lt;/code&gt; and &lt;code&gt;negative&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;For icons, try to use &lt;a href=&quot;https://heroicons.com/&quot;&gt;heroicons&lt;/a&gt; where applicable&lt;/li&gt; 
 &lt;li&gt;Provide a screenshot of the changes if UI related where possible&lt;/li&gt; 
 &lt;li&gt;No &lt;code&gt;package.json&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;&lt;sup&gt;[1] [2] [3]&lt;/sup&gt;&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;[1] The feature likely already has work put into it that may conflict with your implementation&lt;/p&gt; 
 &lt;p&gt;[2] The demand, implementation or functionality for this feature is not yet clear&lt;/p&gt; 
 &lt;p&gt;[3] No plans to add this feature for the time being&lt;/p&gt; 
&lt;/details&gt; 
&lt;br /&gt; 
&lt;h2&gt;Thank you&lt;/h2&gt; 
&lt;p&gt;To all the people who were generous enough to &lt;a href=&quot;https://github.com/sponsors/glanceapp&quot;&gt;sponsor&lt;/a&gt; the project and to everyone who has contributed in any way, be it PRs, submitting issues, helping others in the discussions or Discord server, creating guides and tools or just mentioning Glance on social media. Your support is greatly appreciated and helps keep the project going.&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/792861139/5aa82f46-2f6d-4773-a4f3-b42e136f453f" medium="image" />
      
    </item>
    
    <item>
      <title>tailscale/tailscale</title>
      <link>https://github.com/tailscale/tailscale</link>
      <description>&lt;p&gt;The easiest, most secure way to use WireGuard and 2FA.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Tailscale&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://tailscale.com&quot;&gt;https://tailscale.com&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Private WireGuard® networks made easy&lt;/p&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;This repository contains the majority of Tailscale&#39;s open source code. Notably, it includes the &lt;code&gt;tailscaled&lt;/code&gt; daemon and the &lt;code&gt;tailscale&lt;/code&gt; CLI tool. The &lt;code&gt;tailscaled&lt;/code&gt; daemon runs on Linux, Windows, &lt;a href=&quot;https://tailscale.com/kb/1065/macos-variants/&quot;&gt;macOS&lt;/a&gt;, and to varying degrees on FreeBSD and OpenBSD. The Tailscale iOS and Android apps use this repo&#39;s code, but this repo doesn&#39;t contain the mobile GUI code.&lt;/p&gt; 
&lt;p&gt;Other &lt;a href=&quot;https://github.com/orgs/tailscale/repositories&quot;&gt;Tailscale repos&lt;/a&gt; of note:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;the Android app is at &lt;a href=&quot;https://github.com/tailscale/tailscale-android&quot;&gt;https://github.com/tailscale/tailscale-android&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;the Synology package is at &lt;a href=&quot;https://github.com/tailscale/tailscale-synology&quot;&gt;https://github.com/tailscale/tailscale-synology&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;the QNAP package is at &lt;a href=&quot;https://github.com/tailscale/tailscale-qpkg&quot;&gt;https://github.com/tailscale/tailscale-qpkg&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;the Chocolatey packaging is at &lt;a href=&quot;https://github.com/tailscale/tailscale-chocolatey&quot;&gt;https://github.com/tailscale/tailscale-chocolatey&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For background on which parts of Tailscale are open source and why, see &lt;a href=&quot;https://tailscale.com/opensource/&quot;&gt;https://tailscale.com/opensource/&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Using&lt;/h2&gt; 
&lt;p&gt;We serve packages for a variety of distros and platforms at &lt;a href=&quot;https://pkgs.tailscale.com/&quot;&gt;https://pkgs.tailscale.com&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Other clients&lt;/h2&gt; 
&lt;p&gt;The &lt;a href=&quot;https://tailscale.com/download&quot;&gt;macOS, iOS, and Windows clients&lt;/a&gt; use the code in this repository but additionally include small GUI wrappers. The GUI wrappers on non-open source platforms are themselves not open source.&lt;/p&gt; 
&lt;h2&gt;Building&lt;/h2&gt; 
&lt;p&gt;We always require the latest Go release, currently Go 1.26. (While we build releases with our &lt;a href=&quot;https://github.com/tailscale/go/&quot;&gt;Go fork&lt;/a&gt;, its use is not required.)&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;go install tailscale.com/cmd/tailscale{,d}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you&#39;re packaging Tailscale for distribution, use &lt;code&gt;build_dist.sh&lt;/code&gt; instead, to burn commit IDs and version info into the binaries:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./build_dist.sh tailscale.com/cmd/tailscale
./build_dist.sh tailscale.com/cmd/tailscaled
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If your distro has conventions that preclude the use of &lt;code&gt;build_dist.sh&lt;/code&gt;, please do the equivalent of what it does in your distro&#39;s way, so that bug reports contain useful version information.&lt;/p&gt; 
&lt;h2&gt;Bugs&lt;/h2&gt; 
&lt;p&gt;Please file any issues about this code or the hosted service on &lt;a href=&quot;https://github.com/tailscale/tailscale/issues&quot;&gt;the issue tracker&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;PRs welcome! But please file bugs. Commit messages should &lt;a href=&quot;https://docs.github.com/en/github/writing-on-github/autolinked-references-and-urls&quot;&gt;reference bugs&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;We require &lt;a href=&quot;https://en.wikipedia.org/wiki/Developer_Certificate_of_Origin&quot;&gt;Developer Certificate of Origin&lt;/a&gt; &lt;code&gt;Signed-off-by&lt;/code&gt; lines in commits.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/tailscale/tailscale/main/docs/commit-messages.md&quot;&gt;commit-messages.md&lt;/a&gt; (or skim &lt;code&gt;git log&lt;/code&gt;) for our commit message style.&lt;/p&gt; 
&lt;h2&gt;About Us&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://tailscale.com/&quot;&gt;Tailscale&lt;/a&gt; is primarily developed by the people at &lt;a href=&quot;https://github.com/orgs/tailscale/people&quot;&gt;https://github.com/orgs/tailscale/people&lt;/a&gt;. For other contributors, see:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tailscale/tailscale/graphs/contributors&quot;&gt;https://github.com/tailscale/tailscale/graphs/contributors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tailscale/tailscale-android/graphs/contributors&quot;&gt;https://github.com/tailscale/tailscale-android/graphs/contributors&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Legal&lt;/h2&gt; 
&lt;p&gt;WireGuard is a registered trademark of Jason A. Donenfeld.&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/237523442/9180b10e-4342-4e5f-bd8b-7d1d314009a6" medium="image" />
      
    </item>
    
    <item>
      <title>alireza0/s-ui</title>
      <link>https://github.com/alireza0/s-ui</link>
      <description>&lt;p&gt;An advanced Web Panel • Built for SagerNet/Sing-Box&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;S-UI&lt;/h1&gt; 
&lt;p&gt;&lt;strong&gt;An Advanced Web Panel • Built on SagerNet/Sing-Box&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/alireza0/s-ui.svg?sanitize=true&quot; alt=&quot;&quot; /&gt; &lt;img src=&quot;https://img.shields.io/docker/pulls/alireza7/s-ui.svg?sanitize=true&quot; alt=&quot;S-UI Docker pull&quot; /&gt; &lt;a href=&quot;https://goreportcard.com/report/github.com/alireza0/s-ui&quot;&gt;&lt;img src=&quot;https://goreportcard.com/badge/github.com/alireza0/s-ui&quot; alt=&quot;Go Report Card&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://img.shields.io/github/downloads/alireza0/s-ui/total.svg&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/alireza0/s-ui/total.svg?sanitize=true&quot; alt=&quot;Downloads&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.en.html&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; This project is only for personal learning and communication, please do not use it for illegal purposes, please do not use it in a production environment&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;If you think this project is helpful to you, you may wish to give a&lt;/strong&gt;🌟&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Want to contribute?&lt;/strong&gt; See &lt;a href=&quot;https://raw.githubusercontent.com/alireza0/s-ui/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for development setup, coding conventions, testing, and the pull request process.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.buymeacoffee.com/alireza7&quot;&gt;&lt;img src=&quot;https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png&quot; alt=&quot;&amp;quot;Buy Me A Coffee&amp;quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;a href=&quot;https://nowpayments.io/donation/alireza7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt; &lt;img src=&quot;https://nowpayments.io/images/embeds/donation-button-white.svg?sanitize=true&quot; alt=&quot;Crypto donation button by NOWPayments&quot; /&gt; &lt;/a&gt; 
&lt;h2&gt;Quick Overview&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Features&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Enable?&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Multi-Protocol&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✔️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Multi-Language&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✔️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Multi-Client/Inbound&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✔️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Advanced Traffic Routing Interface&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✔️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Client &amp;amp; Traffic &amp;amp; System Status&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✔️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Subscription Link (link/json/clash + info)&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✔️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Dark/Light Theme&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✔️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;API Interface&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;✔️&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Supported Platforms&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Platform&lt;/th&gt; 
   &lt;th&gt;Architecture&lt;/th&gt; 
   &lt;th&gt;Status&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Linux&lt;/td&gt; 
   &lt;td&gt;amd64, arm64, armv7, armv6, armv5, 386, s390x&lt;/td&gt; 
   &lt;td&gt;✅ Supported&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Windows&lt;/td&gt; 
   &lt;td&gt;amd64, 386, arm64&lt;/td&gt; 
   &lt;td&gt;✅ Supported&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;macOS&lt;/td&gt; 
   &lt;td&gt;amd64, arm64&lt;/td&gt; 
   &lt;td&gt;🚧 Experimental&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/alireza0/s-ui-frontend/raw/main/media/main.png&quot; alt=&quot;&amp;quot;Main&amp;quot;&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/alireza0/s-ui-frontend/raw/main/screenshots.md&quot;&gt;Other UI Screenshots&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;API Documentation&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/alireza0/s-ui/wiki/API-Documentation&quot;&gt;API-Documentation Wiki&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Default Installation Information&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Panel Port: 2095&lt;/li&gt; 
 &lt;li&gt;Panel Path: /app/&lt;/li&gt; 
 &lt;li&gt;Subscription Port: 2096&lt;/li&gt; 
 &lt;li&gt;Subscription Path: /sub/&lt;/li&gt; 
 &lt;li&gt;User/Password: admin&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Install &amp;amp; Upgrade to Latest Version&lt;/h2&gt; 
&lt;h3&gt;Linux/macOS&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;bash &amp;lt;(curl -Ls https://raw.githubusercontent.com/alireza0/s-ui/master/install.sh)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Windows&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Download the latest Windows release from &lt;a href=&quot;https://github.com/alireza0/s-ui/releases/latest&quot;&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Extract the ZIP file&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;install-windows.bat&lt;/code&gt; as Administrator&lt;/li&gt; 
 &lt;li&gt;Follow the installation wizard&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Install legacy Version&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; To install your desired legacy version, add the version to the end of the installation command. e.g., ver &lt;code&gt;1.0.0&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;VERSION=1.0.0 &amp;amp;&amp;amp; bash &amp;lt;(curl -Ls https://raw.githubusercontent.com/alireza0/s-ui/$VERSION/install.sh) $VERSION
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Manual installation&lt;/h2&gt; 
&lt;h3&gt;Linux/macOS&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Get the latest version of S-UI based on your OS/Architecture from GitHub: &lt;a href=&quot;https://github.com/alireza0/s-ui/releases/latest&quot;&gt;https://github.com/alireza0/s-ui/releases/latest&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;OPTIONAL&lt;/strong&gt; Get the latest version of &lt;code&gt;s-ui.sh&lt;/code&gt; &lt;a href=&quot;https://raw.githubusercontent.com/alireza0/s-ui/master/s-ui.sh&quot;&gt;https://raw.githubusercontent.com/alireza0/s-ui/master/s-ui.sh&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;OPTIONAL&lt;/strong&gt; Copy &lt;code&gt;s-ui.sh&lt;/code&gt; to /usr/bin/ and run &lt;code&gt;chmod +x /usr/bin/s-ui&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Extract s-ui tar.gz file to a directory of your choice and navigate to the directory where you extracted the tar.gz file.&lt;/li&gt; 
 &lt;li&gt;Copy *.service files to /etc/systemd/system/ and run &lt;code&gt;systemctl daemon-reload&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Enable autostart and start S-UI service using &lt;code&gt;systemctl enable s-ui --now&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Start sing-box service using &lt;code&gt;systemctl enable sing-box --now&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Windows&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Get the latest Windows version from GitHub: &lt;a href=&quot;https://github.com/alireza0/s-ui/releases/latest&quot;&gt;https://github.com/alireza0/s-ui/releases/latest&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Download the appropriate Windows package (e.g., &lt;code&gt;s-ui-windows-amd64.zip&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;Extract the ZIP file to a directory of your choice&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;install-windows.bat&lt;/code&gt; as Administrator&lt;/li&gt; 
 &lt;li&gt;Follow the installation wizard&lt;/li&gt; 
 &lt;li&gt;Access the panel at &lt;a href=&quot;http://localhost:2095/app&quot;&gt;http://localhost:2095/app&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Uninstall S-UI&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;sudo -i

systemctl disable s-ui  --now

rm -f /etc/systemd/system/sing-box.service
systemctl daemon-reload

rm -fr /usr/local/s-ui
rm /usr/bin/s-ui
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Install using Docker&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;Click for details&lt;/summary&gt; 
 &lt;h3&gt;Usage&lt;/h3&gt; 
 &lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Install Docker&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;curl -fsSL https://get.docker.com | sh
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Install S-UI&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;Docker compose method&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;mkdir s-ui &amp;amp;&amp;amp; cd s-ui
wget -q https://raw.githubusercontent.com/alireza0/s-ui/master/docker-compose.yml
docker compose up -d
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;Use docker&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;mkdir s-ui &amp;amp;&amp;amp; cd s-ui
docker run -itd \
    -p 2095:2095 -p 2096:2096 -p 443:443 -p 80:80 \
    -v $PWD/db/:/app/db/ \
    -v $PWD/cert/:/root/cert/ \
    --name s-ui --restart=unless-stopped \
    alireza7/s-ui:latest
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;Build your own image&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;git clone https://github.com/alireza0/s-ui
git submodule update --init --recursive
docker build -t s-ui .
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Manual run ( contribution )&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;Click for details&lt;/summary&gt; 
 &lt;h3&gt;Build and run whole project&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;./runSUI.sh
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;Clone the repository&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# clone repository
git clone https://github.com/alireza0/s-ui
# clone submodules
git submodule update --init --recursive
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;- Frontend&lt;/h3&gt; 
 &lt;p&gt;Visit &lt;a href=&quot;https://github.com/alireza0/s-ui-frontend&quot;&gt;s-ui-frontend&lt;/a&gt; for frontend code&lt;/p&gt; 
 &lt;h3&gt;- Backend&lt;/h3&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;Please build frontend once before!&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;To build backend:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# remove old frontend compiled files
rm -fr web/html/*
# apply new frontend compiled files
cp -R frontend/dist/ web/html/
# build
go build -o sui main.go
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;To run backend (from root folder of repository):&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;./sui
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Languages&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;English&lt;/li&gt; 
 &lt;li&gt;Farsi&lt;/li&gt; 
 &lt;li&gt;Vietnamese&lt;/li&gt; 
 &lt;li&gt;Chinese (Simplified)&lt;/li&gt; 
 &lt;li&gt;Chinese (Traditional)&lt;/li&gt; 
 &lt;li&gt;Russian&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Supported protocols: 
  &lt;ul&gt; 
   &lt;li&gt;General: Mixed, SOCKS, HTTP, HTTPS, Direct, Redirect, TProxy&lt;/li&gt; 
   &lt;li&gt;V2Ray based: VLESS, VMess, Trojan, Shadowsocks&lt;/li&gt; 
   &lt;li&gt;Other protocols: ShadowTLS, Hysteria, Hysteria2, Naive, TUIC&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Supports XTLS protocols&lt;/li&gt; 
 &lt;li&gt;An advanced interface for routing traffic, incorporating PROXY Protocol, External, and Transparent Proxy, SSL Certificate, and Port&lt;/li&gt; 
 &lt;li&gt;An advanced interface for inbound and outbound configuration&lt;/li&gt; 
 &lt;li&gt;Clients’ traffic cap and expiration date&lt;/li&gt; 
 &lt;li&gt;Displays online clients, inbounds and outbounds with traffic statistics, and system status monitoring&lt;/li&gt; 
 &lt;li&gt;Subscription service with ability to add external links and subscription&lt;/li&gt; 
 &lt;li&gt;HTTPS for secure access to the web panel and subscription service (self-provided domain + SSL certificate)&lt;/li&gt; 
 &lt;li&gt;Dark/Light theme&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Environment Variables&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;Click for details&lt;/summary&gt; 
 &lt;h3&gt;Usage&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Variable&lt;/th&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Type&lt;/th&gt; 
    &lt;th style=&quot;text-align:left&quot;&gt;Default&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;SUI_LOG_LEVEL&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;&quot;debug&quot;&lt;/code&gt; | &lt;code&gt;&quot;info&quot;&lt;/code&gt; | &lt;code&gt;&quot;warn&quot;&lt;/code&gt; | &lt;code&gt;&quot;error&quot;&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;&quot;info&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;SUI_DEBUG&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;SUI_BIN_FOLDER&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;&quot;bin&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;SUI_DB_FOLDER&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;&quot;db&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;SINGBOX_API&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;h2&gt;SSL Certificate&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;Click for details&lt;/summary&gt; 
 &lt;h3&gt;Certbot&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;snap install core; snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

certbot certonly --standalone --register-unsafely-without-email --non-interactive --agree-tos -d &amp;lt;Your Domain Name&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Stargazers over Time&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://starchart.cc/alireza0/s-ui&quot;&gt;&lt;img src=&quot;https://starchart.cc/alireza0/s-ui.svg?sanitize=true&quot; alt=&quot;Stargazers over time&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/382c32da8d4893b208d3aa3d336a0ad52be78729a31c6192355ff92af74f3c14/alireza0/s-ui" medium="image" />
      
    </item>
    
    <item>
      <title>iawia002/lux</title>
      <link>https://github.com/iawia002/lux</link>
      <description>&lt;p&gt;👾 Fast and simple video download library and CLI tool written in Go&lt;/p&gt;&lt;hr&gt;&lt;h1 align=&quot;center&quot;&gt;Lux&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;i&gt;Let there be Lux!&lt;/i&gt;&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;a href=&quot;https://codecov.io/gh/iawia002/lux&quot;&gt; &lt;img src=&quot;https://img.shields.io/codecov/c/github/iawia002/lux.svg?style=flat-square&quot; alt=&quot;Codecov&quot; /&gt; &lt;/a&gt; 
 &lt;a href=&quot;https://github.com/iawia002/lux/actions&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/iawia002/lux/ci.yml?style=flat-square&quot; alt=&quot;GitHub Workflow Status&quot; /&gt; &lt;/a&gt; 
 &lt;a href=&quot;https://goreportcard.com/report/github.com/iawia002/lux&quot;&gt; &lt;img src=&quot;https://goreportcard.com/badge/github.com/iawia002/lux?style=flat-square&quot; alt=&quot;Go Report Card&quot; /&gt; &lt;/a&gt; 
 &lt;a href=&quot;https://github.com/iawia002/lux/releases&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/release/iawia002/lux.svg?style=flat-square&quot; alt=&quot;GitHub release&quot; /&gt; &lt;/a&gt; 
 &lt;a href=&quot;https://formulae.brew.sh/formula/lux&quot;&gt; &lt;img src=&quot;https://img.shields.io/homebrew/v/lux.svg?style=flat-square&quot; alt=&quot;Homebrew&quot; /&gt; &lt;/a&gt; 
&lt;/div&gt; 
&lt;p&gt;👾 Lux is a fast and simple video downloader built with Go.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#installation&quot;&gt;Installation&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#prerequisites&quot;&gt;Prerequisites&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#install-via-go-install&quot;&gt;Install via &lt;code&gt;go install&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#homebrew-macos-only&quot;&gt;Homebrew (macOS only)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#arch-linux&quot;&gt;Arch Linux&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#void-linux&quot;&gt;Void Linux&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#scoop-on-windows&quot;&gt;Scoop on Windows&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#chocolatey-on-windows&quot;&gt;Chocolatey on Windows&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#cask-on-windowsmacoslinux&quot;&gt;Cask on Windows/macOS/Linux&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#getting-started&quot;&gt;Getting Started&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#download-a-video&quot;&gt;Download a video&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#download-anything-else&quot;&gt;Download anything else&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#download-playlist&quot;&gt;Download playlist&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#multiple-inputs&quot;&gt;Multiple inputs&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#resume-a-download&quot;&gt;Resume a download&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#auto-retry&quot;&gt;Auto retry&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#cookies&quot;&gt;Cookies&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#proxy&quot;&gt;Proxy&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#multi-thread&quot;&gt;Multi-Thread&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#short-link&quot;&gt;Short link&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#bilibili&quot;&gt;bilibili&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#use-specified-referrer&quot;&gt;Use specified Referrer&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#specify-the-output-path-and-name&quot;&gt;Specify the output path and name&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#debug-mode&quot;&gt;Debug Mode&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#reuse-extracted-data&quot;&gt;Reuse extracted data&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#options&quot;&gt;Options&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#download&quot;&gt;Download:&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#network&quot;&gt;Network:&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#playlist&quot;&gt;Playlist:&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#filesystem&quot;&gt;Filesystem:&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#subtitle&quot;&gt;Subtitle:&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#youku&quot;&gt;Youku:&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#aria2&quot;&gt;aria2:&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#supported-sites&quot;&gt;Supported Sites&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#known-issues&quot;&gt;Known issues&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#%E4%BC%98%E9%85%B7&quot;&gt;优酷&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#%E8%A5%BF%E7%93%9C%E5%A4%B4%E6%9D%A1%E8%A7%86%E9%A2%91&quot;&gt;西瓜/头条视频&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#contributing&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#authors&quot;&gt;Authors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#similar-projects&quot;&gt;Similar projects&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/#license&quot;&gt;License&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;p&gt;The following dependencies are required and must be installed separately.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.ffmpeg.org&quot;&gt;FFmpeg&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: FFmpeg does not affect the download, only affects the final file merge.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Install via &lt;code&gt;go install&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;To install Lux, use &lt;code&gt;go install&lt;/code&gt;, or download the binary file from &lt;a href=&quot;https://github.com/iawia002/lux/releases&quot;&gt;Releases&lt;/a&gt; page.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ go install github.com/iawia002/lux@latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Homebrew (macOS only)&lt;/h3&gt; 
&lt;p&gt;For macOS users, you can install &lt;code&gt;lux&lt;/code&gt; via:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ brew install lux
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Arch Linux&lt;/h3&gt; 
&lt;p&gt;For Arch Users &lt;a href=&quot;https://aur.archlinux.org/packages/lux-dl/&quot;&gt;AUR&lt;/a&gt; package is available.&lt;/p&gt; 
&lt;h3&gt;Void Linux&lt;/h3&gt; 
&lt;p&gt;For Void linux users, you can install &lt;code&gt;lux&lt;/code&gt; via:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ xbps-install -S lux
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;a href=&quot;https://scoop.sh/&quot;&gt;Scoop&lt;/a&gt; on Windows&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;$ scoop install lux
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;a href=&quot;https://chocolatey.org/&quot;&gt;Chocolatey&lt;/a&gt; on Windows&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;$ choco install lux
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;a href=&quot;https://github.com/axetroy/cask.rs&quot;&gt;Cask&lt;/a&gt; on Windows/macOS/Linux&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;$ cask install github.com/iawia002/lux
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;Usage:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lux [OPTIONS] URL [URL...]
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Download a video&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux &quot;https://www.youtube.com/watch?v=dQw4w9WgXcQ&quot;

 Site:      YouTube youtube.com
 Title:     Rick Astley - Never Gonna Give You Up (Video)
 Type:      video
 Stream:
     [248]  -------------------
     Quality:         1080p video/webm; codecs=&quot;vp9&quot;
     Size:            63.93 MiB (67038963 Bytes)
     # download with: lux -f 248 ...

 41.88 MiB / 63.93 MiB [=================&amp;gt;-------------]  65.51% 4.22 MiB/s 00m05s
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;-i&lt;/code&gt; option displays all available quality of video without downloading.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux -i &quot;https://www.youtube.com/watch?v=dQw4w9WgXcQ&quot;

 Site:      YouTube youtube.com
 Title:     Rick Astley - Never Gonna Give You Up (Video)
 Type:      video
 Streams:   # All available quality
     [248]  -------------------
     Quality:         1080p video/webm; codecs=&quot;vp9&quot;
     Size:            49.29 MiB (51687554 Bytes)
     # download with: lux -f 248 ...

     [137]  -------------------
     Quality:         1080p video/mp4; codecs=&quot;avc1.640028&quot;
     Size:            43.45 MiB (45564306 Bytes)
     # download with: lux -f 137 ...

     [398]  -------------------
     Quality:         720p video/mp4; codecs=&quot;av01.0.05M.08&quot;
     Size:            37.12 MiB (38926432 Bytes)
     # download with: lux -f 398 ...

     [136]  -------------------
     Quality:         720p video/mp4; codecs=&quot;avc1.4d401f&quot;
     Size:            31.34 MiB (32867324 Bytes)
     # download with: lux -f 136 ...

     [247]  -------------------
     Quality:         720p video/webm; codecs=&quot;vp9&quot;
     Size:            31.03 MiB (32536181 Bytes)
     # download with: lux -f 247 ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Use &lt;code&gt;lux -f stream &quot;URL&quot;&lt;/code&gt; to download a specific stream listed in the output of &lt;code&gt;-i&lt;/code&gt; option.&lt;/p&gt; 
&lt;h3&gt;Download anything else&lt;/h3&gt; 
&lt;p&gt;If Lux is provided the URL of a specific resource, then it will be downloaded directly:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux &quot;https://img9.bcyimg.com/drawer/15294/post/1799t/1f5a87801a0711e898b12b640777720f.jpg&quot;

lux doesn&#39;t support this URL right now, but it will try to download it directly

 Site:      Universal
 Title:     1f5a87801a0711e898b12b640777720f
 Type:      image/jpeg
 Stream:
     [default]  -------------------
     Size:            1.00 MiB (1051042 Bytes)
     # download with: lux -f default &quot;URL&quot;

 1.00 MiB / 1.00 MiB [===================================] 100.00% 1.21 MiB/s 0s
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Download playlist&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;-p&lt;/code&gt; option downloads an entire playlist instead of a single video.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux -i -p &quot;https://www.bilibili.com/bangumi/play/ep198061&quot;

 Site:      哔哩哔哩 bilibili.com
 Title:     Doctor X 第四季：第一集
 Type:      video
 Streams:   # All available quality
     [default]  -------------------
     Quality:         高清 1080P
     Size:            845.66 MiB (886738354 Bytes)
     # download with: lux -f default &quot;URL&quot;


 Site:      哔哩哔哩 bilibili.com
 Title:     Doctor X 第四季：第二集
 Type:      video
 Streams:   # All available quality
     [default]  -------------------
     Quality:         高清 1080P
     Size:            930.71 MiB (975919195 Bytes)
     # download with: lux -f default &quot;URL&quot;

......
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can use the &lt;code&gt;-start&lt;/code&gt;, &lt;code&gt;-end&lt;/code&gt; or &lt;code&gt;-items&lt;/code&gt; option to specify the download range of the list:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-start
    	Playlist video to start at (default 1)
-end
    	Playlist video to end at
-items
    	Playlist video items to download. Separated by commas like: 1,5,6,8-10
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For bilibili playlists only:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-eto
  File name of each bilibili episode doesn&#39;t include the playlist title
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Multiple inputs&lt;/h3&gt; 
&lt;p&gt;You can also download multiple URLs at once:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux -i &quot;https://www.bilibili.com/video/av21877586&quot; &quot;https://www.bilibili.com/video/av21990740&quot;

 Site:      哔哩哔哩 bilibili.com
 Title:     【莓机会了】甜到虐哭的13集单集MAD「我现在什么都不想干,更不想看14集」
 Type:      video
 Streams:   # All available quality
     [default]  -------------------
     Quality:         高清 1080P
     Size:            51.88 MiB (54403767 Bytes)
     # download with: lux -f default &quot;URL&quot;


 Site:      哔哩哔哩 bilibili.com
 Title:     【莓救了】甜到虐哭！！！国家队单集MAD-当熟悉的bgm响起，眼泪从脸颊滑下
 Type:      video
 Streams:   # All available quality
     [default]  -------------------
     Quality:         高清 1080P
     Size:            77.63 MiB (81404093 Bytes)
     # download with: lux -f default &quot;URL&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;These URLs will be downloaded one by one.&lt;/p&gt; 
&lt;p&gt;You can also use the &lt;code&gt;-F&lt;/code&gt; option to read URLs from file:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux -F ~/Desktop/u.txt

 Site:      微博 weibo.com
 Title:     在Google，我们设计什么？ via@阑夕
 Type:      video
 Stream:
     [default]  -------------------
     Size:            19.19 MiB (20118196 Bytes)
     # download with: lux -f default &quot;URL&quot;

 19.19 MiB / 19.19 MiB [=================================] 100.00% 9.69 MiB/s 1s

......
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can use the &lt;code&gt;-start&lt;/code&gt;, &lt;code&gt;-end&lt;/code&gt; or &lt;code&gt;-items&lt;/code&gt; option to specify the download range of the list:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-start
    	File line to start at (default 1)
-end
    	File line to end at
-items
    	File lines to download. Separated by commas like: 1,5,6,8-10
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Resume a download&lt;/h3&gt; 
&lt;p&gt;&lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;C&lt;/kbd&gt; interrupts a download.&lt;/p&gt; 
&lt;p&gt;A temporary &lt;code&gt;.download&lt;/code&gt; file is kept in the output directory. If &lt;code&gt;lux&lt;/code&gt; is ran with the same arguments, then the download progress will resume from the last session.&lt;/p&gt; 
&lt;h3&gt;Auto retry&lt;/h3&gt; 
&lt;p&gt;lux will auto retry when the download failed, you can specify the retry times by &lt;code&gt;-retry&lt;/code&gt; option (default is 100).&lt;/p&gt; 
&lt;h3&gt;Cookies&lt;/h3&gt; 
&lt;p&gt;Cookies can be provided to &lt;code&gt;lux&lt;/code&gt; with the &lt;code&gt;-c&lt;/code&gt; option if they are required for accessing the video.&lt;/p&gt; 
&lt;p&gt;Cookies can be the following format or &lt;a href=&quot;https://curl.haxx.se/rfc/cookie_spec.html&quot;&gt;Netscape Cookie&lt;/a&gt; format:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;name=value; name2=value2; ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Cookies can be a string or a text file, supply cookies in one of the two following ways.&lt;/p&gt; 
&lt;p&gt;As a string:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux -c &quot;name=value; name2=value2&quot; &quot;https://www.bilibili.com/video/av20203945&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;As a text file:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux -c cookies.txt &quot;https://www.bilibili.com/video/av20203945&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Proxy&lt;/h3&gt; 
&lt;p&gt;You can set the HTTP/SOCKS5 proxy using environment variables:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ HTTP_PROXY=&quot;http://127.0.0.1:1087/&quot; lux -i &quot;https://www.youtube.com/watch?v=Gnbch2osEeo&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ HTTP_PROXY=&quot;socks5://127.0.0.1:1080/&quot; lux -i &quot;https://www.youtube.com/watch?v=Gnbch2osEeo&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Multi-Thread&lt;/h3&gt; 
&lt;p&gt;Use &lt;code&gt;--multi-thread&lt;/code&gt; or &lt;code&gt;-m&lt;/code&gt; multiple threads to download single video.&lt;/p&gt; 
&lt;p&gt;Use &lt;code&gt;--thread&lt;/code&gt; or &lt;code&gt;-n&lt;/code&gt; option to set the number of download threads(default is 10).&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Note: If the video has multi fragment, the number of actual download threads will increase.&lt;/p&gt; 
 &lt;p&gt;For example:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;If &lt;code&gt;-n&lt;/code&gt; is set to 10, and the video has 2 fragments, then 20 threads will actually be used.&lt;/li&gt; 
  &lt;li&gt;If the video has 20 fragments, only 10 fragments are downloaded in the same time, the actual threads count is 100.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Special Tips:&lt;/strong&gt; Use too many threads in &lt;strong&gt;mgtv&lt;/strong&gt; download will cause HTTP 403 error, we recommend setting the number of threads to &lt;strong&gt;1&lt;/strong&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Short link&lt;/h3&gt; 
&lt;h4&gt;bilibili&lt;/h4&gt; 
&lt;p&gt;You can just use &lt;code&gt;av&lt;/code&gt; or &lt;code&gt;ep&lt;/code&gt; number to download bilibili&#39;s video:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux -i ep198381 av21877586

 Site:      哔哩哔哩 bilibili.com
 Title:     狐妖小红娘：第79话 南国公主的吃货本色
 Type:      video
 Streams:   # All available quality
     [default]  -------------------
     Quality:         高清 1080P
     Size:            485.23 MiB (508798478 Bytes)
     # download with: lux -f default &quot;URL&quot;


 Site:      哔哩哔哩 bilibili.com
 Title:     【莓机会了】甜到虐哭的13集单集MAD「我现在什么都不想干,更不想看14集」
 Type:      video
 Streams:   # All available quality
     [default]  -------------------
     Quality:         高清 1080P
     Size:            51.88 MiB (54403767 Bytes)
     # download with: lux -f default &quot;URL&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Use specified Referrer&lt;/h3&gt; 
&lt;p&gt;A Referrer can be used for the request with the &lt;code&gt;-r&lt;/code&gt; option:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux -r &quot;https://www.bilibili.com/video/av20383055/&quot; &quot;http://cn-scnc1-dx.acgvideo.com/&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Specify the output path and name&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;-o&lt;/code&gt; option sets the path, and &lt;code&gt;-O&lt;/code&gt; option sets the name of the downloaded file:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux -o ../ -O &quot;hello&quot; &quot;https://example.com&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Debug Mode&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;-d&lt;/code&gt; option outputs network request messages:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux -i -d &quot;http://www.bilibili.com/video/av20088587&quot;

URL:         http://www.bilibili.com/video/av20088587
Method:      GET
Headers:     http.Header{
    &quot;Referer&quot;:         {&quot;http://www.bilibili.com/video/av20088587&quot;},
    &quot;Accept&quot;:          {&quot;text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&quot;},
    &quot;Accept-Charset&quot;:  {&quot;UTF-8,*;q=0.5&quot;},
    &quot;Accept-Encoding&quot;: {&quot;gzip,deflate,sdch&quot;},
    &quot;Accept-Language&quot;: {&quot;en-US,en;q=0.8&quot;},
    &quot;User-Agent&quot;:      {&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36&quot;},
}
Status Code: 200

URL:         https://interface.bilibili.com/v2/playurl?appkey=84956560bc028eb7&amp;amp;cid=32782944&amp;amp;otype=json&amp;amp;qn=116&amp;amp;quality=116&amp;amp;type=&amp;amp;sign=fb2e3f261fec398652f96d358517e535
Method:      GET
Headers:     http.Header{
    &quot;Accept-Charset&quot;:  {&quot;UTF-8,*;q=0.5&quot;},
    &quot;Accept-Encoding&quot;: {&quot;gzip,deflate,sdch&quot;},
    &quot;Accept-Language&quot;: {&quot;en-US,en;q=0.8&quot;},
    &quot;User-Agent&quot;:      {&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36&quot;},
    &quot;Referer&quot;:         {&quot;https://interface.bilibili.com/v2/playurl?appkey=84956560bc028eb7&amp;amp;cid=32782944&amp;amp;otype=json&amp;amp;qn=116&amp;amp;quality=116&amp;amp;type=&amp;amp;sign=fb2e3f261fec398652f96d358517e535&quot;},
    &quot;Accept&quot;:          {&quot;text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&quot;},
}
Status Code: 200

 Site:      哔哩哔哩 bilibili.com
 Title:     燃油动力的遥控奥迪R8跑赛道
 Type:      video
 Streams:   # All available quality
     [default]  -------------------
     Quality:         高清 1080P
     Size:            64.38 MiB (67504795 Bytes)
     # download with: lux -f default &quot;URL&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Reuse extracted data&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;-j&lt;/code&gt; option will print the extracted data in JSON format.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ lux -j &quot;https://www.bilibili.com/video/av20203945&quot;

{
    &quot;site&quot;: &quot;哔哩哔哩 bilibili.com&quot;,
    &quot;title&quot;: &quot;【2018拜年祭单品】相遇day by day&quot;,
    &quot;type&quot;: &quot;video&quot;,
    &quot;streams&quot;: {
        &quot;15&quot;: {
            &quot;urls&quot;: [
                {
                    &quot;url&quot;: &quot;...&quot;,
                    &quot;size&quot;: 18355205,
                    &quot;ext&quot;: &quot;flv&quot;
                }
            ],
            &quot;quality&quot;: &quot;流畅 360P&quot;,
            &quot;size&quot;: 18355205
        },
        &quot;32&quot;: {
            &quot;urls&quot;: [
                {
                    &quot;url&quot;: &quot;...&quot;,
                    &quot;size&quot;: 40058632,
                    &quot;ext&quot;: &quot;flv&quot;
                }
            ],
            &quot;quality&quot;: &quot;清晰 480P&quot;,
            &quot;size&quot;: 40058632
        },
        &quot;64&quot;: {
            &quot;urls&quot;: [
                {
                    &quot;url&quot;: &quot;...&quot;,
                    &quot;size&quot;: 82691087,
                    &quot;ext&quot;: &quot;flv&quot;
                }
            ],
            &quot;quality&quot;: &quot;高清 720P&quot;,
            &quot;size&quot;: 82691087
        },
        &quot;80&quot;: {
            &quot;urls&quot;: [
                {
                    &quot;url&quot;: &quot;...&quot;,
                    &quot;size&quot;: 121735559,
                    &quot;ext&quot;: &quot;flv&quot;
                }
            ],
            &quot;quality&quot;: &quot;高清 1080P&quot;,
            &quot;size&quot;: 121735559
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Options&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;  -i	Information only
  -F string
    	URLs file path
  -d	Debug mode
  -j	Print extracted data
  -s	Minimum outputs
  -v	Show version
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Download:&lt;/h4&gt; 
&lt;pre&gt;&lt;code&gt;  -f string
    	Select specific stream to download
  -p	Download playlist
  -n int
    	The number of download thread (only works for multiple-parts video) (default 10)
  -c string
    	Cookie
  -r string
    	Use specified Referrer
  -cs int
    	HTTP chunk size for downloading (in MB) (default 1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Network:&lt;/h4&gt; 
&lt;pre&gt;&lt;code&gt;  -retry int
    	How many times to retry when the download failed (default 10)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Playlist:&lt;/h4&gt; 
&lt;pre&gt;&lt;code&gt;  -start int
    	Playlist video to start at (default 1)
  -end int
    	Playlist video to end at
  -items string
    	Playlist video items to download. Separated by commas like: 1,5,6,8-10
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Filesystem:&lt;/h4&gt; 
&lt;pre&gt;&lt;code&gt;  -o string
    	Specify the output path
  -O string
    	Specify the output file name
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Subtitle:&lt;/h4&gt; 
&lt;pre&gt;&lt;code&gt;  -C	Download subtitles
  -C -items en,zh
    	Download specific languages (YouTube only)
  -C -items en,zh -embed 
    	Embed subtitles into the video (YouTube only)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Youku:&lt;/h4&gt; 
&lt;pre&gt;&lt;code&gt;  -ccode string
    	Youku ccode (default &quot;0502&quot;)
  -ckey string
    	Youku ckey (default &quot;7B19C0AB12633B22E7FE81271162026020570708D6CC189E4924503C49D243A0DE6CD84A766832C2C99898FC5ED31F3709BB3CDD82C96492E721BDD381735026&quot;)
  -password string
    	Youku password
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;aria2:&lt;/h4&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Note: If you use aria2 to download, you need to merge the multi-part videos yourself.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;  -aria2
    	Use Aria2 RPC to download
  -aria2addr string
    	Aria2 Address (default &quot;localhost:6800&quot;)
  -aria2method string
    	Aria2 Method (default &quot;http&quot;)
  -aria2token string
    	Aria2 RPC Token
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Supported Sites&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Site&lt;/th&gt; 
   &lt;th&gt;URL&lt;/th&gt; 
   &lt;th&gt;🎬 Videos&lt;/th&gt; 
   &lt;th&gt;🌁 Images&lt;/th&gt; 
   &lt;th&gt;🔊 Audio&lt;/th&gt; 
   &lt;th&gt;📚 Playlist&lt;/th&gt; 
   &lt;th&gt;🍪 VIP adaptation&lt;/th&gt; 
   &lt;th&gt;Build Status&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;抖音&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.douyin.com&quot;&gt;https://www.douyin.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_douyin.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_douyin.yml/badge.svg?sanitize=true&quot; alt=&quot;douyin&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;哔哩哔哩&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.bilibili.com&quot;&gt;https://www.bilibili.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_bilibili.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_bilibili.yml/badge.svg?sanitize=true&quot; alt=&quot;bilibili&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;半次元&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://bcy.net&quot;&gt;https://bcy.net&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_bcy.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_bcy.yml/badge.svg?sanitize=true&quot; alt=&quot;bcy&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;pixivision&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.pixivision.net&quot;&gt;https://www.pixivision.net&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_pixivision.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_pixivision.yml/badge.svg?sanitize=true&quot; alt=&quot;pixivision&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;优酷&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.youku.com&quot;&gt;https://www.youku.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_youku.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_youku.yml/badge.svg?sanitize=true&quot; alt=&quot;youku&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;YouTube&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.youtube.com&quot;&gt;https://www.youtube.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_youtube.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_youtube.yml/badge.svg?sanitize=true&quot; alt=&quot;youtube&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;西瓜视频（头条）&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://m.toutiao.com&quot;&gt;https://m.toutiao.com&lt;/a&gt;, &lt;a href=&quot;https://v.ixigua.com&quot;&gt;https://v.ixigua.com&lt;/a&gt;, &lt;a href=&quot;https://www.ixigua.com&quot;&gt;https://www.ixigua.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_ixigua.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_ixigua.yml/badge.svg?sanitize=true&quot; alt=&quot;ixigua&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;爱奇艺&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.iqiyi.com&quot;&gt;https://www.iqiyi.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_iqiyi.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_iqiyi.yml/badge.svg?sanitize=true&quot; alt=&quot;iqiyi&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;新片场&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.xinpianchang.com&quot;&gt;https://www.xinpianchang.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_xinpianchang.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_xinpianchang.yml/badge.svg?sanitize=true&quot; alt=&quot;xinpianchang&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;芒果 TV&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.mgtv.com&quot;&gt;https://www.mgtv.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_mgtv.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_mgtv.yml/badge.svg?sanitize=true&quot; alt=&quot;mgtv&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;糖豆广场舞&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.tangdou.com&quot;&gt;https://www.tangdou.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_tangdou.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_tangdou.yml/badge.svg?sanitize=true&quot; alt=&quot;tangdou&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Tumblr&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.tumblr.com&quot;&gt;https://www.tumblr.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_tumblr.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_tumblr.yml/badge.svg?sanitize=true&quot; alt=&quot;tumblr&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Vimeo&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://vimeo.com&quot;&gt;https://vimeo.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_vimeo.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_vimeo.yml/badge.svg?sanitize=true&quot; alt=&quot;vimeo&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Facebook&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://facebook.com&quot;&gt;https://facebook.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_facebook.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_facebook.yml/badge.svg?sanitize=true&quot; alt=&quot;facebook&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;斗鱼视频&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://v.douyu.com&quot;&gt;https://v.douyu.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_douyu.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_douyu.yml/badge.svg?sanitize=true&quot; alt=&quot;douyu&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;秒拍&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.miaopai.com&quot;&gt;https://www.miaopai.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_miaopai.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_miaopai.yml/badge.svg?sanitize=true&quot; alt=&quot;miaopai&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;微博&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://weibo.com&quot;&gt;https://weibo.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_weibo.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_weibo.yml/badge.svg?sanitize=true&quot; alt=&quot;weibo&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Instagram&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.instagram.com&quot;&gt;https://www.instagram.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_instagram.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_instagram.yml/badge.svg?sanitize=true&quot; alt=&quot;instagram&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Threads&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.threads.net&quot;&gt;https://www.threads.net&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_threads.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_threads.yml/badge.svg?sanitize=true&quot; alt=&quot;threads&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Twitter&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://twitter.com&quot;&gt;https://twitter.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_twitter.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_twitter.yml/badge.svg?sanitize=true&quot; alt=&quot;twitter&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;腾讯视频&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://v.qq.com&quot;&gt;https://v.qq.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_qq.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_qq.yml/badge.svg?sanitize=true&quot; alt=&quot;qq&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;网易云音乐&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://music.163.com&quot;&gt;https://music.163.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_netease.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_netease.yml/badge.svg?sanitize=true&quot; alt=&quot;netease&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;音悦台&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://yinyuetai.com&quot;&gt;https://yinyuetai.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_yinyuetai.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_yinyuetai.yml/badge.svg?sanitize=true&quot; alt=&quot;yinyuetai&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;极客时间&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://time.geekbang.org&quot;&gt;https://time.geekbang.org&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_geekbang.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_geekbang.yml/badge.svg?sanitize=true&quot; alt=&quot;geekbang&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Pornhub&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://pornhub.com&quot;&gt;https://pornhub.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_pornhub.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_pornhub.yml/badge.svg?sanitize=true&quot; alt=&quot;pornhub&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;XVIDEOS&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://xvideos.com&quot;&gt;https://xvideos.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_xvideos.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_xvideos.yml/badge.svg?sanitize=true&quot; alt=&quot;xvideos&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;聯合新聞網&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://udn.com&quot;&gt;https://udn.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_udn.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_udn.yml/badge.svg?sanitize=true&quot; alt=&quot;udn&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;TikTok&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.tiktok.com&quot;&gt;https://www.tiktok.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_tiktok.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_tiktok.yml/badge.svg?sanitize=true&quot; alt=&quot;tiktok&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Pinterest&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.pinterest.com&quot;&gt;https://www.pinterest.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_pinterest.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_pinterest.yml/badge.svg?sanitize=true&quot; alt=&quot;pinterest&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;好看视频&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://haokan.baidu.com&quot;&gt;https://haokan.baidu.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_haokan.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_haokan.yml/badge.svg?sanitize=true&quot; alt=&quot;haokan&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;AcFun&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.acfun.cn&quot;&gt;https://www.acfun.cn&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_acfun.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_acfun.yml/badge.svg?sanitize=true&quot; alt=&quot;acfun&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Eporner&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://eporner.com&quot;&gt;https://eporner.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_eporner.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_eporner.yml/badge.svg?sanitize=true&quot; alt=&quot;eporner&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;StreamTape&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://streamtape.com&quot;&gt;https://streamtape.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_streamtape.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_streamtape.yml/badge.svg?sanitize=true&quot; alt=&quot;streamtape&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;虎扑&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://hupu.com&quot;&gt;https://hupu.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_hupu.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_hupu.yml/badge.svg?sanitize=true&quot; alt=&quot;hupu&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;虎牙视频&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://v.huya.com&quot;&gt;https://v.huya.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_huya.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_huya.yml/badge.svg?sanitize=true&quot; alt=&quot;huya&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;喜马拉雅&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.ximalaya.com&quot;&gt;https://www.ximalaya.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_ximalaya.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_ximalaya.yml/badge.svg?sanitize=true&quot; alt=&quot;ximalaya&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;快手&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.kuaishou.com&quot;&gt;https://www.kuaishou.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_kuaishou.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_kuaishou.yml/badge.svg?sanitize=true&quot; alt=&quot;kuaishou&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Reddit&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.reddit.com&quot;&gt;https://www.reddit.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_reddit.yml&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_reddit.yml/badge.svg?sanitize=true&quot; alt=&quot;reddit&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;VKontakte&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://vk.com&quot;&gt;https://vk.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_vk.yml/&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_vk.yml/badge.svg?sanitize=true&quot; alt=&quot;vk&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;知乎&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://zhihu.com&quot;&gt;https://zhihu.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_zhihu.yml/&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_zhihu.yml/badge.svg?sanitize=true&quot; alt=&quot;zhihu&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Rumble&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://rumble.com&quot;&gt;https://rumble.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_rumble.yml/&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_rumble.yml/badge.svg?sanitize=true&quot; alt=&quot;rumble&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;小红书&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://xiaohongshu.com&quot;&gt;https://xiaohongshu.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_xiaohongshu.yml/&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_xiaohongshu.yml/badge.svg?sanitize=true&quot; alt=&quot;xiaohongshu&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Zing MP3&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://zingmp3.vn&quot;&gt;https://zingmp3.vn&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_zingmp3.yml/&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_zingmp3.yml/badge.svg?sanitize=true&quot; alt=&quot;zingmp3&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Bitchute&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.bitchute.com&quot;&gt;https://www.bitchute.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_bitchute.yml/&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_bitchute.yml/badge.svg?sanitize=true&quot; alt=&quot;bitchute&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Odysee&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://odysee.com&quot;&gt;https://odysee.com&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;✓&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/iawia002/lux/actions/workflows/stream_odysee.yml/&quot;&gt;&lt;img src=&quot;https://github.com/iawia002/lux/actions/workflows/stream_odysee.yml/badge.svg?sanitize=true&quot; alt=&quot;odysee&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Known issues&lt;/h2&gt; 
&lt;h3&gt;优酷&lt;/h3&gt; 
&lt;p&gt;优酷的 &lt;code&gt;ccode&lt;/code&gt; 经常变化导致 lux 不可用，如果你知道有新的可用的 &lt;code&gt;ccode&lt;/code&gt;，可以直接使用 &lt;code&gt;lux -ccode ...&lt;/code&gt; 而不用等待 lux 更新（当然，也欢迎你给我们提一个 Pull request 来更新默认的 &lt;code&gt;ccode&lt;/code&gt;）&lt;/p&gt; 
&lt;p&gt;最好是每次下载都附带登录过的 Cookie 以避免部分 &lt;code&gt;ccode&lt;/code&gt; 的问题&lt;/p&gt; 
&lt;h3&gt;西瓜/头条视频&lt;/h3&gt; 
&lt;p&gt;西瓜/头条视频必须带 Cookie 才能下载成功，西瓜和头条可共用西瓜视频的 Cookie，Cookie 的有效期可能较短，下载失败就更新 Cookie 尝试：&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ lux -c &quot;msToken=yoEh0-qLUq4obZ8Sfxsem_CxCo9R3NM6ViTrWaRcM1...; ttwid=1%7C...&quot; &quot;https://m.toutiao.com/is/iYbTfJ79/&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Lux is an open source project and built on the top of open-source projects. Check out the &lt;a href=&quot;https://raw.githubusercontent.com/iawia002/lux/master/CONTRIBUTING.md&quot;&gt;Contributing Guide&lt;/a&gt; to get started.&lt;/p&gt; 
&lt;h2&gt;Authors&lt;/h2&gt; 
&lt;p&gt;Code with ❤️ by &lt;a href=&quot;https://github.com/iawia002&quot;&gt;iawia002&lt;/a&gt; and lovely &lt;a href=&quot;https://github.com/iawia002/lux/graphs/contributors&quot;&gt;contributors&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Similar projects&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kkdai/youtube&quot;&gt;youtube&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rg3/youtube-dl&quot;&gt;youtube-dl&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/soimort/you-get&quot;&gt;you-get&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rylio/ytdl&quot;&gt;ytdl&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;MIT&lt;/p&gt; 
&lt;p&gt;Copyright (c) 2018-present, iawia002&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/976d20f38980a317bb09147425bae1d771416a8d66e750ba2637893fb9073562/iawia002/lux" medium="image" />
      
    </item>
    
  </channel>
</rss>
