Jellystat is a free and open source Statistics App for Jellyfin
  • JavaScript 95.7%
  • CSS 3.9%
  • Shell 0.2%
  • HTML 0.1%
Find a file
Thegan Govender 3a054d3e54
Merge pull request #524 from CyferShepard/unstable
Bump version to 1.1.10 in package.json and update SQL queries for par…
2026-04-18 19:04:50 +02:00
.github Added github container registry to pipeline 2025-05-21 22:31:28 -04:00
.vscode Fix to address #229 Base urls. Alot of hacky code here. hope it doesnt break 2024-09-08 00:31:13 +02:00
backend Bump version to 1.1.10 in package.json and update SQL queries for parameterized statements to address sql injection concerns 2026-04-14 14:39:02 +02:00
public Merge pull request #497 from EVOTk/patch-1 2026-01-14 07:42:58 +02:00
screenshots Dependency+Logging cleanup 2023-07-01 23:33:28 +02:00
src Merge branch 'unstable' into main 2026-01-12 16:44:53 +01:00
.dockerignore Added .dockerignore file to speed up local image builds 2023-11-11 17:06:44 +02:00
.eslintrc.cjs feat: change webpack to vite 2023-11-07 16:44:45 +08:00
.gitignore chore: add .env to gitignore 2025-03-06 09:49:46 +08:00
build.sh users page + db auto create(WIP) 2023-03-23 22:37:04 +02:00
docker-compose.yml Upgrade to pg18, add healthchecks to containers 2025-12-23 12:36:33 -05:00
Dockerfile Update Dockerfile to use specific Node.js version 22.21.1 for armv7 compatability 2025-11-08 21:52:54 +02:00
entry.sh feat: docker secrets 2024-01-09 21:19:19 +08:00
index.html Update iOS PWA Icon Sizing and Background 2025-07-02 22:55:15 -04:00
LICENSE Create LICENSE 2023-04-04 14:56:13 +02:00
package-lock.json Refactor localization: Update en-UK translation code to en-GB 2025-12-24 01:59:39 +02:00
package.json Bump version to 1.1.10 in package.json and update SQL queries for parameterized statements to address sql injection concerns 2026-04-14 14:39:02 +02:00
README.md Update README with project rebuild announcement and future plans 2026-04-02 23:55:18 +02:00
release.sh improve release 2023-10-06 18:08:35 +02:00
vite.config.js Add webhooks settings component and integrate into settings page 2025-04-25 12:02:11 +02:00

Jellystat is a free and open source Statistics App for Jellyfin! (This project is still in development - expect some weirdness)

PROJECT UPDATE

Hi Everyone. Just wanted to give an update. A lot of bugs and issues keep pilling up, and since it was one of the first projects i made using Node.js there was alot that i learnt which could have been done better.

I'v decided to rebuild Jellystat from the ground up, using a more modern architecture. This means new backend language, new frontend and possibly a new database provider, i may stick to Postgres but i also want to see if maybe theres something better.

For now, what this means is , for a while, the project is not going to be updated. I will probably push a few fixes for any major bugs that are easily reproduced.

Current Features

  • Session Monitoring and logging
  • Statistics for all Libraries and Users
  • Watch History
  • User Overview and activity
  • Watch statisitcs
  • Backup and restore Data
  • Auto sync library items
  • Jellyfin Statistics Plugin Integration

Required Development

  • Responsive UI
  • Code Optimizations
  • Security Testing
  • More Validations and Error Handling
  • Multi-Server support
  • More to come

Environmental Variables

Env Default Example Description
POSTGRES_USER REQUIRED null postgres Username that will be used in postgres database
POSTGRES_PASSWORD REQUIRED null postgres Password that will be used in postgres database
POSTGRES_IP REQUIRED null jellystat-db or 192.168.0.5 Hostname/IP of postgres instance
POSTGRES_PORT REQUIRED null 5432 Port Postgres is running on
POSTGRES_SSL_ENABLED null true Enable SSL connections to Postgres
POSTGRES_SSL_REJECT_UNAUTHORIZED null false Verify Postgres SSL certificates when POSTGRES_SSL_ENABLED=true
JS_LISTEN_IP 0.0.0.0 0.0.0.0 or :: Enable listening on specific IP or :: for IPv6
JWT_SECRET REQUIRED null my-secret-jwt-key JWT Key to be used to encrypt JWT tokens for authentication
TZ REQUIRED null Etc/UTC Server timezone (Can be found at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)
JS_BASE_URL / / Base url
JS_USER null User Master Override User in case username or password used during setup is forgotten (Both JS_USER and JS_PASSWORD required to work)
JS_PASSWORD null Password Master Override Password in case username or password used during setup is forgotten (Both JS_USER and JS_PASSWORD required to work)
POSTGRES_DB jfstat jfstat Name of postgres database
REJECT_SELF_SIGNED_CERTIFICATES true false Allow or deny self signed SSL certificates
JS_GEOLITE_ACCOUNT_ID null 123456 maxmind.com user id to be used for Geolocating IP Addresses (Can be found at https://www.maxmind.com/en/accounts/current/edit)
JS_GEOLITE_LICENSE_KEY null ASDWdaSdawe2sd186 License key you need to generate on maxmind to use their services
MINIMUM_SECONDS_TO_INCLUDE_PLAYBACK 1 10 The minimum time (in seconds) to include a playback record, which can be used to exclude short playbacks
IS_EMBY_API false true Set to true if using Emby instead of Jellyfin
JF_USE_WEBSOCKETS true false Enables using Jellyfins websocket connection for session data (No effect on Emby)
JS_USE_EXTERNAL_HOST false true Prioritises using External host value for some internal communications and processes
NEW_WATCH_EVENT_THRESHOLD_HOURS 1 1-12 This value sets the max time between watch sessions to determine if a watch is a new session or should be added onto the last session thats happened within this threshold. EG last watch within the last 1 hour. After 1 hour, a new session for the same item will be considered a new watch event.

Getting Started with Development

  • Clone the project from git
  • Set your env variables before starting the server (Variable names as per Environmental Variables above).
  • Run npm install to install necessary packages
  • Run npm run build to build local files ready to run
  • Run npm run start-server to only run the backend nodejs server
  • Run npm run start-client to only run the frontend React UI
  • Run npm run start-app to run both backend and frontend at the same time

When contributing please ensure to log a pull request on the unstable branch

Launching Jellystat using Docker

Check out our dockerhub to run Jellystat: https://hub.docker.com/r/cyfershepard/jellystat

Environment variables from files (Docker secrets)

You can set any environment variable from a file by using the prefix FILE__

As an example:

jellystat:
  environment:
    FILE__MYVAR: /run/secrets/MYSECRETFILE

Will set the environment variable MYVAR based on the contents of the /run/secrets/MYSECRETFILE file. see docker secrets for more info.

Screenshots

Support

API Documentation

Swagger Documentation can be found at /swagger endpoint