Feature Request – One-Step Pokémon Showdown Side-Server Setup.

turborx
FREETop 10% Contributor

2 days ago

Hi, I am trying to deploy an official Pokémon Showdown side-server on Railway, but the default docs require a lot of manual tweaks (custom Dockerfiles, ENV parsing, database adapters, proxy flags, etc.). In reality, the upstream repo already works out-of-the-box if you simply:

```bash
git clone https://github.com/smogon/pokemon-showdown.git
cd pokemon-showdown
npm install
npm run start

$10 Bounty

11 Replies

turborx
FREETop 10% Contributor

2 days ago

N/A


turborx
FREETop 10% Contributor

2 days ago


turborx
FREETop 10% Contributor

2 days ago

Team Railway, Could you please consider adding native support for deploying Pokémon Showdown side servers? Ideally, users should be able to simply clone the repository, and the server should be up and running no additional configuration, Dockerfile, or environment tweaks required. This would greatly streamline the deployment process for a widely used open-source project.


turborx
FREETop 10% Contributor

2 days ago

Additional Feature Request – File Management UI

It would be extremely helpful if Railway offered a basic file management system for server-based projects.

For example, Pokémon Showdown is a Node.js-based multiplayer server that relies heavily on editable config files such as config/usergroups.csv, formats.json, and various log or plugin files. Right now, making small changes requires redeploying or using SSH and volume workarounds.

A built-in file manager that allows users to browse directories, edit files inline, upload/download assets, and restart the server as needed would make hosting and maintaining side servers much more efficient.

This feature would benefit many backend-focused projects not just Showdown and make Railway more powerful for managing dynamic, file-driven servers.


smolpaw
HOBBYTop 10% Contributor

2 days ago

Building a template for this, already done with the Dockerfile


smolpaw
HOBBYTop 10% Contributor

2 days ago

Just getting things polished


smolpaw
HOBBYTop 10% Contributor

2 days ago

Here you go : https://railway.com/deploy/pokemon-showdown

You need to go into public networking and specify the port 8000
How do I specify this in the template so it automatically binds to it ? I already have an EXPOSE command in Dockerfile


2 days ago

Thank you for creating a template Kishan!

For any further discussion, consider using the Template Discussion Thread for easy access in the future https://station.railway.com/templates/pokemon-showdown-d67c1f06


smolpaw

Here you go : https://railway.com/deploy/pokemon-showdownYou need to go into public networking and specify the port 8000How do I specify this in the template so it automatically binds to it ? I already have an EXPOSE command in Dockerfile

turborx
FREETop 10% Contributor

a day ago

Deployment is crashed.


turborx

Deployment is crashed.

smolpaw
HOBBYTop 10% Contributor

a day ago

May I see the crash error ?


turborx
FREETop 10% Contributor

20 hours ago

ok


turborx
FREETop 10% Contributor

20 hours ago

the relevant error from the failed deploy:

Starting Container
/app/node_modules/esbuild/lib/main.js:2150
      throw reject;
      ^
Error: The service was stopped
    at /app/node_modules/esbuild/lib/main.js:969:34

Error: Command failed: node build
    at build (/app/pokemon-showdown:30:27)
    at Object. (/app/pokemon-showdown:143:2)
    status: 1

To fix this, please update the template as follows:

Remove the node build step entirely

at package.json

"scripts": {
  "start": "node server.js"
}

At Dockerfile:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 8080  # Railway will bind $PORT automatically
CMD ["npm", "start"]

and then server.js (entrypoint):

const PORT = parseInt(process.env.PORT, 10) || 8000;
server.listen(PORT, () => console.log(`Listening on ${PORT}`));

With these changes, Railway will skip the failing build step and start the Pokemon Showdown server directly.


turborx
FREETop 10% Contributor

20 hours ago

the template is attempting to run a build script (node build) which triggers esbuild and then crashes. Because Showdown doesn’t require a separate build step, I recommend this changes.


smolpaw
HOBBYTop 10% Contributor

13 hours ago

There is no build step in the Dockerfile i am using for the template,
You can check here: https://github.com/smolpaw/pokemon-showdown-railway/blob/master/Dockerfile
At line 33 i did write "Install dependencies and build" but didn't actually run the build step as that wasn't mentioned in the readme link you posted


smolpaw
HOBBYTop 10% Contributor

13 hours ago

Btw I haven't had a single build failure when i have tried to deploy it.
You mentioned deployment crashed so it was a deployment failure not build failure right ?

Here are the deployment logs when I try it

2025-08-03T20:38:56.000000000Z Starting Container
2025-08-03T20:38:58.795738969Z RESTORE CHATROOM: lobby
2025-08-03T20:38:58.795746267Z RESTORE CHATROOM: staff
2025-08-03T20:38:58.795753038Z Worker 1 now listening on 0.0.0.0:8000
2025-08-03T20:38:58.795760166Z Test your server at http://localhost:8000


smolpaw
HOBBYTop 10% Contributor

13 hours ago

Are you going into service settings and specifying any build or run commands ?
There is no need for any of that


smolpaw
HOBBYTop 10% Contributor

13 hours ago

I just figured out the reason for the deployment crash
You need to upgrade your plan to Hobby. 0.5GB is not enough to host this template

Attachments


turborx
FREETop 10% Contributor

6 hours ago

Thanks for pinpointing that, I'll upgrade to the Hobby plan since 0.5 GB isn’t enough, but if you have any tips to reduce the memory footprint so it can even run on the Free tier, I’d like to hear them.


turborx

Thanks for pinpointing that, I'll upgrade to the Hobby plan since 0.5 GB isn’t enough, but if you have any tips to reduce the memory footprint so it can even run on the Free tier, I’d like to hear them.

smolpaw
HOBBYTop 10% Contributor

5 hours ago

I am not going to review such a massive codebase to save few dollars in memory cost.
Maybe open up an issue with the project regarding memory usage and somebody familiar with the codebase could give you an answer.