{"id":49011084,"url":"https://github.com/omidiyanto/crustoxy","last_synced_at":"2026-05-09T19:14:31.219Z","repository":{"id":352300985,"uuid":"1214612795","full_name":"omidiyanto/crustoxy","owner":"omidiyanto","description":"Connect Claude Code to any OpenAI-compatible LLM provider. A lightning-fast Rust proxy built to unlock 24+ Providers seamlessly, cut token costs with smart edge-mocking, and guarantee zero vendor lock-in.","archived":false,"fork":false,"pushed_at":"2026-04-27T04:14:15.000Z","size":97,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-27T06:06:56.007Z","etag":null,"topics":["ai","ai-agents","claude-code","llm","openai","proxy","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/omidiyanto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-18T20:12:40.000Z","updated_at":"2026-04-27T04:00:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/omidiyanto/crustoxy","commit_stats":null,"previous_names":["omidiyanto/crustoxy"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/omidiyanto/crustoxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omidiyanto%2Fcrustoxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omidiyanto%2Fcrustoxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omidiyanto%2Fcrustoxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omidiyanto%2Fcrustoxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/omidiyanto","download_url":"https://codeload.github.com/omidiyanto/crustoxy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omidiyanto%2Fcrustoxy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32550914,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T21:31:48.061Z","status":"ssl_error","status_checked_at":"2026-05-02T21:31:46.574Z","response_time":132,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-agents","claude-code","llm","openai","proxy","rust"],"created_at":"2026-04-18T23:05:28.865Z","updated_at":"2026-05-09T19:14:31.197Z","avatar_url":"https://github.com/omidiyanto.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e🦀 Crustoxy - Route Claude Code to Any OpenAI-Compatible LLM\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"https://sonarcloud.io/summary/new_code?id=omidiyanto_crustoxy\"\u003e\n        \u003cimg src=\"https://sonarcloud.io/api/project_badges/measure?project=omidiyanto_crustoxy\u0026metric=alert_status\" alt=\"Quality Gate Status\"\u003e\n    \u003c/a\u003e\n    \u003cbr\u003e\u003cbr\u003e\n    \u003ca href=\"https://github.com/omidiyanto/crustoxy/actions/workflows/ci.yaml\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/omidiyanto/crustoxy/ci.yaml?style=for-the-badge\u0026logo=github\u0026label=Build%20%26%20Test\" alt=\"CI Status\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/omidiyanto/crustoxy/releases\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/v/release/omidiyanto/crustoxy?style=for-the-badge\u0026logo=github\u0026color=green\" alt=\"Latest Release\"\u003e\n    \u003c/a\u003e\n    \u003cbr\u003e\u003cbr\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Rust-red?style=for-the-badge\u0026logo=rust\u0026logoColor=#E57324\" alt=\"Rust\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/docker-blue.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white\" alt=\"Docker\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Claude_Code-8A2BE2?style=for-the-badge\u0026logo=anthropic\u0026logoColor=white\" alt=\"Claude\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/omidiyanto/crustoxy?style=for-the-badge\u0026color=blue\" alt=\"License\"\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"src/assets/logo.svg\" alt=\"Crustoxy Logo\"\u003e\n    \u003ch3 align=\"center\"\u003e\u003ci\u003eA blazing fast and secure single-binary Rust proxy \u003cbr\u003e empowering \u003ca href=\"https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview\"\u003eClaude Code\u003c/a\u003e with unlimited LLM models flexibility.\u003c/i\u003e\u003c/h3\u003e\n\u003c/div\u003e\n\n## **🤔 Why was Crustoxy created?**  \nThis project was built to unleash the extraordinary potential of *Claude Code*. Claude Code transcends traditional CLI coding agents due to its software architecture, which is designed as an enterprise-grade autonomous agent ecosystem rather than a simple terminal interface wrapper. Its core strength lies in agentic workflows that embed seamlessly into your local environment—capable of autonomously mapping repositories, executing terminal commands, running comprehensive test suites, and performing self-healing on errors. These functions are entirely driven by a proprietary system prompt meticulously crafted for context management optimization without demanding manual configuration.\n\nFurthermore, this tool is fortified by a robust plugin ecosystem enabling smooth integration with various third-party services. It comes wrapped in enterprise-grade security and governance features such as anti-destructive guardrails, strict access management, and high-level privacy standards. This makes it an instant, secure, and infinitely more comprehensive plug-and-play solution for industrial scale when compared to rigid open-source alternatives.\n\nThrough **Crustoxy**, this proxy bridges Claude Code's capabilities to freely interact with 24+ different LLM providers (such as OpenAI, OpenRouter, Puter, Groq, DeepSeek, Google Gemini, Ollama, etc.), liberating it from the exclusivity constraints of the Anthropic API.\n\n## 🎯 Core Features\n\n- **Blazing Fast \u0026 Lightweight**: Written in pure Rust using `axum`, boasting near-zero proxy latency and an extremely minimal memory footprint perfect for long-running daemonized processes.\n- **Anthropic ↔ OpenAI Compat API**: Automatically translates Anthropic's complex proprietary API requests (such as `messages`, `system`, `tools`, `thinking`) into standard, universally accepted OpenAI-compatible API requests. It then seamlessly streams the responses back using Anthropic's exact SSE (Server-Sent Events) formatting and event sequences.\n- **Out-of-the-box 24+ Provider Support**: Natively integrates with 24 major LLM platforms (OpenRouter, DeepSeek, Puter, Groq, Ollama, etc.) by automatically defining base URLs and mapping provider-specific quirks, driven directly by your simple `.env` configuration.\n- **Embedded Web UI Dashboard**: A beautifully designed \"Nothing OS\" style configuration panel built directly into the proxy. Manage your profiles, API keys, model mappings, and monitor live proxy health—all without restarting the server.\n- **Smart Model Auto-Routing \u0026 Fallback**: Define multiple provider/model combinations per Claude tier (`opus`, `sonnet`, `haiku`). The internal router load-balances traffic across models (Round-Robin, Random, or Least-Errors) and seamlessly falls back to the next healthy model mid-stream if a provider goes down.\n- **API Key Pooling \u0026 Rotation**: Avoid rate limits by attaching multiple API keys to a single provider. Keys are automatically cycled on each request. If a key hits a `429 Rate Limit`, it is temporarily placed on a smart cooldown and skipped until it recovers.\n- **Smart 429 Rate Limit Deflection**:\n  - Proactive algorithmic sliding window rate limiter that intelligently throttles concurrent bursts *before* provider limits are hit.\n  - Reactive blocking with customizable exponential backoff and jitter retries when an HTTP `429` is eventually encountered.\n- **RTK Token Optimization (System Prompt Compact)**: Automatically compacts Claude Code's notoriously large system prompts (often 4,000+ tokens) into a concise, factual RTK-style format (as low as 200–300 tokens) by extracting essential metadata (workspace, platform, OS) and discarding boilerplate. Saves significant token budget on every turn. Optional full override via `OVERRIDE_SYSTEM_PROMPT`.\n- **Automated IP Rotation (Anti-WAF Shield)**: Actively communicates with a localized `warp-svc` daemon to automatically trigger `warp-cli` disconnection and registration renewal sequences, rotating your public Cloudflare WARP IPv4/IPv6 if all passive rate-limit retries fail to bypass IP-based blocks.\n- **Zero-Latency Agentic Mocking**: Intercepts expensive internal Claude Code workspace telemetry calls (such as Quota probing, conversation title generation, and OS filepath constraint extraction) and mocks the responses instantly on the edge, bypassing wasteful API roundtrips and heavily saving token costs.\n- **Advanced Think \u0026 Thought Tag Extraction**: Stateful stream parsing that intercepts inline deep-reasoning tags (`\u003cthink\u003e...` or `\u003cthought\u003e...`) emitted by Open-Weights models on-the-fly, safely relocating their contents into pure, native Anthropic `thinking` blocks without interrupting the main text stream.\n- **Heuristic Tool Parser Fallback**: A two-tiered safety net that statically heals structurally malformed/garbled JSON tool schemas, and dynamically detects raw text tool calls (e.g., `\u003cfunction=Name\u003e\u003cparameter=key\u003evalue\u003c/parameter\u003e`) natively emitted by Open-Weights models. It parses their geometry on-the-fly and accurately converts them into valid Anthropic structured JSON tool call events.\n- **Intelligent Auto-Retry Pipeline**: A self-healing SSE streaming architecture that detects tool-calling intent in plain text responses and automatically triggers an internal corrective retry, keeping the connection open and preventing Claude Code from stalling.\n- **Synchronous Non-Streaming Fallback**: Graceful handling of standard `stream: false` requests, securely decoding raw text/tool calls back into Anthropic `MessagesResponse` format.\n- **IDE Extension Compatibility**: Plug-and-play compatibility with both the official `Claude Code for VS Code` extension as well as the robust `Google Antigravity` IDE assistant workflow.\n\n---\n\n## 🚀 Quick Start\n\n### 1. Prerequisites (For Native Setup)\n\nEnsure you have **Rust** and **Cargo** installed globally. \nIf you plan to use `ENABLE_IP_ROTATION=true` natively (without Docker), you **must** install Cloudflare WARP (`warp-cli`):\n\n**Ubuntu / Debian Installation:**\n```bash\n# Add cloudflare gpg key\ncurl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg\n# Add repo\necho \"deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main\" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list\n# Install\nsudo apt-get update \u0026\u0026 sudo apt-get install cloudflare-warp\n```\n\n### 2. Clone \u0026 Configure\n   ```bash\n   git clone https://github.com/omidiyanto/crustoxy.git\n   cd crustoxy\n   cp .env.example .env\n   ```\n   *Note: `.env` is now strictly for deployment variables (`HOST`, `PORT`, `ANTHROPIC_AUTH_TOKEN`). All proxy configuration is done through the Web UI.*\n\n3. **Build \u0026 Run Locally**\n   ```bash\n   cargo build --release\n   ./target/release/crustoxy\n   ```\n   *The server will start on `http://127.0.0.1:8082`*.\n\n4. **First-Time Setup (Web Dashboard)**\n   Open your browser and navigate to:\n   **`http://127.0.0.1:8082/ui`**\n   \n   Configure your proxy via the **Nothing OS-styled dashboard**:\n   - Add multiple API keys per provider (automatically pooled and rotated).\n   - Configure model routing per Claude tier (`opus`, `sonnet`, `haiku`).\n   - Toggle features like IP Rotation and RTK Prompt Compact.\n   - Click \"Save \u0026 Apply\" to hot-reload the proxy instantly.\n\n5. **Connect Claude Code via CLI**\n   Set the API URL for your local Claude Code terminal session:\n   ```bash\n   export ANTHROPIC_AUTH_TOKEN=\"sk-ant-dummy\"\n   export ANTHROPIC_BASE_URL=\"http://127.0.0.1:8082\"\n   claude\n   ```\n\n   **Make it persistent in `~/.bashrc`:**\n   To automatically apply these variables every time you open a terminal, append them to your `~/.bashrc` (or `~/.zshrc`):\n   ```bash\n   echo 'export ANTHROPIC_AUTH_TOKEN=\"sk-ant-dummy\"' \u003e\u003e ~/.bashrc\n   echo 'export ANTHROPIC_BASE_URL=\"http://127.0.0.1:8082\"' \u003e\u003e ~/.bashrc\n   source ~/.bashrc\n   ```\n\n5. **Connect via Claude Code VS Code Extension**\n   Crustoxy is fully compatible with the official Claude Code VS Code extension. To configure it via the raw settings file:\n   1. Open the Extensions tab in VS Code and search for **Claude Code for VS Code**.\n   2. Click the gear (`⚙️`) icon on the extension page and select **Extension Settings**.\n   3. Find **Claude Code: Environment Variables** and click the hyperlink **\"Edit in settings.json\"**.\n   4. Map your proxy values by inserting the JSON array like this example:\n      ```json\n      \"claudeCode.environmentVariables\": [\n          {\n              \"name\": \"ANTHROPIC_BASE_URL\",\n              \"value\": \"http://127.0.0.1:8082\"\n          },\n          {\n              \"name\": \"ANTHROPIC_AUTH_TOKEN\",\n              \"value\": \"sk-ant-dummy\"\n          }\n      ]\n      ```\n   5. Save the file and restart your IDE for the connection to apply.\n\n---\n\n## 🐳 Docker Deployment\n\nThe project includes a `docker-compose.yaml` to spin up the Rust binary on an ultra-slim Debian runtime pre-installed with `warp-cli` for automated IP rotation.\n\n```bash\n# 1. Edit .env and tweak docker-compose if necessary\n# 2. Start the service\ndocker-compose up -d --build\n\n# Note: For Kimi OAuth interactive login, attach to the container:\n# docker attach crustoxy\ndocker-compose logs -f\n```\n\n---\n\n## ⚙️ Configuration Parameters\n\nYou can fine-tune Crustoxy to fit your exact infrastructure requirements via the **Web UI Dashboard** (which saves to `~/.config/crustoxy/config.toml`). Below are the key configurations and what they govern:\n\n### 1. Server Configuration\n- `HOST` *(default: `0.0.0.0`)*: The network interface the proxy runs on.\n- `PORT` *(default: `8082`)*: The port the proxy listens on.\n- `ANTHROPIC_AUTH_TOKEN`: Optional. Defines an arbitrary static Bearer token used to secure Crustoxy. If filled, Claude Code CLI must use the matching value in its `ANTHROPIC_AUTH_TOKEN` environment variable. Leave blank for no auth.\n\n### 2. Model Mapping\nClaude Code inherently delegates tasks between `opus`, `sonnet`, and `haiku` models implicitly. Crustoxy redirects these to the models of your choosing:\n- `MODEL_OPUS` / `MODEL_SONNET` / `MODEL_HAIKU`: Format using `provider_id/model_id` (e.g., `groq/llama3-8b-8192`).\n- `MODEL`: The fallback unified model router if a specific subset isn't defined.\n\n### 3. Routing \u0026 Load Balancing Strategies\nWhen configuring multiple models per tier or multiple API keys per provider (separated by newlines in the Web UI), Crustoxy uses your chosen routing strategy to distribute the load:\n- **Round Robin** (`round_robin`): Iterates sequentially through the list of available keys or models. Ensures an even and predictable distribution of requests.\n- **Least Errors** (`least_errors`): Dynamically tracks failure rates and selects the key or model with the lowest historical error count, maximizing overall reliability.\n- **Random** (`random`): Randomly selects an available key or model for each request.\n\n*(Note: If a key hits its rate limit or consecutive error threshold, it is automatically placed on a temporary cooldown before rejoining the active pool).*\n\n### 4. Rate Limiting \u0026 Concurrency\nCrustoxy employs algorithmic Sliding Window limits to prevent your account from hitting provider throttles too aggressively.\n- `PROVIDER_RATE_LIMIT` *(default: `40`)*: The amount of requests allowed during the window.\n- `PROVIDER_RATE_WINDOW` *(default: `60`)*: The timeframe in seconds where the rate limit applies.\n- `PROVIDER_MAX_CONCURRENCY` *(default: `5`)*: Hard caps how many simultaneous HTTP requests can be inflight to the provider. Any excess requests will cleanly wait in queue.\n\n### 5. HTTP Settings\n- `HTTP_READ_TIMEOUT` *(default: `300`)*: Max time in seconds to keep a stream connection alive while waiting for inference tokens. High values are recommended for deep reasoning models.\n- `HTTP_CONNECT_TIMEOUT` *(default: `10`)*: Max time in seconds allowed to establish the initial HTTP handshake with a provider.\n\n### 6. IP Rotation\n- `ENABLE_IP_ROTATION` *(default: `true`)*: If set to true, seamlessly communicates with `warp-cli` to switch IP allocations when a provider enforces persistent IP-based `429` blocks. (Requires Cloudflare WARP daemon).\n\n### 7. RTK System Prompt Optimization\n- `ENABLE_RTK` *(default: `true`)*: When enabled, Claude Code's massive default system prompt (4,000–8,000 tokens) is automatically compacted into a concise RTK-style factual summary (200–300 tokens). Essential metadata (workspace path, OS platform, OS version) is preserved; repetitive instructional boilerplate is stripped.\n- `OVERRIDE_SYSTEM_PROMPT`: Leave blank to use RTK-compacted prompt. Set to any text string to fully replace the system prompt sent to the provider, bypassing both the original and the RTK-compacted version.\n\n### 8. Optimizations \u0026 Safety Nets\n- `ENABLE_NETWORK_PROBE_MOCK` / `ENABLE_TITLE_GENERATION_SKIP` / `ENABLE_SUGGESTION_MODE_SKIP` / `ENABLE_FILEPATH_EXTRACTION_MOCK`: Set to `true` to intercept internal telemetry and UI-aesthetic requests heavily spammed by Claude Code. Crustoxy mocks perfect responses instantly, slashing your API token costs heavily.\n- `ENABLE_TOOL_RETRY` *(default: `true`)*: Activates the active Auto-Retry Pipeline. When set to true, if a model writes sentences indicating it wants to use a tool (e.g. \"Let me run a command\") but fails to actually output the structured tool JSON, Crustoxy will silently push the context back and force the model to retry.\n- `TOOL_RETRY_MAX` *(default: `2`)*: The maximum amount of times Crustoxy is allowed to automatically retry the provider per single user prompt.\n\n---\n\n## Supported Built-in Providers\n\nNo need to figure out endpoint definitions. Just enter your API keys into the Web UI for any of the below. Multiple keys are supported per provider for automatic load balancing.\n\n| Provider | Built-in Base URL |\n| :--- | :--- |\n| **Puter.com** | `https://api.puter.com/drivers/call` |\n| **OpenAI** | `https://api.openai.com/v1` |\n| **OpenRouter** | `https://openrouter.ai/api/v1` |\n| **Groq** | `https://api.groq.com/openai/v1` |\n| **DeepSeek** | `https://api.deepseek.com/v1` |\n| **Google Gemini** | `https://generativelanguage.googleapis.com/v1beta/openai` |\n| **Together AI** | `https://api.together.xyz/v1` |\n| **Hugging Face** | `https://router.huggingface.co/v1` |\n| **Mistral AI** | `https://api.mistral.ai/v1` |\n| **Perplexity** | `https://api.perplexity.ai` |\n| **Fireworks AI** | `https://api.fireworks.ai/inference/v1` |\n| **DeepInfra** | `https://api.deepinfra.com/v1/openai` |\n| **Ollama** | `http://localhost:11434/v1` |\n| **Kimi OAuth** | `https://api.kimi.com/coding/v1` |\n| **SumoPod** | `https://ai.sumopod.com/v1` |\n| **Cloudflare AI** | `https://api.cloudflare.com/client/v4/accounts` |\n| *...and 10+ more local/cloud services!* | |\n\n*If you need to use a custom provider, simply override the Base URL in the Web UI Settings tab.*\n\n---\n\n## 🔄 WARP IP Rotation Mode\n\nWhen `ENABLE_IP_ROTATION=true` in `.env`, the router will actively communicate with a local Cloudflare WARP daemon. \nIf an API provider throws a `429 Too Many Requests` error and all internal exponential retries fail, it triggers a thread-safe native sequence to:\n1. `warp-cli disconnect`\n2. `warp-cli registration delete`\n3. `warp-cli registration new`\n4. `warp-cli connect`\n\nThis essentially rotates the outgoing IPv4/IPv6 without breaking the proxy pipeline, seamlessly bypassing IP-based rate limiting configurations set by providers.\n\n\u003e [!WARNING]\n\u003e **Limitations:** This IP Rotation **does not guarantee 100% success**. Cloudflare WARP uses a globally shared pool of public IPs. Frequently, these WARP IP ranges are flagged or outright blocked by various Cloud Providers and Web Application Firewalls (WAF) due to suspected *scraping bot* activity.\n\u003e \n\u003e **Why is this feature still important?** Even though it isn't a *silver bullet*, this passive IP rotation mechanism fundamentally **extends your Session duration significantly**. Rather than having *Claude Code* permanently halt upon hitting its first *rate limit*, this feature gives the proxy a chance to \"breathe\" with a refreshed identity. It minimizes downtime during long, automated task executions and saves you from having to manually restart the agent.\n\n---\n\n## 🤝 How To Contribute\nWe highly encourage contributions to Crustoxy to make the routing more scalable or add optimizations to new providers. Here is how you can contribute:\n\n1. **Fork the Repository**: Start by forking the project on GitHub and cloning it to your local development environment.\n2. **Create a Feature Branch**: Branch off from `main` (e.g., `git checkout -b feature/add-new-provider`).\n3. **Write Clear Code**: Ensure any new features are thoroughly documented and follow the existing architecture in `src/`.\n4. **Run CI/CD Checks Locally**: Before submitting your request, please ensure your changes pass our structural guidelines:\n   - Format the code: `cargo fmt`\n   - Run the linter: `cargo clippy -- -Dwarnings`\n   - Pass existing unit tests: `cargo test`\n5. **Submit a Pull Request**: Push your branch to GitHub and open a detailed Pull Request explaining your changes and optimizations.\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomidiyanto%2Fcrustoxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fomidiyanto%2Fcrustoxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomidiyanto%2Fcrustoxy/lists"}