Skip to content

Getting Started

Requirements

  • Node.js 20.6 or newer for native .env support.
  • A Plex Media Server with an admin Plex token, or a Jellyfin/Emby server with an admin API key.
  • An SMTP provider if you want automated email notifications.

Install Locally

Clone the repository and install dependencies:

bash
git clone https://github.com/jl94x4/Server-Manager-Portal.git
cd Server-Manager-Portal
npm install

Create a .env file with a signing secret:

bash
printf 'JWT_SECRET=%s\n' "$(node -e "console.log(require('crypto').randomBytes(48).toString('hex'))")" > .env

Start the app:

bash
npm start

npm start builds Tailwind CSS, bundles the React frontend with esbuild, stamps the version file, and starts the Express server on port 2121.

Open http://localhost:2121 and complete the setup wizard.

First-Time Setup

The setup wizard asks you to choose a media server mode:

ModeAuthenticationAnalytics CompanionBranding
PlexPlex.tv OAuth, Plex token, selected owned serverTautulliPlex or custom theme
JellyfinJellyfin username/password or Quick ConnectJellystatJellyfin server assets or custom theme
EmbyEmby-compatible server connectionOptional external analytics/status toolsEmby or custom theme

After setup, use the Settings area to configure the media server, SMTP, temporary access, branding, status services, integrations, home layout, and scheduled tasks.

Runtime Data

Runtime data is written to config/ by default. Docker deployments mount this directory to /app/config.

Important files include:

FilePurpose
config/config.jsonServer and portal configuration
config/users.jsonPortal user records
config/audit-log.jsonSystem action history
config/trending-cache.jsonCached analytics and trending data
config/analytics-cache.jsonCached dashboard analytics

Older root-level JSON files are migrated into config/ automatically on startup when the destination file does not already exist.

Built for the self-hosting community.