Building Decentralized Applications
with Solid and Comunica (SOCOM)

Tutorial at ISWC 2019, October 26th 2019


Solid is a decentralized application and storage ecosystem, built on the Linked Data principles. It enables true data ownership, where anyone can store data in a place of their choice, regardless of the applications they use. In order to build decentralized applications over Solid data pods, specialized querying techniques are required. Comunica is a flexible meta query engine that offers such querying capabilities. In order to enable developers and researchers to start building such decentralized applications, we offer a tutorial on Solid and Comunica.

This tutorial consists of an overview of Solid, and on how Comunica can be used to query Solid data pods. As a result, participants from different backgrounds will have experience with hosting data through their own personal Solid data pod. Furthermore, they will be able to query over Solid data pods, using different querying techniques with Comunica. Ultimately, this will enable the development and research of decentralized applications with the Solid platform.


If you intend to participate in the hands-on part of this tutorial, make sure to install the required software.


Decentralization is a widely discussed topic these days. Solid is a Web-based ecosystem founded by Tim Berners-Lee that enables people store data in their own personal data pod. This gives users true data ownership, as they can choose where their data resides, and who can access it. The decentralized applications that can be built on top of Solid data pods are not tied to specific user data. Instead, users need to give applications explicit access to their data. Only then can applications query over one or more data pods.

Comunica [1] is a JavaScript-based meta query engine that was introduced as a flexible way of querying Linked Data on the Web. As such, it is an ideal platform for querying over Solid data pods, and for building truly decentralized applications. The main functionality is demonstrated via our Web application. The interaction with Solid data pods is demonstrated within the LDflex playground, where Comunica is used in the back-end behind a user-friendly LDflex path expression.

The goal of this tutorial is to provide participants with knowledge on how to build decentralized applications, by combining Solid data pods and querying with Comunica.


We plan a full day for this tutorial as shown in Table 1. The morning session will focus on the basics of Solid and Comunica, and the afternoon will consist of hands-on sessions for building applications. We expect participants to have basic knowledge of Web technologies such as HTML, JavaScript, RDF and SPARQL.

  Topic Duration
Morning 1: Solid (1:20) Introduction 0:10
  Introduction to Solid 0:30
  Getting Started with Solid 0:40
Morning 2: Comunica (1:20) Introduction to Comunica 0:40
  Getting Started with Comunica 0:40
Lunch Break
Afternoon 1: Apps (1:20) LDflex 0:40
  GraphQL-LD 0:40
Afternoon 1: Hackathon (1:20) Hackathon 1:20

Table 1: Planning of the tutorial

In the morning, we will introduce the basic concepts behind Solid and Comunica, and we will allow participants to get started with both of them. For Solid, this will involve guiding the audience towards setting up their own data pod. For Comunica, we will allow participants to try out several example queries via a Web-based query engine.

In the afternoon, we will focus on building applications on top of Solid using Comunica’s querying capabilities. We will focus on three querying APIs to interact with Comunica, ranging from basic to advanced, as shown in Fig. 1. First, we will demonstrate the usage of LDflex, which is a simple path-based query expression language in JavaScript that aims to improve the developer experience [2]. After that, we will focus on GraphQL-LD [3], which is a technique for querying Linked Data based on the highly popular GraphQL [4] query language. It is based on declarative queries, which are more expressive than LDflex. Finally, we will briefly focus on SPARQL queries [5], which is an even more expressive way of querying Linked Data, but is more difficult to use.

[Complexity versus expressivity]

Fig. 1: Perceived developer complexity versus data retrieval expressivity of Linked Data Query APIs.


The tutorial is guided by slides, which are shared online. For the hands-on coding sessions, we provide a git repository with separate branches for all sequentially completed tasks. This will allow participants that are unable to complete a certain task, to still begin with the next task by checking out a different branch.

The slides and git repository are open for everyone under the CC BY 4.0 license.







This tutorial focuses on Web developers and researchers that want to use, develop, or research decentralized Web applications. We assume elementary knowledge on Web technologies such as HTML, JavaScript, RDF and SPARQL. We expect participants to bring a laptop that has a recent Web browser, git, and an editor or IDE with JavaScript support. The end-goal is to provide participants with sufficient knowledge and experience to build applications over Solid data pods using the Comunica query engine. In order to attract participants, we will announce it over the relevant decentralization and querying mailing lists, via Twitter, and directly via Gitter chat channels focused on Linked Data development. Given the high participation rate of the related Solid hands-on session at the DeSemWeb workshop at ISWC 2018, we expect around 20 to 30 participants for this tutorial.


This tutorial will be presented by Ruben Taelman (primary contact: and Julián Rojas from Ghent University – imec.

Ruben is a finishing PhD student who is active in the research domain of querying Linked Data. Julián is a third year PhD student focused on studying Web interfaces for Linked Open Data publishing. Ruben is one of the main designers and developers of Comunica and is actively contributing to the development of Solid. Julián is an active user of Comunica and is currently collaborating is several projects where Comunica and Solid are key components. This makes them uniquely qualified to present this tutorial. Ruben have also presented tutorials at conferences in the past [6, 7], and assist practical sessions of the Web Development course by Ruben Verborgh at Ghent University.


For this tutorial, we require a projector to present our slides, and a power plug for charging our laptop.