Skip to content

Happy New Year 2026: GOTRS 0.5.0 and a Year of Foundation Building

As we settle into 2026, the GOTRS team has been making significant strides in building out core functionality. The months since our last update have been focused on expanding admin capabilities, hardening email infrastructure, and delivering a fully-featured customer portal.

CI/CD Pipeline Overhaul

We’ve completely rewritten our GitHub Actions workflows to adopt a containerized testing approach. The new pipeline includes:

  • Security scanning: Go security scanning (gosec, govulncheck), Semgrep SAST, Hadolint for Dockerfiles, GitLeaks secret detection, and license compliance checking
  • Build optimization: Single multi-stage Docker image build with GHCR publishing
  • Test execution: Containerized test execution with coverage generation and Codecov integration

This refactor eliminates previous issues with non-existent Dockerfile references and ensures consistent builds across all environments.

Admin Modules Expansion

Templates Module

The new Admin Templates module brings full CRUD functionality for standard response templates—the Znuny AdminTemplate equivalent. Key features include:

  • Support for 8 template types (Answer, Create, Email, Forward, Note, PhoneCall, ProcessManagement, Snippet)
  • Queue assignment UI for associating templates with specific queues
  • Attachment assignment UI for templates
  • Admin list page with search, filter by type/status, and sortable columns
  • Create/edit form with multi-select template type checkboxes and content type selector (HTML/Markdown)
  • YAML import/export for template backup and migration
  • Agent integration with template selector in ticket reply/note modals with variable substitution (customer name, ticket number, queue, etc.)

Templates Admin Screen

Roles Module

Full CRUD functionality for role management has been added, including user-role assignments and group permissions management. All queries now use database.ConvertPlaceholders() for MySQL/PostgreSQL compatibility.

  • Assign granular permissions to roles
  • Assign people to roles
  • Activate/deactivate roles

Roles Management Screen

Services Module

The Admin Services module now supports managing services with dual-view UI (customer→services and service→customers). We also added:

  • Admin Customer User Services management for assigning services to individual customer users
  • Service filtering in customer portal (only shows services assigned to the logged-in customer user)
  • Default services for customer users that auto-prepopulate when creating tickets

User Service Mapping

Dynamic Fields Module

A comprehensive Dynamic Fields Admin module is now available with:

  • 7 field types: Text, TextArea, Dropdown, Multiselect, Checkbox, Date, DateTime
  • Screen configuration UI for enabling fields on 8 ticket screens
  • OTRS-compatible YAML config storage
  • Alpine.js client-side validation with i18n support (English and German)

Dynamic Fields

Customer Portal Launch

The customer portal is now fully functional, providing customers with a complete ticket management interface:

  • Customer login and authentication
  • Ticket creation with rich text editor (Tiptap)
  • Ticket viewing, replies, and closure
  • Service filtering based on assigned services
  • Full internationalization with English and German translations

Customer Portal Login Customer Portal

Email Infrastructure Progress

Threading Support

We’ve implemented RFC-compliant email threading with Message-ID, In-Reply-To, and References headers for conversation tracking. Customer notifications now include proper threading headers, ensuring smooth conversation continuity.

Inbound Email Pipeline

The inbound email pipeline has been expanded with:

  • POP3 connector factory
  • Postmaster processor
  • Ticket token filters
  • IMAP connector support with folder metadata propagation
  • Admin mail account poll status API backed by Valkey cache
  • SMTP4Dev integration suite for comprehensive testing

Outbound Notifications

Outbound customer notifications now send threaded emails on ticket creation and public replies, with Message-ID/In-Reply-To/References persisted for future response tracking.

Technical Architecture Improvements

Self-Registering Handlers

We’ve implemented a self-registering handler architecture where handlers now register via init() calls to routing.RegisterHandler(). This eliminates manual registration in main.go and includes a test that validates all YAML handlers are registered.

SLA Admin UX Improvements

Time fields now use unit dropdowns (Minutes/Hours/Days) instead of raw minutes input, with automatic conversion for better usability.

Database Compatibility

All admin modules now use database.ConvertPlaceholders() for MySQL/PostgreSQL compatibility and database.GetAdapter().InsertWithReturning() for cross-database INSERT operations.

Looking Ahead

These foundational improvements set the stage for the next phase of GOTRS development. We’re now well-positioned to expand automation features, deepen workflow capabilities, and continue hardening the platform for production use.

By the Numbers

  • 52+ unit tests for Dynamic Fields module
  • 31 unit tests for Admin Services module
  • 18 unit tests for Templates module
  • 12 internationalized customer portal templates
  • 8 ticket screen types for dynamic field configuration
  • 7 dynamic field types supported

Thank you to everyone contributing to GOTRS. Here’s to a productive 2026!

Feel free to Join our Discord to share your feedback and ideas for 2026!

Back to Blog