Community Solid Server: an open and modular implementation of the Solid specifications

Usage no npm install needed!

<script type="module">
  import solidCommunityServer from 'https://cdn.skypack.dev/@solid/community-server';


Community Solid Server

[Solid logo]

MIT license npm version Node.js version Build Status Coverage Status GitHub discussions Chat on Gitter

The Community Solid Server is open software that provides you with a Solid Pod and identity. This Pod acts as your own personal storage space so you can share data with people and Solid applications.

As an open and modular implementation of the Solid specifications, the Community Solid Server is a great companion:

  • 🧑🏽 for people who want to try out having their own Pod

  • 👨🏿‍💻 for developers who want to create and test Solid apps

  • 👩🏻‍🔬 for researchers who want to design new features for Solid

And, of course, for many others who like to experience Solid.

You can install the software locally or on your server and get started with Solid immediately.

⚡ Running the server

To run the server, you will need Node.js. We support versions 12.7 and up.
If you do not use Node.js, you can run a Docker version instead.

💻 Installing and running locally

After installing Node.js, install the latest server version from the npm package repository:

npm install -g @solid/community-server

To run the server with in-memory storage, use:

community-solid-server # add parameters if needed

To run the server with your current folder as storage, use:

community-solid-server -c @css:config/file.json

📃 Installing and running from source

If you rather prefer to run the latest source code version, or if you want to try a specific branch of the code, you can use:

git clone https://github.com/solid/community-server.git
cd community-server
npm ci
npm start -- # add parameters if needed

📦 Running via Docker

Docker allows you to run the server without having Node.js installed. Images are built on each tagged version and hosted on Docker Hub.

# Clone the repo to get access to the configs
git clone https://github.com/solid/community-server.git
cd community-server
# Run the image, serving your `~/Solid` directory on `http://localhost:3000`
docker run --rm -v ~/Solid:/data -p 3000:3000 -it solidproject/community-server:latest
# Or use one of the built-in configurations
docker run --rm -p 3000:3000 -it solidproject/community-server -c config/default.json
# Or use your own configuration mapped to the right directory
docker run --rm -v ~/solid-config:/config -p 3000:3000 -it solidproject/community-server -c /config/my-config.json

🔧 Configuring the server

The Community Solid Server is designed to be flexible such that people can easily run different configurations. This is useful for customizing the server with plugins, testing applications in different setups, or developing new parts for the server without needing to change its base code.

⏱️ Parameters

An easy way to customize the server is by passing parameters to the server command. These parameters give you direct access to some commonly used settings:

parameter name default value description
--port, -p 3000 The TCP port on which the server runs.
--baseUrl, -b http://localhost:$PORT/ The public URL of your server.
--loggingLevel, -l info The detail level of logging; useful for debugging problems.
--config, -c @css:config/default.json The configuration for the server. The default only stores data in memory; to persist to your filesystem, use @css:config/file.json
--rootFilePath, -f ./ Root folder of the server, when using a file-based configuration.
--sparqlEndpoint, -s URL of the SPARQL endpoint, when using a quadstore-based configuration.
--showStackTrace, -t false Enables detailed logging on error pages.
--podConfigJson ./pod-config.json Path to the file that keeps track of dynamic Pod configurations.
--mainModulePath, -m Path from where Components.js will start its lookup when initializing configurations.

🧶 Custom configurations

More substantial changes to server behavior can be achieved by writing new configuration files in JSON-LD. The Community Solid Server uses Components.js to specify how modules and components need to be wired together at runtime.

Examples and guidance on configurations are available in the config folder.

Recipes for configuring the server can be found at solid/community-server-recipes.

👩🏽‍💻 Developing server code

The server allows writing and plugging in custom modules without altering its base source code.

The 📗 API documentation and the 📐 architectural diagram can help you find your way.

If you want to help out with server development, have a look at the 📓 developer notes and 🛠️ good first issues.

📜 License

The Solid Community Server code is copyrighted by Inrupt Inc. and imec and available under the MIT License.

Core contributors are Joachim Van Herwegen, Ruben Verborgh, Ruben Taelman, and Matthieu Bosquet.

🎤 Feedback and questions

Don't hesitate to start a discussion or report a bug.

Learn more about Solid at solidproject.org.