v0.9.0

psviderski/uncloudv0.9.0Jul 9, 2025by psviderski

AI Summary

This release provides critical Docker 28.2.0+ compatibility fixes for cross-machine container connectivity, sets better defaults for container logging with the new 'local' log driver preserving 100MB of logs per container, and includes various developer experience and housekeeping improvements.

Key Highlights

  • Fixed Docker 28.2.0+ compatibility for cross-machine container connectivity (requires migration script for existing machines)
  • Default log driver changed to 'local' - preserves 100MB logs per container with automatic compression
  • Added unofficial Debian package repository maintained by @dariogriffo
  • Uncloud-managed volumes now labeled with 'uncloud.managed' for easier identification
  • Anonymous volumes are now properly cleaned up when removing service containers

Breaking Changes

  • Docker 28.2.0+ fix only works for new clusters and new machines - existing machines require manual migration script
  • Migration process may cause temporary service disruption for existing Docker 28.2.0+ installations

New Features

  • Default log driver set to 'local' for all service containers with 100MB storage and compression
  • Unofficial Debian package repository added
  • Volumes labeled with 'uncloud.managed' for identification
  • Anonymous volumes cleaned up when removing service containers
  • Protobuf compiler managed via mise for consistent development environments
  • Added CI checks for protobuf generation on multiple platforms
  • Added .editorconfig for consistent code formatting

Full Release Notes

# Uncloud 0.9.0 Release Notes

This release includes critical Docker 28.2.0+ compatibility fixes, sets better defaults for container logging, and includes minor housekeeping improvements.

## Upgrade to 0.9.0

### Uncloud CLI locally

To upgrade the Uncloud CLI (`uc`) locally:

```bash
# Homebrew (macOS, Linux)
brew upgrade uncloud

# Install script (macOS, Linux)
curl -fsS https://get.uncloud.run/install.sh | sh
```

### Machine daemon

To upgrade the Uncloud daemon on your machines, run the following commands on each machine:

```bash
# AMD64
curl -fsSL -o uncloudd.tar.gz https://github.com/psviderski/uncloud/releases/download/v0.9.0/uncloudd_linux_amd64.tar.gz
# ARM64
# curl -fsSL -o uncloudd.tar.gz https://github.com/psviderski/uncloud/releases/download/v0.9.0/uncloudd_linux_arm64.tar.gz
tar -xf uncloudd.tar.gz
sudo install uncloudd /usr/local/bin/uncloudd
rm uncloudd uncloudd.tar.gz
sudo systemctl restart uncloud
```

## Bug fixes

### Docker 28.2.0+ compatibility

Fixed connectivity between containers across machines with Docker 28.2.0 and later versions. The fix only works for **new** clusters and **new** machines added to existing clusters.

Starting with Docker 28.2.0 (https://github.com/moby/moby/pull/49832), Docker networks must explicitly specify from which host interfaces they allow [direct routing](https://docs.docker.com/engine/network/packet-filtering-firewalls/#direct-routing) to their containers. This is done by specifying the `com.docker.network.bridge.trusted_host_interfaces` option when creating the network. We now create the `uncloud` Docker network with `com.docker.network.bridge.trusted_host_interfaces=uncloud` option to allow the WireGuard mesh network (`uncloud` interface) to route traffic to uncloud-managed containers.

If you **upgraded Docker to 28.2.0 or a later version on an existing machine**, you need to manually recreate the `uncloud` Docker network with the `com.docker.network.bridge.trusted_host_interfaces=uncloud` option on it to fix cross-machine communication. We prepared the [migration script](https://github.com/psviderski/uncloud/blob/main/scripts/migrate_docker_28.2.0.sh) that will do that for you.
**⚠️ Note:** the migration process may cause temporary service disruption. Download and run it on your machines:

```
curl -O https://raw.githubusercontent.com/psviderski/uncloud/refs/heads/main/scripts/migrate_docker_28.2.0.sh
chmod +x migrate_docker_28.2.0.sh
sudo ./migrate_docker_28.2.0.sh
rm migrate_docker_28.2.0.sh
```

## New features

* The default log driver for all service containers is set to [`local`](https://docs.docker.com/engine/logging/drivers/local/), which preserves 100MB of log messages per container and uses automatic compression to reduce the size on disk. There is no longer a need to manually specify the log driver limits to prevent logs from filling up the disk space. Contributed by @zasdaym.
* Added unofficial [Debian package repository](https://github.com/dariogriffo/uncloud-debian/) maintained by @dariogriffo.

## Improvements

* Uncloud-managed volumes are labeled with `uncloud.managed` to make it easier to identify and manage them.
* Anonymous volumes are now properly cleaned up when removing service containers.

## Developer Experience

* Protobuf compiler and Go plugins are now managed through [`mise`](https://mise.jdx.dev/), using consistent versions across all development environments.
* Added CI checks for protobuf generation on multiple platforms.
* Added `.editorconfig` for consistent code formatting across different editors.

## Contributors

Special thanks to our contributors for this release:

* @dariogriffo - Debian package repository
* @tonyo - Multiple improvements including `.editorconfig` and build fixes
* @krishna-santosh - Documentation fixes
* @zasdaym - Default log driver implementation

## Changelog

* f75afa0cec969cee44dae6310f5122bf85c79aa8 Merge branch 'pasha/machine-rm'
* 638f32095931f0d0d420fff5be64f05ebab541a2 build: Install protobuf tools via mise (#77)
* 2f35ac6498de29600032644b6dca4e13394b0cc3 chore: Add .editorconfig
* 8e0a24e781f8b2cbacba530b7d8d77fd421083ca chore: add donate button in README
* e3e39dde327b5f9e4bb0685ea2128d43e68b3fbd chore: create FUNDING.yml
* 0f38b128fa51711f4ea9e990cd2b8ccdcddf2ada chore: fail 'machine rm' as not fully implemented
* a73cbfd691c05081f35d210dbf13b24050e4750e chore: hide incomplete machine rm command from help output
* 2b4da1e6fefe75b43721321c01ae42cbf1b97b22 chore: remove anonymous volumes created by service containers when removing
  them
* 4c77fe2cfd474ea5eb0d09c07ec03f05ad71c9cf chore: tidy up
* 5c8beb8bd35bdc8ad4e8a839c8cd7162ea88a718 chore: tidy up go.mod, remove toolchain
* 44549c00fda1b7d6b414ea7841729b3bb91ced98 feat: Label new volumes as managed by uncloud (#79)
* 535b91fe523f5479238f5f56c25feacb2b0695ac feat: add stub for Reset method in machine API
* 59b96cc01f7d0050c00c06030ad4035f7e6e241c feat: init 'machine rm' command that outputs service containers that will be
  removed
* be8b4f079faaed6f7edb92ffc02198a5df2fde7c feat: remove containers on machine before removing it
* 1abadaef505d55e4417bf6190a785cb05f7bc1ba feat: set default log driver for service containers to 'local' (#83)
* 3b1ce42dd7e2e813e9cdc3f2825f912f0368777a fix(docs): add missing word to complete the sentence (#82)
* 26f34df3e64554c3a6900671e5c417549e7c90c8 fix: Improve output for build operations
* 89fb9efcfac89afa72238c5f1fe1387986a5167c fix: Use GITHUB_TOKEN to increase the rate limit for mise action
* 55773e92ce93992805dc57271a64d8fbf5d21d15 fix: allow direct routing from WireGuard mesh to containers for Docker
  28.2.0+
* 3b89af4a11e1194c850c281f97131f7be0870c11 fix: e2e compose build test on macOS with Docker Desktop