---
title: Distributing custom builder components
---

> 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).

After you create a custom [page builder](https://docs.kentico.com/13/developing-websites/page-builder-development.md) or [form builder](https://docs.kentico.com/13/developing-websites/form-builder-development.md) component in your MVC project, e.g. a [widget](https://docs.kentico.com/13/developing-websites/page-builder-development/developing-widgets.md) or a [form builder section](https://docs.kentico.com/13/developing-websites/form-builder-development/developing-custom-form-layouts.md), you might want to share the code of this component among other projects inside your company, or with the rest of the world.

The most common way of distributing code in the .NET community is using [NuGet packages](https://docs.microsoft.com/en-us/nuget/what-is-nuget). NuGet packages are code bundles containing compiled code along with other content needed in the projects for which they are created. Developers can share these packages with other developers directly or by publishing them to public or private hosts (such as [nuget.org](https://www.nuget.org/)). Another possible way of distributing your code is simply by sharing the code packaged in [ZIP files](https://en.wikipedia.org/wiki/Zip_\(file_format\)).

On this page, you can read best practices that we recommend when you wish to create distributable components. See the following sections for information about individual types of components:

## Widgets

- Use a **unique prefix** in your widget identifiers to prevent conflicts when deploying the widgets to other projects. For example, the prefix can match your company's name.
- Store all text displayed by the widgets using [resource strings](https://docs.kentico.com/13/multilingual-websites/setting-up-a-multilingual-user-interface/working-with-resource-strings.md). Create a **designated RESX file** for the resource strings of each of your widgets in the _\~/App\_Data/Global/Resources_ directory.
- Place your custom MVC code into the **designated directories**:
  - Controllers into the _\~/Controllers/Widgets_ directory.
  - Widget property and view models into the _\~/Models/Widgets_ directory.
  - Views into the _\~/Views/Shared/Widgets_ directory.
- Place your script and stylesheet files into th&#x65;_\~/Content/Widgets/_ directory.

See [Developing widgets](https://docs.kentico.com/13/developing-websites/page-builder-development/developing-widgets.md) for more information.

## Inline property editors

- Use a **unique prefix** in your inline editor identifiers to prevent conflicts when deploying the editors to other projects. For example, the prefix can match your company's name.
- Store all text displayed by the inline editors using [resource strings](https://docs.kentico.com/13/multilingual-websites/setting-up-a-multilingual-user-interface/working-with-resource-strings.md). Create a **designated RESX file** for the resource strings of each of your inline editors in the _\~/App\_Data/Global/Resources_ directory.
- Place your custom MVC code into the **designated directories**:

  - Models into the _\~/Models/InlineEditors_ directory.
  - Views into the _\~/Views/Shared/InlineEditors_ directory.
- Place your script and stylesheet files into the _\~/Content/InlineEditors/_ directory.

See [Creating inline editors for widget properties](https://docs.kentico.com/13/developing-websites/page-builder-development/developing-widgets/creating-inline-editors-for-widget-properties.md) for more information.

## Page builder sections

- Use a **unique prefix** in your section identifiers to prevent conflicts when deploying the sections to other projects. For example, the prefix can match your company's name.
- Store all text displayed by the sections using [resource strings](https://docs.kentico.com/13/multilingual-websites/setting-up-a-multilingual-user-interface/working-with-resource-strings.md). Create a **designated RESX file** for the resource strings of each of your sections in the _\~/App\_Data/Global/Resources_ directory.
- Place your custom MVC code into the **designated directories**:
  - Controllers into the _\~/Controllers/Sections_ directory.
  - Views into the _\~/Views/Shared/Sections_ directory.
  - Optional models into the _\~/Models/Sections_ directory.
- Place your script and stylesheet files into the _\~/Content/Sections/_ directory.

See [Developing page builder sections](https://docs.kentico.com/13/developing-websites/page-builder-development/developing-page-builder-sections.md) for more information.

## Page templates

- Use a **unique prefix** in your page template identifiers to prevent conflicts when deploying the page templates to other projects. For example, the prefix can match your company's name.
- Store all text displayed by the page templates using [resource strings](https://docs.kentico.com/13/multilingual-websites/setting-up-a-multilingual-user-interface/working-with-resource-strings.md). Create a **designated RESX file** for the resource strings of each of your page templates in the _\~/App\_Data/Global/Resources_ directory.
- Place your custom MVC code into the **designated directories**:

  - Views into the _\~/Views/Shared/Templates_ directory.
  - Optional models into the _\~/Models/Templates_ directory.
- Place your script and stylesheet files into the _\~/Content/Templates/_ directory.
- Place your [page template filters](https://docs.kentico.com/13/developing-websites/page-builder-development/developing-page-templates/filtering-page-templates.md) into the _\~/PageTemplateFilters_ directory.

See [Developing page templates](https://docs.kentico.com/13/developing-websites/page-builder-development/developing-page-templates.md) for more information.

## Form components

- Use a **unique prefix** in your form component identifiers to prevent conflicts when deploying the components to other projects. For example, the prefix can match your company's name.
- Store all text displayed by the form components using [resource strings](https://docs.kentico.com/13/multilingual-websites/setting-up-a-multilingual-user-interface/working-with-resource-strings.md). Create a **designated RESX file** for the resource strings of each of your components in the _\~/App\_Data/Global/Resources_ directory.
- Place your custom MVC code into the **designated directories**:
  - Form component and properties classes into the _\~/Models/FormComponents_ directory.
  - Views into the _\~/Views/Shared/FormComponents_ directory. Use the _\_.cshtml_ format for the names of view files.
- Place your script and stylesheet files into the _\~/Content/FormComponents/_ directory.

See [Developing form components](https://docs.kentico.com/13/developing-websites/form-builder-development/developing-form-components.md) for more information.

## Form builder sections

- Use a **unique prefix** in your form section identifiers to prevent conflicts when deploying the sections to other projects. For example, the prefix can match your company's name.
- Store all text displayed by the form builder sections using [resource strings](https://docs.kentico.com/13/multilingual-websites/setting-up-a-multilingual-user-interface/working-with-resource-strings.md). Create a **designated RESX file** for the resource strings of each of your sections in the _\~/App\_Data/Global/Resources_ directory.
- Place your custom MVC code into the **designated directories**:
  - Controllers into the _\~/Controllers/FormSections_ directory.
  - Views into the _\~/Views/Shared/FormSections_ directory.
  - Optional models into the _\~/Models/FormSections_ directory.
- Place your script and stylesheet files into the _\~/Content/FormSections/_ directory.

See [Developing custom form layouts](https://docs.kentico.com/13/developing-websites/form-builder-development/developing-custom-form-layouts.md) for more information.

## Personalization condition types with a custom configuration dialog

- Use a **unique prefix** in your condition type identifiers to prevent conflicts when deploying the condition types to other projects. For example, the prefix can match your company's name.
- Store all text displayed by the condition types using [resource strings](https://docs.kentico.com/13/multilingual-websites/setting-up-a-multilingual-user-interface/working-with-resource-strings.md). Create a **designated RESX file** for the resource strings of each of your condition types in the _\~/App\_Data/Global/Resources_ directory.
- Place your custom MVC code into the **designated directories**:
  - Condition type classes into the _\~/Personalization/ConditionTypes_ directory.
  - Dialog controllers into the _\~/Controllers/Personalization/ConditionType&#x73;_&#x64;irectory.
  - Dialog models into the _\~/Models/Personalization/ConditionTypes_ directory.
  - Dialog views into the _\~/Views/Shared/Personalization/ConditionTypes_ directory.
- Place your custom CSS styles into the _\~/Content/Personalization/ConditionTypes_ directory.

See [Developing personalization condition types](https://docs.kentico.com/13/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/content-personalization/developing-personalization-condition-types.md) for more information.

## Single class components

When distributing components consisting of a single class, such as [personalization condition types](https://docs.kentico.com/13/on-line-marketing-features/configuring-and-customizing-your-on-line-marketing-features/content-personalization/developing-personalization-condition-types.md), [form visibility conditions](https://docs.kentico.com/13/developing-websites/form-builder-development/defining-field-visibility-conditions.md), and [form validation rules](https://docs.kentico.com/13/developing-websites/form-builder-development/defining-field-validation-rules.md):

- Use a **unique prefix** in your component identifiers to prevent conflicts when deploying the components to other projects. For example, the prefix can match your company's name.
- Store all text displayed by the components using [resource strings](https://docs.kentico.com/13/multilingual-websites/setting-up-a-multilingual-user-interface/working-with-resource-strings.md). Create a **designated RESX file** for the resource strings of each of your components in the _\~/App\_Data/Global/Resources_ directory.

> **Note:** **Distribution of custom font icons**
>
> Custom [font icons](https://docs.kentico.com/13/custom-development/extending-the-administration-interface/working-with-font-icons.md) can be used with all components, however, the system does not support their distribution. To use custom font icons with distributed components, you need to manually ensure [font icon integration](https://docs.kentico.com/13/custom-development/extending-the-administration-interface/working-with-font-icons.md) for each component. Distribution of the default [font icons](http://devnet.kentico.com/docs/icon-list/index.html) for the components that use them is ensured by the system by default.
