• [bug:1746706] When reloading or opening Angular-based detail page directly, the navigation menu and breadcrumb list are not recovered properly and the first panel is focused. [bug:1746709] when we try to open non-existing Angular-based detail page, “Not Found” (404) page is not shown. A blank page only with the navigation menu will be shown.


  • publicize_image policy now has the same name both for image create and edit features and corresponds to the same one in Glance. If you changed the policy name manually to get feature working you have to rollback your changes before Horizon update.


  • [bug:1681627] A problem that Angular-based detail page (ngdetail page) cannot be reloaded or opened via direct URL has been fixed. Note that there are some known issues described in the Known Issues section.

  • [bug:1859041] image:publicize_image policy is renamed to publicize_image to be the same as Glance has.



  • Added a new create_volume setting under the LAUNCH_INSTANCE_DEFAULTS dict. This allows you to set the default value of “Create Volume”, when Cinder is available.


  • Previously horizon assumes only volume as an endpoint for the Cinder regardless of the API version. As a result, if deployers configure Cinder v2/v3 API endpoint as volumev2 or volumev3, Volume related menus – “Create Volume from instance snapshot” and “Create instance from Volume” – were not displayed. Horizon now checks the availability of the Block Storage service by looking for all posible endpoints volume, volumev2 and volumev3.



The Flavor panel now may be configured to use either the legacy or Angular code.

In an effort to establish Angular conventions, use the framework’s toastService rather than the legacy horizon.alert(…) in client-side code. horizon.alert is still used by the django messaging framework, so horizon.messages.js still exists.


  • Added Keystone to Keystone (K2K) federation support in Horizon. If Keystone is configured with K2K and has service providers, the list of Keystone providers will appear in a dropdown. In local_settings.py you can optionally set the identity provider display name with KEYSTONE_PROVIDER_IDP_NAME or set the provider id that is used to compare with the other service providers KEYSTONE_PROVIDER_IDP_ID. [blueprint k2k-horizon].

  • The hard-coded run_tests commands for extracting translatable strings and updating message catalogs have been ported to django management commands as extract_messages and update_catalog. These accept several parameters to make them easier to use with downstream customisations and string modifications, but the default behaviour is the same as before.

  • The Access & Security panel’s tabs have been moved to their own panels for clearer navigation and better performance. API Access and Key Pairs now reside in the Compute panel group. Floating IPs and Security Groups are now in the Network panel group.

  • Download buttons for OpenStack RC files have been added to the user dropdown menu in the top right of Horizon.

  • ANGULAR_FEATURES now allows for a key ‘flavors_panel’ to be specified as True or False indicating whether the Angular version of the panel is enabled.

  • Integration tests for Flavor features may also be toggled in openstack_dashboard/test/integration_tests/horizon.conf using the ‘panel_type’ feature in the ‘flavors’ setting, either set to ‘legacy’ or ‘angular’ to match the enabled panel type.

  • A new Profiler panel in the Developer dashboard is introduced. It integrates osprofiler library into horizon, thus implementing blueprint openstack-profiler-at-developer-dashboard. Initially profiler is disabled. To enable it the value OPENSTACK_PROFILER['enabled'] has to be True. This in turn can be achieved by copying files _9030_profiler_settings.py.example and _9030_profiler.py to openstack_dashboard/local/local_settings.d/_9030_profiler_settings.py and openstack_dashboard/local/enabled/_9030_profiler.py respectively. Also, by default it expects MongoDB cluster to be present on the same host where Keystone is located (say, in a Devstack VM). But it also can be configured with params with OPENSTACK_PROFILER['notifier_connection_string]' and OPENSTACK_PROFILER['receiver_connection_string'] values. MongoDB should be installed manually and allowed to receive requests on interface.


  • The TEMPLATE_* settings have been replaced with a TEMPLATE dict. This will likely cause issues when porting settings to this version of Horizon. The TEMPLATE_DEBUG setting has been removed and is tied to the DEBUG setting now. A detailed explanation of this dict can be found at https://docs.djangoproject.com/en/1.10/ref/settings/#templates

  • The is_authenticated() and is_anonymous() functions in Django OpenStack Auth’s User class are properties when running under Django 1.10, and no longer take a margin parameter.

  • The logos in Horizon (previously logo-splash.png and logo.png) now load SVG files instead of PNG. The default logos have been updated to reflect the new OpenStack branding.

  • LBaaS v1 dashboard has been removed. LBaaS v1 feature was removed from neutron-lbaas in Newton, but LBaaS v1 dashboard in Horizon has been kept only for backward compatibility in Newton release so that operators can upgrade Horizon first. Note that the Dashboard support for LBaaS v2 is provided as a Horizon plugin via neutron-lbaas-dashboard project.

  • The developer enabled files have been moved from openstack_dashboard/enabled to openstack_dashboard/contrib/developer/enabled. To enable them, copy into openstack_dashboard/local/enabled and set DEBUG = True.

  • Any past use of the Django based Swift UI is no longer supported and the code is being removed. The new angularJS based version should be used instead.


  • The run_tests.sh script is now deprecated and all functionality has been provided by either tox or manage.py. run_tests will be removed in Queens (13.0).

  • The initScope method for action services has been deprecated, with the new method initAction added which does not get passed a scope. The allowed and perform method are now passed a scope for context in addition to the first item/items argument. The “scope” parameter to the WizardModalService modal() method has also been deprecated, and will be ignored in a future release of Horizon.

  • The function fix_auth_url_version() should be removed from openstack_auth library as soon as Horizon no longer needs it. The replacement function is fix_auth_url_version_prefix() which returns a fixed url and a boolean flag indicating if the url was actually fixed. Having a separate flag allows to emit more precise warning messages about inconsistencies in Keystone endpoint URL.

  • The telemetry code in Horizon has been deprecated and disabled for several releases now. The code has now been removed from the tree.

  • Removing formerly deprecated Swift UI code that was replaced with an improved Angular version in Mitaka.

  • All previous instances of horizon.alert(…) used by client-side have been replaced with horizon.toast. Alert messages via horizon.alert(…) should be avoided when writing new JavaScript code. horizon.toast.add(‘error’, gettext(…)) should be used instead.


  • [bug 1618235] User can now delete all characters typed in input search without causing the selected facet to disappear when the last character is deleted.

  • [bug 1635505] Horizon now properly allows to use arrow keys inside of the input search, without triggering a new text search that refreshes the content of the table below.

  • There will no longer be any WARNING messages regarding the developer panels in logs.


  • Menu follows the search input position as the user adds more facets

  • XStatic-Angular updated from to

  • XStatic-Angular-Bootstrap updated from to

  • XStatic-Angular-Gettext updated from to

  • XStatic-Bootswatch updated from to

  • XStatic-D3 updated from to

  • XStatic-Font-Awesome updated from to

  • XStatic-JSEncrypt updated from to

  • XStatic-Roboto-Fontface updated from to