| Go to Russian README version |
This is Space Station 13 and Buttplug.io integration through the service.
Implemented using Nuxt 3, Socket.IO and buttplug-js.
Space Station 13 is a top-down tile-based action role-playing multiplayer video game running on the freeware BYOND game engine, originally released in 2003.
The game is set on a futuristic space station; however, the location of the in-game world can differ depending on the server that is being played, including a spacecraft and an exoplanet.
Players are free to work together with their fellow crewmates to complete tasks and keep the station running smoothly, or they can choose to cause chaos and disrupt the work of others. The game has a variety of different game modes and win conditions, which can range from simple survival to complex conspiracies and political intrigue.
- You open the app and authorize (authorization is just for discord to handle bots, spam and stuff).
- Connect to Intiface Central.
- Find devices and configure them.
App allows you to set modifier for every type of interaction with your character:Facefor kisses and oral things,chestfor breasts and chest...crotchfor crotch andbackfor ass.Basicis for hugs, headpats, etc.Masochismfor Security department players.
- Generate and copy code
XXXXX-XXXXX. - Open the game and enter/paste this code in the special menu.
OOC->Plug13by default. - Enjoy your game.
Yes it is. This is the only way you can do this without hacking into a game, risking to be banned.
And also when everything is already set up, you need just to connect Intiface and copy the secret code. That's it.
Currently only vibration and oscillation are supported.
A list of devices that can connect to buttplug.io can be found on IoST Index.
The same site also contains referral links from the developers of buttplug.io for the purchase of devices - a great way to support them.
So, Space Station 13 is a game that has roleplay servers. Every server runs their own code.
This project has two parts:
- Plug13 service, that acts like a bridge between Intiface Central and the game.
- Module for SS13 servers that allows SS13 server and Plug13 service communicate.
By steps:
- On server procedure
plug13.send_emote(type, strength, duration)is called - SS13 server sends HTTP(S) POST request to Plug13 server.
- Plug13 server sends WS message to the Plug13 web-client.
- Web-client applies custom user-defined modifiers and sends message to Intiface Central.
- Intiface Central handles message and activates actuators.
- Hey! Intiface Central is already a bridge, that allows you to do that without an external server!
Yes. I know. But.
BYOND engine is so old... It doesn't allow you to use WS on the client side natively.
Yeah.
In theory I could use hidden IE11 browser window in game interface, but it would be a way bigger pain in my back to implement that, than this web-service.
Read here: Plug13 DM - ReadMe
This project uses pnpm.
# To install modules run:
pnpm install
# To start a development server:
pnpm run dev
# To build project in production mode:
pnpm run build
pnpm run prisma migrate deploy
# To preview production-built project:
pnpm run preview
# To run production-built project:
node ./server/index.mjs- Install Docker
- Clone this repo:
git clone https://github.com/SPLURT-Station/plug13.git
cd plug13- Configure environment variables:
Copy variables from .env.example to .env
cp .env.example .envThen change them to your needs
You have to provide your own PostgreSQL database
- Build the image:
docker build -t plug13 .- Run the image:
docker run -d -p 3000:3000 plug13Server will be available on http://localhost:3000
docker-compose.yml runs the same image as above. Copy .env.example to .env and set every variable there, or override keys in the compose environment block (see comments in the file).
cp .env.example .env
# edit .env
docker compose up -d --build-
PLUG13_HTTP_PORT— host port (default3000). -
Registry image: comment out
build:and setimage: ghcr.io/splurt-station/plug13:latest(or your fork). -
Optional Postgres: add
POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DBto.env, set bothPOSTGRES_*_URLvalues topostgresql://USER:PASSWORD@postgres:5432/DB(see comments in compose), then:docker compose --profile db up -d
This repo includes .github/workflows/docker-build-dokploy.yml. On every push to main it:
- Builds the image from the root
Dockerfileand pushes to GitHub Container Registry (ghcr.io/splurt-station/plug13for this repo), tags:latestand short Git SHA. - POSTs to your Dokploy Docker Compose webhook so the stack redeploys and pulls the new image.
Secrets (GitHub → Settings → Environments → production)
The workflow runs against the production environment so you can use environment secrets and protection rules (required reviewers, wait timers, branch limits).
| Secret | Description |
|---|---|
DOKPLOY_COMPOSE_WEBHOOK_URL |
Full webhook URL from Dokploy → Docker Compose → Deployments. Repository secrets still work; prefer storing this on the production environment. If omitted, the image is still pushed; the Dokploy trigger step is skipped. |
Dokploy Compose file (created in the Dokploy app) should reference the same image the workflow pushes, e.g.:
services:
app:
image: ghcr.io/splurt-station/plug13:latest
# env, ports, networks — set in Dokploy as usualForks use their own ghcr.io/<owner>/plug13 path (see the workflow log after push). For private images, configure registry credentials in Dokploy so the host can pull from GHCR.
Per Dokploy auto-deploy docs, Docker-based flows expect the pushed tag to match what the Compose service uses (e.g. latest). You can instead use API deploy (POST /api/application.deploy with x-api-key) for single applications; Compose stacks use the webhook URL pattern above.
Short opinionated guide:
curl -fsSL https://raw.githubusercontent.com/mklement0/n-install/stable/bin/n-install | bash -s 20
corepack enable pnpm- Clone this repo:
git clone https://github.com/SPLURT-Station/plug13.git
cd plug13- Install modules:
pnpm install --frozen-lockfile- Configure environment variables:
Copy variables from .env.example to .env
cp .env.example .envThen change them to your needs
You have to provide your own PostgreSQL database
- Migrate database:
pnpm prisma migrate deploy- Start the server
Development server: pnpm dev
Production server:
pnpm buildnode ./server/index.mjs
Server will be available on http://localhost:3000
If you encounter an error like
ERROR Error while requiring module shadcn-nuxt: Error: Cannot find module '@oxc-parser/binding-linux-x64-musl'
then you need to install oxc-parser manually:
pnpm install -D oxc-parser
and then rebuild the project