Streaming Front End to Switch between Jellyfin, Plex, Steam Link, and other apps. Like Roku or AppleTV, but open source.
  • Svelte 43.9%
  • Rust 32%
  • TypeScript 23%
  • CSS 0.8%
  • HTML 0.2%
Find a file
Brian McGonagill cfc08ae53a feat: complete Phase 7 - App Management & Home Screen Polish
Tile Reordering:
- Implemented long-press edit mode (500ms)
- Built drag-and-drop reordering (mouse + touch)
- Added gamepad-friendly controls (arrows in edit mode)
- Persisted layout order to database (app_layout table)

Multi-Server Support:
- Added server health checking (health_check command)
- Implemented status indicators (online/offline/connecting/error)
- Auto-check health on home screen load
- Support multiple servers per app type

Per-App Settings Persistence:
- Added server_settings table with JSON blob storage
- Wired ServerSettings saves to backend
- Load saved settings when opening ServerSettings
- Settings persist across app restarts

System Settings Page:
- Built SystemSettings component with 4 tabs
- Network settings (hostname, IP, DNS, DHCP)
- Display settings (resolution, refresh rate, overscan, theme)
- Input settings (gamepad, keyboard, remote, controller mapping)
- System settings (device name, SSH, auto-update, system info)

Home Screen Polish:
- Improved empty state with welcome message
- Better recent items section with empty state handling
- Added Edit/Done buttons for tile reordering
- Settings button now opens SystemSettings

Documentation:
- Created APP_MANAGEMENT.md with comprehensive docs
- Updated README.md with app management features
- Updated AGENTS.md with Session 7 progress

Tests: 32 frontend + 22 Rust = 54 total tests passing
2026-07-11 19:50:58 -05:00
public feat: complete phases 1-3 - TV streaming hub foundation 2026-07-11 18:24:16 -05:00
src feat: complete Phase 7 - App Management & Home Screen Polish 2026-07-11 19:50:58 -05:00
src-tauri feat: complete Phase 7 - App Management & Home Screen Polish 2026-07-11 19:50:58 -05:00
.gitignore feat: complete phases 1-3 - TV streaming hub foundation 2026-07-11 18:24:16 -05:00
AGENTS.md feat: complete Phase 7 - App Management & Home Screen Polish 2026-07-11 19:50:58 -05:00
APP_MANAGEMENT.md feat: complete Phase 7 - App Management & Home Screen Polish 2026-07-11 19:50:58 -05:00
GAME_STREAMING.md feat: complete Phase 6 - Game Streaming (Steam + Moonlight/Sunshine) 2026-07-11 18:59:33 -05:00
index.html feat: complete phases 1-3 - TV streaming hub foundation 2026-07-11 18:24:16 -05:00
LICENSE Initial commit 2026-07-11 19:07:57 +00:00
package.json feat: complete phases 1-3 - TV streaming hub foundation 2026-07-11 18:24:16 -05:00
PLAYBACK.md feat: complete Phase 3 media playback with MPV integration 2026-07-11 18:50:10 -05:00
pnpm-lock.yaml feat: complete phases 1-3 - TV streaming hub foundation 2026-07-11 18:24:16 -05:00
Product_Requirements.md feat: complete phases 1-3 - TV streaming hub foundation 2026-07-11 18:24:16 -05:00
README.md feat: complete Phase 7 - App Management & Home Screen Polish 2026-07-11 19:50:58 -05:00
svelte.config.js feat: complete phases 1-3 - TV streaming hub foundation 2026-07-11 18:24:16 -05:00
the_plan.md feat: complete phases 1-3 - TV streaming hub foundation 2026-07-11 18:24:16 -05:00
tsconfig.json feat: complete phases 1-3 - TV streaming hub foundation 2026-07-11 18:24:16 -05:00
tsconfig.node.json feat: complete phases 1-3 - TV streaming hub foundation 2026-07-11 18:24:16 -05:00
vite.config.ts feat: complete phases 1-3 - TV streaming hub foundation 2026-07-11 18:24:16 -05:00

Get_streaming

A 10-foot TV UI streaming hub for self-hosted media servers and game streaming. Like Roku or AppleTV, but open source and designed for your self-hosted media.

Features

Current Features

  • TV-Optimized UI: Dark theme with focus states, smooth animations, designed for 10-foot viewing
  • Multi-Server Support: Add and manage multiple Jellyfin, Plex, and Emby servers
  • Real Jellyfin Integration: Full API support for browsing libraries, viewing metadata, and playing media
  • MPV Media Player: Full-featured video playback with:
    • Play/pause, seek, volume controls
    • Quality selection (Auto/4K/1080p/720p/480p)
    • Keyboard shortcuts
    • Auto-hiding controls
    • Playback position persistence
    • Resume across sessions
  • Game Streaming: Stream games from your network:
    • Steam Remote Play integration
    • Moonlight/Sunshine support
    • Quality settings (resolution, bitrate, FPS)
    • Controller support
  • App Management:
    • Drag-and-drop tile reordering
    • Long-press edit mode
    • Server health monitoring
    • Per-app settings persistence
    • System settings (network, display, input, SSH)
    • Theme selection (dark/light)
  • Navigation: Keyboard (arrow keys) and gamepad (D-pad) support
  • Connector Framework: Extensible plugin system for adding new services
  • Secure Storage: AES-256-GCM encryption for credentials
  • Cross-Platform: Built with Tauri (Rust backend, Svelte frontend)

Planned Features

  • Plex and Emby full integration
  • Game streaming (Steam Remote Play, Moonlight/Sunshine)
  • Multi-user support
  • Customizable home screen layout
  • System settings (network, display, SSH)
  • Linux distribution for dedicated HTPC

