[[releasenotes-36]]

= What's New in OpenNMS {page-component-title} 36

== System requirements and Dependencies

* Java 21: OpenNMS {page-component-title} requires JDK 21.
* PostgreSQL 14 or higher: This version of OpenNMS {page-component-title} requires a supported version of PostgreSQL.

== New features and important changes

=== SNMP datacollection config moved to DB with new UI
The contents of `etc/datacollection-config.xml` and `etc/datacollection/\*.xml` are migrated into the database during the upgrade process, and the original files are moved to `etc_archive/`.
After upgrade, manage SNMP data collection through the *Administration -> Manage SNMP Data Collection Config* page (or the REST API under `/api/v2/datacollectionconf`).
Direct edits to the archived XML files no longer take effect.

=== Snmp Config file `snmp-config.xml` moved to DB with new UI
The contents of `snmp-config.xml` are migrated into the database during the upgrade process,
and the original file is moved to `etc_archive/`.

After upgrade, manage SNMP configuration through the *Integrations -> SNMP Agent Configuration* page
(or the REST v2 API under `/api/v2/snmp-config`). Direct edits to the archived XML file no longer take effect.

The new UI supports definition lookup by IP address and location, profile management, and supports both IPv4 and IPv6.

The legacy file-based SNMP credential encryption feature (the `org.opennms.snmp.encryption.enabled` property
and the `snmp-config-encrypt` / `snmp-config-decrypt` Karaf commands) has been removed.
The upgrade handles existing encrypted configurations automatically.
For protecting SNMP credentials, use Secure Credentials Vault (SCV) metadata expressions in your SNMP configuration.

See xref:development:rest/snmp_configuration.adoc[SNMP Configuration REST API] for details.

=== Trapd Config file `trapd-configuration.xml` moved to DB with new UI
The contents of `trapd-configuration.xml` are migrated into the database during the upgrade process,
and the original file is moved to `etc_archive/`.

After upgrade, manage trapd configuration through the *Integrations -> Trap Configuration* page
(or the REST v2 API under `/api/v2/trapd`). Direct edits to the archived XML file no longer take effect.

See xref:development:rest/trapd-rest-api.adoc[Trapd REST API (v2)] for details.

=== Environment variable support in service configuration
Individual services in `service-configuration.xml` can now be enabled or disabled at runtime via environment variables,
using the pattern `CORE_SERVICE_<NAME>_ENABLED`. For example, set `CORE_SERVICE_TELEMETRYD_ENABLED=false`
to disable Telemetryd without editing the configuration file.

This is particularly useful for containerized deployments where service composition is controlled via environment.
Existing `enabled="true|false"` values in the file remain the default when no environment variable is set.

NOTE: The `Manager` and `Eventd` services must always be enabled and cannot be disabled via environment variable.

=== Ticketing plugin is now automatic

The `OSGiBasedTicketerPlugin` is now the default ticketer plugin.
Ticketing is automatically enabled when an OSGi-based ticketer plugin is installed and disabled when it is removed.
The `NullTicketerPlugin` and the `opennms.ticketer.plugin` property have been removed.

If you have `opennms.ticketer.plugin=org.opennms.netmgt.ticketd.NullTicketerPlugin` in a custom properties file under `etc/opennms.properties.d/`, remove that entry before upgrading.
If you previously set `opennms.ticketer.plugin=org.opennms.netmgt.ticketd.OSGiBasedTicketerPlugin`, that entry is now redundant and can be removed.
The `opennms.alarmTroubleTicketEnabled` property is no longer required but can still be used to explicitly enable or disable ticketing.

=== Light and dark mode for the Vue UI
The Vue-based web UI now supports a light/dark theme toggle, in addition to the system-default option.

=== File `eventconf.xml` moved to DB
The contents of the file `eventconf.xml` will be stored in the database during the upgrade process and all files in `etc/events` will be moved to `etc_archive`.
These events will not be imported into the database.

After upgrade, manage event configurations through the *Administration -> Manage Event Configurations* page
(or the REST API under `/api/v2/eventconf`).

See xref:operation:deep-dive/events/event-configuration.adoc#migrating-event-files-after-upgrade[Migrating event files after upgrade] for the steps to re-upload your customized event files from `etc_archive/events/`.

== Breaking changes

=== WMI integration removed
The WMI monitor, detector and collector had been removed, as the WS-Man integration offers better support for newer versions of the Windows operating system.

=== JoeSNMP removed
The SNMP implementation JoeSNMP was removed in OpenNMS {page-component-title}.

=== C3P0 connection pool removed
The C3P0 connection pool factory (`org.opennms.core.db.C3P0ConnectionFactory`) and
`etc/c3p0.properties` have been removed. HikariCP is now the only supported pool, and has been the default since OpenNMS {page-component-title} 35.

If your `opennms-datasources.xml` explicitly sets `factory="org.opennms.core.db.C3P0ConnectionFactory"`,
remove that attribute before upgrading.

=== At least PostgreSQL 14.0 is required

OpenNMS {page-component-title} now requires PostgreSQL 14.x or newer.
If you are running an older version, you must upgrade to PostgreSQL 14 or later.
Attempting a schema upgrade with `install -dis` will result in an error.
If upgrading PostgreSQL to at least version 14 isn’t possible and you’re completely blocked, the -Q flag lets you skip the version check.
Use this only as a last resort, since it may affect compatibility.
Be aware that doing so takes you beyond supported configurations — here be dragons.

=== Prometheus RemoteWrite plugin (formerly Cortex TSS plugin)

The OpenNMS Cortex TSS plugin has been renamed to the Prometheus RemoteWrite plugin to reflect that it works with any Prometheus `remote_write`-compatible time series store, not just Cortex.
As part of the rename, the OSGi configuration PID changed from `org.opennms.plugins.tss.cortex` to `org.opennms.plugins.tss.prometheus`.

IMPORTANT: If you previously configured the plugin via `$\{OPENNMS_HOME}/etc/org.opennms.plugins.tss.cortex.cfg`, rename the file to `$\{OPENNMS_HOME}/etc/org.opennms.plugins.tss.prometheus.cfg` after upgrading. If you do not, the plugin falls back to default values and writes will not reach your configured time series store.

The Karaf feature is now `opennms-plugins-prometheus-remotewrite` (previously `opennms-plugins-cortex-tss`), and the KAR file is `opennms-prometheus-remotewrite-plugin` (previously `opennms-cortex-tss-plugin`).
See xref:deployment:time-series-storage/timeseries/prometheus-remotewrite.adoc[the Prometheus RemoteWrite plugin documentation] for details.

=== Ops Board and Wallboard removed

The Vaadin-based Ops Board (operator board) and Wallboard, their dashlets, and the *Wallboard Configuration* admin page have been removed.
These provided auto-rotating, dashlet-composed displays intended for wall-mounted operations screens.

The *Ops Board* and *Wallboard* main-menu entries and the `admin/wallboardConfig.jsp` page no longer exist, and any existing Ops Board configuration is no longer used.
There is no drop-in replacement.

