# Luminate ✨ Luminate is a modern Jellyfin client for the Linux desktop, built with Swift and Adwaita. It aims to provide a delightful browsing experience for any Jellyfin server with features rivaling the default Jellyfin Media Player, all while feeling right at home in your GNOME desktop. ## πŸ› οΈ Building ### Linux (Native) ```bash swift build swift run ``` Requires `libadwaita-devel` (Fedora) or `libadwaita` (Ubuntu/Debian) and the Swift 6 toolchain. ### Flatpak ```bash flatpak-builder --force-clean build-dir dev.bscubed.Luminate.json flatpak-builder --run build-dir dev.bscubed.Luminate.json Luminate ``` ### macOS (Development) ```bash brew install libadwaita swift build swift run ``` macOS builds work for development, but the target platform is Linux/Flatpak. ### Release Build ```bash swift build -c release ``` ## 🀝 Contributing Contributions are welcome! Check out [CONTRIBUTING.md](CONTRIBUTING.md) for the full guide on branching, coding style, pull requests, and everything you need to get started. You can also browse the [issue tracker](https://git.bscubed.dev/echo/Luminate/issues) for open issues to tackle. ## πŸ—ΊοΈ Project Roadmap ### Login | Feature | Completion | Version | Details | | :--- | :---: | :--- | :--- | | Server Authentication | βœ… | v0.1.0 | Login via server URL, username, and password | | Persistent Session Storage | βœ… | v0.1.0 | Auto-login across restarts via SQLite | | Multi-User Support | ❌ | | Switch between accounts without re-entering credentials | | Quick Login | ❌ | | One-click reconnect to recently used servers | ### Libraries | Feature | Completion | Version | Details | | :--- | :---: | :--- | :--- | | Home Screen | βœ… | v0.1.0 | Continue Watching, Next Up, and Recently Added rows | | Library Grid Browsing | βœ… | v0.1.0 | Folder navigation with responsive grid layout | | Movie Detail View | βœ… | v0.1.0 | Backdrop, poster, metadata, cast, similar items, actions | | TV Show Detail View | βœ… | v0.1.0 | Season picker, episode list with thumbnails and runtime | | Search | βœ… | v0.1.0 | Debounced text input with results across libraries | | Detail View Navigation | 🚧 | v0.1.0 | Connecting poster cells to their detail views | | Unified Search Integration | ❌ | | Search results navigating directly to content | ### Playback | Feature | Completion | Version | Details | | :--- | :---: | :--- | :--- | | Playback Progress Reporting | βœ… | v0.1.0 | Start, progress, and stop reported to server | | Video Player Widget | 🚧 | v0.1.0 | mpv + GtkGLArea integration (placeholder currently) | | Full Video Playback | ❌ | | Play, pause, seek, progress bar, and fullscreen | | Resume Playback | ❌ | | Continue Watching from home screen plays at saved position | ### Functionality | Feature | Completion | Version | Details | | :--- | :---: | :--- | :--- | | Favorites | βœ… | v0.1.0 | Toggle favorite status on items | | Mark Played / Unplayed | βœ… | v0.1.0 | Track watched state | | Image Caching | βœ… | v0.1.0 | Two-tier cache (memory + disk) with deferred loading | | WebSocket Client | βœ… | v0.1.0 | Real-time server event notifications | | Dependency Injection | βœ… | v0.1.0 | `@Injected` property wrapper and `DIContainer` | | Stack Navigation | βœ… | v0.1.0 | `NavigationView` with typed `NavigationStack` | | Localization (en/de) | βœ… | v0.1.0 | YAML-based strings with the `localized` package | | `@Injected` Migration | 🚧 | v0.1.0 | Migrating library views from parameter injection | | Keyboard Shortcuts | ❌ | | Global shortcuts for search, navigation, playback | | Error Handling UI | ❌ | | User-facing error states for network failures | | Testing | ❌ | | Unit and UI test coverage | | CI/CD Pipeline | ❌ | | Automated builds and test runs | | Flatpak Publishing | ❌ | | Release on Flathub | | Offline / Download Support | ❌ | | Cache media for offline playback | ## πŸ“„ License Luminate is free software: you can redistribute it and/or modify it under the terms of the [GNU General Public License](LICENSE) as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the [GNU General Public License](LICENSE) for more details.