Files
pgsql-jellyfin/docs/STARTUP_JSON_MARKER_FIX.md
T
wjones 33d7c010fb Jellyfin 11.0.0-PostgreSQL PREVIEW: version bump & defaults
- Update version to 11.0.0-PostgreSQL-PREVIEW in assemblies, installer, and build scripts
- Default web directory is now "wwwroot" across all platforms
- Configuration manager now creates .example files if missing
- Set PostgreSQL as default database with sensible options
- Postgres provider ensures database exists before table checks
- Add docs for marker conflict fixes and startup.json path issues
- Version string in logs/UI uses informational version
- Installer output filename and wizard show PREVIEW suffix
- Documentation summarizes version bump and verification steps
2026-02-27 13:45:09 -05:00

8.4 KiB

Startup.json Configuration Fix - Marker Conflict Resolution

Date: 2026-02-26
Status: Fixed
Issue: DataDir and ConfigDir pointing to same location


Root Cause

The Problem

File: E:\Program Files\jellyfin-win\startup.json

Problematic Configuration:

{
  "Paths": {
    "DataDir": "C:/ProgramData/jellyfin",      SAME
    "ConfigDir": "C:/ProgramData/jellyfin",    SAME
    "CacheDir": "C:/ProgramData/jellyfin/cache",
    "LogDir": "C:/ProgramData/jellyfin/log"
  }
}

Why This Failed:

  1. DataDir creates .jellyfin-data marker in C:/ProgramData/jellyfin
  2. ConfigDir creates .jellyfin-config marker in C:/ProgramData/jellyfin
  3. Sanity check finds both markers in same directory
  4. Error: "Expected to find only .jellyfin-data but found marker for .jellyfin-config"

The Fix

Updated Configuration

File: E:\Program Files\jellyfin-win\startup.json

New Configuration:

{
  "_comment": "Jellyfin Startup Configuration - Windows with separate directories",
  "_note": "Using separate subdirectories to avoid marker conflicts",
  "_priority": "Command-line args > Environment variables > This file > Built-in defaults",
  "Paths": {
    "DataDir": "C:/ProgramData/jellyfin/data",       Separate
    "ConfigDir": "C:/ProgramData/jellyfin/config",   Separate
    "CacheDir": "C:/ProgramData/jellyfin/cache",
    "LogDir": "C:/ProgramData/jellyfin/log",
    "TempDir": "C:/Users/wjones/AppData/Local/Temp/jellyfin",
    "WebDir": "C:/ProgramData/jellyfin/web"
  }
}

Changes:

  • DataDir: C:/ProgramData/jellyfinC:/ProgramData/jellyfin/data
  • ConfigDir: C:/ProgramData/jellyfinC:/ProgramData/jellyfin/config
  • Each directory gets its own marker file
  • No conflicts!

What Was Done

Step 1: Backed Up Original

Backup Location: E:\Program Files\jellyfin-win\startup.json.backup

Copy-Item "E:\Program Files\jellyfin-win\startup.json" "E:\Program Files\jellyfin-win\startup.json.backup"

Step 2: Updated Configuration

Updated Paths:

  • DataDir → separate subdirectory
  • ConfigDir → separate subdirectory

Step 3: Cleaned Up Old Markers

Removed:

  • C:\ProgramData\jellyfin\.jellyfin-config
  • C:\ProgramData\jellyfin\.jellyfin-data

New Directory Structure

After Fix

C:\ProgramData\jellyfin\
├── data\                       ← Database, media library data
│   └── .jellyfin-data          ← Data marker
├── config\                     ← Configuration files
│   └── .jellyfin-config        ← Config marker
├── cache\                      ← Cache files
│   └── .jellyfin-cache         ← Cache marker
├── log\                        ← Log files
│   └── .jellyfin-log           ← Log marker
└── web\                        ← Web UI files

Each directory has its own marker - no conflicts!


Why startup.json Exists

Configuration Loading Order

Priority (highest to lowest):

  1. Command-line arguments - e.g., --datadir "C:\custom\path"
  2. Environment variables - e.g., JELLYFIN_DATA_DIR=C:\custom
  3. startup.json - Configuration file ← This was the issue
  4. Built-in defaults - Hardcoded in application

Location Priority

Jellyfin searches for startup.json in:

  1. Current directory (where jellyfin.dll is located)
  2. Program Files installation directory
  3. AppData directories

In your case: Found at E:\Program Files\jellyfin-win\startup.json


Verification

Check Current Configuration

# View current startup.json
Get-Content "E:\Program Files\jellyfin-win\startup.json" | ConvertFrom-Json | Format-List

# Should show:
# DataDir   : C:/ProgramData/jellyfin/data
# ConfigDir : C:/ProgramData/jellyfin/config

Check for Markers

# Root directory should have NO markers
Get-ChildItem "C:\ProgramData\jellyfin" -Filter ".jellyfin-*" | Select-Object Name

# Subdirectories should have markers
Get-ChildItem "C:\ProgramData\jellyfin" -Filter ".jellyfin-*" -Recurse | Select-Object FullName

