Developer resources

Downloads

Developing with Qworum

One constraint to be observed when developing Qworum services is that they must not add new entries to the histories of the browser tabs they are running in.

This constraint is needed because Qworum is currently implemented as a browser extension, and browser extensions are not (yet) allowed to deactivate the browsers' tab history. (Why is deactivating the tab history needed? Because otherwise Qworum's session state could go out of sync with the application UI.)

Qworum allows for unbounded nesting levels
Qworum applications vs other web applications

Transforming web applications into Qworum services

As a developer, you have the option of leaving your non-Qworum application unchanged and providing a separate Qworum API for calling third-party services and being called by them.

Alternatively, you can transform your Web application into a Qworum application and, even better, develop a Qworum application from scratch.

Transforming any Web application into a valid Qworum application is a simple matter of making sure that the application does not add new entries to the browser's tab history.

At this point your application will have become a valid Qworum API consisting of one endpoint.

You can then factor out parts of your monolithic application into separate endpoints.

Through refactoring you will then be able to build complex user flows by orchestrating these endpoints.

Refactoring also will allow you to make parts of your user flows available to third-party applications.

Easy-to-use JavaScript library for developers

Use browser-side JavaScript for building web applications that combine local and remote interactive microservices. Qworum's JavaScript library for web frontends is available on the Skypack CDN. Here is how Qworum works:

// Adds an article to a shopping cart on an e-commerce website.
// (The end-user is on an article details page.)

import { Qworum } from "https://esm.sh/@qworum/qworum-for-web-pages@1.0.11";

const
// Sample article details.
article = {
  "id"   : "8b1d5802",
  "title": "Classic ankle boots",
  "price": {"EUR": 29.99}
},

// Create a Qworum script.
addToCartScript = Qworum.Script(
  Qworum.Sequence(
    // Add the article to the shopping cart ...
    // (Redirects the end-user to the remote shopping cart service.)
    Qworum.Call(
      ['@', 'shopping cart'], 'https://shopping-cart.example/add-article/',
      {
        name : 'article',
        value: Qworum.Json({article})
      }
    ),

    // ... then go back to the article details page on the e-commerce site.
    Qworum.Goto('index.html')
  )
),

addToCartButton = document.getElementById('add-to-cart-button');

// Execute the Qworum script when the user clicks on the add-to-cart button.
addToCartButton.addEventListener('click', async () => {
  // Add the article to the visitor's shopping cart.
  await Qworum.eval(addToCartScript);
});

Local development

The Qworum browser extension is enabled for local development by default. The web origins that are enabled for local development are: