What is Beatoraja IPFS?

Beatoraja has support for the IPFS protocol. This allows users to play and download charts inside their client. Support is already in the game!

How does IPFS work?

IPFS is a peer to peer (p2p) file sharing service. Like BitTorrent. However, it allows users to fetch specific files via their unique hash without the need for a torrent file. When a user requests a file their local IPFS node saves the file to their BMS folder but also caches it locally to share with other users on the network.

BMS Tables can add an “ipfs” value to their entries. This entry contains an IPFS CID, Beatoraja can use this CID to request the file from the IPFS network. The more people who have indexed or accessed the file the faster this process will be.


This integration is complex but with most of the hard work already done I believe it’s worth finishing the work.

For existing players

Downloading 100GB of charts for table on a new computer or downloading a 40GB pack from an event can be time-consuming and annoying to manage on disk. With the IPFS integration it would be possible to load up a custom table & only download the charts as you play them.

For new players

Getting started with BMS can be difficult. Especially when it comes to downloading & finding chart packs. With the IPFS integration, new players could add a beginners table which works with IPFS to automatically download the charts as they’re needed. Avoiding the hassle that is finding up-to-date packs.

What needs to be done?

IPFS support is in mainline Beatoraja right now! However, it’s arbitrarily limited and cannot load files that are not hosted on a hardcoded list of URLs. There is an active pull request to remove this limitation, but it does not seem like it will be merged any time soon.

Bellow are rough tasks in order that I genuinely believe I could get done given the time.

x 2022-01-25 2022-01-25 Patch beatoraja to allow any IPFS nodes epic:"Initial Setup"
x 2022-01-26 2022-01-25 Mirror a simple demo table epic:"Initial Setup"
x 2022-01-26 2022-01-25 Confirm download features on another system on another network epic:"Initial Setup"
2022-01-25 Have the patch merged into mainline or a popular fork epic:"Initial Setup"

2023-12-2 Write a cohesive guide for setting up a local IPFS node epic:"User QOL"
2023-12-2 Write a program to generate a table from a folder with IPFS CIDs epic:"User QOL"
2023-12-2 Have this program automatically create a github site hosting the table epic:"User QOL"
2023-12-2 Write Beatoraja startup script to automatically configure a local IPFS node epic:"User QOL"

2023-12-2 Setup a Teraform / Cloudformation file to stand up a mirror node on cloud providers epic:"Longevity"
2023-12-2 Set up a zero-cost IPFS mirror node for tables epic:"Longevity"
2023-12-2 Single click mirror node deploy from table generator epic:"Longevity"


I don’t know Java, so I can’t contribute directly to the Beatoraja project or any of its forks. However, if I did I would probably scrap the IPFS protocol integration completely and use BitTorrent instead. There is much more stable and available tooling out there, and it would be possible to take advantage of the infrastructure offered by existing trackers.

However, I’m unsure on the scope of implementing such a thing since (ideally) BitTorrent would be running in client, not in a separate tool. IPFS requiring a separate program to be running alongside Beatoraja is a major hurdle to using it in my opinion. The perfect in-client chart downloader should “just work” on tables that support it.

© 2024 Pfych 🏳️‍⚧️