{"id":50416612,"url":"https://github.com/trevorftp/nimbus","last_synced_at":"2026-05-31T06:04:04.352Z","repository":{"id":360271770,"uuid":"1249379706","full_name":"trevorftp/Nimbus","owner":"trevorftp","description":"A server proxy built for Vintagestory Servers","archived":false,"fork":false,"pushed_at":"2026-05-25T18:39:12.000Z","size":51,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T19:27:35.015Z","etag":null,"topics":["nimbus","server-proxy","stratum","vintagestory"],"latest_commit_sha":null,"homepage":"https://discord.gg/pd24fawhsD","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trevorftp.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":"2026-05-25T16:29:46.000Z","updated_at":"2026-05-25T18:39:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/trevorftp/Nimbus","commit_stats":null,"previous_names":["trevorftp/nimbus"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/trevorftp/Nimbus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trevorftp%2FNimbus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trevorftp%2FNimbus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trevorftp%2FNimbus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trevorftp%2FNimbus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trevorftp","download_url":"https://codeload.github.com/trevorftp/Nimbus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trevorftp%2FNimbus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33720900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"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":["nimbus","server-proxy","stratum","vintagestory"],"created_at":"2026-05-31T06:04:03.462Z","updated_at":"2026-05-31T06:04:04.346Z","avatar_url":"https://github.com/trevorftp.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nimbus\n\n[![Discord](https://img.shields.io/badge/discord-join-5865F2?logo=discord\u0026logoColor=white)](https://discord.gg/pd24fawhsD)\n[![Stars](https://img.shields.io/github/stars/trevorftp/Nimbus?style=flat\u0026logo=github)](https://github.com/trevorftp/Nimbus/stargazers)\n[![Issues](https://img.shields.io/github/issues/trevorftp/Nimbus?logo=github)](https://github.com/trevorftp/Nimbus/issues)\n[![Last commit](https://img.shields.io/github/last-commit/trevorftp/Nimbus?logo=github)](https://github.com/trevorftp/Nimbus/commits)\n[![License](https://img.shields.io/badge/license-source--available-blue)](LICENSE)\n\nA [Velocity](https://papermc.io/software/velocity)-style proxy for [Vintage Story](https://www.vintagestory.at/).\n\nPut many backends behind one address, move players between them on demand, and present the whole thing as a single entry on the server list. The transfer is a quick disconnect/reconnect to the next backend; the vanilla protocol doesn't give us a soft-respawn, so a Velocity-grade seamless swap isn't on the table. Everything else is.\n\n## How it fits together\n\n- **Registry** — small ASP.NET Core service. Backends heartbeat in. Mints short-lived reservations so a player can land on a specific backend without re-running auth.\n- **Proxy** — TCP/UDP relay. Fronts every backend on one address. Health-aware routing, drain, swap, redirect, disconnect-transfer. Forwards the real client IP to the backend over the reservation.\n- **`nimctl`** — CLI for the proxy's admin socket. List sessions, swap a player, drain a backend.\n\nThe registry can also advertise the whole network as one entry on the public VS server list, with aggregated player count and required mods pulled from live backends.\n\n## Building\n\nRequires the .NET 10 SDK.\n\n```powershell\ndotnet build Nimbus.slnx -c Release\n```\n\n## Running\n\n```powershell\ncd Nimbus.Registry; dotnet run -c Release\ncd Nimbus.Proxy;    dotnet run -c Release\n```\n\nFirst run writes a config next to each binary. Change the `SharedSecret` before exposing anything.\n\n## Backend integration\n\nBackends need to do two things:\n\n1. Heartbeat to the registry (`BackendHeartbeat` in `Nimbus.Shared`).\n2. On login, ask the registry to consume a reservation for the joining player and accept the join if it matches.\n\n`Nimbus.Shared` carries the DTOs and the HMAC signer; you don't have to reimplement either. Every registry request needs the four `X-Nimbus-*` headers.\n\nThere is no drop-in mod for stock servers yet. Nimbus runs against a private fork; a public integration layer is on the list.\n\n## Caveats\n\n- The vanilla client has a bug in `ClientMain.ExitAndSwitchServer` that crashes the next session after a redirect. Until upstream patches it, clients need [RedirectFix](https://github.com/trevorftp/redirectfix). It auto-installs from the backend's required-mods list on first join, so for players this is transparent.\n- One player per source IP for UDP (NAT'd LAN parties not supported yet).\n\n## Discord\n\nQuestions, bug reports, design arguments: [discord.gg/pd24fawhsD](https://discord.gg/pd24fawhsD).\n\n## License\n\nSee [LICENSE](LICENSE). Source-available, no resale, no rebrand-and-redistribute.\n\nNimbus is an unofficial third-party project. Not affiliated with or endorsed by Anego Studios. \"Vintage Story\" is a trademark of Anego Studios. See [NOTICE](NOTICE) for the full attribution.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrevorftp%2Fnimbus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrevorftp%2Fnimbus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrevorftp%2Fnimbus/lists"}