---
url: /technical/custom-pages.md
description: >-
  Custom pages are the front-end HTML, CSS, and JavaScript components of an
  application.
---

# Custom Pages

Custom pages are the front-end HTML, CSS, and JavaScript components of an application. They run entirely in the user's browser.

| Object | Description |
| :--- | :--- |
| HTML Page | A HTML page which is developed using a HTML editor. These can include client-side JavaScript and can be used to developed pages that acts as a frontend for the users to use the application. |
| Dashboard | A dashboard which can hold Selectables (Dropdowns), custom HTML pages, workviews or workview vizualisations. A dashboard can be used to show several pages at the same time. |

## Hiding content by access tag

A custom page can show or hide parts of itself according to the [Screen Access Tags](/technical/access-tags-screen) held by the user viewing it. Wrap the markup in a `<!--tag:NAME-->` ... `<!--tagend-->` block, with an optional `<!--tag:else-->` branch for users who don't hold the tag:

```html
<!--tag:Planning-->
<a class="dropdown-item" href="/capex/">Capital Expenditure</a>
<!--tagend-->
```

This is what lets one custom page serve as the header for an entire application while still presenting each user with only the navigation they're entitled to. Bear in mind it controls what the page *shows* - the screens being linked to still need their own access tags to actually be protected.

See [Tag](/custom-pages/client-side-pages#tag) for the full syntax.

## Third-party libraries

A custom page can't pull in arbitrary third-party libraries on its own - MODLR's security controls restrict what a page may load. To use one, register it against the application as an [External Asset](/technical/application-objects#external-assets), giving its type (JavaScript or CSS), URL and, where the CDN publishes one, an integrity hash. It's then available to the custom pages in that application.

[Server-side Pages](/custom-pages/server-side-pages) are a distinct application object, not a type of custom page: they execute as JavaScript on the server instead of the browser, and are typically called from a custom page to run process functions or other secure logic.

For runtime-specific documentation, use the dedicated custom pages section:

* Client-side page tags and browser behavior: [`/custom-pages/client-side-pages`](/custom-pages/client-side-pages)
* Server-side page behavior and process-function access: [`/custom-pages/server-side-pages`](/custom-pages/server-side-pages)
