{"id":46196262,"url":"https://github.com/sudodevstudio/rilot","last_synced_at":"2026-03-11T02:00:57.530Z","repository":{"id":290294428,"uuid":"973842739","full_name":"SudoDevStudio/rilot","owner":"SudoDevStudio","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-03T01:11:57.000Z","size":727,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-03T04:33:27.030Z","etag":null,"topics":["dynamic-proxy","dynamic-reverse-proxy","microfrontend","microservices","open-source","proxy","reverse-proxy","rust","wasm","webassembly"],"latest_commit_sha":null,"homepage":"","language":"HTML","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/SudoDevStudio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2025-04-27T21:08:16.000Z","updated_at":"2026-03-03T01:07:42.000Z","dependencies_parsed_at":"2026-03-11T02:00:51.230Z","dependency_job_id":null,"html_url":"https://github.com/SudoDevStudio/rilot","commit_stats":null,"previous_names":["maninderpreetsingh/rilot","sudodevstudio/rilot"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/SudoDevStudio/rilot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SudoDevStudio%2Frilot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SudoDevStudio%2Frilot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SudoDevStudio%2Frilot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SudoDevStudio%2Frilot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SudoDevStudio","download_url":"https://codeload.github.com/SudoDevStudio/rilot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SudoDevStudio%2Frilot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30367799,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T21:41:54.280Z","status":"online","status_checked_at":"2026-03-11T02:00:07.027Z","response_time":84,"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":["dynamic-proxy","dynamic-reverse-proxy","microfrontend","microservices","open-source","proxy","reverse-proxy","rust","wasm","webassembly"],"created_at":"2026-03-03T03:11:44.992Z","updated_at":"2026-03-11T02:00:57.447Z","avatar_url":"https://github.com/SudoDevStudio.png","language":"HTML","readme":"# Rilot: Carbon Cursor Edge Routing Research Tool\n\nRilot is an open-source Rust proxy for per-request carbon-aware routing at the HTTP edge.\n\n## Highlights\n\n- Carbon Cursor routing pipeline: classify, constrain, signal, score.\n- Region-first routing (`x-user-region`) with per-zone metadata.\n- Built-in multi-objective policy modes and route classes.\n- Per-route feature toggles for carbon, forecasting, time-shift, and plugins.\n- Wasm extensibility for custom routing and energy overrides.\n- Carbon provider modes: `mock`, `slow-mock`, `electricitymap`, and `electricitymap-local`.\n- Prometheus metrics, decision logs, and periodic rollups.\n- Shared policy crate: `crates/rilot-core` for future adapter targets.\n- Reproducible comparative evaluation kit in `research-kit/`.\n\n## Local quickstart (with simulators)\n\n1. Start zone simulators:\n\n```bash\n./examples/node-apps/run-local-zones.sh\n```\n\n2. Start Rilot in another terminal:\n\n```bash\ncargo build --release\nRUST_LOG=info ./target/release/rilot config.json\n```\n\n3. Send traffic:\n\n```bash\ncurl -H 'x-user-region: us-east' http://127.0.0.1:8080/\ncurl -H 'x-user-region: us-west' http://127.0.0.1:8080/\n```\n\n## Enable ElectricityMap\n\nIn your config:\n\n- set `carbon.provider` to `electricitymap`\n- set `carbon.electricitymap_api_key`\n- optional: set `carbon.electricitymap_api_token_header` if your token header differs from `auth-token`\n- optionally set `carbon.electricitymap_zone_map` when route zone names differ from ElectricityMap zone IDs\n\nRilot uses async refresh + cache for provider calls and falls back to cached/default values on timeout.\nUse `carbon.cache_ttl_seconds` for cache TTL (in seconds, default `60`).\n\nFor local/offline testing, use:\n\n- `carbon.provider = \"electricitymap-local\"`\n- `carbon.electricitymap_local_fixture = \"\u003cpath to fixture json\u003e\"`\n- set `carbon.electricitymap_local_live_reload=true` for per-request fixture reads (otherwise cached)\n\n`carbon.cache_ttl_seconds` is the only cache TTL setting.\n\n## Docker research quickstart\n\n```bash\ncd research-kit\ndocker compose up --build -d\n./scripts/run_live_experiment.sh\n```\n\nThe generated `summary.md` includes explicit trade-off deltas versus baseline:\n\n- carbon exposure saved (%)\n- CO2e saved (%)\n- latency p95 delta\n- error rate\n- sampled CPU delta\n- sampled memory delta\n\nOptional stronger-evidence runs:\n\n- `ENABLE_FAILURE_SCENARIO=1 ./scripts/run_live_experiment.sh` (provider-timeout robustness)\n- `python3 ./scripts/run_weight_sensitivity.py` (policy weight sensitivity)\n- `node ./scripts/charts.js` (interactive charts from latest comparative run; writes `charts.html`)\n- `./scripts/run_live_experiment.sh` (10-zone live-profile run, stable output at `result_live/comparative-live/`)\n\n## Core docs\n\n- `docs/README.md` (documentation index)\n- `docs/architecture.md`\n- `docs/config-reference.md`\n- `docs/runtime-behavior.md`\n- `docs/wasm-carbon-plugin.md`\n- `docs/operations.md`\n- `docs/research-toolkit.md`\n- `docs/model-calibration.md`\n- `docs/edge-target.md`\n\n## Key files\n\n- Runtime: `src/proxy.rs`\n- Config schema: `src/config.rs`\n- Wasm runtime: `src/wasm_engine.rs`\n- Policy core: `crates/rilot-core/src/lib.rs`\n- Edge adapter roadmap (future work): `adapters/edge-wasm/`\n- Default config: `config.json`\n- Example config: `examples/config/config.json`\n- Local simulators: `examples/node-apps/`\n- Docker experiment config: `research-kit/config.live.json`\n\n## Broader Applicability\n\n- Data center operators can use Rilot to evaluate region/zone dispatch policies under carbon and latency guardrails before production rollout.\n- Cloud platforms can expose per-tenant policy profiles (latency-first, carbon-first, balanced) using the same routing core.\n- Edge/API gateway teams can integrate route-level Wasm overrides for custom scoring and external signal sources without changing core proxy code.\n\n## Data Availability Statement\n\nAll code, configuration, and experiment scripts required to reproduce the reported results are included in this repository.\n\n- Comparative evaluation scripts: `research-kit/scripts/run_live_experiment.sh`, `research-kit/scripts/run_comparative_evaluation.py`\n- Sensitivity analysis script: `research-kit/scripts/run_weight_sensitivity.py`\n- Experiment configuration and traces: `research-kit/config.live.json`, `research-kit/carbon-traces/`\n- Generated artifacts: `research-kit/result_live/comparative-live/` (summary tables, per-request CSV, Prometheus snapshots, charts)\n\n## License\n\nMIT\n\n## How to Cite\n\nIf you use Rilot in research, please cite:\n\n```bibtex\n@software{maninderpreet_singh_rilot_2026,\n  author = {Maninderpreet Singh},\n  title = {Rilot: Carbon Cursor Edge Routing},\n  year = {2026},\n  url = {https://github.com/SudoDevStudio/rilot}\n}\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsudodevstudio%2Frilot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsudodevstudio%2Frilot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsudodevstudio%2Frilot/lists"}