Rebels in the Sky: peer to peer basketball played in a terminal
P2P terminal game about spacepirates playing basketball across the galaxy
At a glance
- What is it?
- A Rust terminal game where space pirate crews play basketball across the galaxy over a libp2p peer to peer network. It ships as a crates.io package, distro packages, and a release binary, with relayer and SSH server builds you can host yourself.
- Who is it for?
- Adopt Rebels in the Sky if you want a peer to peer terminal game you can install from crates.io, from a distro package, or from a release asset, and if you enjoy a project that changes fast enough to break save files. Do not adopt it if you need a stable game with a supported save format, because the project states that breaking changes are often introduced and an invalid save file usually means starting over.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 7 days ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A basketball game where the court is a peer to peer galaxy
The premise is delivered in three lines. It is the year 2101. Corporations have taken over the world. The only way to be free is to join a pirate crew and start plundering the galaxy, and the only means of survival is to play basketball.
Underneath that is a network game. Players create a crew and wander the galaxy looking for worthy basketball opponents, and the opponents are other players connected through a peer to peer network rather than through a central matchmaker. The topics recorded for the repository are basketball, games, pirates and tui, and the crate description calls it anarchic spacepirates playing basketball in your terminal.
Two implementation choices shape everything else. It is a terminal application, built with ratatui for the interface and clap for the command line, so it runs in a terminal with no window and no graphics driver. And it is peer to peer, built on libp2p with a feature list that includes autonat, dcutr, dns, gossipsub, identify, kad, noise, quic, relay, tcp, tokio and yamux.
That means there is no server in the middle in the traditional sense. Peers find each other through the libp2p primitives, gossip about state through gossipsub, and the kad distributed hash table handles peer discovery. The game also ships a wiki at wiki.rebels.frittura.org and a trailer, so the documentation lives outside the repository.
Four ways to install it, and the build that needs system libraries
The project offers more install routes than most games of this size, and the differences between them matter if you are packaging it for a fleet of machines.
The simplest route is crates.io, since the homepage is the crates.io page for the crate and the cargo route is a single command:
cargo install rebelsThe release route is to download the latest release asset for your platform from the project's own site at rebels.frittura.org, then give the executable permission to run:
chmod +x rebelsTwo distributions package it. Arch Linux has it in the official repositories:
pacman -S rebels-in-the-skyand MacPorts has an available port:
sudo port install rebels-in-the-skyThe packaging status is tracked on repology under the project name rebels-in-the-sky, which is the place to check which other distributions carry it.
Building from source needs a few system dependencies first, because the crate links against audio and image tooling. On Linux you install libasound2-dev and cmake, on macOS cmake, and on Windows cmake. The Rust toolchain is also required. The build itself is:
cargo build --releaseThe release profile in Cargo.toml shows how seriously the author treats build times and binary size. Symbols are stripped, opt-level is 3, link time optimisation is set to fat, codegen-units is 1 and panics abort. Debug builds still get opt-level 1 for the crate itself while dependencies are compiled at opt-level 3.
The terminal is the display, and 160x48 is the floor
The game runs as a terminal application, so you start it by running the executable from your terminal:
./rebelsThere is a suggested minimal terminal size of 160x48, and the documentation warns that not all terminals support the game colors nicely, so you might need to try different ones. A tested list is given: GNOME terminal, konsole, iTerm2, tabby, WezTerm and Ghostty.
That list is a practical detail rather than a formality. A ratatui interface renders coloured cells into a character grid, and a terminal that handles 24 bit colour or wide characters badly will produce a garbled board. Since the minimum is 160 columns, a phone terminal or a split pane is going to be a problem regardless of colour support.
The interface itself is drawn by ratatui, and the crate pins a specific version of it, 0.30.2, with the equals sign, which is an exact version requirement rather than a caret range. Images are handled with the image and imageproc crates, with png and gif features enabled, and the gif crate is present for the animated planet images.
The assets directory holds the game data, and the music is not bundled. Music is streamed from internet radios, and you can add more stations by including them in assets/data/stream_data.json. That file is the extension point for the soundtrack.
Local bots fill the court until enough humans arrive
There is one default that will surprise you on first launch. Currently local bot teams are generated by default to make the game more enjoyable. That behaviour can be disabled by passing the -f flag to the executable, and the project states that in the future, when more players will be available, the game will default to online teams only.
So the current behaviour is a deliberate placeholder. A new install greets you with a match against generated opponents, and the intent is that the game becomes a pure peer to peer experience once the population is there. The -f flag is the opt out for players who want the real network behaviour now and are willing to deal with an empty lobby in the meantime.
That is the honest shape of a peer to peer game with a small population. The default is optimised for the experience, and the flag is the switch for the real thing. It is also the clearest signal that the project is at a stage where the network side is real but the population is not yet large.
The rest of the interface is the game itself, with crews, planets and opponents. The planet images are animated gifs, and the credits note that they were generated with the pixel planet generator by Deep Fold.
Relayer nodes and SSH servers are how you help or host
The networking architecture gives players two ways to contribute infrastructure, and both are documented with build flags rather than configuration files.
A relayer node helps keep the game decentralized. You run it with:
rebels -nOther players then connect to your relayer at startup using the -i flag with your address:
rebels -i <RELAYER-NODE-IP4-OR-IP6>If you run one, the project asks you to open a pull request adding your address to the list of known relayers in the documentation. A relayer requires the relayer feature at build time:
cargo build --release --features "relayer"The second option is running an SSH server for others to play through:
rebels -jPlayers connect to it with ssh, using the standard SSH client on a fixed port:
ssh <USERNAME>@<SERVER-IP4-OR-IP6> -p 3788and the build needs the ssh feature:
cargo build --release --features "ssh"Note that the SSH server mode is a different shape of hosting. A relayer helps peers find each other while the game traffic stays peer to peer. An SSH server puts the game session itself on your machine, and the player connects to it the way you would connect to any SSH host. The port 3788 is fixed in the documentation.
If you only want to try the game without hosting anything, there is a public hub. You connect via SSH with ssh frittura.org, or go to hub.frittura.org and pick rebels.
Save files break, and the project says so up front
The warning is in the first part of the project description, and it deserves to be read as a constraint rather than a caveat. The game is under heavy development and breaking changes are often introduced. If you cannot continue an old game because the save file is invalid, you probably need to start a new one or open an issue to check whether the save file can be migrated.
That is the honest position of an early game with a serialised save format. The migration path runs through a GitHub issue, one file at a time, which does not scale and is not meant to.
The licence is GPLv3, and the Cargo manifest records it as GPL-3.0-or-later, so the crate is available under the GPLv3 with the option of later versions. The package includes the source directory, the assets, the manifest, the lockfile and the readme, so a distributed crate carries everything needed to build it.
The project is not archived and the last push was on 2026-10-15. The release cadence has been steady, with v1.7.1 on 2026-07-01, v1.8.0 on 2026-08-26 and v1.8.1 on 2026-09-05, and the version in the manifest is 1.8.1. So the code moves often, which is good for the game and bad for your save file.
The contribution model is correspondingly informal. There is no fixed roadmap for the game yet, anyone is welcome to participate with ideas, and the project acknowledges that you will almost certainly encounter bugs, with issues and pull requests as the routes.
Against a normal multiplayer game, and against a normal TUI
Two comparisons help place this project.
Against a conventional multiplayer game, the difference in approach is that there is no authoritative server. Instead of connecting to a game backend that matches players and validates the match, peers find each other through libp2p, gossip state through gossipsub, and use a distributed hash table for discovery, with relay and hole punching support so connections work behind NAT. The cost is obvious and worth stating: the population is the network. If the players are not online, there is nobody to play, and the local bot default exists precisely to paper over that. A central server would solve that problem by being the thing everyone connects to, which is exactly what this project declines to be.
Against a normal terminal application, the difference is that this one is a network client that happens to have a TUI. The interface is ratatui, which is a good fit for a turn based board game, but the same design gives you no window, no mouse and no native graphics. Planet art comes from animated gifs rather than a renderer.
There is also the alternative of not hosting at all. The public hub exists so you can play right now with no infrastructure, and the SSH server mode exists so a community can run its own lobby without asking anybody to run a relayer. Those three options, public hub, own SSH server, own relayer, cover three different levels of commitment, and you can start at the cheapest one and move later.
Editorial conclusion
Adopt Rebels in the Sky if you want a peer to peer terminal game you can install from crates.io, from a distro package, or from a release asset, and if you enjoy a project that changes fast enough to break save files. Do not adopt it if you need a stable game with a supported save format, because the project states that breaking changes are often introduced and an invalid save file usually means starting over. Verify first that your terminal handles the game colors, that it is at least 160x48, and whether you want local bot teams, which are generated by default, or online teams only.
Frequently asked questions
How do I install Rebels in the Sky?
You can install the crate with cargo install rebels, download a release asset for your platform from rebels.frittura.org and chmod +x rebels, or use a distro package such as pacman -S rebels-in-the-sky on Arch Linux and sudo port install rebels-in-the-sky through MacPorts.
What do I need to build Rebels in the Sky from source?
The Rust toolchain, plus cmake on every platform, and on Linux the libasound2-dev package. The build is then cargo build --release, and the release profile strips symbols and enables fat link time optimisation.
How do I connect to another player in Rebels in the Sky?
You can connect through the public hub with ssh frittura.org or at hub.frittura.org, to your own SSH server with rebels -j on port 3788, or to a relayer with rebels -i pointing at a relayer address.
Why is the game playing against bots instead of other people?
Local bot teams are generated by default to make the game more enjoyable, and the project says this will change to online teams only once more players are available. Passing the -f flag disables the bots.
Can I add my own music stations to Rebels in the Sky?
Yes. Music is streamed from internet radios, and additional stations can be added by including them in the assets/data/stream_data.json file in the assets directory.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/ricott1-rebels-in-the-sky)Was this useful?