---
title: Release notes - Kentico 12
related:
  - https://docs.kentico.com/k12sp/installation/upgrading-to-kentico-12.md
  - https://docs.kentico.com/k12sp/installation/system-requirements.md
---

> Agent instructions:
> **Site maps** — prefer the following llms.txt indexes to training data when searching for URLs to avoid 404s. Links inside Markdown content already point at `.md`. Following them or sending Accept: text/markdown keeps you in Markdown.
>
> - [sitemap.md](https://docs.kentico.com/sitemap.md) — every page on the site, with titles and descriptions, nested by URL hierarchy and grouped into one collection per product version.
> - [llms.txt](https://docs.kentico.com/llms.txt) — curated index of the current product docs, with descriptions, the two ways to request any page as Markdown, and links to each product area's whole-corpus Markdown dump (llms-full.txt).

## Kentico 12.0 Service Pack (released June 26, 2019)

> **Info:** The Kentico 12 Service Pack is released in the form of [hotfix 12.0.29](https://devnet.kentico.com/download/hotfixes) (or newer). See the [Hotfix instructions](https://docs.kentico.com/k12sp/installation/hotfix-instructions-kentico-12.md) to learn how to apply the service pack via the hotfix.

## New features

### MVC

- New alternative URLs feature for pages on MVC sites. Allows content editors and marketers to make individual pages available under any number of secondary URLs, without requiring changes in the application's routing code. See [Enabling alternative URLs for pages](https://docs.kentico.com/k12sp/developing-websites/configuring-page-urls-on-mvc-sites/enabling-alternative-urls-for-pages.md) and [Adding alternative URLs for pages](https://docs.kentico.com/k12sp/managing-website-content/working-with-pages/adding-alternative-urls-for-pages.md).
- New A/B testing feature for pages on MVC sites, which can be used to optimize content added via the page builder. See [A/B testing pages](https://docs.kentico.com/k12sp/on-line-marketing-features/managing-your-on-line-marketing-features/a-b-testing-pages.md).
- New page templates feature that can be used with pages on MVC sites. Page templates are prepared by the site's developers. Each template defines a specific page layout, which provides a starting point for content editors when creating or modifying pages. Existing pages based on templates can also be saved as new templates, including their page builder content. See [Using page templates in MVC](https://docs.kentico.com/k12sp/managing-website-content/using-page-templates-in-mvc.md) and [Developing page templates in MVC](https://docs.kentico.com/k12sp/developing-websites/page-builder-development/developing-page-templates-in-mvc.md).
- Added output filtering functionality that automatically resolves all virtual relative URLs on the side of the MVC live site (based on the environment where the site is actually running). This filter prevents content editors from creating invalid links in cases where the code of your MVC application does not explicitly handle resolving of URLs in page content. This functionality was added as part of the previously released hotfix 12.0.26.
- New API that enables intuitive configuration of output caching for pages containing personalized content (using the .NET _VaryByCustom_ output caching feature). See [Caching the output of personalized content](https://docs.kentico.com/k12sp/configuring-kentico/configuring-caching/caching-the-output-of-personalized-content.md).
- Boilerplate code added to the MVC project created when installing new MVC sites via the Kentico Installer. The additions consist of placeholder files and code for enabling the [page builder ](https://docs.kentico.com/k12sp/developing-websites/page-builder-development.md) and other Kentico features. Moreover, they ensure that first requests made to the MVC site immediately after the installation do not result in an error.

### MVC – Page builder

- New API that allows simplified development of page builder components – [Widgets](https://docs.kentico.com/k12sp/developing-websites/page-builder-development/developing-widgets-in-mvc.md), [Sections](https://docs.kentico.com/k12sp/developing-websites/page-builder-development/developing-page-builder-sections.md) and [Page templates](https://docs.kentico.com/k12sp/developing-websites/page-builder-development/developing-page-templates-in-mvc.md). The new development approach removes the need to manually implement a controller and view model for each component.
- New system form components that help create selector properties for page builder components: _Media file selector_, _Page selector_, and _Path selector_. Apart from the added selector form components, developers can also utilize JavaScript APIs to build the selectors within inline editors or custom form components. See [Page and media selectors for page builder components](https://docs.kentico.com/k12sp/developing-websites/page-builder-development/page-and-media-selectors-for-page-builder-components.md).
- Added functionality and API for building modal dialogs, which helps developers implement advanced editors for the properties of page and form builder components. See [Developing modal dialogs for builder component properties](https://docs.kentico.com/k12sp/developing-websites/page-builder-development/developing-modal-dialogs-for-builder-component-properties.md).
- New feature for page builder sections that allows developers to define [section properties](https://docs.kentico.com/k12sp/developing-websites/page-builder-development/developing-page-builder-sections/defining-section-properties.md). Once the section properties are defined, content editors can adjust the appearance or behavior of the sections through section configuration dialogs.
- New base class for [page builder section](https://docs.kentico.com/k12sp/developing-websites/page-builder-development/developing-page-builder-sections.md) controllers. Provides a _GetPage_ method that allows developers to access the page containing the currently processed section.
- The system now executes scripts added directly into the view code of [page builder sections](https://docs.kentico.com/k12sp/developing-websites/page-builder-development/developing-page-builder-sections.md).

### MVC – Form builder

- New _File uploader_ form component that enables users to attach files as part of the submitted form. See [Reference - System form components](https://docs.kentico.com/k12sp/developing-websites/form-builder-development/reference-system-form-components.md).
- Added the possibility to hide selected form components from the form builder's user interface. See [Filtering form components](https://docs.kentico.com/k12sp/developing-websites/form-builder-development/developing-form-components/filtering-form-components.md).
- New _Component is enabled_ [validation rule](https://docs.kentico.com/k12sp/developing-websites/form-builder-development/defining-field-validation-rules.md) for form fields using a component with the _bool_ data type. Validates whether the field is selected or enabled (returns _true_)_._
- The system now executes scripts added directly into the view code of [form builder sections](https://docs.kentico.com/k12sp/developing-websites/form-builder-development/developing-custom-form-layouts.md).

### Platform

- Data protection – The _Data protection_ application now allows viewing of all visitors who have given [consent agreements](https://docs.kentico.com/k12sp/configuring-kentico/data-protection/gdpr-compliance/creating-consents.md) for individual consents.
- Macros – New _Availability_ property in the macro rule editing dialog that indicates the intended execution environment of [macro rules](https://docs.kentico.com/k12sp/macro-expressions/writing-macro-conditions/creating-macro-rules.md). Allows developers to hide macro rules for conditions where they would not work correctly (for example when evaluated by MVC live site applications).
- Email queue – When administrators view emails in the [queue](https://docs.kentico.com/k12sp/managing-users/sending-emails.md), the system now displays both the HTML and plain text versions of the message body (if both are specified for the given email).
- UniGrid – Developers can now define button actions within the [configuration of UniGrid controls](https://docs.kentico.com/k12sp/custom-development/ui-controls/unigrid/reference-unigrid-definition.md).
- Azure Search – New _Fields_ property added to the event arguments of the _CreatingDocument_ and _AddingDocumentValue_ [customization events](https://docs.kentico.com/k12sp/configuring-kentico/setting-up-search-on-your-website/using-azure-search/customizing-azure-search.md). The property allows access to the collection of individual _Microsoft.Azure.Search.Models.Field_ objects, enabling developers to modify field values of the corresponding document based on the field's configuration (such as the _IsFacetable, IsFilterable_ flags).

### Content management

- Preview – Added option in the _Pages_ application for opening the [Preview mode](https://docs.kentico.com/k12sp/managing-website-content/working-with-pages.md#available-view-modes) of pages in a new browser tab.

### E-commerce

- API – New _EcommerceEvents.ProductAddedToShoppingCart_ [global event](https://docs.kentico.com/k12sp/custom-development/handling-global-events.md) which can be handled in custom code. Triggers when a customer adds a product to their shopping cart.

### On-line marketing

- Marketing automation – Added parameter to the [Newsletter subscription marketing automation action](https://docs.kentico.com/k12sp/on-line-marketing-features/managing-your-on-line-marketing-features/marketing-automation/working-with-the-automation-process-designer/adding-marketing-actions-to-automation-processes.md), which allows automation steps to be configured to reflect the [double opt-in](https://docs.kentico.com/k12sp/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/configuring-email-marketing/enabling-double-opt-in-for-newsletters.md) settings of the related newsletter when subscribing. The update changes the parameter definition of the _Newsletter subscription_ action step, which overrides any custom modifications of the step's parameters (for example adding a new field to the definition). If you have locally made such modifications, we recommend creating a separate custom action step (according to the [Best practices for customization](https://docs.kentico.com/k12sp/custom-development/best-practices-for-customization.md)).

## Updates and changes

- [A/B testing](https://docs.kentico.com/k12sp/on-line-marketing-features/managing-your-on-line-marketing-features/optimization-testing/a-b-testing-website-pages.md) – The format of the JSON data stored in the _CMSAB_ cookie was updated due to the introduction of [A/B testing for pages on MVC sites](https://docs.kentico.com/k12sp/on-line-marketing-features/managing-your-on-line-marketing-features/a-b-testing-pages.md). The name of the _VariantName_ data field was changed to _VariantIdentifier_ (the field's value remains the same for tests on Portal Engine sites – the code name of the test variant assigned to the visitor).
- Activities – Updated approach for adding scripts that log page-related activities on MVC sites. Use the new _Html.Kentico().ActivityLoggingScript_ extension method instead of directly loading and rendering scripts via the _KenticoLogActivityScript_ route. The original approach remains functional, but the new extension method is recommended. See [Logging activities on MVC sites](https://docs.kentico.com/k12sp/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/configuring-activities/enabling-activity-tracking-on-mvc-sites/logging-activities-on-mvc-sites.md).
- [Azure Search](https://docs.kentico.com/k12sp/configuring-kentico/setting-up-search-on-your-website/using-azure-search.md) – The [Microsoft.Azure.Search](https://www.nuget.org/packages/Microsoft.Azure.Search) NuGet package provided in Kentico projects was updated to version 5.0.3 (both in the Kentico web project and as a dependency of the _Kentico.Libraries_ NuGet package). All existing search implementations should remain functional – the Azure Search SDK does not contain significant breaking changes for this version update. For detailed information, see [Upgrading to the Azure Search .NET SDK version 5](https://docs.microsoft.com/en-us/azure/search/search-dotnet-sdk-migration-version-5).
- Countries – The display name of the default _Macedonia_ country was updated to _North Macedonia_. The code name and country codes remain unchanged.
- Form builder – Removed the option to set the _Required_ flag for form fields using the _Checkbox_ [system form component](https://docs.kentico.com/k12sp/developing-websites/form-builder-development/reference-system-form-components.md) in the form builder properties panel. Use the new _Component is enabled_ validation rule to check whether _Checkbox_ fields are selected.
- LinkedIn authentication – The [LinkedIn authentication](https://docs.kentico.com/k12sp/managing-users/user-registration-and-authentication/configuring-third-party-authentication-services/linkedin-authentication.md) feature available for Portal Engine websites was updated to use version 2.0 of the LinkedIn API. The original implementation using version 1.0 of the API is no longer supported by LinkedIn (see the [Developer Program Updates](https://engineering.linkedin.com/blog/2018/12/developer-program-updates) announcement for details).
  - Note: If you are a LinkedIn Partner and use the _r\_fullprofile_ permission for your application, you need to manually set the new _Requested permissions (scope)_ setting in Kentico to match the name of the permission: _r\_fullprofile_. See [Creating your LinkedIn application](https://docs.kentico.com/k12sp/managing-users/user-registration-and-authentication/configuring-third-party-authentication-services/linkedin-authentication/creating-your-linkedin-application.md).
- Media libraries – All newly created media libraries have their [library-level permissions](https://docs.kentico.com/k12sp/configuring-kentico/configuring-the-environment-for-content-editors/configuring-media-libraries/assigning-permissions-to-media-libraries.md) set to _Nobody_ by default (for improved security). Set the permissions according to your site's requirements if you wish to allow users to work with the media library without the administrator privilege level or permissions for the entire _Media libraries_ module.
- Page database structure – The Service Pack adds the _DocumentPageTemplateConfiguration_ and _DocumentABTestConfiguration_ columns to the _CMS\_Document_ database table and the related _View\_CMS\_Tree\_Joined_ view. Any custom views, queries or other database objects that rely on the structure of these columns need to be updated.
- Workflow – Most locations in the editing interface of the _Pages_ application no longer offer the option to disable sending of notification emails when moving pages between [workflow](https://docs.kentico.com/k12sp/managing-website-content/working-with-pages/using-workflows.md) steps. If required, pages can be moved between workflow steps without notification emails by switching to the _Properties -> Workflow_ tab and clearing the _Send notification emails_ check box.

## Fixed issues

- Banner management – Deleting a banner category did not create export delete tasks for the contained banner objects (even when logging of delete tasks for export purposes was enabled).
- Contact management – Editing form data on the _Recorded data_ tab in the _Forms_ application could in rare scenarios cause an unintended update and merging of the on-line marketing contact who submitted the given form record.
- Continuous integration – An error occurred when restoring continuous integration data if the repository contained a binding record representing a personal category assigned to a page (cms.documentcategory).
- Custom tables – When running in a web farm environment, web farm synchronization tasks related to certain custom table operations failed (creating or deleting a custom table, deleting a custom table data item).
- Customization – Under certain circumstances, custom implementations of system services registered using the _RegisterImplementation_ attribute were overridden by their default system implementations.
- Groups – The _Group_ selector on the _Media libraries_ tab of the media and link selection dialogs did not evaluate group read permissions correctly on instances containing multiple sites (each with its own groups).
- E-commerce – If a product was added to a customer's shopping cart automatically as a result of a [Buy X Get Y discount](https://docs.kentico.com/k12sp/e-commerce-features/managing-on-line-stores/discounts/working-with-buy-x-get-y-discounts.md), the system incorrectly logged web analytics conversions specified via the _Add to shopping cart conversion name_ e-commerce setting. Such conversions are no longer logged for automatically added products after applying the Service Pack.
- Form builder (MVC) – If the _Maximum length_ [validation rule](https://docs.kentico.com/k12sp/managing-website-content/forms/composing-forms.md#adding-field-validation) was assigned to a form field with a lower value than the used form component's database column size constraint, the validation error messages for users incorrectly displayed the higher database constraint limit (instead of the actual limit specified by the validation rule).
- Form builder (MVC) – Form validation error messages were displayed incorrectly when the validation failed for multiple rules assigned to a single field.
- Form engine – Form field data macros entered within the field editor were not resolved correctly and errors occurred in special cases when the form used a custom layout of the _ASCX_ type.
- Forms – The option to set a custom submit button image was not available for forms on MVC sites (the _Submit button image_ setting was not displayed when editing forms on the _General_ tab in the Forms application).
- Import toolkit – The Import Toolkit utility incorrectly caused logging of staging and web farm synchronization tasks when running a simulated import of data (if staging and/or web farms were enabled on the target instance).
- Installation – An error occurred during the installation if the _Register to IIS_ option was enabled, and the selected IIS Website did not contain at least one Site Binding of the 'http' type (for example when the only binding was of the 'https' type).
- Installation – After installing an MVC site into an existing instance, the system did not ensure that web farm functionality was enabled and started correctly. This could lead to issues in the administration interface, for example not being able to switch to the new site in the main site selector until the application was restarted.
- Installation – If an installation using the MVC development model was configured to install a site into an existing project of the _web site_ type, and the target location was then changed to install a new independent MVC project, the installer incorrectly created a Kentico administration project of the _web site_ type (instead of the _web application_ type which should always be used for MVC installations).
- Installation – If an installation process that was in progress got cancelled by a user and then restarted, the subsequent installation failed unless the entire Installer application was relaunched.
- Installation – Installing a new MVC site with a hyphen ('-') character in the site name created an MVC project with invalid code that could not be compiled.
- Marketing automation – An error occurred when a marketing automation process ran the _Newsletter subscription_ step with the _Unsubscribe from newsletter_ action selected.
- Object versioning – Clicking the _Reset_ button of the object filter in the _Recycle bin_ application did not correctly refresh the list of deleted objects.
- On-line marketing – Logging of web analytics and contact activities did not work when a page was displayed after a visitor authenticated through a LinkedIn account using the _LinkedIn logon_ web part.
- Page types – After cloning a page type with child query objects, the cloned queries had invalid names that could not be re-saved.
- Performance – Redundant database queries were called during application start when loading the system's data classes (object types, page types, etc.). The process was optimized to reduce the volume of loaded data.
- Personas – An error occurred when cloning persona rules that were calculated at least once for the given persona.
- Web farms – When running in a web farm environment, images uploaded to a form through a field using the _Upload file_ form control with automatic resizing configured were synchronized to other web farm servers in their original size, before the resizing was performed.

> **Info:** Additionally, all bugs fixed within Kentico hotfixes 12.0.28 or older are included in the Service Pack. See the [Bugtracker on DevNet](https://devnet.kentico.com/download/hotfixes) for a full list (click **Fixed Bugs**).

## Kentico 12.0 (released November 27, 2018)

## System requirement changes

- The minimum required version of Microsoft .NET Framework is now **4.6.1**.
- Removed support for Visual Studio 2015 development environments.
- Kentico 12 requires version 2.0.1 or newer of the [Microsoft.CodeDom.Providers.DotNetCompilerPlatform](https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/) NuGet package ([.NET Compiler Platform ('Roslyn')](https://github.com/dotnet/roslyn) compiler). When upgrading from older versions, the package is updated automatically.

## New features

### Platform

- Installation – The [Installer](https://docs.kentico.com/k12sp/installation/installing-kentico-mvc-projects.md) now allows creation of MVC sites, including both the MVC site project and the connected Kentico administration project. New MVC projects can be connected to existing administration instances.
- Installation – The [Quick installation](https://docs.kentico.com/k12sp/installation/quick-installation.md) now installs the MVC implementation of the Dancing Goat sample site.
- Kentico Installation Manager – The utility now displays a warning if the hotfix version of an instance is different than the _Kentico.Libraries_ code package version used by connected [MVC projects](https://docs.kentico.com/k12sp/developing-websites/mvc-development-overview.md) (only applies to projects located within the main installation folder of the given instance).
- Continuous integration – The location of the [continuous integration](https://docs.kentico.com/k12sp/developing-websites/setting-up-continuous-integration.md) file repository can now be configured using the _CMSCIRepositoryPath_ web.config key. New MVC projects created by the installer use this configuration by default to have a shared repository with the related Kentico administration project.
- Web farm – When using _Automatic_ [web farm mode](https://docs.kentico.com/k12sp/configuring-kentico/setting-up-web-farms/configuring-web-farm-servers.md), the system now adds an _\_AutoExternalWeb_ suffix to the generated server names for external web applications running the Kentico API (typically [MVC live site applications](https://docs.kentico.com/k12sp/developing-websites/mvc-development-overview.md)). The suffix ensures unique server names when hosting the synchronized applications on the same machine without using virtual directories (e.g. on different domains).
- The system now uses _reCAPTCHA V2_ (the original reCAPTCHA API version is no longer functional). Users can now prove they are not a robot simply by clicking a checkbox. See [Spam protection (CAPTCHA)](https://docs.kentico.com/k12sp/securing-websites/designing-secure-websites/securing-and-protecting-the-system/spam-protection-captcha.md). This functionality was also added for the previous version in hotfix 11.0.10.
- Modules – New option to set a visibility condition for the help topics of module [UI elements](https://docs.kentico.com/k12sp/custom-development/creating-custom-modules/reference-managing-ui-elements.md).

### Content management

- MVC – New [page builder](https://docs.kentico.com/k12sp/developing-websites/page-builder-development.md) feature that allows content editors and other non-technical users to [create content using widgets](https://docs.kentico.com/k12sp/managing-website-content/using-widgets-in-mvc.md) on MVC sites directly from the _Pages_ application. Developers need to create a suitable set of widgets for the site.
- MVC – New [form builder](https://docs.kentico.com/k12sp/managing-website-content/forms/composing-forms.md) feature for composing forms on MVC (content-only) websites.

  - Allows the creation of forms containing "smart fields", which are only displayed on repeated views of a form, as a replacement for other fields that were already filled in by a given visitor. See [Using smart fields in forms](https://docs.kentico.com/k12sp/managing-website-content/forms/using-smart-fields-in-forms.md).
  - Developers can extend the available form options by creating custom form components, validation rules, visibility conditions, etc. See [Form builder development](https://docs.kentico.com/k12sp/developing-websites/form-builder-development.md).
- Forms – The _On-line form_ web part and widget has a new property that determines whether the HTML output of the resulting form consists of a table or  elements. The property only applies to forms that use the automatically generated layout (forms with a custom layout are not affected).

### On-line marketing

- MVC – Page builder widgets allow users to create [multiple personalization variants](https://docs.kentico.com/k12sp/on-line-marketing-features/managing-your-on-line-marketing-features/personalizing-widgets-in-mvc.md), which are then displayed to a different audience based on predefined conditions. Developers need to define the [condition types](https://docs.kentico.com/k12sp/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/content-personalization-on-mvc-sites/developing-personalization-condition-types.md) used for the personalization.
- Contact management – The [geolocation feature](https://docs.kentico.com/k12sp/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/configuring-contacts/using-geolocation-for-contacts.md) for contacts was updated to work with MaxMind's GeoIP2 Databases.

### E-commerce

- API – New business API that makes it easier for developers to write custom code for managing shopping cart content and the overall checkout process. See the [API examples](https://docs.kentico.com/api12sp/e-commerce/shopping-carts.md) for more information.
- Coupon codes – Transformations for [displaying coupon codes](https://docs.kentico.com/k12sp/e-commerce-features/managing-on-line-stores/discounts/working-with-coupon-codes.md) added to the customer's shopping cart now provide an _IsApplied_ data property, which can be used to evaluate whether codes are still valid. This functionality was also added for the previous version in hotfix 11.0.29.

### Social & Community

- Facebook integration – Added support for app secret proof parameters when communicating with integrated Facebook apps. See [Connecting Kentico to social media](https://docs.kentico.com/k12sp/integrating-3rd-party-systems/integrating-social-media/connecting-kentico-to-social-media.md) and [Facebook authentication](https://docs.kentico.com/k12sp/managing-users/user-registration-and-authentication/configuring-third-party-authentication-services/facebook-authentication.md). This functionality was also added for the previous version in hotfix 11.0.8.

## Fixed issues

> **Info:** All bugs fixed within the Kentico 11 hotfixes are included in version 12. See the [Bugtracker on DevNet](http://devnet.kentico.com/download/hotfixes) for a full list (click **Fixed Bugs**).

## &#x20; Breaking changes (functionality, data structure, API)

### NuGet packages for MVC development

- The NuGet [integration packages](https://docs.kentico.com/k12sp/developing-websites/starting-with-mvc-development/installing-kentico-integration-packages.md) used for the development of MVC sites were reorganized. Most of the packages will not be released for Kentico 12, and their content is either combined into the new _Kentico.AspNet.Mvc_ package, or replaced by API provided as part of the _Kentico.Libraries_ package.
  - _Kentico.Activities_ – l ogging of activities in MVC projects is now performed via the API provided by the _Kentico.Libraries_ NuGet package.      The _Internal search_ activity type is no longer logged automatically. To log such activities, you need to manually call the API of a logging service in your site's code. See  [Enabling activity tracking on MVC sites](https://docs.kentico.com/k12sp/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/configuring-activities/enabling-activity-tracking-on-mvc-sites.md) and          [Logging activities on MVC sites](https://docs.kentico.com/k12sp/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/configuring-activities/enabling-activity-tracking-on-mvc-sites/logging-activities-on-mvc-sites.md).
  - _Kentico.ContactManagement_ – tracking of contacts in MVC projects is now performed via the _CMS.ContactManagement_ API provided by the _Kentico.Libraries_ NuGet package . See [Tracking contacts on MVC sites](https://docs.kentico.com/k12sp/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/configuring-contacts/tracking-contacts-on-mvc-sites.md).
  - _Kentico.Ecommerce_ – to work with product data and perform other e-commerce actions, use the _CMS.Ecommerce_ API provided by the _Kentico.Libraries_ NuGet package. See the [Developing on-line stores](https://docs.kentico.com/k12sp/e-commerce-features/developing-on-line-stores.md) chapter.
  - _Kentico.MediaLibrary_ – to generate media file URLs in MVC projects, use the _GetDirectUrl_ or _GetPermanentUrl_ methods of the _MediaLibraryHelper_ class (from the _CMS.MediaLibrary_ namespace).  Note that the _GetPermanentUrl_ method now generates URLs with extensions based on the site's _URLs and SEO -> Files friendly URL extension_ setting. See [Displaying content from media libraries](https://docs.kentico.com/k12sp/developing-websites/retrieving-content-in-mvc-applications/displaying-content-from-media-libraries.md).
  - _Kentico.Newsletters_ – to manage email feed subscriptions in MVC projects, use the _CMS.Newsletters_ API provided by the _Kentico.Libraries_ NuGet package. See [Handling newsletter subscriptions on MVC sites](https://docs.kentico.com/k12sp/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/configuring-email-marketing/handling-newsletter-subscriptions-on-mvc-sites.md).
  - _Kentico.Search_ – to search through locally stored indexes in MVC projects, call the _SearchHelper.Search_ method available in the _CMS.Search_ namespace (provided as part of the _Kentico.Libraries_ NuGet package) . See [Building a search interface for local indexes in MVC](https://docs.kentico.com/k12sp/configuring-kentico/setting-up-search-on-your-website/using-locally-stored-search-indexes/building-a-search-interface-for-local-indexes-in-mvc.md).
- Installation of the new _Kentico.AspNet.Mvc_ package does NOT automatically perform certain actions, which were done by the original _Kentico.Web.Mvc_ package. Most importantly:
  - Enabling of individual Kentico MVC integration features (within an automatically added _ApplicationConfig.cs_ file). All such features need to be enabled manually on application start using the methods of the _ApplicationBuilder_ instance. An empty _ApplicationConfig.cs_ file is included within new MVC projects created via the [installer](https://docs.kentico.com/k12sp/installation/installing-kentico-mvc-projects.md).
  - Setting the _runAllManagedModulesForAllRequests="true"_ attribute for the __ element in the __ section of the MVC project's main _web.config_ file. Instead, individual handlers are added for specific paths that require custom extensions (getattachment, getmedia, etc.). If you require the _runAllManagedModulesForAllRequests_ attribute, you need to enable it manually.

### Platform

- The [installer](https://docs.kentico.com/k12sp/installation.md) no longer provides the option to create Kentico projects targeting .NET Framework 4.7. Installed projects now always target the minimum supported .NET Framework version (4.6.1). If you wish to target a higher version, you can set it manually for your project in Visual Studio.
- The structure of the XML files used to store configuration for the [command line installation](https://docs.kentico.com/k12sp/installation/installing-kentico-from-the-command-line.md) was changed. Certain element attributes were removed and some new attributes were added. See [Command line installation - XML configuration](https://docs.kentico.com/k12sp/installation/installing-kentico-from-the-command-line/command-line-installation-xml-configuration.md) for details.
- The version of the [Newtonsoft.Json](https://www.nuget.org/packages/Newtonsoft.Json/) NuGet package used by the Kentico web project was updated to 11.0.2. If you use this package in any custom projects within the Kentico solution, you need to consolidate the package versions after performing the upgrade.
- The _Kentico.Libraries.Tests_ NuGet package (_CMS.Tests_ library) no longer supports the _Microsoft unit test_ framework. When [writing automated tests](https://docs.kentico.com/k12sp/custom-development/writing-automated-tests.md) for code using the Kentico API, you need to either use the [NUnit](https://github.com/nunit/docs/wiki) testing framework or create tests without leveraging the _CMS.Tests_ library.
- The default name of the SQL server instance used by [isolated integration tests](https://docs.kentico.com/k12sp/custom-development/writing-automated-tests/creating-isolated-integration-tests.md) was changed to _(localdb)\MSSQLLocalDB_. Testing projects that have a custom database instance name assigned through the _CMSTestDatabaseInstanceName_ app.config key are not affected.
- The Kentico web project no longer contains or uses the _CMSDependencies_ folder. The stored third-party libraries are now integrated via NuGet packages.
- The _Use progressive caching_ setting (in the _System -> Performance_ category of the _Settings_ application) was removed. The progressive caching feature remains in the system and is always enabled (optimizes access to data for concurrent threads).
- The following values were removed from the _SystemContext_ object in macro expressions:

  - CurrentTrustLevel
  - IISWebSiteName
  - IsFullTrustLevel
- The following changes were made to Kentico assemblies (DLLs). Any references from custom projects to the old assemblies need to be updated.  The merges do not change the related API and namespaces.
  - _CMS.Localization.dll_ merged into _CMS.Globalization.dll_
  - _CMS.CKEditor.Web.UI.dll_ merged into _CMS.Base.Web.UI.dll_
  - _CMS.ModuleLicenses.dll_ merged into _CMS.Modules.dll_
  - _CMS.ModuleLicenses.Web.UI.dll_ renamed to _CMS.Modules.Web.UI.dll_

### Content management

- The _NotFoundHandler_ feature for handling of 404 errors on MVC sites was removed. We recommend [handling 404 errors via IIS](https://docs.kentico.com/k12sp/securing-websites/developing-secure-websites/handling-error-messages-securely/handling-404-errors-in-mvc-applications.md).
- Obsolete MVC functionality related to the _CMSApp\_MVC_ project was completely removed from the system. This includes page templates of the MVC type, as well as MVC URL paths of pages and their aliases.
- The demo code files for [responsive images](https://docs.kentico.com/k12sp/developing-websites/managing-responsive-images.md) were removed from the _App\_Code_ (or _Old\_App\_Code_) folder of the Kentico web project. Instead, the same code samples are available under the _CodeSamples_ folder in the Kentico program files directory, and integrated into the default web project as part of the removable _CMS.DancingGoat.Samples.dll_ assembly.

### REST service

- When [retrieving page data using the REST service](https://docs.kentico.com/k12sp/integrating-3rd-party-systems/kentico-rest-service/getting-data-using-rest.md), the _CombineWithDefaultCulture_ parameter is now always set to false when called together with the _AllCultures_ culture constant. Requests with the _AllCultures_ constant will retrieve page versions in all available cultures regardless of the _CombineWithDefaultCulture_ parameter being set or not.

### On-line marketing

- The geolocation feature was updated to work with Maxmind's GeoIP2 Databases. If you use geolocation, you need to add the newer GeoLite2 or GeoIP2 database files into your web project. See [Using geolocation for contacts](https://docs.kentico.com/k12sp/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/configuring-contacts/using-geolocation-for-contacts.md).
- The system no longer logs     [activities](https://docs.kentico.com/k12sp/on-line-marketing-features/managing-your-on-line-marketing-features/contact-management/tracking-contact-activities.md) of the _User login_ type for sites using integrated [Windows Authentication](https://docs.kentico.com/k12sp/managing-users/user-registration-and-authentication/configuring-windows-ad-authentication.md) (where "authentication" occurs on each request).

### Social & Community

- The _Friends_ and _Messaging_ features were removed from the system, along with all related components (web parts, widgets, email templates, form controls). See the [Upgrade instructions](https://docs.kentico.com/k12sp/installation/upgrading-to-kentico-12.md#removed-web-parts) for detailed information about the removed web parts.
- The Facebook integration functionality was updated according to changes and new security requirements in the Facebook API. See [Connecting Kentico to social media](https://docs.kentico.com/k12sp/integrating-3rd-party-systems/integrating-social-media/connecting-kentico-to-social-media.md) and [Facebook authentication](https://docs.kentico.com/k12sp/managing-users/user-registration-and-authentication/configuring-third-party-authentication-services/facebook-authentication.md). This updated functionality was also added for the previous version in hotfix 11.0.42.
- Integration with the goo.gl [URL shortener](https://docs.kentico.com/k12sp/integrating-3rd-party-systems/integrating-social-media/setting-up-url-shorteners.md) for social media posts was removed from the system. The Google URL Shortener service is [discontinued](https://developers.googleblog.com/2018/03/transitioning-google-url-shortener.html) and its API will stop working after March 30, 2019. Before upgrading existing instances to Kentico 12, you need to remove all usage of the goo.gl shortener (see [Upgrading to Kentico 12](https://docs.kentico.com/k12sp/installation/upgrading-to-kentico-12.md) for details).
- The  _GetBoardMessagesCount_ transformation method was removed (both the ASCX transformation method and the macro method for Text / XML transformations). If you need to display the number of messages posted on a board, implement a [custom transformation method](https://docs.kentico.com/k12sp/developing-websites/loading-and-displaying-data-on-websites/writing-transformations/adding-custom-methods-to-transformations.md) or [macro method](https://docs.kentico.com/k12sp/macro-expressions/extending-the-macro-engine/registering-custom-macro-methods.md) and call the _BoardMessageInfoProvider.GetMessagesCount_ method within its code (located in the _CMS.MessageBoards_ namespace).

### Database

#### General

- The following columns were removed from the _CMS\_PageTemplate_ database table due to removing of the obsolete MVC functionality:
  - _PageTemplateDefaultController_
  - _PageTemplateDefaultAction_

#### E-commerce

- Columns that reference order addresses (_OrderBillingAddressID,_ _OrderCompanyAddressID_, _OrderShippingAddressID_) were removed from the _COM\_Order_ database table. Instead, each order address record in the _COM\_OrderAddress_ table now references the related order via the _AddressOrderID_ and _AddressType_ columns.

#### Social & Community

- The following database tables and columns were removed along with the Friends and Messaging features:
  - _Community\_Friend_ table
  - _Messaging\_ContactList_ table
  - _Messaging\_IgnoreList_ table
  - _Messaging\_Message_  table
  - _UserMessagingNotificationEmail_ column from the _CMS\_UserSettings_ table
- The _FacebookAccountPageUrl_ column was removed from the _SM\_FacebookAccount_ database table.

## &#x20; API

> **Note:** Search the [API changes](http://devnet.kentico.com/documentation/api-changes/kentico-12) page on DevNet to find all possible breaking changes in the API.

### MVC – Platform

- The approach used to register Kentico services into dependency injection containers on MVC sites was changed. Instead of registering service types from assemblies with the _Kentico._ prefix, you need to implement on-the-fly registration for all services from the Kentico API (integrated via the _Kentico.Libraries_ NuGet package). Additionally, the _Kentico.Core_ NuGet package will not be released for Kentico 12 – if you wish to use interfaces for custom service or repository classes, create your own equivalents of the original _IService_ and _IRepository_ interfaces. See [Initializing Kentico services with dependency injection](https://docs.kentico.com/k12sp/developing-websites/initializing-kentico-services-with-dependency-injection.md).
- Extension methods for registering specific routes used by Kentico features on MVC sites are now obsolete (such as _MapActivitiesRoutes_, _MapOpenedEmailHandlerRoute_ and _MapEmailLinkHandlerRoute_). Instead, the _Kentico().MapRoutes()_ extension method now automatically maps all required routes based on the set of features enabled via the _ApplicationBuilder_ instance. As a result, enabling of Kentico MVC features must always be done _before_ routes are registered into the application's _RouteTable_.
- The initialization of the Kentico API was moved to an earlier phase (_Application\_Start_) for MVC applications that use the _Kentico.AspNet.Mvc_ integration package. As a result, it is no longer possible to assign handlers to the _ApplicationEvents.Initialized_ event within the _Application\_Start_ method of the _HttpApplication_ class in _Global.asax_. If you used this approach, instead assign the event handlers within the _OnInit_ method of a [custom module class](https://docs.kentico.com/k12sp/custom-development/creating-custom-modules/initializing-modules-to-run-custom-code.md).

### MVC – On-line marketing

- The _Kentico().MapActivitiesRoutes()_ extension method, which maps page activity logging routes on MVC sites, is now obsolete. Instead, call the _UseActivityTracking_ method of the _ApplicationBuilder_ instance to enable the activity tracking feature, and the general _Kentico().MapRoutes()_ method then automatically registers the required routes. See [Logging activities on MVC sites](https://docs.kentico.com/k12sp/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/configuring-activities/enabling-activity-tracking-on-mvc-sites/logging-activities-on-mvc-sites.md).
- The _Kentico().MapOpenedEmailHandlerRoute()_ and _Kentico().MapEmailLinkHandlerRoute()_ extension methods, which map marketing email tracking routes on MVC sites, are now obsolete. Instead, call the _UseEmailTracking_ method of the _ApplicationBuilder_ instance to enable the email tracking feature, and the general _Kentico().MapRoutes()_ method then automatically registers the required routes. See [Tracking marketing emails on MVC sites](https://docs.kentico.com/k12sp/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/configuring-email-marketing/enabling-marketing-email-tracking/tracking-marketing-emails-on-mvc-sites.md).

### Platform

- The way web farm synchronization tasks are registered and created within the system has changed. In Kentico 12, web farm tasks are represented by strongly typed classes that inherit from the _WebFarmTaskBase_ base class. The classes encapsulate both the task's synchronization data and its execution logic. See [Creating custom web farm synchronization tasks](https://docs.kentico.com/k12sp/configuring-kentico/setting-up-web-farms/creating-custom-web-farm-synchronization-tasks.md) for more information and an example.

### Content management

- The _Attachment_ class is now obsolete and should be replaced with the _DocumentAttachment_ class in any custom code. For all page types containing _File_ or _Attachment_ fields, Info and InfoProvider classes should be re-generated. Alternatively, you can replace occurrences of the _Attachment_ class in the code of these page types manually.

### E-commerce

- The _ProductPrices_ and _ProductCatalogPrices_ classes representing [calculated prices](https://docs.kentico.com/k12sp/e-commerce-features/customizing-on-line-stores/product-related-customizing/customizing-product-prices.md) no longer provide setters for their properties. If you need to update an existing object of this type, create a new instance of the given class with the required values set in the constructor.
- The _IAddress_ interface unifying the _AddressInfo_ and _OrderAddressInfo_ classes was removed. Use the _AddressInfo_ class to work with customer addresses and the _OrderAddressInfo_ class to work with order addresses.
