zero-confirmation, javascript-optional, monero-only superchat app for livestreams
Livestreaming is a popular source of entertainment for almost everybody online. Whether gamers, VTubers, or podcasts, most content creators use livestreaming to communicate directly with their audience and fans. YouTube is the most popular place for livestreams by far, but there are others. Twitch, D-Live, Odysee, and others offer the same functionality.
One of the key features of livestreaming is superchats. They allow fans to communicate directly with streamers, and streamers to get financial support from their fans. Unfortunately, on mainstream platforms like YouTube and Twitch, fan support requires using real-life bank accounts and credit cards, which is both a privacy and a security problem. Newer platforms use cryptocurrency, such as LBC on Odysee or TRX on DLive. While this is an improvement, it's still far from perfect. Some platforms still require verification with real-life ID to user cryptocurrency superchats. And even if they don't, they're still centralized on one website and controlled by one company.
Thankfully, there's a solution. Shadowchat is a zero-confirmation, javascript-optional, monero-only superchat app for livestreams. Shadowchat uses Go to create a webserver connected to the Monero Wallet RPC. Viewers can send a message attached to a Monero transaction, which appears on a password-protected private page and can be viewed in popular streaming software like OBS. Because it's self-hosted, no third parties can interfere to impose unfair rules. The system can be used on any livestreaming platform, even self-hosted ones like PeerTube and OwnCast. And best of all, Shadowchat is Free and Open Source Software.
You'll need to install the Go toolchain (at least verion 1.21.x) and make note of your GOPATH afterwards before you proceed with installation.
Shadowchat requires a public, internet-facing server for other people to access. Renting a VPS might be the easiest way to do this. The examples below assume you're installing in /opt/shadowchat
, but you're free to put it anywhere you like as long as the config points to it correctly.
Log into your server and run the following from the command line:
sudo mkdir -p /opt/shadowchat
sudo chown shadowchat:shadowchat /opt/shadowchat
go install gitgud.io/greyarea/shadowchat@latest
sudo mv $(go env GOPATH)/bin/shadowchat /opt/shadowchat/
It's recommended to allow shadowchat to manage the monero-wallet-rpc
. The instructions below assume this, but you're free to run it seperately if you prefer.
/opt/shadowchat/
. Make sure that both files are in the same directory, alongside the shadowchat executable.monero-wallet-rpc
binary that is bundled with the getmonero.org wallets and copy it to the VPS, also into /opt/shadowchat
alongside the wallet and shadowchat files.The shadowchat executable can create a commented example configuration file to use as the basis for the configuration. This MUST be edited and shadowchat will refuse to run with the default configuration:
/opt/shadowchat/shadowchat default-config -o /opt/shadowchat/config.yml
nano /opt/shadowchat/config.yml
The following config options should be set:
display.auth_key
: the "authentication key" for view and alert pageswallet.daemon.enable
: true
to have shadowchat spawn the monero-wallet-rpc
wallet.daemon.wallet_path
: /opt/shadowchat/walletname_viewonly
(the path of the viewonly wallet. Change if it's located elsewhere).wallet.daemon.executable_path
: /opt/shadowchat/monero-wallet-rpc
(the path of the monero-wallet-rpc
. Change if it's located elsewhere).Once the edited config.yml is saved, you may start the shadowchat service:
/opt/shadowchat/shadowchat -f /opt/shadowchat/config.yml
At this point, the shadowchat service is not automated and will stop if the server reboots. You may automate the service based on your preference, but a simple systemd unit file is provided in the source code as an example.
A webserver at 127.0.0.1:8900 is now running. You'll need to set up a nginx proxypass to point a URL at it.
.config.yml
earlier)assets.disable_internal
in config.yml
to true
, put your customized assets in a directory, and point to it in assets.asset_dir
There are a handful of sub-commands that can be used to administer a running instance. See shadowchat --help
for more details
JavaScript is included in shadowchat, but is 100% optional. Content is generated server-side via the Go template library, and visitors with script-blockers will be able to seamlessly access and use your shadowchat instance without issue
Add a Browser source in OBS and point it to https://example.com/alert?auth=auth_key
Shadowchat comes from https://gitgud.io/greyarea/shadowchat/. It started off as https://git.sr.ht/~anon_/shadowchat, which was forked to https://github.com/lukesmithxyz/shadowchat. The original author has vanished off the face of the Earth, and the original upstream has since disappeared.
Japanese localization and the Shadowchan mascot are based on https://gitgud.io/japananon/shadowchatjp and used with permission.
Shadowchat was neither created nor is it being developed or maintained by the makers of this website. This site exists solely for the purpose of spreading awareness of Shadowchat, and encouraging its adoption.
The Shadowchat software is licensed under GPLv3. The mascot character "Shadowchan" is licensed under CC BY-SA 4.0, and is free to copy, share, remix, and reuse under the terms of that license.
The current maintainer of Shadowchat is not accepting donations. The creator of this website is too ashamed to ask for any. And the original creator of Shadowchat is MIA, so there's no guarantee they'd even receive any if you sent them. Use this software for zero dollars with a clean conscience.
See Shadowchat in action at the following addresses:
In the unlikely event you need to contact the creator of this website, please feel free to use the following contact form at https://peertube.anon-kenkai.com/about/contact
If you'd like to contact the developer of Shadowchat, you can try going to the GitGud repo and figuring it out for yourself.