OPNSense/core 68f341dsrc/opnsense/mvc/app/controllers/OPNsense/Interfaces/Api AssignmentController.php, src/opnsense/mvc/app/controllers/OPNsense/Interfaces/forms dialogAssignment.xml

interfaces: show identifier and add placeholder for description
DeltaFile
+6-8src/opnsense/mvc/app/controllers/OPNsense/Interfaces/forms/dialogAssignment.xml
+5-1src/opnsense/mvc/app/controllers/OPNsense/Interfaces/Api/AssignmentController.php
+11-92 files

OPNSense/core f825f1csrc/etc/rc.d configd captiveportal, src/opnsense/scripts/firmware bogons.sh

src: remove more backticks in shell scripts
DeltaFile
+14-14src/sbin/ping_hosts.sh
+12-12src/opnsense/scripts/firmware/bogons.sh
+3-5src/etc/rc.d/configd
+4-4src/etc/rc.d/captiveportal
+3-5src/etc/rc.d/flowd_aggregate
+1-1src/opnsense/scripts/interfaces/ppp-uptime.sh
+37-416 files

OPNSense/core 37c2b81src/opnsense/mvc/app/views/OPNsense/Diagnostics health.volt

reporting: apply bar change in health graph
DeltaFile
+2-1src/opnsense/mvc/app/views/OPNsense/Diagnostics/health.volt
+2-11 files

OPNSense/core 626154csrc/www interfaces.php

interfaces: fix deprecated backtick use
DeltaFile
+1-3src/www/interfaces.php
+1-31 files

OPNSense/core 39469dcsrc/opnsense/mvc/app/views/OPNsense/Diagnostics health.volt

reporting: health: ditch footer and add banner margin
DeltaFile
+1-4src/opnsense/mvc/app/views/OPNsense/Diagnostics/health.volt
+1-41 files

OPNSense/core 78826b0src/opnsense/mvc/app/views/OPNsense/Diagnostics health.volt

reporting: health: use tabs to split settings

ref: https://forum.opnsense.org/index.php?topic=52233.0
DeltaFile
+55-48src/opnsense/mvc/app/views/OPNsense/Diagnostics/health.volt
+55-481 files

OPNSense/core 704e9f2src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api OverviewController.php

unbound: empty string as array offset instead of null

php 8.5 issue
DeltaFile
+2-2src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/OverviewController.php
+2-21 files

OPNSense/core 2dfedddsrc/opnsense/mvc/app/library/OPNsense/Auth Radius.php, src/opnsense/scripts/captiveportal process_accounting_messages.php set_session_restrictions.py

captive portal: adjust accounting interval to Acct-Interim-Interval

This changes the default interval to 600, which is the recommended
value according to RFC 2869.
DeltaFile
+22-7src/opnsense/scripts/captiveportal/process_accounting_messages.php
+19-5src/opnsense/scripts/captiveportal/lib/db.py
+6-1src/opnsense/mvc/app/library/OPNsense/Auth/Radius.php
+2-1src/opnsense/scripts/captiveportal/set_session_restrictions.py
+1-1src/opnsense/service/conf/actions.d/actions_captiveportal.conf
+2-0src/opnsense/scripts/captiveportal/sql/init.sql
+52-151 files not shown
+53-157 files

OPNSense/core c8804aasrc/opnsense/mvc/app/models/OPNsense/Firewall/Menu Menu.php

Firewall: Migration Assistant: Show migration assistant if at least one Outbound NAT rule exists, remove conditional hiding based on NAT mode

(cherry picked from commit 1aceb823dabc64cfc7098dd48b48f4c0a2e3fd9a)
DeltaFile
+1-4src/opnsense/mvc/app/models/OPNsense/Firewall/Menu/Menu.php
+1-41 files

OPNSense/core 1aceb82src/opnsense/mvc/app/models/OPNsense/Firewall/Menu Menu.php

Firewall: Migration Assistant: Show migration assistant if at least one Outbound NAT rule exists, remove conditional hiding based on NAT mode
DeltaFile
+1-4src/opnsense/mvc/app/models/OPNsense/Firewall/Menu/Menu.php
+1-41 files

OPNSense/core 7bf7a44src/opnsense/scripts/captiveportal/lib arp.py

