github Pharaoh-Labs/teamarr v2.3.0

11 hours ago

v2.3.0 — 2026-03-03

The v2.3.0 release is a major internal overhaul that replaces the parent/child group hierarchy with a sports subscription model and per-league configuration, while removing deprecated features and significantly simplifying the codebase (~770 lines removed net).


⚠️ Migration Notes

Database migrations (v58–v64) run automatically on first startup. No manual database changes needed. However, some features moved or were removed — review these notes after upgrading.

What happens automatically

  • League subscriptions created — all leagues from all your groups are merged into a single global subscription
  • Soccer config merged — if you had different soccer modes across groups, highest-priority wins (all > teams > manual); followed teams are unioned
  • Template assignments deduplicated — group-level templates migrated to global subscription templates
  • Groups flattened — all groups become independent (group_mode=multi, no parent/child)
  • Channel numbering centralized — per-group settings merged to global; collision-aware numbering enabled

What you may need to reconfigure

  • Per-league channel profiles/groups — previously set per-group, now set per-league in Settings → Per-League Config. If you had different channel groups per event group, set them per-league instead.
  • Channel numbering — if you used manual start numbers per group, set per-league start numbers in Settings → Channel Numbering
  • Soccer mode — if groups had mixed soccer modes, review the merged result in Settings → Soccer

What's permanently gone

  • Gold Zone — fully removed (UI, API, consumer, database). If enabled, it's silently ignored.
  • Parent/child group hierarchy — child groups become independent. If you relied on inheritance, configure each group separately.
  • Per-group channel settings (channel_profile_ids, channel_group_id, channel_group_mode) — replaced by per-league subscription config

Downgrade safety: Group leagues columns are kept in sync with subscription data, so rolling back to v2.2.x is possible without data loss.


🐛 Bug Fixes

  • Fix {league} variable returning ESPN codes for discovered leagues (#163)
  • Fix cross-group stream removal in cleanup_deleted_streams
  • Fix NCAAW streams misclassified as NCAAM (#150)
  • Fix postgame filler .next variables not resolving (#151)
  • Fix stale closures in template form checkboxes (#156)
  • Fix sort_by AttributeError breaking all event group processing
  • Fix sport='unknown' for dot-notation soccer leagues without DB mapping
  • Fix template fallback when event_channel_name is not configured
  • Fix default channel group not persisting in settings response

✨ New Features

  • Sports subscription model — global league subscription replaces per-group league lists, with per-group overrides
  • Per-league subscription config — configure channel profiles and channel groups per-league
  • Global Defaults page — centralized settings for templates, team filters, subscriptions, and bulk editing
  • Channel numbering overhaul (schema v59) — collision-aware numbering respects existing Dispatcharr channels
  • Cross-group channel deduplication — event-scoped unique index prevents duplicate channels
  • Generation cancel button — stop a running EPG generation from the Dashboard
  • Drag-and-drop reorder for Event Groups table with priority ordering
  • Stream match cache clear-all button in Settings
  • Add World Baseball Classic league

⚡ Enhancements

  • Subscription-based template resolution and league matching
  • Per-group subscription overrides with global fallback
  • Event-scoped channel lookups for cross-group enforcement
  • Sport/league filters on channels API and frontend table
  • Unified run history tables with shared RunHistoryTable component
  • Search filter + subscribed-only toggle for league tables
  • Diagnostic logging for template resolution and stream audit

🎨 UI/UX

  • Reorganized Global Defaults: templates first, bordered sections, per-section save
  • Simplified Event Groups page — removed hierarchy UI, added SubscribedSports
  • Simplified EventGroupForm and EventGroupImport
  • Rewritten TemplateAssignmentModal for subscription model
  • Renamed 'All events' to 'Default' for catch-all template assignments

🔧 Under the Hood

  • Removed Gold Zone — frontend, API, consumer, database, and tests fully pruned
  • Removed parent/child group hierarchy — single-loop processing, no child processor
  • Removed per-group channel settings in favor of subscription config
  • Simplified cross-group enforcement to use sort_order priority
  • Schema v58–v64: subscription tables, per-league config, event-scoped channels, cross-group dedup
  • Hardened API: force group_mode=multi, parent_group_id=NULL on create/update
  • Normalize sport codes to lowercase across all providers
  • Case-insensitive template-to-event matching
  • 222 tests (+150 new: subscription, migration, channel numbering, sync reliability, NCAA gender classification)

Full Changelog: v2.2.2...v2.3.0

Don't miss a new teamarr release

NewReleases is sending notifications on new releases.