Jahia's architecture at a glance
Jahia is based on 3 main components:
- A polyglot CMS (Content Management System), where developers can deploy modules written in JavaScript or Java
- A CDP or Customer Data Platform, based on Apache Unomi, with a UI for analytics, personalization & segmentation
- A fantastic integration with Elasticsearch for full-text search
Hybrid Headless (Head-optional) CMS
Manage content types, create content and access it via GraphQL API
- Powerful content modeling capabilities, with support for composition and inheritance across content types, based on Apache Jackrabbit (JCR implementation)
- Built-in and extendable GraphQL API. Available to read content but also for write or admin operations.
query highlightTitle {
jcr {
nodeByPath(
path: "/sites/digitall/home/area-main/highlights/our-companies"
) {
title: property(language: "en",
name: "jcr:title") {
value
}
}
}
}
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
- Search fully integrated with content modeling, preview, publication, permissions, page based search
- Available via GraphQL API endpoint
- Great relevance out of the box, instant search, facets, document indexing
- Java services available if backend integration needed
- Federated search and ability to index external content
Use our GraphQL API for full text search as well:
query {
search(
q: "searched terms"
language: "en"
siteKeys: ["mySite1", "mySite2"]
searchIn: [CONTENT]
workspace: LIVE
) {
results {
hits {
displayableName
}
}
}
}
Content Integrations
Several integration patterns to integrate with DAM, PIM or any other system hosting content or assets
- The External Data Provider provides a Java framework allowing the integration of external systems as content providers. Any external content can be managed and authored as if it were hosted in Jahia.
- Custom Java services can be built to make calls to external systems.
- Jahia UI can be heavily extended to make integrations directly from the front-end
- Out of the box connectors available for Widen, Akeneo, Siteimprove and more
Devops ready
Automate any deployment
- 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)
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"
Extendable UI in React
Many extensions points are available to enrich our UI!
- Jahia’s UI is fully extensible
- Global component registry is used to add new navigation entries, Content Editor selectors, menu items, ..
- Javascript packaging uses Webpack module federation
- Leverage Jahia’s existing UI components (Moonstone) to build your own without having to start from scratch
Example of registering a new UI component with React.js:
registry.add('adminRoute', 'contentReleaseManager', {
targets: ['jcontent:50'],
icon: <Rocket/>,
label: 'content-releases:label.appsAccordion.title',
isSelectable: true,
requireModuleInstalledOnSite: 'content-releases',
requiredPermission: 'contentReleaseManager',
render: () => <ContentReleaseManagerCmp/>
});
Authentication & permissions
Everything you can expect from an enterprise platform
- Comprehensive solutions for authentication with built-in support to connect to LDAP, SSO, SAML & OAuth
- Granular roles and permissions to define exactly what users and groups can access across the platform, for a site or even for a page or a content item
- Same logic is also leveraged to manage authenticated experiences and give specific access to pages, APIs and content to your customers or suppliers
- Fully and transparently integrated with front-end and backend caches
High level overview of the Jahia authentication modules:
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
- Private / admin 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'
Customer data integrations
Jahia DXP comes with “StackConnect”, a comprehensive connector to Workato. Workato is a leading Integration Platform As A Service (iPaas), and connectors are included in the Jahia DXP Cloud subscription.
- No-code integrations using Workato
- 400+ connectors with CRM, Marketing Automation and email marketing platforms
- Bi-directional integrations to enrich visitor profile or push any data collected from behaviors or forms
- Fully custom integrations using Apache Unomi rules and Groovy actions are also possible
A real commitment to open source
Jahia has a long and friendly relationship with Open Source.
- Jahia CMS is open core, most of the code that we produce is using Apache or MIT license
- Jahia has initiated and is still heavily contributing to the Apache Unomi project
- It is possible to try Jahia using our community edition and our public Docker images