Expected:

C:\ProgramData\jellyfin\data\.jellyfin-data
C:\ProgramData\jellyfin\config\.jellyfin-config
C:\ProgramData\jellyfin\cache\.jellyfin-cache
C:\ProgramData\jellyfin\log\.jellyfin-log

Start Jellyfin

Now You Can Start

cd E:\Projects\pgsql-jellyfin\lib\Release\net11.0
dotnet jellyfin.dll

Expected Output:

[INF] Loaded startup configuration from: E:\Program Files\jellyfin-win\startup.json
[INF] Data directory: C:\ProgramData\jellyfin\data
[INF] Config directory: C:\ProgramData\jellyfin\config
[INF] Cache directory: C:\ProgramData\jellyfin\cache
[INF] Log directory: C:\ProgramData\jellyfin\log
[INF] Jellyfin version: 11.0.0-PostgreSQL PREVIEW

Alternative: Override Configuration

Option 1: Command-Line Override

Don't want to modify startup.json? Use command-line args:

dotnet jellyfin.dll \
  --datadir "C:/ProgramData/jellyfin/data" \
  --configdir "C:/ProgramData/jellyfin/config"

Option 2: Delete startup.json

Remove the file and use built-in defaults:

Remove-Item "E:\Program Files\jellyfin-win\startup.json"

Built-in defaults will create proper structure automatically.

Option 3: Use Project-Local Configuration

Create startup.json in your build directory:

cd E:\Projects\pgsql-jellyfin\lib\Release\net11.0

$config = @"
{
  "Paths": {
    "DataDir": "E:/Projects/pgsql-jellyfin/dev-data/data",
    "ConfigDir": "E:/Projects/pgsql-jellyfin/dev-data/config",
    "CacheDir": "E:/Projects/pgsql-jellyfin/dev-data/cache",
    "LogDir": "E:/Projects/pgsql-jellyfin/dev-data/log"
  }
}
"@

Set-Content -Path "startup.json" -Value $config

Common Mistakes

Don't Do This

{
  "Paths": {
    "DataDir": "C:/ProgramData/jellyfin",      BAD
    "ConfigDir": "C:/ProgramData/jellyfin"     BAD
  }
}

Problem: Same directory for both!

Don't Do This Either

{
  "Paths": {
    "DataDir": "C:/jellyfin",
    "ConfigDir": "C:/jellyfin/config",         BAD
    "CacheDir": "C:/jellyfin/config/cache"     BAD (nested in config)
  }
}

Problem: Nested directories can cause conflicts

Do This

{
  "Paths": {
    "DataDir": "C:/ProgramData/jellyfin/data",
    "ConfigDir": "C:/ProgramData/jellyfin/config",
    "CacheDir": "C:/ProgramData/jellyfin/cache",
    "LogDir": "C:/ProgramData/jellyfin/log"
  }
}

Good: Each path is a separate subdirectory


Rollback

If Something Goes Wrong

Restore original configuration:

Copy-Item "E:\Program Files\jellyfin-win\startup.json.backup" "E:\Program Files\jellyfin-win\startup.json" -Force

Or delete startup.json entirely:

Remove-Item "E:\Program Files\jellyfin-win\startup.json"

Then use command-line args to specify paths.


For Future Reference

Creating Correct startup.json

Template:

{
  "_comment": "Jellyfin Startup Configuration",
  "_note": "Use separate subdirectories for each path type",
  "Paths": {
    "DataDir": "C:/ProgramData/jellyfin/data",
    "ConfigDir": "C:/ProgramData/jellyfin/config",
    "CacheDir": "C:/ProgramData/jellyfin/cache",
    "LogDir": "C:/ProgramData/jellyfin/log",
    "TempDir": "C:/Users/USERNAME/AppData/Local/Temp/jellyfin",
    "WebDir": "C:/ProgramData/jellyfin/web"
  },
  "Database": {
    "DatabaseType": "Jellyfin-PostgreSQL",
    "CustomProviderOptions": {
      "Options": [
        { "Key": "host", "Value": "localhost" },
        { "Key": "port", "Value": "5432" },
        { "Key": "database", "Value": "jellyfin" },
        { "Key": "username", "Value": "jellyfin" },
        { "Key": "password", "Value": "your-password" }
      ]
    }
  }
}

Summary

Problem: startup.json had DataDir and ConfigDir pointing to same location
Cause: Previous installation configuration
Fix: Updated paths to use separate subdirectories
Result: No more marker conflicts

Files Changed:

  1. E:\Program Files\jellyfin-win\startup.json - Updated paths
  2. Backup created at startup.json.backup
  3. Cleaned up old markers from C:\ProgramData\jellyfin\

Status: Ready to start Jellyfin!

Command:

cd E:\Projects\pgsql-jellyfin\lib\Release\net11.0
dotnet jellyfin.dll

Lesson Learned: Always use separate subdirectories for different path types to avoid marker conflicts!