{"id":26228717,"url":"https://github.com/psviderski/uncloud","last_synced_at":"2026-04-15T12:02:27.142Z","repository":{"id":260427992,"uuid":"831373509","full_name":"psviderski/uncloud","owner":"psviderski","description":"A lightweight tool for deploying and managing containerised applications across a network of Docker hosts. Bridging the gap between Docker and Kubernetes ✨","archived":false,"fork":false,"pushed_at":"2026-04-10T08:58:42.000Z","size":4920,"stargazers_count":5001,"open_issues_count":83,"forks_count":148,"subscribers_count":24,"default_branch":"main","last_synced_at":"2026-04-10T10:40:10.176Z","etag":null,"topics":["containers","deployment","devops","docker","docker-compose","golang","kubernetes","orchestration","self-hosted"],"latest_commit_sha":null,"homepage":"https://uncloud.run","language":"Go","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/psviderski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["psviderski"]}},"created_at":"2024-07-20T11:13:36.000Z","updated_at":"2026-04-10T08:39:04.000Z","dependencies_parsed_at":"2025-02-12T12:28:41.109Z","dependency_job_id":"ef8663d6-50f9-44a5-b918-49a54c683267","html_url":"https://github.com/psviderski/uncloud","commit_stats":null,"previous_names":["psviderski/uncloud"],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/psviderski/uncloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psviderski%2Funcloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psviderski%2Funcloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psviderski%2Funcloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psviderski%2Funcloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/psviderski","download_url":"https://codeload.github.com/psviderski/uncloud/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psviderski%2Funcloud/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31840114,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T11:29:19.690Z","status":"ssl_error","status_checked_at":"2026-04-15T11:29:19.171Z","response_time":63,"last_error":"SSL_read: 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":["containers","deployment","devops","docker","docker-compose","golang","kubernetes","orchestration","self-hosted"],"created_at":"2025-03-12T21:03:03.003Z","updated_at":"2026-04-15T12:02:27.132Z","avatar_url":"https://github.com/psviderski.png","language":"Go","readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./website/landing/images/logo-title.svg#gh-light-mode-only\" alt=\"Uncloud logo\"/\u003e\n  \u003cimg src=\"./website/landing/images/logo-title-dark.svg#gh-dark-mode-only\" alt=\"Uncloud logo\"/\u003e\n  \u003cp\u003e\u003cstrong\u003e▸ Deploy and scale containerised apps across servers without Swarm or Kubernetes overhead ◂\u003c/strong\u003e\u003c/p\u003e\n\n  \u003cp\u003e\n    \u003ca href=\"https://uncloud.run/docs\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docs-blue.svg?style=for-the-badge\u0026logo=gitbook\u0026logoColor=white\" alt=\"Documentation\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://discord.gg/eR35KQJhPu\"\u003e\u003cimg src=\"https://img.shields.io/badge/discord-5865F2.svg?style=for-the-badge\u0026logo=discord\u0026logoColor=white\" alt=\"Join Discord\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://x.com/psviderski\"\u003e\u003cimg src=\"https://img.shields.io/badge/follow-black?style=for-the-badge\u0026logo=X\u0026logoColor=while\" alt=\"Follow on X\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/sponsors/psviderski\"\u003e\u003cimg src=\"https://img.shields.io/badge/Donate-EA4AAA.svg?style=for-the-badge\u0026logo=githubsponsors\u0026logoColor=white\" alt=\"Donate\"\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\nUncloud is a lightweight clustering and container orchestration tool that lets you deploy and manage web apps across\ncloud VMs and bare metal with minimised cluster management overhead. It creates a secure WireGuard mesh network between\nyour Docker hosts and provides automatic service discovery, load balancing, ingress with HTTPS, and simple CLI commands\nto manage your apps.\n\nUnlike traditional orchestrators, there's no central control plane and quorum to maintain. Each machine maintains a\nsynchronised copy of the cluster state through peer-to-peer communication, keeping cluster operations functional even if\nsome machines go offline.\n\nUncloud is the solution for developers who want the flexibility of self-hosted infrastructure without the operational\ncomplexity of Kubernetes.\n\n## ✨ Features\n\n* **Deploy anywhere**: Combine cloud VMs, dedicated servers, and bare metal into a unified computing environment,\n  regardless of location or provider.\n* **Docker Compose**: Familiar [Docker Compose](https://compose-spec.io/) format for defining services and volumes. No\n  need to learn a new bespoke DSL.\n* **Zero-downtime deployments**: Rolling updates without service interruption. Automatic rollback on failure is coming\n  soon.\n* **[Unregistry](https://github.com/psviderski/unregistry) integration**: Build and push your Docker images directly to\n  your machines without an external registry. It will transfer only the missing layers, making it fast and efficient.\n* **Service discovery**: Built-in DNS server resolves service names to container IPs.\n* **Persistent storage**: Run stateful services with Docker volumes managed across machines.\n* **Zero-config private network**: Automatic WireGuard mesh with peer discovery and NAT traversal. Containers get unique\n  IPs for direct cross-machine communication.\n* **No control plane**: Fully decentralised design eliminates single points of failure and reduces operational overhead.\n* **Imperative over declarative**: Favoring imperative operations over state reconciliation simplifies both the mental\n  model and troubleshooting.\n* **Managed DNS**: Automatic DNS records `*.xxxxxx.uncld.dev` for services with public access via managed\n  [Uncloud DNS](https://github.com/psviderski/uncloud-dns) service.\n* **Automatic HTTPS**: Built-in Caddy reverse proxy handles TLS certificate provisioning and renewal using Let's\n  Encrypt.\n* **Docker-like CLI**: Familiar commands for managing both infrastructure and applications.\n* **Remote management**: Control your entire infrastructure through SSH access to any single machine in the cluster.\n\n## 🎬 Quick demo\n\nThe screenshot below demonstrates how I use Uncloud to deploy https://uncloud.run website to 2 remote machines from\nthe [`compose.yaml`](website/compose.yaml) file on my local machine.\n\nIt exposes the container port `8000/tcp` as HTTPS on the domain `uncloud.run`, served by the Caddy reverse proxy on the\nremote machines. All managed by Uncloud.\n\n![Uncloud compose deployment demo](.github/images/compose-deploy.jpg)\n\nHere is a more advanced use case. Deploy a highly available web app with automatic HTTPS across multiple regions and\non-premises in just a couple minutes.\n\n\u003ca href=\"https://uncloud.wistia.com/medias/k47uwt9uau?wvideo=k47uwt9uau\"\u003e\n\u003cimg src=\"https://embed-ssl.wistia.com/deliveries/4fb71ea442905b81b1ad4e25fc02132e.jpg?image_crop_resized=900x526\u0026image_play_button_rounded=true\u0026image_play_button_size=2x\u0026image_play_button_color=18181Be0\" alt=\"Uncloud demo\" width=\"450\" height=\"263\" /\u003e\n\u003c/a\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n\u003e **📚 Want more examples?** Check out the [**uncloud-recipes**](https://github.com/psviderski/uncloud-recipes)\n\u003e repository for community recipes and templates for deploying popular services on Uncloud.\n\n## 💫 Why Uncloud?\n\nModern cloud platforms like Heroku and Render offer amazing developer experiences but at a premium price. Traditional\ncontainer orchestrators like Kubernetes provide power and flexibility but require significant operational expertise. I\nbelieve there's a sweet spot in between — a pragmatic solution for the majority of us who aren't running at Google\nscale. You should be able to:\n\n* **Own your infrastructure and data**: Whether driven by costs, compliance, or flexibility, run applications on any\n  combination of cloud VMs and personal hardware while controlling your data and maintaining the cloud-like experience\n  you love.\n* **Stay simple as you grow**: Start with a single machine and add more whenever you need without changing your\n  workflow. No worrying about highly-available control planes or complex YAML configurations.\n* **Build with proven primitives**: Get production-grade networking, deployment primitives, service discovery, load\n  balancing, and ingress with HTTPS out of the box without becoming a distributed systems expert.\n* **Support sustainable computing** 🌿: Minimise system overhead to maximise resources available for your applications.\n\nUncloud's goal is to make deployment and management of containerised applications feel as seamless as using a cloud\nplatform, whether you're running on a $5 VPS, a spare Mac mini, or a rack of bare metal servers.\n\n## 🚀 Quick start\n\n1. Install Uncloud CLI:\n\n   ```bash\n   brew install psviderski/tap/uncloud\n\n   # or using curl (macOS/Linux)\n   curl -fsS https://get.uncloud.run/install.sh | sh\n   ```\n\n   See [Installation](https://uncloud.run/docs/getting-started/install-cli) for more options. There's also a [nightly rolling release](https://github.com/psviderski/uncloud/releases/tag/nightly) available if you want to try the latest features and fixes before they're included in an official release.\n\n2. Initialise your first machine:\n\n   ```bash\n   uc machine init root@your-server-ip\n   ```\n\n3. Deploy your app from a Docker image and publish its container port 8000 as HTTPS using `app.example.com` domain:\n\n   ```bash\n   uc run -p app.example.com:8000/https image/my-app\n   ```\n\n4. Create a DNS A record in your DNS provider (Cloudflare, Namecheap, etc.) that points `app.example.com` to your\n   server's IP address. Allow a few minutes for DNS propagation.\n\n   That's it! Your app is now running and accessible at https://app.example.com ✨\n\n5. Clean up when you're done:\n\n   ```bash\n   uc ls\n   # Copy the service name from the output and run the rm command:\n   uc rm my-app-name\n   ```\n\n   If you want to fully uninstall Uncloud on a machine, run:\n\n   ```bash\n   uncloud-uninstall\n   ```\n\nView the [Documentation](https://uncloud.run/docs) for more information.\n\n## ⚙️ How it works\n\nCheck out the [design document](misc/design.md) to understand Uncloud's design philosophy and goals.\n\nHere is a diagram of an Uncloud multi-provider cluster of 3 machines:\n\n![Diagram: multi-provider cluster of 3 machines](website/landing/images/diagram.webp)\n\n\u003cdetails\u003e\n\u003csummary\u003ePeek under the hood to see what happens when you run certain commands.\u003c/summary\u003e\n\n**When you initialise a new cluster on a machine:**\n\n```bash\n$ uc machine init --name oracle-vm ubuntu@152.67.101.197\n\nDownloading Uncloud install script: https://raw.githubusercontent.com/psviderski/uncloud/refs/heads/main/scripts/install.sh\n⏳ Running Uncloud install script...\n✓ Docker is already installed.\n⏳ Installing Docker...\n...\n✓ Docker installed successfully.\n✓ Linux user and group 'uncloud' created.\n✓ Linux user 'ubuntu' added to group 'uncloud'.\n⏳ Installing Uncloud binaries...\n⏳ Downloading uncloudd binary: https://github.com/psviderski/uncloud/releases/latest/download/uncloudd_linux_arm64.tar.gz\n✓ uncloudd binary installed: /usr/local/bin/uncloudd\n⏳ Downloading uninstall script: https://raw.githubusercontent.com/psviderski/uncloud/refs/heads/main/scripts/uninstall.sh\n✓ uncloud-uninstall script installed: /usr/local/bin/uncloud-uninstall\n✓ Systemd unit file created: /etc/systemd/system/uncloud.service\nCreated symlink /etc/systemd/system/multi-user.target.wants/uncloud.service → /etc/systemd/system/uncloud.service.\n⏳ Downloading uncloud-corrosion binary: https://github.com/psviderski/corrosion/releases/latest/download/corrosion-aarch64-unknown-linux-gnu.tar.gz\n✓ uncloud-corrosion binary installed: /usr/local/bin/uncloud-corrosion\n✓ Systemd unit file created: /etc/systemd/system/uncloud-corrosion.service\n⏳ Starting Uncloud machine daemon (uncloud.service)...\n✓ Uncloud machine daemon started.\n✓ Uncloud installed on the machine successfully! 🎉\nCluster \"default\" initialised with machine \"oracle-vm\"\nWaiting for the machine to be ready...\n\nReserved cluster domain: xuw3xd.cluster.uncloud.run\n[+] Deploying service caddy 1/1\n ✔ Container caddy-c47x on oracle-vm  Started                                                                                                                                          0.9s\n\nUpdating cluster domain records in Uncloud DNS to point to machines running caddy service...\n[+] Verifying internet access to caddy service 1/1\n ✔ Machine oracle-vm (152.67.101.197)  Reachable                                                                                                                                       0.1s\n\nDNS records updated to use only the internet-reachable machines running caddy service:\n  *.xuw3xd.cluster.uncloud.run  A → 152.67.101.197\n```\n\n1. The CLI SSHs into the machine and installs Docker, the `uncloudd` machine daemon and\n   [corrosion](https://github.com/superfly/corrosion) service, managed by systemd.\n2. Generates a unique WireGuard key pair, allocates a dedicated subnet `10.210.0.0/24` for the machine and its\n   containers, and configures `uncloudd` accordingly. All subsequent communication happens with `uncloudd`\n   through its gRPC API over SSH.\n3. Configures and starts `corrosion`, a CRDT-based distributed SQLite database to share cluster state between machines.\n4. Creates a Docker bridge network connected to the WireGuard interface.\n5. This machine becomes an entry point for the newly created cluster which is stored in the cluster config under\n   `~/.config/uncloud` on your local machine.\n\n**When you add another machine:**\n\n```bash\n$ uc machine add --name hetzner-server root@5.223.45.199\nDownloading Uncloud install script: https://raw.githubusercontent.com/psviderski/uncloud/refs/heads/main/scripts/install.sh\n⏳ Running Uncloud install script...\n✓ Docker is already installed.\n✓ Linux user and group 'uncloud' created.\n⏳ Installing Uncloud binaries...\n⏳ Downloading uncloudd binary: https://github.com/psviderski/uncloud/releases/latest/download/uncloudd_linux_amd64.tar.gz\n✓ uncloudd binary installed: /usr/local/bin/uncloudd\n⏳ Downloading uninstall script: https://raw.githubusercontent.com/psviderski/uncloud/refs/heads/main/scripts/uninstall.sh\n✓ uncloud-uninstall script installed: /usr/local/bin/uncloud-uninstall\n✓ Systemd unit file created: /etc/systemd/system/uncloud.service\nCreated symlink /etc/systemd/system/multi-user.target.wants/uncloud.service → /etc/systemd/system/uncloud.service.\n⏳ Downloading uncloud-corrosion binary: https://github.com/psviderski/corrosion/releases/latest/download/corrosion-x86_64-unknown-linux-gnu.tar.gz\n✓ uncloud-corrosion binary installed: /usr/local/bin/uncloud-corrosion\n✓ Systemd unit file created: /etc/systemd/system/uncloud-corrosion.service\n⏳ Starting Uncloud machine daemon (uncloud.service)...\n✓ Uncloud machine daemon started.\n✓ Uncloud installed on the machine successfully! 🎉\nMachine \"hetzner-server\" added to cluster\nWaiting for the machine to be ready...\n\n[+] Deploying service caddy 1/1\n ✔ Container caddy-d36c on hetzner-server  Started                                                                                                                                     1.0s\n\nUpdating cluster domain records in Uncloud DNS to point to machines running caddy service...\n[+] Verifying internet access to caddy service 2/2\n ✔ Machine hetzner-server (5.223.45.199)  Reachable                                                                                                                                    0.2s\n ✔ Machine oracle-vm (152.67.101.197)     Reachable                                                                                                                                    0.1s\n\nDNS records updated to use only the internet-reachable machines running caddy service:\n  *.xuw3xd.cluster.uncloud.run  A → 152.67.101.197, 5.223.45.199\n\n$ uc machine ls\nNAME             STATE   ADDRESS         PUBLIC IP        WIREGUARD ENDPOINTS\noracle-vm        Up      10.210.0.1/24   152.67.101.197   10.0.0.95:51820, 152.67.101.197:51820\nhetzner-server   Up      10.210.1.1/24   5.223.45.199     5.223.45.199:51820, [2a01:4ff:2f0:128b::1]:51820\n```\n\n1. The second machine gets provisioned just like the first. A non-root SSH user will need `sudo` access.\n2. Allocates a new subnet `10.210.1.0/24` for the second machine and its containers.\n3. Registers the second machine in the cluster state and exchanges WireGuard keys with the first machine.\n4. Both machines establish a WireGuard tunnel between each other, allowing Docker containers connected to the bridge\n   network to communicate directly across machines.\n5. Configures and starts `corrosion` on the second machine to sync the cluster state.\n6. The second machine is added as an alternative entry point in the cluster config.\n7. If one of the machines goes offline, the other machine can still serve cluster operations.\n\nIf one more machine is added, the process repeats with a new subnet. The new machine needs to establish a WireGuard\nconnection with only one of the existing machines. Other machines will learn about it through the shared cluster state\nand automatically establish a WireGuard tunnel with it.\n\n**When you run a service:**\n\n```bash\n$ uc run -p app.example.com:8000/https image/my-app\n\n[+] Running service my-app-1b3b (replicated mode) 1/1\n ✔ Container my-app-1b3b-tcex on oracle-vm  Started\n\nmy-app-1b3b endpoints:\n • https://app.example.com → :8000\n • https://my-app-1b3b.xuw3xd.cluster.uncloud.run → :8000\n```\n\n1. CLI picks a machine to run your container.\n2. `uncloudd` that the CLI communicates with uses [`grpc-proxy`](https://github.com/siderolabs/grpc-proxy) to forward\n   the request to the target machine to launch a container there.\n3. `uncloudd` on the target machine starts the Docker container in the bridge network and stores its info in the\n   cluster's distributed state.\n4. The container gets a cluster-unique IP address from the bridge network (in the `10.210.X.2-254` range) and becomes\n   accessible from other machines in the cluster.\n5. Caddy reverse proxy which runs in [`global`](https://github.com/compose-spec/compose-spec/blob/main/deploy.md#mode)\n   mode on each machine watches the cluster state for new services and updates its configuration to route traffic to the\n   new container.\n\nLook ma, no control plane or master nodes to maintain! Just a simple overlay network and eventually consistent state\nsync that lets machines work together. Want to check on things or make changes? Connect to any machine either implicitly\nusing the CLI or directly over SSH. They all have the complete cluster state and can control everything. It's like each\nmachine is a full backup of your control plane.\n\u003c/details\u003e\n\n## 🧪 Interactive tutorials\n\nTo give you a chance to play with Uncloud without even leaving your browser, we're providing interactive tutorials and playgrounds on the [iximiuz Labs](https://labs.iximiuz.com/) platform.\n\nAvailable tutorials:\n\n1. [Setting up a new Uncloud cluster](https://labs.iximiuz.com/tutorials/uncloud-create-cluster-ebebf72b) - the tutorial walks you through creating a new cluster with two machines and then deploying a simple web service to it.\n\nYou can also launch the [Uncloud playground](https://labs.iximiuz.com/playgrounds/uncloud-cluster-64523f7c) where you can play with an already initialized Uncloud cluster.\n\n## 🏗 Project status\n\nUncloud is currently in active development and is **not ready for production use**. Features may change significantly\nand there may be breaking changes between releases.\n\nWe'd love your input! Here's how you can contribute:\n\n* 🐛 Found a bug? [Open an issue](https://github.com/psviderski/uncloud/issues)\n* 💡 Have questions, ideas, or need help?\n    * Start a discussion or join an existing one in\n      the [Discussions](https://github.com/psviderski/uncloud/discussions).\n    * Join our [Discord community](https://discord.gg/eR35KQJhPu) where we discuss features, roadmap, implementation\n      details, and help each other out.\n\n## 🙏 Inspiration \u0026 Acknowledgements\n\nI'm grateful to the following projects that inspired Uncloud's design and implementation:\n\n* [Kamal](https://kamal-deploy.org/) — for proving that even in the declarative era of Kubernetes there is a place for\n  simple deployment tools that use imperative commands without complex orchestration. Kamal powers the multi-billion\n  dollar company [37signals](https://37signals.com/) where it was created, and that's truly inspiring!\n* [Fly.io](https://fly.io/) — for inspiring my vision for what self-hosted infrastructure should feel like, proving that\n  developer experience and powerful infrastructure can coexist beautifully.\n* [Tailscale](https://tailscale.com/) — for pioneering the vision of decentralised flat mesh networking with an amazing\n  user experience that feels like magic.\n* [Talos Linux](https://github.com/siderolabs/talos)\n  and [KubeSpan](https://www.talos.dev/v1.10/talos-guides/network/kubespan/) — for the machine API design using\n  [grpc-proxy](https://github.com/siderolabs/grpc-proxy) and for its elegant approach to secure WireGuard-based overlay\n  networking with zero configuration.\n* [Docker Swarm Classic](https://github.com/docker-archive/classicswarm) and\n  [Rancher 1.x](http://rancher-com-website-main-elb-elb-1798790864.us-west-2.elb.amazonaws.com/docs/rancher/v1.6/en/)\n  — for showing the power of simplicity and pragmatism in container orchestration and that not every problem needs the\n  complexity of Kubernetes.\n\nSpecial thanks to the [Corrosion](https://github.com/superfly/corrosion) project by Fly.io for providing the distributed\nSQLite database used to share Uncloud's cluster state.\n\n## 📫 Stay updated\n\n* Join our [Discord server](https://discord.gg/eR35KQJhPu) for real-time discussions, support, and updates.\n* Follow [@psviderski](https://x.com/psviderski) on X/Twitter.\n* Subscribe to [my newsletter](https://uncloud.run/#subscribe) to follow the progress, get early insights into new\n  features, and be the first to know when it's ready for production use.\n* Watch this repository for releases.\n\n## 💖 Sponsors\n\nThese companies and projects are helping Uncloud with their generous sponsorship and/or services:\n\n\u003c!-- Sentry --\u003e\n\u003ca href=\"https://sentry.io/welcome/\"\u003e\n  \u003cimg height=\"100\" alt=\"Sentry\" src=\"https://github.com/user-attachments/assets/6c1439c0-d20d-40dc-a669-c9aa94651dfa\" /\u003e\n\u003c/a\u003e\n\n## ❤️ Contributors\n\n\u003ca href=\"https://trendshift.io/repositories/14069\"\u003e\n    \u003cimg alt=\"Trendshift\" src=\"https://trendshift.io/api/badge/repositories/14069\" /\u003e\n\u003c/a\u003e\n\nThank you [@cedws](https://github.com/cedws) for being the first contributor to Uncloud! 🎉\n\n\u003ca href=\"https://github.com/psviderski/uncloud/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=psviderski/uncloud\" /\u003e\n\u003c/a\u003e\n","funding_links":["https://github.com/sponsors/psviderski"],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsviderski%2Funcloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpsviderski%2Funcloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsviderski%2Funcloud/lists"}