[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80603":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":13,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":13,"lastSyncTime":28,"discoverSource":29},80603,"CrossLink","HotRiceNoodles\u002FCrossLink","HotRiceNoodles","Unified large model proxy gateway, providing load balancing, fault transfer, current limiting, budget management, content auditing, caching, and MCP gateway capabilities.",null,"Go",152,4,2,1,0,20,91,9,2.1,"Apache License 2.0",false,"main",true,[],"2026-06-12 02:04:04","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"imgs\u002FCrossLinkBanner.png\" alt=\"CrossLink Banner\">\n\n\u003Cbr\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGo-1.22+-00ADD8?style=for-the-badge&logo=go\" alt=\"Go Version\">\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache%202.0-blue?style=for-the-badge\" alt=\"License\">\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-Welcome-brightgreen?style=for-the-badge\" alt=\"PRs Welcome\">\n\n\u003Cbr\u002F>\n\u003Cbr\u002F>\n\n# CrossLink\n\n### One Gateway. Every Model. Zero Lock-in.\n\n**OpenAI & Anthropic Compatible LLM API Gateway**\n\n[English](#quick-start) | [中文](README_zh.md)\n\nUnified proxy with intelligent routing, automatic failover, protocol translation,\nrate limiting, caching, MCP gateway, and a built-in admin dashboard.\n\n[Get Started](#quick-start) · [Features](#features) · [Architecture](#architecture) · [API Docs](#api-endpoints) · [Contributing](CONTRIBUTING.md)\n\n\u003C\u002Fdiv>\n\n---\n\n## Why CrossLink?\n\nEvery LLM provider has a different API format, auth mechanism, and feature set.\nAdapting your code for each one is tedious, error-prone, and locks you in.\n\nCrossLink solves this by acting as a **universal adapter** between your application and\nany LLM provider:\n\n- **One endpoint** — Your code talks to a single API in either OpenAI or Anthropic format\n- **Any provider** — Requests are routed to OpenAI, Anthropic, Azure, DeepSeek, Qwen,\n  Ollama, or any OpenAI-compatible service\n- **Automatic translation** — Full bidirectional protocol conversion including streaming SSE,\n  tool use, and extended thinking\n- **Resilient by default** — Circuit breakers, fallback chains, and retry policies keep your\n  application running when providers don't\n\n---\n\n## Features\n\n### Core Gateway\n\n- **Dual Protocol** — Exposes both `\u002Fv1\u002Fchat\u002Fcompletions` (OpenAI) and `\u002Fv1\u002Fmessages` (Anthropic)\n  endpoints with automatic bidirectional translation\n- **Multi-Provider** — Route to OpenAI, Anthropic, Azure OpenAI, DeepSeek, Qwen, Moonshot, Ollama,\n  and any OpenAI-compatible provider\n- **Intelligent Routing** — 6 strategies: weighted random, round-robin, least latency, least cost,\n  least busy, and canary deployment\n- **Automatic Failover** — Multi-provider fallback chains with circuit breakers, configurable retry\n  policies (exponential\u002Ffixed\u002Flinear backoff), and error classification\n- **Response Caching** — Redis-based caching with per-model TTL, gzip compression, and\n  cache key isolation per user\n\n### Security & Control\n\n- **Rate Limiting** — Per-key RPM\u002FTPM limits with global concurrency control (2000)\n- **RBAC** — Role-based access control for providers, models, API keys, and MCP\n- **Budget Management** — Per-key and per-team budget limits with automatic circuit breaking\n- **Guardrails** — Content safety engine framework with configurable rules and actions\n- **Crypto Flexibility** — Standard (SHA-256\u002FRSA\u002FAES) or Chinese national cryptography (SM3\u002FSM2\u002FSM4)\n\n### Observability\n\n- **Usage Analytics** — Token usage, cost tracking, latency metrics, cache hit rates, and\n  fallback\u002Fretry counts per request\n- **Prometheus Metrics** — Built-in metrics endpoint for monitoring\n- **OpenTelemetry** — Distributed tracing support\n- **Structured Logging** — JSON logging with request context\n\n### MCP Gateway\n\n- **Model Context Protocol** — HTTP\u002FSSE transport, tool discovery with caching, health checks\n- **Permission Management** — Per-principal tool access control (allow\u002Fdeny by key, team, or role)\n- **Call Logging** — Comprehensive tool call logging with monthly partitioning and auto-cleanup\n\n### Operations\n\n- **Vue 3 Admin Dashboard** — Built-in web UI for providers, models, keys, usage, and MCP\n  management ([CrossLink-UI-Standard](https:\u002F\u002Fgithub.com\u002FHotRiceNoodles\u002FCrossLink-UI-Standard))\n- **Multi-Instance** — Redis Pub\u002FSub for provider registry sync and distributed round-robin\n- **Graceful Shutdown** — 4-phase drain: in-flight SSE streams → HTTP shutdown → worker flush →\n  background goroutine cancellation\n- **One-Command Deploy** — Docker Compose spins up gateway, frontend, PostgreSQL, and Redis in one command\n\n---\n\n## Architecture\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"imgs\u002FArchitecture.png\" alt=\"CrossLink Architecture\" width=\"720\">\n\u003C\u002Fp>\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- Go 1.22+ (building from source)\n- PostgreSQL 14+\n- Redis 7+\n\n### Docker Compose (Recommended)\n\nFrontend ([CrossLink-UI-Standard](https:\u002F\u002Fgithub.com\u002FHotRiceNoodles\u002FCrossLink-UI-Standard)) and backend are built together. One command starts everything:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FHotRiceNoodles\u002FCrossLink.git\ncd CrossLink\ndocker compose -f deployments\u002Fdocker-compose.dev.yaml up --build\n```\n\nFrontend dashboard and API gateway are available at `http:\u002F\u002Flocalhost` (port 80).\n\n> **China network?** Use `docker compose -f deployments\u002Fdocker-compose.cn.yaml up --build` with Go and npm mirrors pre-configured.\n\n### Build from Source\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FHotRiceNoodles\u002FCrossLink.git\ncd CrossLink\ncp configs\u002Fconfig.example.yaml configs\u002Fconfig.yaml\n# Edit config.yaml with your database and Redis settings\nmake build\n.\u002Fbin\u002Fcrosslink\n```\n\n### Make Your First Request\n\nCreate an API key via the admin dashboard (`http:\u002F\u002Flocalhost:8080`), then:\n\n**OpenAI SDK (Python)**\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    base_url=\"http:\u002F\u002Flocalhost:8080\u002Fv1\",\n    api_key=\"cl-your-api-key\"\n)\n\nresponse = client.chat.completions.create(\n    model=\"deepseek-chat\",\n    messages=[{\"role\": \"user\", \"content\": \"Hello!\"}]\n)\nprint(response.choices[0].message.content)\n```\n\n**Anthropic SDK (Python)**\n\n```python\nimport anthropic\n\nclient = anthropic.Anthropic(\n    base_url=\"http:\u002F\u002Flocalhost:8080\",\n    api_key=\"cl-your-api-key\"\n)\n\nmessage = client.messages.create(\n    model=\"claude-sonnet-4-20250514\",\n    max_tokens=1024,\n    messages=[{\"role\": \"user\", \"content\": \"Hello!\"}]\n)\nprint(message.content[0].text)\n```\n\n**curl**\n\n```bash\ncurl http:\u002F\u002Flocalhost:8080\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Authorization: Bearer cl-your-api-key\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"deepseek-chat\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}]\n  }'\n```\n\n---\n\n## Configuration\n\nAll configuration lives in `configs\u002Fconfig.yaml`. Every value can be overridden with\nenvironment variables using the `CL_` prefix (e.g., `CL_DATABASE_HOST`, `CL_REDIS_PORT`).\n\n```yaml\nserver:\n  port: 8080\n  read_timeout: 30s\n  write_timeout: 120s\n\ndatabase:\n  host: localhost\n  port: 5432\n  user: crosslink\n  password: crosslink\n  dbname: crosslink\n  sslmode: disable\n\nredis:\n  host: localhost\n  port: 6379\n\ngateway:\n  auth_key: \"cl-change-me\"\n\nadmin:\n  username: admin\n  password: changeme\n  jwt_secret: \"change-me-to-a-random-secret\"\n\ncache:\n  enabled: true\n  default_ttl: 5m\n\nmcp:\n  enabled: true\n  health_check_interval: 30s\n\ncrypto:\n  mode: standard    # standard (SHA-256\u002FRSA\u002FAES) or gm (SM3\u002FSM2\u002FSM4)\n```\n\n### Provider Seeding\n\nProviders are seeded from `configs\u002Fproviders.yaml` on first run:\n\n```yaml\nproviders:\n  - name: deepseek\n    adapter_type: openai_compatible\n    base_url: https:\u002F\u002Fapi.deepseek.com\u002Fv1\n    api_key: ${DEEPSEEK_API_KEY}\n    models:\n      - name: deepseek-chat\n        provider_model: deepseek-chat\n```\n\n---\n\n## API Endpoints\n\n### Gateway (API Key Required)\n\n| Method | Path | Description |\n|--------|------|-------------|\n| `POST` | `\u002Fv1\u002Fchat\u002Fcompletions` | OpenAI-compatible chat (stream & non-stream) |\n| `POST` | `\u002Fv1\u002Fmessages` | Anthropic-compatible messages (stream & non-stream) |\n| `GET` | `\u002Fv1\u002Fmodels` | List available models |\n\n### MCP Gateway\n\n| Method | Path | Description |\n|--------|------|-------------|\n| `POST` | `\u002Fmcp\u002F:server` | MCP JSON-RPC forwarding |\n| `GET` | `\u002Fmcp\u002F:server` | MCP SSE transport |\n\n### Admin (JWT Required)\n\n| Method | Path | Description |\n|--------|------|-------------|\n| `POST` | `\u002Fadmin\u002Fapi\u002Fauth\u002Flogin` | Login |\n| `CRUD` | `\u002Fadmin\u002Fapi\u002Fproviders` | Provider management (test via `POST \u002F:id\u002Ftest`) |\n| `CRUD` | `\u002Fadmin\u002Fapi\u002Fmodels` | Model mapping management |\n| `CRUD` | `\u002Fadmin\u002Fapi\u002Fkeys` | API key management (regenerate via `POST \u002F:id\u002Fregenerate`) |\n| `GET` | `\u002Fadmin\u002Fapi\u002Fusage` | Usage logs with multi-dimensional filtering |\n| `GET` | `\u002Fadmin\u002Fapi\u002Fusage\u002Fstats` | Usage statistics |\n| `GET` | `\u002Fadmin\u002Fapi\u002Fusage\u002Fdaily` | Daily usage trends |\n| `CRUD` | `\u002Fadmin\u002Fapi\u002Fmcp\u002Fservers` | MCP server management |\n| `GET` | `\u002Fadmin\u002Fapi\u002Fmcp\u002Fservers\u002F:id\u002Ftools` | List tools on MCP server |\n\nFull API reference is available in the [documentation](docs\u002F).\n\n---\n\n## Deployment\n\n### Production Docker Compose\n\n```bash\ndocker compose -f deployments\u002Fdocker-compose.prod.yaml up -d --build\n```\n\n### China Network\n\nUse the CN variant with Go proxy (`goproxy.cn`) and npm mirror (`registry.npmmirror.com`):\n\n```bash\ndocker compose -f deployments\u002Fdocker-compose.cn.yaml up --build\n```\n\n### Nginx\n\nProduction-ready Nginx config with TLS, security headers, and SSE streaming support:\n`deployments\u002Fnginx\u002Fcrosslink.conf`\n\n### Systemd\n\n```bash\nsudo cp deployments\u002Fsystemd\u002Fcrosslink.service \u002Fetc\u002Fsystemd\u002Fsystem\u002F\nsudo systemctl enable --now crosslink\n```\n\n### GM (Chinese National Cryptography)\n\nFor SM2\u002FSM3\u002FSM4 compliance, a dedicated deployment with GmSSL\u002FNginx and TLCP protocol\nsupport is available at `deployments\u002Fgm\u002F`.\n\n---\n\n## Contributing\n\nWe welcome contributions of all sizes — bug fixes, features, docs, or ideas.\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature\u002Fmy-feature`)\n3. Commit your changes (`git commit -m 'Add some feature'`)\n4. Push to the branch (`git push origin feature\u002Fmy-feature`)\n5. Open a Pull Request\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.\n\n### Development\n\n```bash\nmake build          # Build binary (bin\u002Fcrosslink)\nmake run            # Run the server\nmake test           # Run all tests\nmake lint           # Run golangci-lint\nmake clean          # Remove build artifacts\n```\n\n---\n\n## Security\n\nSee [SECURITY.md](SECURITY.md) for our security policy and vulnerability reporting instructions.\n\n---\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=HotRiceNoodles\u002FCrossLink&type=Date)](https:\u002F\u002Fstar-history.com\u002F#HotRiceNoodles\u002FCrossLink&Date)\n\n---\n\n## License\n\n[Apache License 2.0](LICENSE)\n","CrossLink 是一个统一的大模型代理网关，提供负载均衡、故障转移、限流、预算管理、内容审核、缓存和MCP网关功能。该项目采用Go语言开发，支持多种协议转换，包括OpenAI和Anthropic格式的自动双向翻译，并能智能路由到多个大模型提供商如OpenAI、Anthropic、Azure OpenAI等。它还具备自动故障恢复机制，通过断路器和重试策略确保服务稳定；同时，基于Redis的响应缓存提高了性能。此外，CrossLink提供了丰富的安全与控制特性，如速率限制、基于角色的访问控制、预算管理和内容安全引擎。适用于需要跨不同大模型提供商进行API调用且希望减少代码适配工作量的应用场景。","2026-06-11 04:01:21","CREATED_QUERY"]