Skip to content
This repository was archived by the owner on Jul 21, 2026. It is now read-only.

Development Build dev.0.0.281

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Mar 15:04

What's Changed in dev.0.0.281

Other Changes

  • Merge branch 'main' into develop

Other Changes

  • Develop (#36)
  • feat: Complete Phase 2 - Users, Activity & Library Detail Views
  • Add PlaybackActivity model for detailed playback session tracking
  • Add activity API routes (/api/activity/) with list, stats, active sessions
  • Add users API routes (/api/users/) with list, detail, activity endpoints
  • Extend Emby sync with _sync_active_sessions() for real-time session tracking
  • Add Users.tsx page with search, pagination, user stats
  • Add UserDetail.tsx page with Overview/Activity tabs and time-based stats
  • Add Activity.tsx page with global activity log, active sessions, stats cards
  • Add LibraryDetail.tsx with Overview/Media/Activity tabs
  • Extend libraries API with /details, /media, /activity endpoints
  • Update navigation with Users and Activity menu items
  • Library cards now link to detail view

Completes Phase 2 of PLANNED_FEATURES.md roadmap (Jellystat-style features)

  • feat: Add PostgreSQL support and fix sync issues

Database:

  • Add PostgreSQL support via POSTGRES_* environment variables
  • Add asyncpg driver to requirements
  • Create docker-compose.postgres.yml for PostgreSQL setup
  • Keep SQLite as default for simple deployments
  • Add connection pooling for PostgreSQL

Bug Fixes:

  • Fix MediaItem.parent_id AttributeError by using series_id (external_id)
  • Add parent_id column to MediaItem model for future use
  • Fix Users API to fallback to UserWatchHistory when PlaybackActivity is empty
  • Fix deprecation warning: regex -> pattern in Query parameters
  • Remove 'Jellystat-style' comments from codebase

Improvements:

  • Sync jobs now visible in Jobs view with execution logs
  • Manual sync shows progress/errors in Jobs history
  • Users page shows last watched from UserWatchHistory fallback
  • chore: Update PostgreSQL to version 18 (latest stable)

  • fix: Add PostgreSQL support to database migrations

  • Add column_exists() helper for SQLite/PostgreSQL compatibility
  • Add table_exists() helper for SQLite/PostgreSQL compatibility
  • Use information_schema for PostgreSQL column/table checks
  • Use pragma_table_info for SQLite column checks
  • Add IF NOT EXISTS for PostgreSQL ALTER TABLE commands
  • Use SERIAL PRIMARY KEY for PostgreSQL auto-increment
  • chore: Remove ARM64 build to speed up CI
  • Build only linux/amd64 for faster builds
  • Remove QEMU setup (not needed without cross-platform builds)
  • Update release notes to reflect single architecture
  • Add note about opening feature request for ARM support
  • refactor: Remove Jellystat service type
  • MediaCurator now has built-in watch statistics tracking
  • Jellystat integration no longer needed
  • Removed from frontend ServiceType, service options
  • Removed from backend models and schemas
  • feat: Add individual service sync jobs in Jobs tab
  • Add separate sync jobs for each enabled service
  • Show service sync status with running indicator
  • Add manual 'Sync Now' button per service
  • Display last sync result and duration
  • Auto-refresh job status every 5 seconds
  • New API endpoint POST /jobs/sync/service/{id}
  • Service sync jobs show in job history
  • fix: Emby sync creates MediaItems and populates watch statistics
  • Sync libraries, movies, series, episodes directly from Emby
  • Path-based library association for proper linking
  • Track user total_plays and total_watch_time_seconds
  • Use external_id for watch data matching
  • Include RunTimeTicks for watch time calculation
  • refactor(sync): Emby now matches existing items by PATH instead of creating duplicates

BREAKING CHANGE: Emby sync architecture completely redesigned

The core insight:

  • Sonarr/Radarr CREATE MediaItems with file paths and metadata
  • Emby PROVIDES watch statistics (plays, progress, favorites)
  • Previous code created DUPLICATE items from Emby with different external_ids

New behavior:

  • _sync_emby() no longer creates MediaItems
  • Loads ALL existing items and builds path -> item mapping
  • Matches Emby items to Sonarr/Radarr items by normalized PATH
  • Updates library_id based on Emby library paths
  • Applies watch data (play count, is_watched, favorites, progress) to matched items
  • Updates user statistics and watch history

Key changes:

  • Removed: external_id_to_item mapping (was causing duplicates)
  • Added: path_to_item mapping with normalized paths (/ instead of )
  • track_watch_data() now uses paths, skips items not in database
  • _sync_active_sessions() simplified to use only path_to_item
  • currently_watching_ids -> currently_watching_paths
  • Return value updated (Emby reports 0 added, only updated counts)

This fixes:

  • Movies showing 0 plays (Emby data was on separate items)
  • Libraries showing 0 counts
  • Users showing no watch data
  • Activity/history not tracking properly
  • feat: WebSocket real-time job system + Setup Wizard

WebSocket System:

  • Add ConnectionManager (backend/app/core/websocket.py)
  • Add /api/ws/jobs endpoint with ping/pong support
  • Add progress callbacks to Sonarr, Radarr, Emby sync
  • Integrate WebSocket broadcasts in all scheduler jobs
  • Add Zustand job store (frontend/src/stores/jobs.ts)
  • Add global WebSocket hook with auto-reconnect & toasts
  • Rewrite Jobs page with live progress bars & running panel
  • Add animated job count badge in Layout sidebar

Setup Wizard:

  • Add backend API: /api/setup/status, test-connection, add-service, complete, skip
  • Add 5-step frontend wizard (Welcome → Arr → MediaServer → Sync → Complete)
  • Add SetupGate redirect in App.tsx for first-time setup
  • Enforce service order: Sonarr/Radarr before Emby/Jellyfin

Docs:

  • Update DEVELOPMENT_STATUS.md with new features
  • fix: resolve all priority 1-5 bugs from DEVELOPMENT_STATUS.md

BUG-001 (CRITICAL): LibraryDetail.tsx complete rewrite

  • Fix double /api/ prefix causing 404 errors on all API calls
  • Migrate from manual useState/useEffect to React Query (useQuery)
  • Remove local formatBytes, formatDuration, formatDate, formatRelativeTime
  • Import shared utilities from lib/utils.ts
  • Add proper light/dark mode classes throughout

BUG-002 (HIGH): Fix Login.tsx & Register.tsx light-mode

  • Replace hardcoded dark classes with light/dark pairs
  • Fix: bg-dark-800 → bg-white dark:bg-dark-800
  • Fix: text-white → text-gray-900 dark:text-white
  • Fix: text-dark-200 → text-gray-700 dark:text-dark-200
  • Fix: border-dark-700 → border-gray-200 dark:border-dark-700
  • Fix inputs: bg-gray-50 dark:bg-dark-800, proper placeholder colors

BUG-003 (HIGH): Fix ConfirmDialog.tsx light-mode

  • Modal background, title, message, footer, cancel button themed

BUG-004 (HIGH): Fix Skeleton.tsx light-mode

  • Base skeleton: bg-gray-200 dark:bg-dark-700
  • Card/Stats containers: bg-white dark:bg-dark-800

BUG-005 (MEDIUM): Fix Toast theming in main.tsx

  • Replace hardcoded hex colors with Tailwind CSS classes
  • Toasts now respect light/dark mode automatically

BUG-006 (MEDIUM): Fix German locale in utils.ts

  • Change formatDate and formatDateTime from 'de-DE' to 'en-US'
  • Add formatDuration utility function for shared use

BUG-008 (MEDIUM): Call fetchUser on app init

  • ProtectedRoute now calls fetchUser() on mount when token exists
  • Ensures fresh user data instead of potentially stale persisted state

BUG-009 (LOW): Remove duplicate formatBytes from Preview.tsx

  • Import from shared lib/utils.ts instead

BUG-010 (LOW): Fix manual debounce in Users.tsx

  • Replace setTimeout-based debounce with useDebounce hook
  • docs: update DEVELOPMENT_STATUS.md with Session 3 bugfix results

  • feat: UX improvements, recharts charts, code-splitting

  • Layout.tsx: German strings → English (BUG-006 complete)
  • ResponsiveTable: Add light mode classes (missing dark: variants)
  • Activity.tsx: useDebounce hook, shared utils (formatDurationLong,
    formatWatchTime), ResponsiveTable migration, 3× recharts charts
    (Daily Plays area, Day-of-Week bar, Hour-of-Day bar)
  • UserDetail.tsx: shared utils, ResponsiveTable migration
  • Staging.tsx: ResponsiveTable migration
  • Jobs.tsx: Executions table → ResponsiveTable
  • App.tsx: React.lazy code-splitting for 13 pages with Suspense
  • utils.ts: Add formatDurationLong and formatWatchTime shared functions
  • DEVELOPMENT_STATUS.md: Update for Session 4
  • feat: Phase 2 enhancements - ResponsiveTable, filters, dashboard charts
  • LibraryDetail.tsx: Migrate Media + Activity tabs to ResponsiveTable
  • Activity.tsx: Add Library-Filter dropdown + Items-per-Page selector (10/25/50/100)
  • UserDetail.tsx: Add Library-Filter on activity tab
  • Dashboard.tsx: Add 3x recharts charts (Daily Plays, Day-of-Week, Hour-of-Day)
  • PLANNED_FEATURES.md: Update Phase 2/3 status, add Implementation History
  • DEVELOPMENT_STATUS.md: Update for Session 5
  • fix: int32 overflow on position_ticks/runtime_ticks + expand-rows + accessibility

BUG-011: PlaybackActivity position_ticks/runtime_ticks Integer→BigInteger

  • Emby tick values exceed int32 max (~2.1B), e.g. 70223183889
  • Added PostgreSQL migration (ALTER COLUMN TYPE BIGINT)
  • Added db.rollback() in _sync_active_sessions and services.py error handlers

ResponsiveTable: Expand-Row support

  • New props: onRowClick, isExpanded, expandedContent
  • Desktop: expanded content as extra with colSpan
  • Mobile: expanded content as div below card

Preview.tsx: Migrated both tables (Series + Movies) to ResponsiveTable

  • Series table with expandable season breakdown
  • Last page to complete ResponsiveTable migration

Expand-Rows on Activity, UserDetail, LibraryDetail

  • IP Address, Device, Play Method (color-coded), Progress bar
  • Library Activity API: added ip_address, transcode_video, transcode_audio

ConfirmDialog accessibility

  • role=dialog, aria-modal, aria-labelledby, focus trap, Escape key, click-outside

Documentation: DEVELOPMENT_STATUS.md + PLANNED_FEATURES.md updated

  • docs: fix inconsistencies in DEVELOPMENT_STATUS.md
  • Update commit hash from Pending to ea6e64c
  • Mark Preview.tsx migration as complete in Priority 2
  • Clean up strikethroughs in Priority 4 (Activity, Dashboard fully done)
  • Update ResponsiveTable comment (now used on all pages)
  • Consolidate Activity Features line (all items done)
  • fix: movie watch stats + user last seen/watched/client

BUG-012: Radarr sync stored folder path instead of file path

  • movie.get('path') returns '/movies/Title/' (folder)
  • Emby returns '/movies/Title/Title.mkv' (file)
  • Path matching in track_watch_data failed for ALL movies
  • Fix: prefer movieFile.path over movie.path
  • Existing movies auto-corrected on next Radarr sync

BUG-013: Users page Last Seen/Watched/Client broken

  • last_activity_at relied on LastPlayedDate from Emby (often missing)
  • Silent except:pass swallowed parsing errors → now logger.warning
  • Fallback: set last_activity_at to sync time if user has plays
  • UserWatchHistory fallback: filter on is_played instead of
    last_played_at IS NOT NULL, sort by coalesce + play_count

Documentation: BUG-012 + BUG-013 added to DEVELOPMENT_STATUS.md
and PLANNED_FEATURES.md Implementation History

  • docs: update commit hash to 0ac7124

  • chore: update gitignore

  • chore: remove unused files

  • security: CORS lockdown and reject weak secret keys

  • security: mask API keys, notification secrets, and enforce password complexity

  • security: add security headers middleware, WebSocket auth, CORS, path traversal fix

  • security: refresh token rotation and account lockout mechanism

  • security: trusted proxy config and rate limit improvements

  • security: allowlist system settings and auth for version endpoints

  • security: rate-limit rule endpoints and limit import file size

  • security: validate staging paths against allowed directories

  • security: replace datetime.utcnow() with timezone-aware datetime.now(timezone.utc)

  • fix: remove duplicate return statement in base service

  • security: add account lockout columns to User model

  • security: add database migration for account lockout columns

  • security: add audit log data retention job

  • security: enforce SECRET_KEY in docker-compose files

  • security: frontend WebSocket auth and refresh token rotation support

  • chore: add plan/ to .gitignore

  • chore: configure dependabot to target develop branch

  • chore(deps): bump npm minor dependencies in /frontend

  • security: enhance release workflow with permissions and changelog generation improvements

  • security: enhance request handling with body size limit and message rate limiting

  • security: add refresh token cleanup job to purge expired and revoked tokens

  • security: enhance activity API with request limiting and input sanitization

  • security: update notification routes to require active admin for user actions and validate outbound URLs

  • security: require active admin for service connection operations and validate outbound URLs

  • security: validate outbound URLs in setup wizard service connection endpoints

  • security: enhance API routes with request validation and rate limiting

  • security: require active admin for system settings and cleanup operations

  • security: enhance user API routes with request validation and rate limiting

  • security: add CORS validation to warn against wildcard usage in production

  • security: implement escape_like function to sanitize user input for database queries

  • security: add Content-Security-Policy header to enhance response security

  • security: implement SSRF-safe URL validation utility to prevent outbound request vulnerabilities

  • security: enforce connection limits per IP in WebSocket manager to prevent abuse

  • security: enhance notification channel validation and restrict system setting types

  • security: enhance client IP extraction to trust forwarded headers from trusted proxies

  • security: add outbound URL validation for Discord, Slack, and generic webhook notifications

  • security: migrate JWT storage from localStorage to httpOnly cookies to mitigate XSS risks

  • security: enhance authentication flow to prioritize httpOnly cookies for user validation

  • security: implement httpOnly cookies for authentication tokens and enhance logout functionality

  • security: restrict job management endpoints to admin users only

  • security: restrict cleanup rule management to admin users only

  • security: enhance setup status endpoint to return minimal info without auth

  • security: restrict staging operations to admin users only

  • security: enhance health check endpoint to return minimal info without auth

  • security: add WebSocket token creation for short-lived authentication

  • security: define SENSITIVE_CONFIG_KEYS as a ClassVar for better type safety

  • security: improve error handling in directory cleanup process

  • security: simplify authentication checks by removing token dependency

  • security: replace token retrieval method for WebSocket connection and remove unused storage event listener

  • security: remove localStorage token management and streamline WebSocket authentication process

  • security: streamline authentication by removing token management and using cookies

  • security: update status and date for JWT storage migration to httpOnly cookies

  • security: add comprehensive security scanning workflow with SAST/DAST tools

  • security: add GitHub Actions workflow for backend and frontend tests with linting

  • security: remove deprecated GitHub Actions workflow for tests

  • security: add CSRF middleware and update CORS headers to include CSRF token

  • security: log security events for invalid tokens and inactive users in authentication flow

  • security: enhance authentication flow with CSRF protection and detailed security event logging

  • security: add request parameter to library API routes and enforce rate limits

  • security: add request parameter and enforce rate limits for media API routes

  • security: add request parameter and enforce rate limits for system API routes

  • security: add request parameter and enforce rate limits for user activity and update routes

  • security: implement CSRF protection middleware with token validation and logging

  • security: log rate limit exceed events with detailed information

  • security: implement structured logging for security events with severity levels

  • security: add CSRF token handling in request interceptor

  • security: configure pytest options for strict asyncio mode and test paths

  • security: add initial test suite setup in init.py

  • security: add smoke test for application settings loading

  • feat: Genre Distribution Charts & Watch Patterns Heatmap (Phase 3)

Backend:

  • Add GET /activity/genre-stats endpoint (genre aggregation from
    PlaybackActivity + MediaItem genres, filterable by library_id/user_id/days)
  • Add GET /activity/watch-heatmap endpoint (7x24 day-of-week x hour grid)
  • Both endpoints follow security patterns (rate limiting, auth, CSRF)

Frontend:

  • Activity.tsx: RadarChart (top 12 genres) + CSS grid heatmap (7x24)
  • LibraryDetail.tsx: Genre RadarChart + BarChart (watch time) in Overview tab
  • UserDetail.tsx: Favorite Genres horizontal BarChart (top 10, 365-day window)
  • Dashboard.tsx: Genre Distribution BarChart (top 12, synced with period selector)

Documentation:

  • Update DEVELOPMENT_STATUS.md: Phase 3 marked complete, Phase 4 partially started
  • Update PLANNED_FEATURES.md: Genre/Heatmap/Favorites marked implemented, history updated
  • feat: complete Phase 2 - Timeline, Image Proxy, Grid View, Activity Filters

Phase 2 Completion (Session 10):

Backend:

  • GET /users/{id}/timeline: Calendar heatmap (per-day play counts) +
    session grouping (30-min gap detection), last 50 sessions with items
  • GET /media/{id}/image: Poster image proxy from Emby/Jellyfin with
    in-memory cache (200 items, 1hr TTL), episode→series fallback

Frontend - UserDetail.tsx:

  • New Timeline tab with 90-day GitHub-style calendar heatmap
  • Recent Watch Sessions viewer (grouped by 30-min gaps)
  • Activity tab: Type filter (Movies/Episodes) + search input

Frontend - LibraryDetail.tsx:

  • Table/Grid view toggle on Media tab
  • Grid view with poster images (2:3 aspect ratio cards)
  • Poster cards show title, year, file size, play count badge
  • Fallback icon when poster unavailable

Documentation:

  • Updated DEVELOPMENT_STATUS.md and PLANNED_FEATURES.md
  • Phase 2 marked as fully complete
  • feat: Phase 4 - Advanced Analytics (5 new endpoints + Analytics page)

Phase 4 - Advanced Analytics (Session 10):

Backend - activity.py:

  • GET /activity/concurrent-streams: Historical concurrent stream peaks,
    daily peaks chart data, hourly average concurrency
  • GET /activity/duration-stats: Session length distribution,
    avg/median duration, movies vs series comparison
  • GET /activity/completion-rates: Content completion pie chart
    (completed >90% / partial / abandoned), by-type breakdown,
    most frequently abandoned content
  • GET /activity/binge-stats: Binge-watch detection (3+ episodes
    of same series), top binged series, top bingers leaderboard

Backend - media.py:

  • GET /media/content-reach: Shared vs Solo vs Unwatched content
    analysis with viewer counts, top shared content, largest
    solo files (cleanup candidates)

Frontend:

  • New Analytics.tsx page with 5 tabs:
    1. Concurrent Streams (daily peak area chart + hourly avg bar)
    2. Duration Stats (distribution histogram + by-type cards)
    3. Completion Rates (donut chart + stacked bars + abandoned list)
    4. Binge Watch (top series, top users, recent sessions)
    5. Content Reach (shared/solo/unwatched pie + lists)
  • Route /analytics added to App.tsx
  • ChartPieIcon nav item added to Layout.tsx sidebar

Documentation:

  • Phase 4 marked as fully complete in both doc files
  • Implementation history updated
  • feat: Phase 5 - Smart Cleanup Integration

Backend:

  • Add per-user rule conditions to RuleConditions schema:
    • no_user_watched_days: Delete only if NO user watched in X days
    • exclude_if_user_favorited: Protect favorites of specific users
    • exclude_active_sessions: Never delete items being watched
    • min_unique_viewers: Only delete if fewer than X unique viewers
  • Update CleanupEngine.evaluate_rule() with UserWatchHistory/PlaybackActivity queries
  • Update CleanupEngine._evaluate_item_for_preview() with detailed per-user reasoning
  • Add GET /media/cleanup-suggestions endpoint with 5 suggestion categories:
    unwatched, abandoned, low engagement, stale, storage hog
    Score-based ranking with composite scoring algorithm

Frontend:

  • Add CleanupSuggestions.tsx page with category filters and score display
  • Update Rules.tsx with Smart Cleanup (Per-User) section in rule form
  • Add condition summary badges for new fields on rule cards
  • Update RuleConditions TypeScript interface
  • Add Suggestions nav item with LightBulbIcon
  • Add /suggestions route
  • docs: remove i18n from roadmap, fix changelog formatting
  • Remove item 27 (i18n / Lokalisierung) from Priorität 7 - not planned
  • Fix concatenated changelog rows (Sessions 10, 11, initial) into separate lines
  • Fix literal \u2013 → actual en-dash in Session 10 entry
  • fix(ci): make Trivy scan resilient to Docker Hub outages
  • Add trivy-fs job: filesystem scan (no Docker build needed)
  • Rename trivy -> trivy-image: container image scan now optional
    • Docker build has continue-on-error: true
    • Subsequent steps skip gracefully if build fails
    • Emits ::warning annotation instead of failing the workflow
  • SARIF uploads conditioned on file existence (hashFiles check)
  • feat: add actionable cleanup suggestions with direct user actions

  • feat: add planned features documentation for statistics and analytics

  • feat: Add comprehensive DEVELOPMENT_STATUS document for MediaCurator

  • Introduced a detailed development status and handoff document to track ongoing progress and provide context for future development.
  • Included sections on project overview, tech stack, architecture, implementation status, known bugs, UX/UI issues, code quality problems, and next steps.
  • Document serves as a reference for developers and contributors to understand the current state and future direction of the project.
  • feat: Remove DEVELOPMENT_STATUS document as it is no longer needed

  • feat: remove Planned Features document as it is no longer needed

  • feat: add endpoints for flagging and staging cleanup suggestions

  • feat: add suggestion_flagged and suggestion_staged actions to AuditActionType

  • feat: implement flagging and staging actions for cleanup suggestions with confirmation dialogs

  • feat: update .env.example with structured sections and additional configuration options

  • feat: add CORS and proxy configuration options to Docker Compose files

  • feat: remove docker-compose configuration file

  • fix: ensure SECRET_KEY environment variable is properly quoted in Docker Compose

  • fix: properly quote SECRET_KEY environment variable in Docker Compose

  • fix: add params support to BaseServiceClient.post() and delete()

The post() and delete() methods did not accept a params keyword argument,
causing staging to fail with 'unexpected keyword argument' when creating
or deleting Emby libraries.

  • fix: use params kwarg instead of manual query strings in service clients
  • RadarrClient.delete_movie(): use params= instead of manual query string
  • SonarrClient.delete_series(): use params= instead of manual query string
  • BaseServiceClient.put(): add params support for consistency with other methods
  • fix: invalidate library cache after create/delete to prevent duplicate staging libraries

  • fix: use collectionType query parameter for Emby library creation

  • Move collectionType from JSON body to query parameter (Emby API requirement)
  • Pass library_type through ensure_staging_library chain
  • Remove redundant refresh call (handled by refreshLibrary param)
  • Log library type on creation for debugging
  • fix: inherit library type from source library for staging
  • Determine library_type (movies/tvshows) from source library's media_type
  • Pass correct library_type to ensure_staging_library
  • Emby will now correctly recognize content in staging libraries
  • chore(deps): bump docker/metadata-action from 5 to 6

Bumps docker/metadata-action from 5 to 6.


updated-dependencies:

  • dependency-name: docker/metadata-action
    dependency-version: '6'
    dependency-type: direct:production
    update-type: version-update:semver-major
    ...

Signed-off-by: dependabot[bot] support@github.com

  • chore(deps): bump docker/build-push-action from 6 to 7

Bumps docker/build-push-action from 6 to 7.


updated-dependencies:

  • dependency-name: docker/build-push-action
    dependency-version: '7'
    dependency-type: direct:production
    update-type: version-update:semver-major
    ...

Signed-off-by: dependabot[bot] support@github.com

  • chore(deps): bump docker/setup-qemu-action from 3 to 4

Bumps docker/setup-qemu-action from 3 to 4.


updated-dependencies:

  • dependency-name: docker/setup-qemu-action
    dependency-version: '4'
    dependency-type: direct:production
    update-type: version-update:semver-major
    ...

Signed-off-by: dependabot[bot] support@github.com

  • chore(deps): bump the npm-minor group across 1 directory with 17 updates

Bumps the npm-minor group with 15 updates in the /frontend directory:

Package From To
@tailwindcss/vite 4.1.18 4.2.1
@tanstack/react-query 5.90.20 5.90.21
axios 1.13.3 1.13.6
react 19.2.3 19.2.4
@types/react 19.2.9 19.2.14
react-dom 19.2.3 19.2.4
react-hook-form 7.71.1 7.71.2
react-router-dom 7.13.0 7.13.1
recharts 3.7.0 3.8.0
zustand 5.0.10 5.0.11
@typescript-eslint/eslint-plugin 8.53.1 8.56.1
@vitejs/plugin-react 5.1.2 5.1.4
autoprefixer 10.4.23 10.4.27
eslint-plugin-react-refresh 0.4.26 0.5.2
postcss 8.5.6 8.5.8

Updates @tailwindcss/vite from 4.1.18 to 4.2.1

Updates @tanstack/react-query from 5.90.20 to 5.90.21

Updates axios from 1.13.3 to 1.13.6

Updates react from 19.2.3 to 19.2.4

Updates @types/react from 19.2.9 to 19.2.14

Updates react-dom from 19.2.3 to 19.2.4

Updates react-hook-form from 7.71.1 to 7.71.2

Updates react-router-dom from 7.13.0 to 7.13.1

Updates recharts from 3.7.0 to 3.8.0

Updates zustand from 5.0.10 to 5.0.11

Updates @types/react from 19.2.9 to 19.2.14

Updates @typescript-eslint/eslint-plugin from 8.53.1 to 8.56.1

Updates @typescript-eslint/parser from 8.53.1 to 8.56.1

Updates @vitejs/plugin-react from 5.1.2 to 5.1.4

Updates autoprefixer from 10.4.23 to 10.4.27

Updates eslint-plugin-react-refresh from 0.4.26 to 0.5.2

Updates postcss from 8.5.6 to 8.5.8

Updates tailwindcss from 4.1.18 to 4.2.1


updated-dependencies:

  • dependency-name: "@tailwindcss/vite"
    dependency-version: 4.2.1
    dependency-type: direct:production
    update-type: version-update:semver-minor
    dependency-group: npm-minor
  • dependency-name: "@tanstack/react-query"
    dependency-version: 5.90.21
    dependency-type: direct:production
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: axios
    dependency-version: 1.13.6
    dependency-type: direct:production
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: react
    dependency-version: 19.2.4
    dependency-type: direct:production
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: "@types/react"
    dependency-version: 19.2.14
    dependency-type: direct:development
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: react-dom
    dependency-version: 19.2.4
    dependency-type: direct:production
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: react-hook-form
    dependency-version: 7.71.2
    dependency-type: direct:production
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: react-router-dom
    dependency-version: 7.13.1
    dependency-type: direct:production
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: recharts
    dependency-version: 3.8.0
    dependency-type: direct:production
    update-type: version-update:semver-minor
    dependency-group: npm-minor
  • dependency-name: zustand
    dependency-version: 5.0.11
    dependency-type: direct:production
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: "@types/react"
    dependency-version: 19.2.14
    dependency-type: direct:development
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: "@typescript-eslint/eslint-plugin"
    dependency-version: 8.56.1
    dependency-type: direct:development
    update-type: version-update:semver-minor
    dependency-group: npm-minor
  • dependency-name: "@typescript-eslint/parser"
    dependency-version: 8.56.1
    dependency-type: direct:development
    update-type: version-update:semver-minor
    dependency-group: npm-minor
  • dependency-name: "@vitejs/plugin-react"
    dependency-version: 5.1.4
    dependency-type: direct:development
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: autoprefixer
    dependency-version: 10.4.27
    dependency-type: direct:development
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: eslint-plugin-react-refresh
    dependency-version: 0.5.2
    dependency-type: direct:development
    update-type: version-update:semver-minor
    dependency-group: npm-minor
  • dependency-name: postcss
    dependency-version: 8.5.8
    dependency-type: direct:development
    update-type: version-update:semver-patch
    dependency-group: npm-minor
  • dependency-name: tailwindcss
    dependency-version: 4.2.1
    dependency-type: direct:development
    update-type: version-update:semver-minor
    dependency-group: npm-minor
    ...

Signed-off-by: dependabot[bot] support@github.com


Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>


Docker Images

This release is available as a Docker image for amd64 architecture:

Pull the image:

# Specific version
docker pull ghcr.io/Serph91P/mediacurator:dev.0.0.281

# Or latest stable (main branch)
docker pull ghcr.io/Serph91P/mediacurator:latest

# Or development (develop branch)
docker pull ghcr.io/Serph91P/mediacurator:dev

Run with Docker Compose:

# Download docker-compose.yml
curl -O https://raw.githubusercontent.com/Serph91P/MediaCurator/main/docker-compose.yml

# Start services
docker compose up -d

Registry Information

Property Value
Registry GitHub Container Registry (ghcr.io)
Image ghcr.io/Serph91P/mediacurator
Version dev.0.0.281
Architecture linux/amd64

Note: ARM64 builds are not currently provided. Open a feature request if you need ARM support.

Documentation

See the README.md for full configuration options.