{"id":18926395,"url":"https://github.com/plabayo/rama","last_synced_at":"2026-10-19T14:35:13.578Z","repository":{"id":59777875,"uuid":"522327873","full_name":"plabayo/rama","owner":"plabayo","description":"modular service framework to move and transform network packets","archived":false,"fork":false,"pushed_at":"2026-10-12T08:29:32.000Z","size":56121,"stargazers_count":1237,"open_issues_count":60,"forks_count":107,"subscribers_count":10,"default_branch":"main","last_synced_at":"2026-10-12T09:29:10.184Z","etag":null,"topics":["http","https","mitm","network","network-programming","networking","proxy","rust","scraping","tls"],"latest_commit_sha":null,"homepage":"https://ramaproxy.org","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/plabayo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"github":"plabayo","buy_me_a_coffee":"plabayo","custom":["https://www.paypal.com/donate/?hosted_button_id=P3KCGT2ACBVFE","https://plabayo.threadless.com/"]}},"created_at":"2022-08-07T21:24:56.000Z","updated_at":"2026-10-12T08:29:38.000Z","dependencies_parsed_at":"2026-09-25T11:19:59.423Z","dependency_job_id":null,"html_url":"https://github.com/plabayo/rama","commit_stats":null,"previous_names":["plabayo/llama"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/plabayo/rama","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plabayo%2Frama","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plabayo%2Frama/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plabayo%2Frama/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plabayo%2Frama/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plabayo","download_url":"https://codeload.github.com/plabayo/rama/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plabayo%2Frama/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38358112,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["http","https","mitm","network","network-programming","networking","proxy","rust","scraping","tls"],"created_at":"2024-11-08T11:16:07.371Z","updated_at":"2026-10-19T14:35:13.570Z","avatar_url":"https://github.com/plabayo.png","language":"Rust","funding_links":["https://github.com/sponsors/plabayo","https://buymeacoffee.com/plabayo","https://www.paypal.com/donate/?hosted_button_id=P3KCGT2ACBVFE","https://plabayo.threadless.com/","https://www.buymeacoffee.com/plabayo"],"categories":["Rust","Applications","Recently Updated"],"sub_categories":["Web Servers","[Apr 03, 2025](/content/2025/04/03/README.md)"],"readme":"[![rama banner](./docs/img/rama_banner.jpeg)](https://ramaproxy.org/)\n\n[![Crates.io][crates-badge]][crates-url]\n[![Docs.rs][docs-badge]][docs-url]\n[![MIT License][license-mit-badge]][license-mit-url]\n[![Apache 2.0 License][license-apache-badge]][license-apache-url]\n[![rust version][rust-version-badge]][rust-version-url]\n[![Build Status][actions-badge]][actions-url]\n[![Lines of Code][loc-badge]][loc-url]\n\n[crates-badge]: https://img.shields.io/crates/v/rama.svg\n[crates-url]: https://crates.io/crates/rama\n[docs-badge]: https://img.shields.io/docsrs/rama/latest\n[docs-url]: https://docs.rs/rama/latest/rama/index.html\n[license-mit-badge]: https://img.shields.io/badge/license-MIT-blue.svg\n[license-mit-url]: https://github.com/plabayo/rama/blob/main/LICENSE-MIT\n[license-apache-badge]: https://img.shields.io/badge/license-APACHE-blue.svg\n[license-apache-url]: https://github.com/plabayo/rama/blob/main/LICENSE-APACHE\n[rust-version-badge]: https://img.shields.io/badge/rustc-1.96+-blue?style=flat-square\u0026logo=rust\n[rust-version-url]: https://www.rust-lang.org\n[actions-badge]: https://github.com/plabayo/rama/actions/workflows/CI-status.yml/badge.svg?branch=main\n[actions-url]: https://github.com/plabayo/rama/actions/workflows/CI.yml\n[loc-badge]: https://img.shields.io/endpoint?url=https://ghloc.vercel.app/api/plabayo/rama/badge?filter=.rs,.swift,.c,.h$\u0026style=flat\u0026logoColor=white\u0026label=LoC\n[loc-url]: https://github.com/plabayo/rama\n\n[discord-badge]: https://img.shields.io/badge/Discord-%235865F2.svg?style=for-the-badge\u0026logo=discord\u0026logoColor=white\n[discord-url]: https://discord.gg/29EetaSYCD\n[bmac-badge]: https://img.shields.io/badge/Buy%20Me%20a%20Coffee-ffdd00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=black\n[bmac-url]: https://www.buymeacoffee.com/plabayo\n[ghs-badge]: https://img.shields.io/badge/sponsor-30363D?style=for-the-badge\u0026logo=GitHub-Sponsors\u0026logoColor=#EA4AAA\n[ghs-url]: https://github.com/sponsors/plabayo\n[paypal-badge]: https://img.shields.io/badge/paypal-contribution?style=for-the-badge\u0026color=blue\n[paypal-url]: https://www.paypal.com/donate/?hosted_button_id=P3KCGT2ACBVFE\n\n🦙 rama® (ラマ) is a modular service framework for the 🦀 Rust language\nthat provides a cohesive foundation for building network clients,\nservers, proxies, and combinations thereof.\n\nThe framework is intentionally explicit. Your network stack is built from services,\nlayers, transports, protocols, and state that you compose yourself. That makes\nthe shape of the system visible in the code, instead of hidden behind framework\nmagic or configuration.\n\nThis makes Rama a good fit not only for proxies, but for network services where\nthe stack itself matters: how traffic enters, how it is decoded, where state\nlives, what gets inspected, what gets transformed, and where it goes next.\n\nWhether you're inspecting traffic for security analysis, writing a web service,\nemulating clients with custom user agents, controlling connection behavior for\nadvanced testing, or building high-performance proxies, Rama provides a clean\nand composable [Tokio](https://tokio.rs/)-native foundation for network services\nin Rust.\n\nRama is used in production for network security, data extraction, API gateways,\nrouting, and other networked systems. Commercial support and partner offerings\nare available at [ramaproxy.com](https://ramaproxy.com).\n\n\u003e This framework is developed and maintained by [Plabayo](https://plabayo.tech),\n\u003e a European software studio based in Gent, Belgium, focused on building resilient,\n\u003e interoperable, and secure digital infrastructure.\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource\n      media=\"(prefers-color-scheme: dark)\"\n      srcset=\"docs/img/rama-dark.gif\"\u003e\n    \u003cimg\n      alt=\"rama — modular service framework to move and transform network packets\"\n      src=\"docs/img/rama-light.gif\"\n      width=\"720\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n## Start here\n\nThe book explains the ideas, the examples show working stacks, and the Rust docs\nare the API reference.\n\n| If you want to... | Go here |\n|---|---|\n| Understand why Rama exists | [Why Rama](https://ramaproxy.org/book/why_rama.html) |\n| Learn the core model | [Intro to Rama](https://ramaproxy.org/book/intro.html) |\n| Run working code | [Examples](https://github.com/plabayo/rama/tree/main/examples) |\n| Build a proxy | [Intro to proxies](https://ramaproxy.org/book/proxies/intro.html) and [proxy examples](https://github.com/plabayo/rama/tree/main/examples#proxies) |\n| Operate advanced proxy stacks | [Operate Proxies](https://ramaproxy.org/book/proxies/operate/intro.html) |\n| Build an HTTP service | [Web servers](https://ramaproxy.org/book/web_servers.html) and [HTTP service examples](https://github.com/plabayo/rama/tree/main/examples#http-servers-and-services) |\n| Build an HTTP client | [HTTP clients](https://ramaproxy.org/book/http/http_clients.html) and [`http_high_level_client.rs`](https://github.com/plabayo/rama/blob/main/examples/src/http_high_level_client.rs) |\n| Use Rama from the terminal | [`rama` CLI](https://ramaproxy.org/book/deploy/rama-cli.html) |\n| Look up APIs | [docs.rs](https://docs.rs/rama) or [edge docs](https://ramaproxy.org/docs/rama) |\n| Learn by reading | [Rama 101 blog series](https://plabayo.tech/blog/rama-101-1-https-clients-and-abstractions) and [all Rama articles](https://plabayo.tech/blog?tag=Rama) |\n| Learn by listening | [Netstack.FM](https://netstack.fm) episodes: [welcome to Netstack.FM](https://netstack.fm/episodes/welcome-to-netstack-fm), [building and testing network stacks with Rama](https://netstack.fm/episodes/building-and-testing-network-stacks-with-rama), [MITM proxies and transparent L4 interception](https://netstack.fm/episodes/protocol-shorts-mitm-proxies-and-transparent-l4-interception), [dial9](https://netstack.fm/episodes/dial9-from-black-box-to-insight-in-tokio), [gRPC](https://netstack.fm/episodes/grpc-with-lucio-franco) |\n| Get commercial support | [ramaproxy.com](https://ramaproxy.com) |\n\n## What can you build?\n\nRama is built for programmable network services: software that accepts, opens,\ninspects, transforms, routes, proxies, or generates network traffic.\n\n| Area | Capabilities and building blocks |\n|---|---|\n| Proxies | [reverse proxies](https://ramaproxy.org/book/proxies/reverse.html), [TLS termination proxies](https://ramaproxy.org/book/proxies/tls.html), [HTTP(S) proxies](https://ramaproxy.org/book/proxies/http.html), [SOCKS5 proxies](https://ramaproxy.org/book/proxies/socks5.html), [SNI proxies](https://ramaproxy.org/book/proxies/sni.html), [MITM proxies](https://ramaproxy.org/book/proxies/mitm.html), [transparent proxies](https://ramaproxy.org/book/proxies/transparent.html), [distortion proxies](https://ramaproxy.org/book/proxies/distort.html), [network proxies](https://ramaproxy.org/book/proxies/network.html), [HAProxy PROXY protocol](https://ramaproxy.org/book/proxies/haproxy.html) |\n| [Web applications and APIs](https://ramaproxy.org/book/web_servers.html) | [path and matcher routing](https://ramaproxy.org/docs/rama/http/service/web/index.html), [async handlers](https://ramaproxy.org/docs/rama/http/service/web/trait.EndpointServiceFn.html) with [typed request extractors and shared state](https://ramaproxy.org/docs/rama/http/service/web/extract/index.html), [typed HTML, JSON, and streaming responses](https://ramaproxy.org/docs/rama/http/service/web/response/index.html), [forms and streaming file uploads](https://ramaproxy.org/book/http/multipart.html), [static and embedded assets](https://ramaproxy.org/docs/rama/http/service/fs/index.html), and [authentication, CSRF, CORS, compression, timeouts, tracing, and other middleware](https://ramaproxy.org/docs/rama/http/layer/index.html) |\n| Clients and connector stacks | [async HTTP(S) clients](https://ramaproxy.org/book/http/http_clients.html) for HTTP/1.1, HTTP/2, and HTTP/3 with [Alt-Svc discovery](https://ramaproxy.org/book/http/http_clients.html#alternative-services-and-custom-connectors), [WebSocket clients](https://ramaproxy.org/book/http/ws.html), [gRPC clients](https://ramaproxy.org/book/http/grpc.html), [ttRPC clients](https://ramaproxy.org/book/http/grpc.html#ttrpc-a-sibling-protocol), [FastCGI clients](https://ramaproxy.org/book/gateway/fastcgi.html), [custom connector stacks](https://ramaproxy.org/docs/rama/http/client/struct.EasyHttpConnectorBuilder.html) across transport, DNS, proxy, TLS, and HTTP stages, [custom connection pools and reuse policies](https://ramaproxy.org/docs/rama/net/client/pool/index.html), [request and response middleware](https://ramaproxy.org/docs/rama/http/layer/index.html), [client and proxy HTTP/TLS User-Agent emulation with real-browser profiles](https://ramaproxy.org/book/intro/user_agent.html), [custom services and layers](https://ramaproxy.org/book/diy.html) |\n| Servers and ingress controls | [HTTP/1.1 and HTTP/2 servers with automatic protocol detection](https://ramaproxy.org/docs/rama/http/server/service/struct.HttpServer.html#method.auto), [HTTP/3 servers over QUIC](https://ramaproxy.org/docs/rama/http/server/service/struct.HttpServer.html#method.new_http3), [WebSocket servers](https://ramaproxy.org/book/http/ws.html), [SSE and Datastar streams](https://ramaproxy.org/book/http/sse.html), [gRPC servers](https://ramaproxy.org/book/http/grpc.html), [ttRPC servers](https://ramaproxy.org/book/http/grpc.html#ttrpc-a-sibling-protocol), [TCP, UDP, QUIC, and Unix transport stacks](https://ramaproxy.org/book/transport.html), [TLS termination, dynamic certificates, mTLS, and ACME](https://ramaproxy.org/book/proxies/tls.html), [protocol inspection and routing](https://ramaproxy.org/book/proxies/protocol_inspection.html), [User-Agent parsing and classification](https://ramaproxy.org/docs/rama/ua/layer/classifier/index.html), [JA3, JA4, and PeetPrint TLS fingerprinting](https://ramaproxy.org/docs/rama/tls/fingerprint/index.html), [JA4H and Akamai HTTP/2 fingerprinting](https://ramaproxy.org/docs/rama/http/fingerprint/index.html), [authentication, CSRF, CORS, rate and body limits, timeouts, and tracing middleware](https://ramaproxy.org/docs/rama/http/layer/index.html) |\n| Application protocols and gateways | [WebSockets](https://ramaproxy.org/book/http/ws.html), [SSE](https://ramaproxy.org/book/http/sse.html), [Datastar](https://ramaproxy.org/docs/rama/http/sse/datastar/index.html), [gRPC](https://ramaproxy.org/book/http/grpc.html), [ttRPC](https://ramaproxy.org/book/http/grpc.html#ttrpc-a-sibling-protocol), [FastCGI](https://ramaproxy.org/book/gateway/fastcgi.html), [RSS and Atom feeds](https://ramaproxy.org/book/http/rss.html) |\n| Proxy routing and discovery | [explicit routes, route plans, and ordered fallback](https://ramaproxy.org/book/intro/service_zen.html), [HTTP(S) and SOCKS5 upstream proxies](https://ramaproxy.org/book/proxies/operate/proxies_and_vpns.html), [proxy environment variables and `NO_PROXY`](https://ramaproxy.org/book/proxies/operate/app.html), [system proxy settings on macOS, iOS, Windows and Linux](https://ramaproxy.org/book/proxies/operate/system.html), [PAC fetching, caching, evaluation, generation, and system integration](https://ramaproxy.org/book/proxies/operate/pac.html), [bypass rules](https://ramaproxy.org/docs/rama/net/client/struct.BypassRules.html), [route failure caching](https://ramaproxy.org/docs/rama/net/client/struct.ProxyRouteFailureCache.html) |\n| Content adaptation | [ICAP clients](https://ramaproxy.org/docs/rama/icap/client/index.html), [servers](https://ramaproxy.org/docs/rama/icap/server/index.html), [HTTP adaptation layers](https://ramaproxy.org/docs/rama/icap/http/layer/index.html), and [Preview support](https://ramaproxy.org/docs/rama/icap/proto/struct.Preview.html) |\n| Runtime and interoperability | [async services](https://ramaproxy.org/docs/rama/service/trait.Service.html), optional [blocking adapters](https://ramaproxy.org/docs/rama/rt/blocking/index.html) in front of any async service or client, such as the [HTTP(S) client](https://ramaproxy.org/docs/rama/http/client/type.BlockingHttpWebClient.html) or [WebSocket client](https://ramaproxy.org/docs/rama/http/ws/handshake/client/trait.BlockingHttpClientWebSocketExt.html), [Tower interoperability](https://ramaproxy.org/docs/rama/utils/tower/index.html), [graceful shutdown](https://ramaproxy.org/docs/rama/graceful/index.html) |\n| TLS and identity | [Rustls](https://ramaproxy.org/docs/rama/tls/rustls/index.html), [BoringSSL](https://ramaproxy.org/docs/rama/tls/boring/index.html), [TLS termination](https://ramaproxy.org/book/proxies/tls.html), [dynamic certificates](https://ramaproxy.org/book/proxies/reverse.html), [mTLS](https://ramaproxy.org/book/proxies/tls.html), [ACME](https://ramaproxy.org/docs/rama/tls/acme/index.html), [certificate pinning](https://github.com/plabayo/rama/blob/main/examples/src/tls_rustls_cert_pinning.rs) |\n| Traffic inspection | [protocol inspection](https://ramaproxy.org/book/proxies/protocol_inspection.html), [HTTP, WebSocket and TLS capture and interception](https://ramaproxy.org/docs/rama/inspect/index.html), [MITM proxy with a web UI in the `rama` CLI](https://ramaproxy.org/book/deploy/rama-cli.html#mitm-proxy-with-web-ui), [HAR recording and replay](https://ramaproxy.org/book/http/har.html), [curl export](https://ramaproxy.org/docs/rama/http/convert/curl/index.html), [diagnostics](https://ramaproxy.org/docs/rama/telemetry/index.html) |\n| Data processing | [streaming HTML rewriting](https://ramaproxy.org/docs/rama/http/layer/html_rewrite/index.html), [streaming JSON and JSONPath selection and rewriting](https://ramaproxy.org/docs/rama/json/index.html), [JSON-LD responses and extraction](https://ramaproxy.org/docs/rama/http/protocols/json_ld/index.html) |\n| Observability | [tracing and OpenTelemetry](https://ramaproxy.org/book/intro/telemetry.html), [HTTP metrics](https://ramaproxy.org/docs/rama/http/layer/opentelemetry/index.html), [transport metrics](https://ramaproxy.org/docs/rama/net/stream/layer/opentelemetry/index.html), [runtime telemetry](https://ramaproxy.org/book/dial9.html) |\n| Embedded scripting | [JavaScript runtime](https://ramaproxy.org/docs/rama/js/struct.JsRuntime.html), [PAC evaluation](https://ramaproxy.org/docs/rama/js/pac/struct.PacResolver.html) and [generation](https://ramaproxy.org/docs/rama/js/pac/struct.PacGenerator.html) |\n| Lower-level networking | [TCP](https://ramaproxy.org/docs/rama/tcp/index.html), [UDP](https://ramaproxy.org/docs/rama/udp/index.html), [QUIC v1 and v2](https://ramaproxy.org/docs/rama/quic/index.html), [Unix sockets](https://ramaproxy.org/docs/rama/unix/index.html), [DNS](https://ramaproxy.org/book/dns.html), [transport middleware](https://ramaproxy.org/docs/rama/net/stream/layer/index.html), [connection pooling](https://ramaproxy.org/docs/rama/net/client/pool/index.html) |\n| Platform integrations | [Apple Network Extension](https://ramaproxy.org/book/proxies/operate/transparent/macos.html), [Apple XPC](https://ramaproxy.org/book/xpc.html), [Linux tproxy](https://ramaproxy.org/book/proxies/operate/transparent.html#1-linux-the-tproxy-powerhouse), [Windows WFP](https://ramaproxy.org/book/proxies/operate/transparent/windows.html) |\n\nAll clients and servers are async. The blocking APIs are optional adapters on top,\nfor when you need to call them from synchronous code.\n\nFor the full capability overview, see the [website feature table](https://ramaproxy.org/#features-table)\nand the [API docs](https://docs.rs/rama). All protocols implemented in rama are made with the\nentire range of clients, servers and proxies in mind.\n\nFor advanced proxy operation, see the [Operate Proxies](https://ramaproxy.org/book/proxies/operate/intro.html)\nchapters. For Apple transparent proxying, see the\n[Apple transparent proxy example](https://github.com/plabayo/rama/tree/main/ffi/apple/examples/transparent_proxy).\n\n## Core ideas\n\n- **Services all the way down:** Rama uses the same service model across clients,\n  servers, middleware, and lower network layers.\n- **Explicit stacks:** transports, TLS, protocols, state, and middleware are\n  composed in code, so the path traffic takes stays visible.\n- **Transport-to-HTTP control:** work at the HTTP layer when that is enough, or\n  reach into TCP, UDP, QUIC, TLS, DNS, and connection state when needed.\n- **Modular by design:** use the top-level `rama` crate and compose only the\n  protocol and runtime building blocks you need for an application, library,\n  or framework, with your own services and layers where desired.\n- **Tower interop:** Rama has its own service traits, with compatibility for\n  Tower where that helps.\n- **Blocking boundaries:** expose async stacks to synchronous code through\n  `BlockingService` and `rt::blocking`, without making the stack itself synchronous.\n\n## Examples\n\nThe [`examples`](https://github.com/plabayo/rama/tree/main/examples) directory\ncontains tested examples for common stacks.\n\n| Goal | Example |\n|---|---|\n| Minimal HTTP service | [`http_service_hello.rs`](https://github.com/plabayo/rama/blob/main/examples/src/http_service_hello.rs) |\n| HTTP router | [`http_web_router.rs`](https://github.com/plabayo/rama/blob/main/examples/src/http_web_router.rs) |\n| High-level HTTP client | [`http_high_level_client.rs`](https://github.com/plabayo/rama/blob/main/examples/src/http_high_level_client.rs) |\n| HTTP CONNECT proxy | [`http_connect_proxy.rs`](https://github.com/plabayo/rama/blob/main/examples/src/http_connect_proxy.rs) |\n| SOCKS5 proxy | [`socks5_connect_proxy.rs`](https://github.com/plabayo/rama/blob/main/examples/src/socks5_connect_proxy.rs) |\n| MITM proxy | [`http_mitm_proxy_boring.rs`](https://github.com/plabayo/rama/blob/main/examples/src/http_mitm_proxy_boring.rs) |\n| HTTP(S) proxy with ICAP | [`http_icap_proxy.rs`](https://github.com/plabayo/rama/blob/main/examples/src/http_icap_proxy.rs) |\n| Linux transparent proxy | [`linux_tproxy_tcp.rs`](https://github.com/plabayo/rama/blob/main/examples/src/linux_tproxy_tcp.rs) |\n| Apple transparent proxy | [`ffi/apple/examples/transparent_proxy`](https://github.com/plabayo/rama/tree/main/ffi/apple/examples/transparent_proxy) |\n| Tower integration | [`http_rama_tower.rs`](https://github.com/plabayo/rama/blob/main/examples/src/http_rama_tower.rs) |\n\nMost examples can be run with `cargo` and the required feature flags:\n\n```bash\ncargo run -p rama-examples --bin http_service_hello --features=http-full\ncargo run -p rama-examples --bin http_connect_proxy --features=http-full\ncargo run -p rama-examples --bin socks5_connect_proxy --features=dns,socks5\n```\n\nCheck each example's module documentation for exact usage and feature\nrequirements.\n\n## `rama` binary\n\nThe `rama` binary lets you use parts of Rama without writing Rust code. It can\nact as an HTTP(S) and WebSocket client, run an HTTP(S) and SOCKS5 proxy with a\nMITM mode and web UI to inspect traffic, resolve DNS, probe TLS servers,\nevaluate PAC scripts, and run local echo, IP, fingerprinting and HTTP test services.\n\nLearn how to install and use it in the [`rama` CLI chapter](https://ramaproxy.org/book/deploy/rama-cli.html).\n\n## Status\n\n- **MSRV:** Rama requires Rust `1.96`.\n- **Platforms:** Linux, macOS, and Windows are tier 1 platforms. Android and iOS\n  targets are checked in CI.\n- **Safety:** Rama avoids unsafe code where possible. Low-level protocol code and\n  FFI-backed crates use unsafe where needed.\n- **Supply chain:** dependencies are audited with [`cargo vet`](https://github.com/mozilla/cargo-vet).\n- **Performance:** Rama's default HTTP implementation is based on Hyper internals\n  and is designed for production network services.\n- **Roadmap:** planned work is tracked in [GitHub milestones](https://github.com/plabayo/rama/milestones).\n\n## All rama and other crates developed by Plabayo\n\nMost users can start with [`rama`](https://crates.io/crates/rama). The smaller\ncrates exist for users who want finer control over dependencies or extension\npoints.\n\nSee the [ecosystem chapter](https://ramaproxy.org/book/ecosystem.html) for more\ncontext.\n\nRama crates in this repository:\n\n- [`rama`](https://crates.io/crates/rama): top-level crate\n- [`rama-cli`](https://crates.io/crates/rama-cli): command-line tool for Rama\n- [`rama-error`](https://crates.io/crates/rama-error): error utilities for rama and its users\n- [`rama-macros`](https://crates.io/crates/rama-macros): contains the procedural macros used by `rama`\n- [`rama-utils`](https://crates.io/crates/rama-utils): utilities crate for rama\n- [`rama-ws`](https://crates.io/crates/rama-ws): WebSocket (WS) support for rama\n- [`rama-core`](https://crates.io/crates/rama-core): core crate containing the service and layer traits\n  used by all other `rama` code, as well as some other _core_ utilities\n- [`rama-crypto`](https://crates.io/crates/rama-crypto): rama crypto primitives and dependencies\n- [`rama-net`](https://crates.io/crates/rama-net): rama network types and utilities\n- [`rama-net-apple-networkextension`](https://crates.io/crates/rama-net-apple-networkextension): Apple Network Extension support for rama\n- [`rama-net-apple-xpc`](https://crates.io/crates/rama-net-apple-xpc): Apple XPC support for rama\n- [`rama-dns`](https://crates.io/crates/rama-dns): DNS support for rama\n- [`rama-unix`](https://crates.io/crates/rama-unix): Unix (domain) socket support for rama\n- [`rama-tcp`](https://crates.io/crates/rama-tcp): TCP support for rama\n- [`rama-udp`](https://crates.io/crates/rama-udp): UDP support for rama\n- [`rama-quic`](https://crates.io/crates/rama-quic): QUIC transport support for rama\n- [`rama-quic-proto`](https://crates.io/crates/rama-quic-proto): QUIC wire types, codec and profiles for rama\n- [`rama-tls`](https://crates.io/crates/rama-tls): shared TLS configuration and types for rama\n- [`rama-tls-acme`](https://crates.io/crates/rama-tls-acme): ACME support for rama\n- [`rama-tls-boring`](https://crates.io/crates/rama-tls-boring): [Boring](https://github.com/plabayo/rama-boring) TLS support for rama\n- [`rama-tls-rustls`](https://crates.io/crates/rama-tls-rustls): [Rustls](https://github.com/rustls/rustls) support for rama\n- [`rama-proxy`](https://crates.io/crates/rama-proxy): proxy types and utilities for rama\n- [`rama-inspect`](https://crates.io/crates/rama-inspect): protocol-independent inspection, interception, and streaming capture storage\n- [`rama-socks5`](https://crates.io/crates/rama-socks5): SOCKS5 support for rama\n- [`rama-fastcgi`](https://crates.io/crates/rama-fastcgi): FastCGI support for rama\n- [`rama-haproxy`](https://crates.io/crates/rama-haproxy): rama HAProxy support\n- [`rama-icap`](https://crates.io/crates/rama-icap): ICAP support for rama\n- [`rama-ua`](https://crates.io/crates/rama-ua): User-Agent (UA) support for `rama`\n- [`rama-http-types`](https://crates.io/crates/rama-http-types): http types and utilities\n- [`rama-http-headers`](https://crates.io/crates/rama-http-headers): typed http headers\n- [`rama-json`](https://crates.io/crates/rama-json): streaming JSON tokenizer, JSONPath selection, and rewriting utilities\n- [`rama-js`](https://crates.io/crates/rama-js): embedded javascript execution\n- [`rama-pac`](https://crates.io/crates/rama-pac): proxy auto-configuration (PAC) support\n- [`rama-grpc`](https://crates.io/crates/rama-grpc): gRPC support for rama\n- [`rama-grpc-build`](https://crates.io/crates/rama-grpc-build): gRPC codegen support for rama\n- [`rama-grpc-macros`](https://crates.io/crates/rama-grpc-macros): proc-macros to define gRPC services inline, without a `.proto` file\n- [`rama-http`](https://crates.io/crates/rama-http): rama http services, layers and utilities\n- [`rama-http-macros`](https://crates.io/crates/rama-http-macros): proc-macros powering the type-safe HTML templating in `rama-http::protocols::html`\n- [`rama-http-backend`](https://crates.io/crates/rama-http-backend): default http backend for `rama`\n- [`rama-http-core`](https://crates.io/crates/rama-http-core): http protocol implementation driving `rama-http-backend`\n- [`rama-http-hyperium`](https://crates.io/crates/rama-http-hyperium): conversions between rama and the hyperium `http` crate\n- [`rama-tower`](https://crates.io/crates/rama-tower): [tower](https://github.com/tower-rs/tower) compatibility for `rama`\n- [`rama-ttrpc`](https://crates.io/crates/rama-ttrpc): ttRPC (gRPC for low-memory environments) support for rama\n- [`rama-ttrpc-build`](https://crates.io/crates/rama-ttrpc-build): ttRPC codegen support for rama\n\nRelated Plabayo crates and projects:\n\n- [`rama-boring`](https://crates.io/crates/rama-boring): BoringSSL bindings for rama\n- [`rama-boring-sys`](https://crates.io/crates/rama-boring-sys): FFI bindings to BoringSSL for rama\n- [`rama-boring-tokio`](https://crates.io/crates/rama-boring-tokio): Tokio SSL streams backed by BoringSSL\n- [`rama-boringssl`](https://github.com/plabayo/rama-boringssl): BoringSSL fork used by `rama-boring`\n- [`tokio-graceful`](https://crates.io/crates/tokio-graceful): graceful shutdown utilities for Tokio\n- [`venndb`](https://crates.io/crates/venndb): set and relation matching utilities used by Rama proxy components\n- [`homebrew-rama`](https://github.com/plabayo/homebrew-rama): Homebrew formula for the `rama` CLI\n\n## Community\n\n[![Discord][discord-badge]][discord-url]\n\nQuestions, ideas, and project discussion are welcome on [Discord][discord-url].\nBug reports and feature requests can be opened as\n[GitHub issues](https://github.com/plabayo/rama/issues).\n\nRama also has a public channel on the official Discord of the Tokio project:\n\u003chttps://discord.com/channels/500028886025895936/1349098858831024209\u003e.\n\n## Contributing\n\nContributions are welcome. Please read [CONTRIBUTING.md](https://github.com/plabayo/rama/blob/main/CONTRIBUTING.md)\nbefore opening a pull request.\n\nGood places to start:\n\n- [`good first issue`](https://github.com/plabayo/rama/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)\n- [`easy`](https://github.com/plabayo/rama/issues?q=is%3Aissue+is%3Aopen+label%3Aeasy)\n- [`mentor available`](https://github.com/plabayo/rama/issues?q=is%3Aissue+is%3Aopen+label%3A%22mentor+available%22)\n- [`low prio`](https://github.com/plabayo/rama/issues?q=is%3Aissue+is%3Aopen+label%3A%22low+prio%22)\n\nSome issues have a [`needs input`](https://github.com/plabayo/rama/issues?q=is%3Aissue+is%3Aopen+label%3A%22needs+input%22+)\nlabel. These usually need discussion, research, or design work before\nimplementation starts.\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in `rama` by you shall be licensed as both [MIT](https://github.com/plabayo/rama/blob/main/LICENSE-MIT)\nand [Apache-2.0](https://github.com/plabayo/rama/blob/main/LICENSE-APACHE),\nwithout any additional terms or conditions.\n\n## License\n\nRama is licensed under either of:\n\n- [MIT](https://github.com/plabayo/rama/blob/main/LICENSE-MIT)\n- [Apache-2.0](https://github.com/plabayo/rama/blob/main/LICENSE-APACHE)\n\n## Sponsors and support\n\n[![GitHub Sponsors][ghs-badge]][ghs-url]\n[![Buy Me A Coffee][bmac-badge]][bmac-url]\n[![Paypal Donation][paypal-badge]][paypal-url]\n\nRama is free and open-source software. Sponsorships help fund development,\ninfrastructure, testing, and maintenance.\n\nCommercial support, consulting, training, and custom development are available\nthrough [ramaproxy.com](https://ramaproxy.com). More background is available in\nthe [Sponsor chapter](https://ramaproxy.org/book/sponsor.html).\n\n## Alternatives\n\nIf Rama is not the right fit for your proxy work, you may also want to look at\n[`pingora`](https://github.com/cloudflare/pingora) by Cloudflare and\n[`g3proxy`](https://github.com/bytedance/g3) by ByteDance.\n\nThe [Why Rama](https://ramaproxy.org/book/why_rama.html) chapter explains how\nRama fits between off-the-shelf proxies and building a stack from scratch.\n\n## FAQ\n\nAvailable at \u003chttps://ramaproxy.org/book/faq.html\u003e.\n\n[![original (OG) rama logo](./docs/img/rama_logo_with_name.svg)](https://ramaproxy.org/)\n\n\u003e [!TIP]\n\u003e\n\u003e 📚 If you like Rama, you might also like [Netstack.FM®](https://netstack.fm),\n\u003e a podcast about networking, Rust, and everything in between.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplabayo%2Frama","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplabayo%2Frama","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplabayo%2Frama/lists"}