📱 StashFlow
Your Stash library, everywhere.
A mobile-first Flutter client for your Stash server. Designed for seamless browsing, effortless discovery, and high-quality playback on the go.
📸 Screenshots
✨ Key Features
- 🎬 Seamless Playback: Integrated video player with support for multiple streaming strategies and startup diagnostics.
- 👤 Rich Browsing: Explore Scenes, Performers, Studios, and Tags with native-feel pagination and fast search.
- 🎲 Discovery Tools: Floating "Random" actions to find hidden gems in your library across all categories.
- 🔍 Advanced Filtering: Powerful menu-based sorting and filtering to find exactly what you're looking for.
- 🛠️ Native Customization: Configure your server connection, UI preferences (Grid/List layouts), and streaming quality in one place.
🚀 Getting Started
- Download: Grab the latest APK from the Releases page.
- Connect: Open the app ➔ Settings ➔ Enter your Server URL and API Key.
- Browse: Your library will automatically sync and be ready for action.
⚙️ Runtime Settings
Tailor your experience in the app settings:
server_base_url&server_api_keyprefer_scene_streams(Toggle stream strategies)scene_grid_layout(Switch between single/double column)
🤓 For Developers
Tech Stack
- Flutter & GoRouter
- Riverpod (State Management)
- GraphQL (
graphql_flutter+codegen) - SharedPreferences
Project Structure
lib/coreshared infrastructurelib/features/*feature modules (domain/data/presentation)graphql/schema and GraphQL documents
Development
# Get dependencies
flutter pub get
# Regenerate code (GraphQL & Notifiers)
dart run build_runner build --delete-conflicting-outputs
# Run app
flutter run
Build
flutter build apk
📚 Internal Docs
For architecture, known issues, and onboarding, see:
Libraries
- core/data/graphql/graphql_client
- core/data/graphql/media_headers_provider
- core/data/graphql/schema.graphql
- core/data/graphql/url_resolver
- core/presentation/theme/app_theme
- core/presentation/theme/theme_mode_provider
- core/presentation/widgets/error_state_view
- core/presentation/widgets/list_page_scaffold
- core/presentation/widgets/marquee_text
- core/presentation/widgets/media_strip
- core/presentation/widgets/section_header
- core/utils/app_log_store
- core/utils/media_handler
- core/utils/pagination
- core/utils/pip_mode
- features/galleries/data/repositories/graphql_gallery_repository
- features/galleries/domain/entities/gallery
- features/galleries/domain/repositories/gallery_repository
- features/galleries/presentation/pages/galleries_page
- features/galleries/presentation/pages/gallery_details_page
- features/galleries/presentation/providers/gallery_details_provider
- features/galleries/presentation/providers/gallery_list_provider
- features/groups/data/repositories/graphql_group_repository
- features/groups/domain/entities/group
- features/groups/domain/repositories/group_repository
- features/groups/presentation/pages/group_details_page
- features/groups/presentation/pages/groups_page
- features/groups/presentation/providers/group_details_provider
- features/groups/presentation/providers/group_list_provider
- features/navigation/presentation/router
- features/navigation/presentation/shell_page
- features/navigation/presentation/widgets/mini_player
- features/performers/data/graphql/performers.graphql
- features/performers/data/repositories/graphql_performer_repository
- features/performers/domain/entities/performer
- features/performers/domain/repositories/performer_repository
- features/performers/presentation/pages/performer_details_page
- features/performers/presentation/pages/performer_media_grid_page
- features/performers/presentation/pages/performers_page
- features/performers/presentation/providers/performer_details_provider
- features/performers/presentation/providers/performer_list_provider
- features/performers/presentation/providers/performer_media_provider
- features/performers/presentation/widgets/performer_card
- features/scenes/data/graphql/scenes.graphql
- features/scenes/data/repositories/graphql_scene_repository
- features/scenes/data/repositories/stream_resolver
- features/scenes/domain/entities/scene
- features/scenes/domain/entities/scene_filter
- features/scenes/domain/entities/scene_title_utils
- features/scenes/domain/repositories/scene_repository
- features/scenes/presentation/pages/scene_details_page
- features/scenes/presentation/pages/scenes_page
- features/scenes/presentation/providers/playback_queue_provider
- features/scenes/presentation/providers/scene_details_provider
- features/scenes/presentation/providers/scene_list_provider
- features/scenes/presentation/providers/video_player_provider
- features/scenes/presentation/widgets/native_video_controls
- features/scenes/presentation/widgets/scene_card
- features/scenes/presentation/widgets/scene_filter_panel
- features/scenes/presentation/widgets/scene_video_player
- features/scenes/presentation/widgets/tiktok_scenes_view
- features/setup/data/graphql/version.graphql
- features/setup/domain/entities/server_config
- features/setup/presentation/debug_log_viewer_page
- features/setup/presentation/providers/connection_provider
- features/setup/presentation/settings_page
- features/studios/data/graphql/studios.graphql
- features/studios/data/repositories/graphql_studio_repository
- features/studios/domain/entities/studio
- features/studios/domain/repositories/studio_repository
- features/studios/presentation/pages/studio_details_page
- features/studios/presentation/pages/studio_media_grid_page
- features/studios/presentation/pages/studios_page
- features/studios/presentation/providers/studio_details_provider
- features/studios/presentation/providers/studio_list_provider
- features/studios/presentation/providers/studio_media_provider
- features/tags/data/repositories/graphql_tag_repository
- features/tags/domain/entities/tag
- features/tags/domain/repositories/tag_repository
- features/tags/presentation/pages/tag_details_page
- features/tags/presentation/pages/tag_media_grid_page
- features/tags/presentation/providers/tag_details_provider
- features/tags/presentation/providers/tag_list_provider
- features/tags/presentation/providers/tag_media_provider
- main