XWiki Platform Development Framework

Last modified by slauriere on 2023/02/17 13:57

This page is a draft focusing on the XWiki platform components and features that can be used potentially for any web development project, just like other web frameworks such as the ones listed on the Wikipedia page about web frameworks. Examples include Django and ExpressJS among others. The content reuses or summarizes information already available on more specialized pages authored by the XWiki community, which are mentioned in each service "References" section. One of the goals of this page is to present the whole platform in a way that can be easily compared, service by service, with other frameworks. It is also meant to be a gateway to the XWiki platform Javadoc, and to become a possible link to be added on the aforementioned Wikipedia page. Note that it could be handy that each component summary below gets actually added directly in an object attached to its documentation page.

XWiki platform services

The XWiki platform services are listed below in alphabetical order.

Access control

This service controls the permission for a given user (including an unauthenticated user) to perform a given action on a given XWiki Platform resource. Supported actions by default are in particular the following: admin, delete, edit, program, register, script, view.

References:

Authentication

XWiki platform supports several authentication mechanism including authentication based on: forms, the basicauth protocol, social login protocols, LDAP, ActiveDirectory, Kerberos.

References:

Cache

References:

Component service

XWiki platform hinges on a set of components. XWiki platform defines some simple Component interfaces that can then be bound on any existing Component Manager such as Guice, OSGi, CDI (JSR299). In the future, XWiki platform will probably adopt a standard solution in JavaSE once it's available and mature enough. The XWiki component service exposes several features including the ability to declare Component interfaces, implementations and dependencies via Java annotations, the ability to have Singleton Components and Per-lookup Components, to define a Hint to separate different Components implementations implementing the same Component interface and several other key component aspects described on the XWiki Component Module documentation page.

References:

Configuration

This service allows each module to create a dedicated configuration via an interface named <optional prefix><module name>Configuration (e.g. RenderingConfiguration, IconTransformationConfiguration, etc). Each module creates an implementation of that interface, named Default<optional prefix><module name>Configuration (e.g. DefaultRenderingConfiguration). The interface implementation uses one of the ConfigurationSource components provided by this Configuration module. These ConfigurationSource implementations are bound to sources where to get configuration data from: properties file, xwiki documents, etc.

References:

Document service

XWiki platform provides a rich document model consisting of DOM static blocks, scripted blocks and macros.  This allows for document inclusion (transclusion) and dynamic documents.

On top of this document model, XWiki platforms comes with an annotation service and a collaborative real-time service editing.

References:

Document annotation service

This service allows to add collaboratively annotations to XWiki document object nodes (XDOM).

References:

Document real-time collaborative editing service

Real-time editing.

References:

Document translation management

Event bus

XWiki platform supports observation events and it's possible to do some action when a change occurs in the platform. The platform comes with a set of events and event listeners, and new events and event listeners can be defined. Event listeners can be created either in Groovy, Java, or a combination of content and scripts. 

References:

Extensions

  • Depdendency management
  • Upgrade

References:

Forms

Beside the XWiki document model described above, XWiki platform provides a built-in mechanism for dealing with structured data and for presenting this data in view or edit forms via templates.

References:

Import

  • Filter stream
  • Office importer

See also:

References:

  • XWiki BatchImport extension
  • XWiki Office importer
  • XWiki Filter Stream

Jobs

The Job service makes it easy to allow two ways communication with a task executed in a background thread. An XWiki platform minimal job provides: progress information, live log, a Java bean based question/answer system, and can be extended as long as the client of the API know the extended interface.

References:

Export

FilterStream module

See also:

References:

Localization

Localization here refers to translation. This Component allows applications and components (or any Java code in general) to be translated into different languages.

References:

Logging

References:

Mail service

The XWiki Platorm mail service allows to send multipart mails, to embed images in HTML emails, to use mail templates, to send mails to list of users, a list of groups and a list of individual addresses (with ability to exclude users, groups and emails), ensuring that recipients don't get duplicate mails. The service supports asynchronous mail sending.

References:

Notification

References:

Rendering

References:

REST service

References:

Query / search service

  • Relational
  • Full-text

References:

Scheduler

Scripting

References:

Storage

  • Core data model
  • Versioning

References:

User and group service

References:

User interface service

  • Skin
  • Theme
  • Keyboard shortcuts
  • User interface extension points

References:

Metrics

  • SLOC of xwiki-commons and xwiki-platform, + number of classes

Comparison with other frameworks

Various notes

  • Stars and reviews
    • Django has nearly 50k GitHub stars
    • ExpressJS has nearly 50k GitHub stars
  • Possibly not easy for newcomers to differentiate between xwiki-platform as a framework and xwiki as a product

Get Connected