Developers, the other digital experience makers

Content modeling

Create content type, define your content structure and generate the form for content authors to edit content
  • Support for composition, mixins, inheritance to ease modeling, and re-utilization
  • Tons of options for each property: mandatory, read-only, shared by all languages
  • Plenty of selectors available: text fields, areas, rich text, date, dropdowns, tags, colors, trees, .. 
  • Client-side and server-side validation
[solidTemplate:heroSection]  > jnt:content
 - title (string) =  i18n
 - paragraph (string) = i18n 
 - button1Text (string) =  i18n 
 - button1Link (weakreference) < jnt:page

Example of a simple content type definition

Use React JSX for templating

Jahia provides a presentation layer, a “head” that you can use to build complete web pages or HTML fragments
import {useServerContext, getNodeProps} from '@jahia/js-server-core';
export const HeroSection = () => {
 const {currentNode, renderContext} = useServerContext();
 const props = getNodeProps(currentNode, ['title', 'paragraph']);

  return (
    <div className="hero">
      <h1>{props.title}</h1>
      <p>{props.paragraph}</p>
    </div>
  );
}

HeroSection.jahiaComponent = {
  nodeType: 'solidTemplate:heroSection', 
  name: 'heroSection',
  displayName: 'Hero Section', 
  componentType: 'view' 
}

Server-side JSX to display the title and the paragraph of a content item

  • Build "views” (render content items to HTML) in React JSX, executed server-side
  • Use React Hydration to add client-side interactivity, or any other client-side framework such as HTMX 
  • Deploy JavaScript modules including content types, views, templates, locales, etc.. 
  • Your changes are automatically deployed when you code, using yarn watch
  • Build Content Delivery Network (CDN) compliant websites
  • Maintain top performance on high-traffic websites with our multi-layered caching subsystem
  • Java modules & JSP are available for developers who prefer Java

Client-side options

Adding interactivity doesn't have to be messy
  • Run client-side rendering with React 
  • Use React hydration: pretender on server, rerender on client 
  • Use HTMX: Render HTML fragments called by HTMX markups 
  • Work in full headless: Build SPAs in Vue, Angular or Svelte. deploy them on Jahia or another server.
client-side-options-logos.png

Content API for Headless Usage

query highlightTitle {
  jcr {
    nodeByPath(
      path: "/sites/digitall/home/area-main/highlights/our-companies"
    ) {
      title: property(language: "en", 
                      name: "jcr:title") {
        value
      }
    }
  }
}

Example: Access a content property using GraphQL

Create content and access it via GraphQL API
  • Read content using direct access (path, id) or flexible queries
  • Write and publish (mutations) content  
  • Configure, administrate, Jahia is an API first product
  • Extend the API using Java Jahia modules (OSGi bundles)

Beyond traditional Content Management

Modulith: A proven alternative to micro-services

Extend our platform in any way you’d like, to cover the most demanding requirements

  • Extend Jahia CMS with Java modules, which are OSGi bundles 
  • OSGi and its Apache Karaf implementation available in Jahia offers hot deployment, dependency management, isolation, and ready-made tools for extensions or new functionality
  • Declare any custom logic, including:
    • Java services
    • Rules using Drools extensible rules engine
    • JSP, tags and filters if you’re using the presentation layer
    • UI extensions
    • Permissions 

Declare new Java services easily using OSGi:

@Component(service = SimpleService.class)
public class SimpleServiceImpl implements SimpleService {

    @Override
    public String sayHello() {
        return "Hello Jahia!";
    }
}

Consume any service using OSGi:

@Reference
public void setSimpleService(SimpleService simpleService) {
   this.simpleService = simpleService;
}

Service consumer and implementation may be in different modules, for maximum flexibility.

Full text search API 

Deep integration with Elasticsearch, for world-class search experiences
query {
  search(
    q: "searched terms"
    language: "en"
    siteKeys: ["mySite1", "mySite2"]
    searchIn: [CONTENT]
    workspace: LIVE
  ) {
    results {
      hits {
        displayableName
      }
    }
  }
}

GraphQL call implementing a full text search

  • Search fully integrated with content modeling, preview, publication, permissions, page-based search
  • Available via GraphQL API endpoint or OSGi service in Java
  • Great relevance out of the box, instant search, facets, document indexing
  • Federated search and ability to index external content

Customer Data infrastructure & APIs

Built-in real time Customer Data Platform based on Apache Unomi 
 
  • Public customer data API for current visitor tracking (1st party cookie based)
  • GraphQL API for personalized content & AB Tests
  • Profile stitching using login events
  • Built-in and customizable analytics using Elasticsearch Kibana
  • Protected customer data REST API for data aggregation, custom event type declaration, rules, and actions deployment
  • Simple yet powerful data model: access profiles, sessions, and events. Store and access data for any form, survey, quiz, funnel in real time.

Track events in javascript and record it in our built-in CDP:

/* Creation of the event */
const source = wem.buildSourcePage()
const target = wem.buildTarget('startQuizzLink', 'a')
const newEvent = wem.buildEvent('click', target, source)

/* Submission of the event */
wem.collectEvent(newEvent)

Access visitor profile data using the REST API:

curl --location --request GET 'http://localhost:8181/cxs/profiles/PROFILE_UUID' \
--header 'Authorization: Basic xxxxxx' 

Devops ready

Automate any deployment with our provisioning API

Run Jahia using Docker:

docker run -p 8080:8080 jahia/jahia-ee:8.2.0.3

Installing a module  and activating it on a site using our provisioning API

# Install a template set 
- installBundle:
    - 'npm:mvn:org.jahia.modules.npm/luxe-jahia-demo/0.2.0/tgz'
    - 'mvn:org.jahia.modules/luxe-prepackaged-website'
  autoStart: true
  uninstallPreviousVersion: true

# Import a site
- importSite: "jar:mvn:org.jahia.modules/luxe-prepackaged-website/0.2.0/zip/import!/luxe.zip"
  • Open and extensible images (OCI/Docker) for development, QA or production purposes
  • The provisioning API can be used to handle all operations allowing a fresh Jahia instance to reach production. It can install and configure modules, import and  install sites, execute scripts and more.
  • When images and the provisioning API are used jointly, Jahia becomes fully usable in an infrastructure-as-code environment (using Terraform, CI/CD toolings or other)

Learn more during a technical Demo