Binato 
An implementation of osu!Bancho in TypeScript
I'm sorry peppy
Features:
- Multiplayer + Invites
- Spectator
- Tourney Client support
- User Panel
- Friends List
- Chat & Channels
- Private Messages
- Chat Bot (see commands folder)
Planned additions | List of currently known bugs
Setup:
While I don't support setting this up yourself, it is fairly easy to do.
All that should be required is:
- NodeJS > 25
- MariaDB
- Optional (Disabled via config):
- Redis
- Prometheus
Clone the repo and run npm i to install required packages, then copy config.example.json to config.json and edit to your liking (this is where http compression, prometheus and redis can be enabled/disabled)
After doing this running npm run dev should start the server.
If you want to build something standalone, you can run the build process using npm run build.
Reporting bugs:
To report a bug create a new issue and include information such as your OS / Distro, Node version, disabled Binato features (e.g. Prometheus, Redis, compression) and console output at the time of the bug if applicable.
How to connect:
See 2022 - Now for the preferred way to connect now.
Before 2013:
Bancho was historically implemented using a raw TCP socket, and was switched to HTTP with a queue serverside so it could be put through Cloudflare for DDOS protection.
In theory this means that this server should be able to communicate with older clients as the protocol is practically identical, however this is not currently supported.
2013 - Stable Fallback (2015 / 2016 ?):
From 2013 to the Fallback client, HTTP can be used, so for that you just need to direct it to the server
You can do this using the hosts file.
Location on Linux: /etc/hosts
Location on Mac: /private/etc/hosts
Location on Windows: C:\Windows\system32\drivers\etc\hosts
Add an entry in the hosts file that looks like the following:
<server_ip> c.ppy.sh c1.ppy.sh
Where
2016 - Early 2021:
Versions of osu! past Stable Fallback use HTTPS and as such you'll have to create a self signed certificate and make the server identify as ppy.sh
In 2018 there were also new subdomains added which are:
- c2.ppy.sh
- c3.ppy.sh
- c4.ppy.sh
- c5.ppy.sh
- c6.ppy.sh
- ce.ppy.sh
Add an entry in the hosts file that looks like the following:
<server_ip> c.ppy.sh c1.ppy.sh c2.ppy.sh c3.ppy.sh c4.ppy.sh c5.ppy.sh c6.ppy.sh ce.ppy.sh
2022 - Now:
There is a -devserver launch flag in the game which can be passed to the client to connect to a specific server. Example usage:
osu!.exe -devserver example.com
You need to have your subdomains structured like osu!'s with the exception of c*.ppy.sh domains. There is only one that is polled for -devserver usage.
An example setup would be:
- osu.example.com (Score submit & web stuff)
- c.example.com (Bancho)
- a.example.com (Profile pictures)
In addition to all of this, your domain must have HTTPS. I recommend Cloudflare for this task.
As this is just a launch flag on the client, the hosts entries are no longer required.
Other Binato components:
Website:
Binato's website is handled by Binato-Website
Profile Pictures:
Profile pictures can be handled by any standard HTTP server, there is also one I made for the task here: Binato-ProfilePicture