
Collection of well-tested utility extensions and types: ergonomic collection/string helpers (Vec.map, split1), a cheap-copy Dupe trait, and ARef abstraction for uniform references.
This is a Kotlin Multiplatform line-by-line transliteration port of facebookincubator/gazebo.
Original Project: This port is based on facebookincubator/gazebo. All design credit and project intent belong to the upstream authors; this repository is a faithful port to Kotlin Multiplatform with no behavioural changes intended.
This is an in-progress port. The goal is feature parity with the upstream Rust crate while providing a native Kotlin Multiplatform API. Every Kotlin file carries a // port-lint: source <path> header naming its upstream Rust counterpart so the AST-distance tool can track provenance.
The text below is reproduced and lightly edited from
https://github.com/facebookincubator/gazebo. It is the upstream project's own description and remains under the upstream authors' authorship; links have been rewritten to absolute upstream URLs so they continue to resolve from this repository.
This library contains a collection of well-tested utilities. Most modules stand alone, but taking a few representative examples:
gazebo::prelude::* is intended to be imported as such, and provides
extension traits to common types. For example, it provides Vec::map which is
equivalent to iter().map(f).collect::<Vec<_>>(), and str::split1 like
split but which only splits once. We hope some of these functions one day
make it into the Rust standard library.gazebo::dupe provides the trait Dupe with the member dupe, all of which
are exactly like Clone. The difference is that Dupe should not be
implemented for types that reallocate or have expensive clone operations -
e.g. there is Dupe for Arc and usize, but not for String and Vec. By
using dupe it is easy to focus on the clone calls (which should be rare)
and ignore things whose cost is minimal.gazebo::cell::ARef provides a type which is either a Ref<T> or a direct
reference &T, with operations that make it look like Ref -- allowing you
to uniformly convert a reference into something like a Ref.The functionality provided by Gazebo is not stable, and continues to evolve with both additions (as we find new useful features) and removals (as we find better patterns or libraries encapsulating the ideas better). While the code varies in usefulness and design quality, it is all well tested and documented.
Gazebo can be depended upon by adding gazebo to your [dependencies], using
the standard
Cargo patterns.
The two interesting directories in this repo are gazebo (which contains the
source to Gazebo itself) and gazebo_derive (which contains support for
#[derive(Dupe)] and other Gazebo traits). Usually you will directly import
gazebo, but gazebo_derive is a required transitive dependency if you are
sourcing the library from GitHub.
You can learn more about Gazebo in this introductory video, or from the following blog posts:
CHANGELOG.md with the changes since the last release.
This link
can help (update to compare against the last release).Cargo.toml files. Bump them by 0.0.1
if there are no incompatible changes, or 0.1.0 if there are. Bump the
dependency in gazebo to point at the latest gazebo_derive version.CHANGELOG.md, the two LICENSE- files and README.md into
each gazebo and gazebo_derive subdirectory.cargo publish --allow-dirty --dry-run, then without the --dry-run,
first in gazebo_derive and then gazebo directories.v0.X.Y, using the gazebo version as the name.Gazebo is both MIT and Apache License, Version 2.0 licensed, as found in the LICENSE-MIT and LICENSE-APACHE files.
dependencies {
implementation("io.github.kotlinmania:gazebo-kotlin:0.1.1")
}./gradlew build
./gradlew testSee AGENTS.md and CLAUDE.md for translator discipline, port-lint header convention, and Rust → Kotlin idiom mapping.
This Kotlin port is distributed under the same MIT license as the upstream facebookincubator/gazebo. See LICENSE (and any sibling LICENSE-* / NOTICE files mirrored from upstream) for the full text.
Original work copyrighted by the gazebo authors.
Kotlin port: Copyright (c) 2026 Sydney Renee and The Solace Project.
Thanks to the facebookincubator/gazebo maintainers and contributors for the original Rust implementation. This port reproduces their work in Kotlin Multiplatform; bug reports about upstream design or behavior should go to the upstream repository.
This is a Kotlin Multiplatform line-by-line transliteration port of facebookincubator/gazebo.
Original Project: This port is based on facebookincubator/gazebo. All design credit and project intent belong to the upstream authors; this repository is a faithful port to Kotlin Multiplatform with no behavioural changes intended.
This is an in-progress port. The goal is feature parity with the upstream Rust crate while providing a native Kotlin Multiplatform API. Every Kotlin file carries a // port-lint: source <path> header naming its upstream Rust counterpart so the AST-distance tool can track provenance.
The text below is reproduced and lightly edited from
https://github.com/facebookincubator/gazebo. It is the upstream project's own description and remains under the upstream authors' authorship; links have been rewritten to absolute upstream URLs so they continue to resolve from this repository.
This library contains a collection of well-tested utilities. Most modules stand alone, but taking a few representative examples:
gazebo::prelude::* is intended to be imported as such, and provides
extension traits to common types. For example, it provides Vec::map which is
equivalent to iter().map(f).collect::<Vec<_>>(), and str::split1 like
split but which only splits once. We hope some of these functions one day
make it into the Rust standard library.gazebo::dupe provides the trait Dupe with the member dupe, all of which
are exactly like Clone. The difference is that Dupe should not be
implemented for types that reallocate or have expensive clone operations -
e.g. there is Dupe for Arc and usize, but not for String and Vec. By
using dupe it is easy to focus on the clone calls (which should be rare)
and ignore things whose cost is minimal.gazebo::cell::ARef provides a type which is either a Ref<T> or a direct
reference &T, with operations that make it look like Ref -- allowing you
to uniformly convert a reference into something like a Ref.The functionality provided by Gazebo is not stable, and continues to evolve with both additions (as we find new useful features) and removals (as we find better patterns or libraries encapsulating the ideas better). While the code varies in usefulness and design quality, it is all well tested and documented.
Gazebo can be depended upon by adding gazebo to your [dependencies], using
the standard
Cargo patterns.
The two interesting directories in this repo are gazebo (which contains the
source to Gazebo itself) and gazebo_derive (which contains support for
#[derive(Dupe)] and other Gazebo traits). Usually you will directly import
gazebo, but gazebo_derive is a required transitive dependency if you are
sourcing the library from GitHub.
You can learn more about Gazebo in this introductory video, or from the following blog posts:
CHANGELOG.md with the changes since the last release.
This link
can help (update to compare against the last release).Cargo.toml files. Bump them by 0.0.1
if there are no incompatible changes, or 0.1.0 if there are. Bump the
dependency in gazebo to point at the latest gazebo_derive version.CHANGELOG.md, the two LICENSE- files and README.md into
each gazebo and gazebo_derive subdirectory.cargo publish --allow-dirty --dry-run, then without the --dry-run,
first in gazebo_derive and then gazebo directories.v0.X.Y, using the gazebo version as the name.Gazebo is both MIT and Apache License, Version 2.0 licensed, as found in the LICENSE-MIT and LICENSE-APACHE files.
dependencies {
implementation("io.github.kotlinmania:gazebo-kotlin:0.1.1")
}./gradlew build
./gradlew testSee AGENTS.md and CLAUDE.md for translator discipline, port-lint header convention, and Rust → Kotlin idiom mapping.
This Kotlin port is distributed under the same MIT license as the upstream facebookincubator/gazebo. See LICENSE (and any sibling LICENSE-* / NOTICE files mirrored from upstream) for the full text.
Original work copyrighted by the gazebo authors.
Kotlin port: Copyright (c) 2026 Sydney Renee and The Solace Project.
Thanks to the facebookincubator/gazebo maintainers and contributors for the original Rust implementation. This port reproduces their work in Kotlin Multiplatform; bug reports about upstream design or behavior should go to the upstream repository.