- 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
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:
- DataDir creates
.jellyfin-datamarker inC:/ProgramData/jellyfin - ConfigDir creates
.jellyfin-configmarker inC:/ProgramData/jellyfin - Sanity check finds both markers in same directory
- 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/jellyfin→C:/ProgramData/jellyfin/data - ✅ ConfigDir:
C:/ProgramData/jellyfin→C:/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-configC:\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):
- Command-line arguments - e.g.,
--datadir "C:\custom\path" - Environment variables - e.g.,
JELLYFIN_DATA_DIR=C:\custom - startup.json - Configuration file ← This was the issue
- Built-in defaults - Hardcoded in application
Location Priority
Jellyfin searches for startup.json in:
- Current directory (where jellyfin.dll is located)
- Program Files installation directory
- 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:
E:\Program Files\jellyfin-win\startup.json- Updated paths- Backup created at
startup.json.backup - 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! ✅