Technical overview of Jahia
Everything is content
Jahia aggregates all kinds of content on pages, including dynamic content such as PWAs. Jahia mixes applications and content on the same web page. Jahia allows you to build content-based applications, also known as composite applications, that make it easy to build powerful applications that share a content store as a back-end. All this content is stored as nodes in a global content tree.
When you work with Jahia, you manipulate content, define views, and create rules that execute when events trigger on the content (manually or programmatically). Any content element stored in the repository (text, images, videos, and PDF documents) is considered content and shares common:
- properties (for example, name, UUID, and metadata)
- services (for example, editing UI, permissions, and versions)
- rendering and handling systems
Content is stored in a hierarchical structure using a Java Content Repository (JCR) standard, but as you will see you can query or operate on it in other ways.
Developer and integrator customization
End users may see Jahia as a product, but for developers and integrators it is a powerful integration platform that they configure and extend to fit a wide variety of needs. Here is a sample of different types of customization tasks.
Development and integration of:
- content types and views
- logic parts (rules, filters, actions, and classes)
- the user interface
- roles and permissions
This list is just a sample how you can customize the Jahia. Jahia is a very flexible platform with many extensions points.
Jahia integrates many different technologies and frameworks. This section gives you an overview of what's included and how it is used.
Jahia stores all of its data in a Java Content Repository (JCR) (Apache Jackrabbit 2.x):
- Two workspaces are used in the JCR, one for the staging content (called "default") and one for the live content (called "live").
- JCR content is stored in an SQL database.
Jahia integrates the following services and frameworks:
- Apache Lucene as the indexing and search engine for JCR queries
- OSGi framework (Apache Karaf and Felix) as the modular and dynamic deployment platform (as well as much more)
- React as the technology used to build user interfaces
- Google Web Toolkit with Sencha GXT extensions for the UI in Jahia Studio
- JBoss Drools as a rule engine
- JBoss BPM as a workflow engine
- GraphQL API
- Legacy REST API
Jahia is extended by frameworks included in modules such as:
- Elasticsearch for Augmented Search
- jCustomer (Apache Unomi) for jExperience
- LDAP connectors
- Search Engine Optimization (SEO)
- Tags and tag clouds
Jahia features overview
In the diagram below, the top layers represent basic rendering and communication layers, while the underlying services are more modular. The boxes show what is offered in the core services, either as core modules or framework. The blue boxes represent custom modules that may provide content definitions, custom logic, rules, and much more.
In Jahia, modules are packaged as OSGi JAR bundles that are deployed to extend or complement the platform scope of functionality. Much default functionality in Jahia is built and deployed using modules, for example, Content Editor or template sets.
A module is a package that you deploy on your Jahia platform to extend or modify the platform. Modules act like plug-ins. For more information on modules, see About modules.
This section presents the different types of actors that interact with a Jahia system and describes how they relate to different activities.
Developers, integrators and webmasters create templates and modules in Studio to build a system that is customized for the needs of users. They style the look and feel of the website, and create content definitions, rules and custom logic.
Webmasters and editors then populate the site with content in Page Composer or jContent in Jahia. Once editors are happy with their content, they use a workflow to publish changes to the live workspace (or if not permitted, they start a review process) and make it available to site visitors.
Site visitors then browse the site, and if allowed, also input user-generated content in modules such as the forum, wiki or other components deployed on the site.