OpenTT
Table tennis management plugin for Wordpress - Libre & Free
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/tradicije/librett/archive/refs/heads/main.zip
LibreTT is a free and open WordPress plugin for managing, displaying, and archiving table tennis competitions: matches, clubs, players, and statistics in one unified system.
LibreTT was built from real club/community needs, not as a commercial product. The goal is simple: keep tools, knowledge, and data in the hands of the community.
Project philosophy
LibreTT is developed with these principles:
- Free & libre software: use, study, modify, and share it.
- AGPL v3 license: if you run LibreTT as a service, your changes must be shared.
- No vendor lock-in: your data stays yours, in DB and open formats.
- Community first: the tool should serve clubs, federations, and operators.
There is no “Pro” version and no hidden feature wall.
Why LibreTT exists
Many legacy league/result systems share the same problems:
- fragile CPT/ACF structures for large match data,
- complicated and unreliable admin entry,
- performance drop as seasons and records grow,
- closed systems that are hard to adapt.
LibreTT addresses this directly. Core architectural decision: matches, games, and sets are stored in DB tables (not as CPT data).
Core goals
- Keep existing frontend behavior and shortcode compatibility.
- Move heavy match/game/set data from CPT/ACF into dedicated DB tables.
- Provide a clean admin workflow for non-technical users.
- Support fresh installs and upgrades of the current DB schema.
Main features
Admin (backend)
- Unified LibreTT admin area:
- Dashboard
- Matches
- Clubs
- Players
- Competitions
- Import/Export
- Customize
- Settings
- First-time onboarding flow for fresh installs.
- Guided data-entry workflow for non-technical operators.
- Batch game/set entry on match edit screen.
- Automatic doubles game position by competition format (A/B).
- Club and player management with featured images and metadata.
- Competition rules with league/season/federation/format logic.
- Live search, filters, and sorting in admin lists.
Frontend (shortcode system)
LibreTT uses standardized English opentt_* shortcode names with the new DB model.
Examples:
[opentt_matches_grid][opentt_standings_table][opentt_match_games][opentt_h2h][opentt_mvp][opentt_match_report][opentt_match_video][opentt_search](including smart queries such aspredstojece <club name>)[opentt_clubs][opentt_players][opentt_club_info][opentt_player_info][opentt_top_players][opentt_player_stats][opentt_team_stats][opentt_player_transfers][opentt_competition_info][opentt_competitions][opentt_club_news],[opentt_player_news]
Data model
LibreTT uses dedicated DB tables for match data:
wp_opentt_matcheswp_opentt_gameswp_opentt_sets
Clubs and players remain on CPTs (klub, igrac) for compatibility and editor workflows.
Import / Export
LibreTT supports selective export/import in JSON package format.
Sections:
- Competitions
- Clubs
- Players
- Matches (DB)
- Games (DB)
- Sets (DB)
Flow:
- Validate import package.
- Review summary and warnings.
- Confirm import.
Also included:
- Featured media transfer (club/player/competition images).
- Merge preview for potential duplicate players before import confirmation.
Routing and templates
LibreTT supports:
- New DB-based match routes.
- Legacy route compatibility.
- Theme override priority.
- Plugin fallback templates when theme templates are missing.
- Compatibility with both block and classic PHP themes.
Styling and customization
- Global visual settings (colors, radius, accent).
- Advanced CSS override:
- global
- per shortcode
- Modular frontend CSS in
assets/css/modules/. - Admin assets:
assets/css/admin.cssassets/js/admin.js
Localization
- Admin UI language switch is available in Settings.
- Translation files are in
languages/admin-ui-<lang_code>.txt. - Format is:
english_reference = translation. - New language files are auto-detected and listed in Settings.
- Use
languages/admin-ui-template.example.txtas a template.
Architecture and refactor status
LibreTT is in a stability-first refactor window. Public shortcodes, WordPress hooks, routes, content keys, and database contracts remain frozen while the legacy core is gradually reduced to a compatibility facade.
The shortcode compatibility layer is split by domain, and frontend search now has separate controller, intent-parser, date-parser, repository, and text-matching services. Refactor work is verified with the frozen-contract check, PHP lint, standalone smoke checks, the manual WordPress smoke checklist, and Query Monitor baselines.
See docs/refactor/PHASED_REFACTOR_PLAN.md, docs/refactor/API_CONTRACT.md, and
docs/refactor/PERFORMANCE_BASELINE.md before making structural changes.
License
GNU Affero General Public License v3 (AGPL-3.0)
You can use, modify, and fork LibreTT. If you provide it as a service (SaaS), AGPL obligations apply.
See: LICENSE.
License scope clarification:
- LibreTT core is licensed under
AGPL-3.0-or-later. - The bundled
addons/tournamentsmodule is currently marked as in-progress and not feature-complete; its legal and release policy should be treated as evolving until a stable standalone release policy is published. - Name, logo, and project identity are governed separately from code license. See
trademark.md.
Author and community
LibreTT is developed by Aleksa Dimitrijević, initially for STK Bubušinac and stkb.rs.
Contributions are welcome:
- bug reports,
- proposals,
- pull requests,
- license-compliant forks.
Project status
- Current plugin version: 1.1.0.
- Active work: stability-first refactor and measured optimization; no new feature work during this window.
Notes
Function and internal code identifiers intentionally remain unchanged in places for backward compatibility.
Full documentation
For complete end-user and operations documentation, see:
docs/PLUGIN_DOCUMENTATION_EN.mddocs/PLUGIN_DOCUMENTATION_SR.mddocs/refactor/PHASED_REFACTOR_PLAN.mddocs/refactor/API_CONTRACT.mddocs/refactor/SMOKE_CHECKLIST.mddocs/refactor/PERFORMANCE_BASELINE.md