Tech Stack

  • Frontend: Svelte 5 + TypeScript
  • Backend: Tauri 2 (Rust)
  • Database: SQLite
  • Media Player: MPV
  • Styling: Custom CSS with TV-optimized design system

Requirements

Development

  • Node.js 18+
  • pnpm
  • Rust (latest stable)
  • System libraries for Tauri (see below)

Runtime

  • MPV: Must be installed for media playback
    # Ubuntu/Debian
    sudo apt-get install mpv
    
    # macOS
    brew install mpv
    
    # Windows
    # Download from https://mpv.io/installation/
    

Tauri System Dependencies

Ubuntu/Debian

sudo apt-get install \
  libwebkit2gtk-4.1-dev \
  build-essential \
  curl \
  wget \
  file \
  libxdo-dev \
  libssl-dev \
  libayatana-appindicator3-dev \
  librsvg2-dev

macOS

# No additional dependencies required

Windows

# No additional dependencies required

Installation

# Clone the repository
git clone <repository-url>
cd Get_streaming

# Install dependencies
pnpm install

# Run development server
pnpm tauri dev

# Build for production
pnpm tauri build

Usage

Adding a Jellyfin Server

  1. Launch the app
  2. Click "Add Server" on the home screen
  3. Select "Jellyfin" as the server type
  4. Enter your server details:
    • Host: IP address or hostname (e.g., 192.168.1.100 or jellyfin.local)
    • Port: Default is 8096
    • Protocol: HTTP or HTTPS
  5. Enter your Jellyfin username and password
  6. Click "Connect"

Browsing Media

  1. Click on a server tile from the home screen
  2. Select a library from the sidebar (Movies, TV Shows, Music, etc.)
  3. Browse items in the grid
  4. Click on an item to start playback

Media Playback

  • Space / K: Toggle play/pause
  • Left/Right Arrows: Seek backward/forward 10 seconds
  • Up/Down Arrows: Increase/decrease volume
  • M: Toggle mute
  • Escape: Close player (position is saved automatically)

App Management

Tile Reordering

  1. Long-press a tile (500ms) or click "Edit" button to enter edit mode
  2. Drag tiles to reorder (mouse/touch) or use arrow keys (gamepad)
  3. Click "Done" or press Escape to exit edit mode
  4. Layout is automatically saved to the database

Server Health Monitoring

  • Server tiles show status indicators:
    • 🟢 Online: Server is reachable
    • 🔴 Offline: Server is not reachable
    • 🟡 Connecting: Checking server status
    • Error: Server returned an error
  • Health is automatically checked when the home screen loads
  • Click "Refresh" in server settings to manually check health

Per-App Settings

  • Right-click a tile or long-press to open context menu
  • Select "Settings" to configure app-specific options:
    • Jellyfin: Quality, transcoding, direct play
    • Steam: Streaming quality, bandwidth limit, hardware encoding
    • Moonlight: Resolution, FPS, bitrate, video/audio codecs
  • Settings are persisted to the database and restored on next launch

System Settings

Access system settings by clicking the gear icon in the top-right corner:

Network

  • Configure hostname, IP address, DNS servers
  • Enable/disable DHCP

Display

  • Set resolution (720p, 1080p, 1440p, 4K)
  • Adjust refresh rate (30Hz, 60Hz, 120Hz)
  • Configure overscan
  • Select theme (dark/light)

Input

  • Enable/disable gamepad, keyboard, remote control
  • Configure controller mapping (Xbox, PlayStation, Nintendo)

System

  • Set device name
  • Enable/disable SSH access
  • Toggle auto-updates
  • View system information (version, OS, architecture, memory, storage)

Navigation

  • Arrow Keys: Navigate between UI elements
  • Enter: Select focused element
  • Escape / Backspace: Go back (when not in text input)
  • Gamepad D-pad: Navigate
  • Gamepad A: Select
  • Gamepad B: Go back

Project Structure

Get_streaming/
├── src/                          # Svelte frontend
│   ├── lib/
│   │   ├── components/          # Reusable UI components
│   │   │   ├── VideoPlayer.svelte
│   │   │   ├── AppTile.svelte
│   │   │   ├── ContextMenu.svelte
│   │   │   └── ServerSettings.svelte
│   │   ├── connectors/          # Service connectors
│   │   │   ├── jellyfin.ts
│   │   │   ├── steam.ts
│   │   │   ├── moonlight.ts
│   │   │   ├── base.ts
│   │   │   └── registry.ts
│   │   ├── pages/               # Main pages
│   │   │   ├── Home.svelte
│   │   │   ├── ServerBrowser.svelte
│   │   │   ├── AddServer.svelte
│   │   │   └── SystemSettings.svelte
│   │   ├── stores/              # Svelte stores
│   │   └── api.ts               # Tauri API wrappers
│   └── App.svelte
├── src-tauri/                    # Rust backend
│   ├── core/                    # Core library
│   │   └── src/
│   │       ├── db.rs            # Database operations
│   │       ├── jellyfin.rs      # Jellyfin API client
│   │       ├── steam.rs         # Steam Remote Play client
│   │       ├── sunshine.rs      # Sunshine API client
│   │       ├── player.rs        # MPV player backend
│   │       └── crypto.rs        # Encryption
│   └── src/
│       ├── commands/            # Tauri commands
│       └── lib.rs
└── public/                       # Static assets

Development

Running Tests

# Frontend tests
pnpm test

# Backend tests
cd src-tauri/core
cargo test

Building

# Development build with hot reload
pnpm tauri dev

# Production build
pnpm tauri build

The built app will be in src-tauri/target/release/.

Documentation

Contributing

This project is in active development. See the_plan.md for the development roadmap.

License

See LICENSE file for details.

Acknowledgments