dot CMS

dotCMS JavaScript SDK: Everything you need to know

dotCMS JavaScript SDK: Everything you need to know

Share this article on:

As a developer, I always prefer to work with the latest front-end technologies to develop my web applications. But it is also critical for me that the content authors I interact with have a top-notch experience when creating and modifying their pages efficiently and visually.

To support this idea, we have introduced our new JavaScript SDK.

This SDK exists for three key reasons:

  1. Allowing developers to easily interact with the dotCMS APIs.

  2. Rendering dotCMS pages by providing specific UI components for different frameworks.

  3. Enabling the Universal Visual Editor (UVE) in web applications.

This is essential to our vision of a Universal CMS, where hybrid-headless and headless features converge to provide the best possible user experience.

@dotcms/client

dotCMS has many APIs. They’re great to work with, and you can mix and match them to build your pages and routes.

These APIs can be easily consumed by fetch requests in your web app, but we went a step further and created a library that allows you to easily connect to any dotCMS instance to retrieve your data and contentlets (content items).

This library is called @dotcms/client and is published on Node Package Manager (npm). It uses JavaScript ES Module, and it can be used either in the browser or in your favorite JavaScript runtime like Node.js, Bun, and others.

You can start using it in less than a minute. First, install it from npm:

$ npm install @dotcms/client

In your JavaScript project, import the function to create the client:

import { dotcmsClient } from "@dotcms/client";

Now, you can initialize the client in your project.

const client = dotcmsClient.init({
    dotcmsUrl: 'https://your.dotcms.com',
    authToken: 'YOUR_DOTCMS_AUTH_TOKEN',
    siteId: 'THE_SITE_ID',
    requestOptions: {
        // In production you might want to deal with this differently
        cache: 'no-cache'
    }
});

Let’s go through these options:

  1. dotcmsUrl: The absolute URL of the dotCMS you want to connect to.

  2. authToken: The user token can be created inside the dotCMS UI or via REST API. Ensure that the user has the necessary permissions; a ‘read’ token may suffice. If utilizing a ‘write’ token, consider moving this request to the server-side. If the library is being used client-side in the browser, be mindful that the token will be exposed.

  3. siteId Since dotCMS is multisite, you can have more than one site inside the dotCMS instance. Here, you should pass the site identifier of the site you want to connect to. If no site is passed, it will fall back to the default site.

  4. requestOptions Under the hood, we still use the fetch API to do the request. In case you would like to modify the request to pass different options, this property is exactly for that. It will accept any of the parameters the native fetch function takes. Note: It will ignore body and method because we need to control those in the library (to ensure that the REST endpoints are requested correctly).

This function will return a client object that will expose methods to interact with the dotCMS APIs:

  1. client.page will allow you to fetch pages from the Page API

  2. client.nav will interact with the Navigation API

  3. client.content will let you get any kind of content from dotCMS

And more will be coming soon, like client.workflow, client.users, and client.auth.

@dotcms/react and @dotcms/angular

Now you have the data, but how can you render the page? We’ve got you covered: the components library provides UI components out of the box to render any dotCMS page. You don’t have to worry about doing any CSS math to render rows and columns with consideration for their width and offset.

Of course, we know you want to use your own branding, color, typography, and so on. We built this library with that in mind; you can use any CSS library like Tailwind, Bulma, or even static CSS. Also, if you would like to use your own UI components library you are free to do it; these libraries are completely agnostic.

Now, let me walk you through using the React version. First, in your React, Next.js, Astro, or Remix project, use npm to install:

$ npm install @dotcms/react

Then, in the page or file where you need to render the page, import the component:

import { DotcmsLayout } from "@dotcms/react";

export function MyPage({ page }) {
  return (
    <main className="container flex flex-col gap-8 m-auto">
      <DotLayout entity={{ components, ...page }} />
    </main>
  );
}