captive portal: adjust ARP logic to ISO format per https://github.com/opnsense/core/commit/4b86d4e638b7968158a4691e511e174ca927ed13

ValueError: time data '2026-06-29T12:34:19Z' does not match format '%Y-%m-%d %H:%M:%S'
(cherry picked from commit 1f1612aa1024c343711a6ad8c20ca39e08e6645e)
DeltaFile
+3-3src/opnsense/scripts/captiveportal/lib/arp.py
+3-31 files

OPNSense/core 1f1612asrc/opnsense/scripts/captiveportal/lib arp.py

captive portal: adjust ARP logic to ISO format per https://github.com/opnsense/core/commit/4b86d4e638b7968158a4691e511e174ca927ed13

ValueError: time data '2026-06-29T12:34:19Z' does not match format '%Y-%m-%d %H:%M:%S'
DeltaFile
+3-3src/opnsense/scripts/captiveportal/lib/arp.py
+3-31 files

OPNSense/core 7e63195src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api FilterBaseController.php AliasController.php, src/opnsense/scripts/filter update_tables.py

firewall: skip alias on rules GUI reload

Also align the alias load path in the controller with
how !skip_alias serializes the sequence after rules
reload inside filter_configure_sync().

(cherry picked from commit a3091013d724f19e5fc2767a12de811da606e935)
(cherry picked from commit 5c1d8575a7d87dd717963506b510d144e6fcd63a)
DeltaFile
+2-2src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterBaseController.php
+1-1src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasController.php
+1-1src/opnsense/scripts/filter/update_tables.py
+4-43 files

OPNSense/core 5c1d857src/opnsense/scripts/filter update_tables.py

firewall: change update failure to error
DeltaFile
+1-1src/opnsense/scripts/filter/update_tables.py
+1-11 files

OPNSense/core e04d5d3src/opnsense/mvc/app/views/OPNsense/Firewall nat_rule.volt

firewall: nat: enable virtualDOM here as well

(cherry picked from commit d61ff02165535f90e7444940c7f1844e43cdf899)
DeltaFile
+1-0src/opnsense/mvc/app/views/OPNsense/Firewall/nat_rule.volt
+1-01 files

OPNSense/core d61ff02src/opnsense/mvc/app/views/OPNsense/Firewall nat_rule.volt

firewall: nat: enable virtualDOM here as well
DeltaFile
+1-0src/opnsense/mvc/app/views/OPNsense/Firewall/nat_rule.volt
+1-01 files

OPNSense/core 3edf3ccsrc/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api InterfaceController.php

mvc: use camelCase for carp_status action related to #10428

(cherry picked from commit 68d9da1a0be85a9e673ee10c46052749b61753c6)
DeltaFile
+2-2src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/InterfaceController.php
+2-21 files

OPNSense/core 5c69748src/opnsense/mvc/app/controllers/OPNsense/Base ApiControllerBase.php

src: sweep

(cherry picked from commit aca61bd87e6f18599957cacdb9800f44603466dc)
DeltaFile
+1-1src/opnsense/mvc/app/controllers/OPNsense/Base/ApiControllerBase.php
+1-11 files

OPNSense/core 841a6aesrc/opnsense/mvc/app/controllers/OPNsense/Base ApiMutableModelControllerBase.php

mvc: whitespace

(cherry picked from commit d92ad28bc103be00a14bcdaa14f169ceef6d3c83)
DeltaFile
+1-1src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php
+1-11 files

OPNSense/core 1287133src/opnsense/www/js opnsense_bootgrid.js

bootgrid: minor optimizations

(cherry picked from commit 3ca0e7b5708dbb5e8dcab5f92664e7ef36db1d72)
DeltaFile
+23-9src/opnsense/www/js/opnsense_bootgrid.js
+23-91 files

OPNSense/core 6cae57asrc/opnsense/mvc/app/models/OPNsense/Firewall DNat.php

