8f860a8ec3
- All DLLs now output to lib\[Configuration]\[TargetFramework]\ at repo root (see Directory.Build.props) - .gitignore updated to exclude /lib/ - On first run, startup.json is auto-generated with OS-appropriate default paths (Windows, Linux, macOS, or portable) - Removes null/example config; generated config is immediately usable and clearly documented - Extensive new documentation: build output, startup.json logic, visual guides, and code proofs - Publish profile now deletes existing files for clean deploys - No breaking changes: existing startup.json files are preserved - Improves first-run UX, deployment, and cross-platform consistency
261 lines
5.9 KiB
Markdown
261 lines
5.9 KiB
Markdown
# Visual Guide: startup.json Auto-Generation
|
|
|
|
## Step-by-Step Process
|
|
|
|
### Step 1: User Starts Jellyfin (No startup.json exists)
|
|
```
|
|
$ jellyfin
|
|
```
|
|
|
|
### Step 2: System Detects Operating System
|
|
|
|
```
|
|
┌──────────────────────────┐
|
|
│ Detect OS Platform │
|
|
└────────┬─────────────────┘
|
|
│
|
|
┌────▼────┐
|
|
│ Windows?│──Yes──► Use C:/ProgramData/jellyfin
|
|
└────┬────┘
|
|
│No
|
|
┌────▼────┐
|
|
│ Linux? │──Yes──► Use /var/lib, /etc, /var/log
|
|
└────┬────┘
|
|
│No
|
|
┌────▼────┐
|
|
│ macOS? │──Yes──► Use ~/Library paths
|
|
└────┬────┘
|
|
│No
|
|
▼
|
|
Use Relative Paths (./data, ./config)
|
|
```
|
|
|
|
### Step 3: Generate startup.json
|
|
|
|
#### On Your Windows System:
|
|
```json
|
|
{
|
|
"_comment": "Jellyfin Startup Configuration - Windows defaults - using C:/ProgramData/jellyfin",
|
|
"_note": "These paths will be used unless overridden by environment variables or command-line arguments",
|
|
"_priority": "Command-line args > Environment variables > This file > Built-in defaults",
|
|
"_examples": "See startup.linux.json or startup.windows.json in Resources/Configuration for other OS examples",
|
|
"Paths": {
|
|
"DataDir": "C:/ProgramData/jellyfin",
|
|
"ConfigDir": "C:/ProgramData/jellyfin",
|
|
"CacheDir": "C:/ProgramData/jellyfin/cache",
|
|
"LogDir": "C:/ProgramData/jellyfin/log",
|
|
"TempDir": "C:/Users/YourUser/AppData/Local/Temp/jellyfin",
|
|
"WebDir": "C:/ProgramData/jellyfin/web"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Step 4: Console Output
|
|
```
|
|
Created default startup configuration at: E:\Jellyfin\startup.json
|
|
Using Windows defaults - using C:/ProgramData/jellyfin
|
|
You can customize this file to set different paths for Jellyfin.
|
|
```
|
|
|
|
### Step 5: Jellyfin Uses These Paths
|
|
```
|
|
[INF] Starting Jellyfin
|
|
[INF] Data directory: C:/ProgramData/jellyfin
|
|
[INF] Config directory: C:/ProgramData/jellyfin
|
|
[INF] Cache directory: C:/ProgramData/jellyfin/cache
|
|
[INF] Log directory: C:/ProgramData/jellyfin/log
|
|
```
|
|
|
|
---
|
|
|
|
## Complete Comparison
|
|
|
|
### 🔴 OLD WAY (Before This Change)
|
|
|
|
```
|
|
User starts Jellyfin
|
|
↓
|
|
Creates startup.json with:
|
|
{
|
|
"DataDir": null,
|
|
"ConfigDir": null,
|
|
...
|
|
}
|
|
↓
|
|
❌ User confused: "What should I put here?"
|
|
↓
|
|
User searches documentation
|
|
↓
|
|
User manually edits file
|
|
↓
|
|
User restarts Jellyfin
|
|
↓
|
|
✅ Finally works
|
|
```
|
|
|
|
**Time to get working:** 10-30 minutes (depending on documentation search)
|
|
|
|
### 🟢 NEW WAY (After This Change)
|
|
|
|
```
|
|
User starts Jellyfin
|
|
↓
|
|
Creates startup.json with:
|
|
{
|
|
"DataDir": "C:/ProgramData/jellyfin",
|
|
"ConfigDir": "C:/ProgramData/jellyfin",
|
|
...
|
|
}
|
|
↓
|
|
✅ Immediately works with sensible defaults!
|
|
↓
|
|
(Optional: User can customize if desired)
|
|
```
|
|
|
|
**Time to get working:** Instant!
|
|
|
|
---
|
|
|
|
## Real-World Examples
|
|
|
|
### Example 1: First-Time Windows User
|
|
|
|
**User Action:**
|
|
```powershell
|
|
cd C:\Jellyfin
|
|
.\jellyfin.exe
|
|
```
|
|
|
|
**What Happens:**
|
|
1. Jellyfin sees no startup.json
|
|
2. Detects Windows OS
|
|
3. Creates startup.json with C:/ProgramData/jellyfin paths
|
|
4. Starts using those paths immediately
|
|
5. ✅ Works out of the box!
|
|
|
|
**Generated File Location:** `C:\Jellyfin\startup.json`
|
|
|
|
### Example 2: Linux Server Installation
|
|
|
|
**User Action:**
|
|
```bash
|
|
cd /opt/jellyfin
|
|
./jellyfin
|
|
```
|
|
|
|
**What Happens:**
|
|
1. Jellyfin sees no startup.json
|
|
2. Detects Linux OS
|
|
3. Creates startup.json with FHS-compliant paths
|
|
4. Starts using /var/lib/jellyfin, /etc/jellyfin, etc.
|
|
5. ✅ Follows Linux best practices automatically!
|
|
|
|
**Generated File Location:** `/opt/jellyfin/startup.json`
|
|
|
|
### Example 3: Portable USB Installation
|
|
|
|
**User Action:**
|
|
```bash
|
|
cd /media/usb/jellyfin
|
|
./jellyfin
|
|
```
|
|
|
|
**What Happens:**
|
|
1. Jellyfin sees no startup.json
|
|
2. Detects unknown/portable scenario
|
|
3. Creates startup.json with relative paths
|
|
4. Starts using ./data, ./config, etc.
|
|
5. ✅ Self-contained and portable!
|
|
|
|
**Generated File Location:** `/media/usb/jellyfin/startup.json`
|
|
|
|
---
|
|
|
|
## Customization Still Easy
|
|
|
|
If you want different paths, just edit the file:
|
|
|
|
**Before editing:**
|
|
```json
|
|
{
|
|
"Paths": {
|
|
"DataDir": "C:/ProgramData/jellyfin",
|
|
"CacheDir": "C:/ProgramData/jellyfin/cache"
|
|
}
|
|
}
|
|
```
|
|
|
|
**After editing:**
|
|
```json
|
|
{
|
|
"Paths": {
|
|
"DataDir": "D:/Media/Jellyfin/Data",
|
|
"CacheDir": "E:/FastSSD/Cache/Jellyfin"
|
|
}
|
|
}
|
|
```
|
|
|
|
Then restart Jellyfin - it will use your custom paths!
|
|
|
|
---
|
|
|
|
## File Structure Visualization
|
|
|
|
### Windows
|
|
```
|
|
C:/ProgramData/jellyfin/
|
|
├── data/ (DataDir)
|
|
├── cache/ (CacheDir)
|
|
├── log/ (LogDir)
|
|
├── config/ (ConfigDir - if not same as DataDir)
|
|
└── web/ (WebDir)
|
|
```
|
|
|
|
### Linux
|
|
```
|
|
System Directories:
|
|
├── /var/lib/jellyfin/ (DataDir)
|
|
├── /etc/jellyfin/ (ConfigDir)
|
|
├── /var/cache/jellyfin/ (CacheDir)
|
|
├── /var/log/jellyfin/ (LogDir)
|
|
├── /var/tmp/jellyfin/ (TempDir)
|
|
└── /usr/share/jellyfin/ (WebDir)
|
|
```
|
|
|
|
### macOS
|
|
```
|
|
~/Library/
|
|
├── Application Support/
|
|
│ └── jellyfin/ (DataDir, ConfigDir, WebDir)
|
|
├── Caches/
|
|
│ └── jellyfin/ (CacheDir)
|
|
└── Logs/
|
|
└── jellyfin/ (LogDir)
|
|
```
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
### What Changed
|
|
- **Code:** One method in `StartupHelpers.cs`
|
|
- **Behavior:** Generates OS-specific defaults instead of nulls
|
|
- **Impact:** Massive improvement in first-run experience
|
|
|
|
### User Benefits
|
|
- ✅ No configuration needed
|
|
- ✅ Works immediately
|
|
- ✅ Follows platform conventions
|
|
- ✅ Clear documentation
|
|
- ✅ Still fully customizable
|
|
|
|
### Developer Benefits
|
|
- ✅ Fewer support questions
|
|
- ✅ Better user onboarding
|
|
- ✅ Platform best practices enforced
|
|
- ✅ Reduced documentation needs
|
|
|
|
---
|
|
|
|
**Result:** Jellyfin now "just works" on first install! 🎉
|