Skip to content

GOTRS 0.6.2: Themes, Bulk Actions, and Customer Portal Polish

A week after 0.6.1, we’re releasing 0.6.2 with a focus on visual customization and user experience refinement. The headline feature is a pluggable multi-theme system with four themes (each supporting light and dark modes), but there’s plenty more: bulk ticket actions, customer profile management, ticket attribute relations, and quality-of-life fixes throughout.

Multi-Theme System

GOTRS now ships with four distinct themes, each with light and dark mode variants. The theming architecture uses CSS custom properties (--gk-* variables) for consistent, maintainable styling.

Available Themes

ThemeLight ModeDark Mode
Synthwave (default)Neon cyan/magenta, grid backgroundGlow effects, dark base
GOTRS ClassicProfessional blue, clean solid backgroundsNo visual patterns
Seventies VibesWarm orange/brown tones, ogee wave patternEarthy retro palette
Nineties VibeClassic 90s Redmond desktop, gray windows, 3D beveled controlsLinux terminal aesthetic, pure black (#000000), ANSI colors, Hack Nerd Font

The theme switcher appears in the navigation bar and login page with live preview. Preferences persist to the database for authenticated users.

Theme selector dropdown in the navigation bar The theme selector dropdown in the nav bar — pick your theme and light/dark mode

Vendored Fonts

All theme fonts are now self-hosted for offline and air-gapped deployments:

  • Inter (400-700) — universal fallback
  • Space Grotesk — synthwave headings
  • Righteous — synthwave display
  • Nunito — seventies vibes body text
  • Hack Nerd Font — nineties vibe terminal mode
  • Archivo Black — nineties vibe light mode headings

Fonts load dynamically based on the active theme—no unnecessary downloads.

Bulk Ticket Actions

The agent ticket list now supports multi-select operations. Select multiple tickets and a floating action bar appears with bulk operations:

  • Bulk Assign — assign tickets to an agent
  • Bulk Merge — merge selected tickets
  • Bulk Priority — change priority on all selected
  • Bulk Queue Transfer — move tickets to another queue
  • Bulk Status Change — update ticket state

Agent ticket list with bulk action bar Multi-select tickets to reveal the bulk action bar with assign, status, priority, and merge options

Each action opens a confirmation modal before executing. This brings GOTRS closer to the workflow efficiency agents expect from OTRS.

Customer Portal Improvements

Customer Profile Page

Full profile management at /customer/profile:

  • View and edit personal information (name, title, phone, mobile)
  • Language preference selection (all 15 supported languages)
  • Session timeout preference (1 hour to 7 days)
  • Password change link
  • Avatar with customer initials

Customer profile page Customer profile with personal information, language/session preferences, and password change link

Customer Password Change

Customers can now change their own passwords through the portal. Current password verification required—no admin intervention needed for routine password updates.

Dashboard as Default Landing

Customer login now redirects to the dashboard (/customer) instead of the ticket list. Dashboard tiles are clickable and link to filtered ticket lists (open, closed, all tickets).

Customer dashboard The new customer dashboard with ticket statistics, quick actions, and recent tickets

Ticket Attribute Relations

New admin module at /admin/ticket-attribute-relations for managing relationships between ticket attributes. This is the GOTRS equivalent of OTRS’s AdminTicketAttributeRelations.

Features:

  • Define relationships between Queue, State, Priority, Type, Service, SLA, Owner, Responsible, and Dynamic Fields
  • CSV and Excel (.xlsx) file upload for bulk import
  • “Add missing values to dynamic field config” checkbox for auto-populating dropdown options
  • Priority-based ordering with drag-and-drop reordering
  • Red highlighting for values missing from dynamic field’s PossibleValues
  • Download previously imported files

The /api/v1/ticket-attribute-relations/evaluate endpoint integrates with ticket forms via ACL-based filtering.

Ticket Detail Refactoring

The ticket zoom view now uses a modular partial architecture—17 reusable partials covering header, description, notes, sidebar, tabs, meta grid, alerts, attachments, note form, priority/status badges, and 6 modal partials. This improves maintainability and ensures consistent theming across all components.

Separate Agent/Customer Cookies

Agents and customers can now be logged in simultaneously in the same browser. Session cookies are now distinct:

PortalCookies
Agentaccess_token, auth_token, session_id, gotrs_logged_in
Customercustomer_access_token, customer_auth_token, customer_session_id, gotrs_customer_logged_in

The theme manager detects both login indicators for preference persistence.

Bug Fixes

BugFix
Guru Meditation HTMXFixed duplicate declaration errors with HTMX partial loads
Customer-Authored Badge“Customer sees this” → “Customer wrote this” when customer authored content
Duplicate Attachment UploadRemoved duplicate file upload area in customer ticket view
Snooze Toast ColorFixed snooze success showing red instead of green
Customer InitialsFixed showing single letter instead of two-letter initials
Missing i18nFixed untranslated strings in profile-related keys across 10 languages
Agent Password ResetFixed regression in password reset feature

Upgrade Notes

If you’re coming from 0.6.1:

  1. Pull the new images: docker compose pull
  2. Recreate containers: docker compose up -d --force-recreate
  3. For Kubernetes: helm upgrade gotrs oci://ghcr.io/gotrs-io/charts/gotrs --version 0.6.2

Theme files are automatically available after upgrade. No database migrations required for theming—preferences use existing user preference infrastructure.

What’s Next

With the theming system in place, GOTRS now has the visual customization capabilities that organizations expect. The next phase continues toward 0.7.0, focusing on statistics, reporting, and REST API v2.


Questions? Feedback? Join our Discord and let us know what you think!

Back to Blog