Firewall: NAT: Destination NAT: Add validations for No RDR, prevent target and local-port being set (#10447)

(cherry picked from commit 7914d185d4fbc0faa06572ba205391654df7b589)
DeltaFile
+14-0src/opnsense/mvc/app/models/OPNsense/Firewall/DNat.php
+14-01 files

OPNSense/core 525bc81src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api FilterBaseController.php

firewall: move applyAction() up for smaller diff
DeltaFile
+9-8src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterBaseController.php
+9-81 files

OPNSense/core 53dc2e9src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api FilterController.php

Firewall: Rules: Improve interface filter logic to include floating rules with multiple interfaces when they overlap with at least one interface in the interface filter request (#10449)

* Firewall: Rules: Improve interface filter logic to include floating rules with multiple interfaces when they overlap with at least one interface in the interface filter request.

* Improve inverted interface condition, make it symmetric to positive interface match in final else condition

(cherry picked from commit a1d16690c2c34c0a131e70e0ffeee0771f672b0e)
DeltaFile
+21-10src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterController.php
+21-101 files

OPNSense/core ed48535src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api MigrationController.php, src/opnsense/mvc/app/views/OPNsense/Firewall firewall_migration.volt

Firewall: Migration Assistant: Show rule counts that can be exported, hide tab if no rules exist (#10395)

(cherry picked from commit f4c040a0c134d73264ebfe932fe6a80e6f3768cf)
DeltaFile
+31-6src/opnsense/mvc/app/views/OPNsense/Firewall/firewall_migration.volt
+28-4src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/MigrationController.php
+59-102 files

OPNSense/core e87b505src/opnsense/mvc/app/controllers/OPNsense/Base ApiControllerBase.php ApiMutableModelControllerBase.php, src/opnsense/mvc/app/controllers/OPNsense/Monit/Api SettingsController.php

mvc: give throwReadOnly() a sibling named throwNotFullAdmin() which validates if a user has full access rights and can be treated as "provides safe input".

Although there aren't a lot of cases where user input can't be validated strictly enough, there are still one or two edge cases which offer some sort of "advanced" input which we currently wouldn't accept and are thus hard to change for historic reasons. The most prominent one is Monit, which allows local commands being executed.

throwNotFullAdmin simply raises an exception and bails before persisting changes to the configuration, which can be set on a per action or controller (internalSaveRequiresAdmin).

(cherry picked from commit 578e025111161ffd03fd3fd0ccdac203be546505)
DeltaFile
+20-1src/opnsense/mvc/app/controllers/OPNsense/Base/ApiControllerBase.php
+8-0src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php
+1-0src/opnsense/mvc/app/controllers/OPNsense/Monit/Api/SettingsController.php
+29-13 files

OPNSense/core 9ec8c01src/opnsense/mvc/app/controllers/OPNsense/Base ControllerBase.php

mvc: also do not translate empty labels in grids #10369

(cherry picked from commit 9d65dd6a8c2b14c19c914b90d3c8826e3d9bc962)
DeltaFile
+4-1src/opnsense/mvc/app/controllers/OPNsense/Base/ControllerBase.php
+4-11 files

OPNSense/core 9862422src/opnsense/mvc/app/library/OPNsense/Core File.php FileObject.php

src: implicitly marking parameter $chown as nullable is deprecated

(cherry picked from commit 8441b9ea76352d6d75203d61feee03110ef5bdea)
DeltaFile
+2-2src/opnsense/mvc/app/library/OPNsense/Core/File.php
+1-1src/opnsense/mvc/app/library/OPNsense/Core/FileObject.php
+3-32 files

OPNSense/core 635f2e9src/opnsense/mvc/app/library/OPNsense/Core FileObject.php

mvc: FileObject: fix exception bug (#10442)

(cherry picked from commit 5c040197dfc4e4baa507de5c8bf714fe30ae68a6)
DeltaFile
+1-1src/opnsense/mvc/app/library/OPNsense/Core/FileObject.php
+1-11 files

OPNSense/core b601c16src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes BaseField.php

mvc: guard BaseField::setNodes() against a list given for a scalar leaf (#10434)

(cherry picked from commit cde5f912b376be2962a9350613e225d579ef734e)
(cherry picked from commit 48d01e753973457942dbca408e04531b9917b5d3)
(cherry picked from commit a0a8e739570145b96b1adf73f8235ec479417f75)
DeltaFile
+6-4src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php
+6-41 files

OPNSense/core a0a8e73src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes BaseField.php

mvc: BaseField: more of the same
DeltaFile
+1-1src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php
+1-11 files