Architecture

Last modified by Simon Urli on 2023/10/10

What is XWiki?

XWiki is a Second Generation Wiki and as such it's a full-fledged wiki but it's also a runtime platform for developing collaborative web applications. It's very versatile and you can modify any part of the XWiki runtime to match your requirements.

When you use a traditional development language such as Java, Python, Perl, etc you start from scratch and assemble building blocks to create the application you wish:

traditional.png

XWiki takes a different approach: it's already a running application (we call it a "runtime platform") and you can tune the various modules it's made of to morph this runtime into your target application: you configure existing modules, you remove some, you add some, till you get what you want.

morphing.png

This approach has several advantages:

  • Works from day one, immediate feedbacks
  • Iterative, Need-based development: You have something working from day one and you can have users using it right away, and modify it as you see needs emerge or as users request features, at the rhythm you wish.
  • Continuous Delivery: Tuning it, adding new modules, removing some other, are all operations that you can do live on a running XWiki. Of course you could have 2 XWiki instances: a staging one and a production one, and copy from one to another if you want to control your changes (and put changes in a SCM).
  • Work collaboratively on creating applications: Since everything is done in wiki pages, designers can style while devs create logic.
  • Efficient: what you get with XWiki is akin to what you get when you edit content in a WYSIWYG editor: fast productivity since you immediately see the results of your actions (no need to compile, deploy, etc).

General Architecture

Architecture Concepts:

  • XWiki is a webapp that is deployed into a Servlet Container.
  • XWiki is made of Extensions.
  • Some Extensions are Core Extensions and they are required for XWiki to execute properly.
  • Other Extensions can be installed into a running XWiki installation to provide additional features.
  • The Extension Manager is a Core Extension that allows installing, upgrading or removing other Extensions.
  • An XWiki runtime is thus made of Core Extensions + non-Core ones.
  • A set of Extensions working together to achieve a goal is called a Flavor.
  • XWiki Standard is a generic Flavor that allow users to collaboratively author content.
  • There are 2 types of Extensions (and it's possible to extend Extension Manager to support other types):
    • Extensions containing wiki pages. They are packaged as XAR files (a ZIP file with some metadata).
    • Extensions containing Java classes. They are packaged as JAR files.
  • An Extension can depend on other Extensions. A Flavor is itself a top level Extension that depends on several other Extensions.

The full list of available Extensions can be seen on the Extensions Wiki.

container.png

Integrating XWiki

There are two options for integrating XWiki into your environment:

  • Accessing your environment (other software for example) from XWiki and displaying information inside XWiki's UI. This can be achieved by scripting inside Wiki pages or by developing Java code. See also the following Integration Extensions.
  • Access XWiki's content (wiki pages, user data, etc) from other software by accessing XWiki remotely using REST APIs (It's also possible to use XMLRPC or GWT).

Extending XWiki

XWiki being a development platform for web applications there are plenty of ways to extend XWiki. The most obvious one is to look for an Extension and install it.

However if there's no Extension for what you wish to achieve, here are main options:

Check the Developer Guide to learn about all this and more.

Tags:
   

Get Connected