Now, in this example, our <MyPage /> component receives the Page API response as a prop, and we can pass it directly to the <DotLayout />. But what is that components object?

Page Components

Users will be adding different kinds of content to their pages. It could be a blog post, a product page, a banner, or any other content type; you just need to tell the <DotLayout /> component how each one of those pieces of content will look on the page. That’s why we need to pass a map of components as a property.

The components object will look like this:

function MyCustomProduct({name, price}) {
  return <>
    <h1>{title}</h1>
    <p>{price}</p>
  </>
}

const components = {
  product: MyCustomProduct,
  blog: ...
}

The object key is the content type variable name and the value is the React component you want to use to render that type of content on the page.

The components within the object, when rendered on the page by the <DotLayout /> component, will receive the contentlets object as a prop. This means that each component will have access to all the properties of that piece of content.

There are way more options for this library; for more information, please refer to our documentation.

Universal Visual Editor

And as for integration with the Universal Visual Editor (UVE)? Surprise! No extra steps are needed. It’s seamlessly integrated to keep editing smooth and simple. By using the libraries in our JavaScript SDK, we ensure that your headless pages are fully editable through the Universal Visual Editor

Our SDK empowers you to create rich, dynamic web pages with your preferred technologies, all while leveraging the robust content management capabilities of dotCMS.

In conclusion, the new dotCMS JavaScript SDK bridges the gap between developer preferences and content authoring needs. At dotCMS, we are proud to lead this evolution, enabling you to build cutting-edge web applications without sacrificing any aspect of the content editing experience.

unnamed
Recommended Reading
  • Migrating Your OSGi Plugins to dotEvergreen: Adapting to the New Index API
    24 Mar 26
    Technical Guides

    Migrating Your OSGi Plugins to dotEvergreen: Adapting to the New Index API

    An update on infrastructural changes, information on a breaking change introduced that may affect some plugins, and a migration guide for those affected.

    Fabrizzio

    Fabrizzio Araya

    Software Engineer

  • What Is Rich Text? How It Works in a Headless CMS
    23 Mar 26
    Content Management

    What Is Rich Text? How It Works in a Headless CMS

    What is rich text, and how does it differ from Rich Text Format (.rtf)? Learn how rich text works in content management systems, how headless CMS platforms store it as structured data, and why the format matters for omnichannel delivery.

    Fatima

    Fatima Nasir Tareen

    Marketing Specialist

  • Structured Content for GEO: How dotCMS Powers AI-Ready Digital Experiences
    21 Mar 26
    AI in CMS

    Structured Content for GEO: How dotCMS Powers AI-Ready Digital Experiences

    Discover how dotCMS revolutionizes AI-driven digital experiences with structured content for Generative Engine Optimization (GEO). Learn how our enterprise solution enhances AI visibility, enabling large language models to accurately process and cite machine-readable data. Dive into best practices for creating AI-ready content and explore the benefits of a headless CMS model. Optimize your content for AI discovery and experience seamless omnichannel delivery. Contact us to leverage dotCMS for your AI-powered search needs.

    Fatima

    Fatima Nasir Tareen

    Marketing Specialist

  • AI Content Governance for Content Teams: A Practical Framework
    9 Mar 26
    AI in CMS

    AI Content Governance for Content Teams: A Practical Framework

    Learn why AI content governance is essential for content teams. Discover how to protect brand consistency, reduce legal risk, and manage AI across dozens of sites with dotCMS’s built-in governance tools.

    Fatima

    Fatima Nasir Tareen

    Marketing Specialist

Explore dotCMS for your organization

image

dotCMS Named a Major Player

In the IDC MarketScape: Worldwide AI-Enabled Headless CMS 2025 Vendor Assessment

image

Explore an interactive tour

See how dotCMS empowers technical and content teams at compliance-led organizations.

image

Schedule a custom demo

Schedule a custom demo with one of our experts and discover the capabilities of dotCMS for your business.