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%
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 |
||
|---|---|---|
| public | ||
| src | ||
| src-tauri | ||
| .gitignore | ||
| AGENTS.md | ||
| APP_MANAGEMENT.md | ||
| GAME_STREAMING.md | ||
| index.html | ||
| LICENSE | ||
| package.json | ||
| PLAYBACK.md | ||
| pnpm-lock.yaml | ||
| Product_Requirements.md | ||
| README.md | ||
| svelte.config.js | ||
| the_plan.md | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
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
- Launch the app
- Click "Add Server" on the home screen
- Select "Jellyfin" as the server type
- Enter your server details:
- Host: IP address or hostname (e.g.,
192.168.1.100orjellyfin.local) - Port: Default is 8096
- Protocol: HTTP or HTTPS
- Host: IP address or hostname (e.g.,
- Enter your Jellyfin username and password
- Click "Connect"
Browsing Media
- Click on a server tile from the home screen
- Select a library from the sidebar (Movies, TV Shows, Music, etc.)
- Browse items in the grid
- 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
- Long-press a tile (500ms) or click "Edit" button to enter edit mode
- Drag tiles to reorder (mouse/touch) or use arrow keys (gamepad)
- Click "Done" or press Escape to exit edit mode
- 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
- PLAYBACK.md - Media playback system documentation
- GAME_STREAMING.md - Game streaming (Steam + Moonlight) documentation
- APP_MANAGEMENT.md - App management and system settings documentation
- AGENTS.md - Development session tracker
- the_plan.md - Development roadmap
Contributing
This project is in active development. See the_plan.md for the development roadmap.
License
See LICENSE file for details.