A decentralized personal data server inspired by Solid and Decentralized Web Node.
Important: For upgrade notes and change history, see CHANGELOG.md.
Life Server is personal data server written in Node.js, originally based on MIT's Solid Server.
This server is intended for the following audiences:
- (primarily) Myself. I'm using this as an experimental platform for incubating and implementing various Solid-related and Solid-adjacent specifications and standards.
- (hopefully) Other developers of user centric offline-first decentralized applications.
- (to a much smaller extent) End-users interested in running their own file sharing server (a minimal Dropbox/Google Drive sort of setup). This server is not really ready for mainstream (or even early adopter) usage.
- (almost not at all) For system administrators / potential service providers interested in running their own multi-user data server.
To put it another way, due to a shortage of engineering resources, the priorities will be: Developer QoL (Quality of Life) over User QoL over DevOps QoL.
This is an experimental server focusing on interop exploration and rapid feature iteration. "Move fast and break things (and then fix them just as quickly)", to use a tired cliché.
This phase focused on general cleanup and refactoring from the source
node-solid-server
v4 baseline. (See Phase One details.)
This phase focuses on exploring some advanced features that may make it into Solid spec proposals, as well as integration with external Solid-adjacent projects and specs.
- Fix/update Dockerfile
- DID Integration
- Interop with Verifiable Credentials
- Implement Credential Handler API Wallet registration when user creates an account.
- Implement an in-Memory based LDP backend, to go alongside the FS backend.
- Integrate or implement Static OIDC Client Registration functionality, to make interfacing with server-side Solid apps easier.
- Investigate level of effort required to switch from the current
oidc-op
OpenID Connect Provider library to a more widely supported one, such as Filip'snode-oidc-provider
lib. - Implement a server-side metadata mechanism, to support being able to record who created a resource
- (in progress) Experimental integration with CouchDB (for synchronizing of graphs and documents to mobile and offline-first clients).
- Explore using an Encrypted Data Vault as a storage backend. This would require some basic Key Management capability, possible based on the Web KMS spec.
- Interop with the Fediverse by implementing ActivityPub protocol.
Since node-solid-server
(NSS) is
being deprecated in favor of inrupt/pod-server
,
this repo intends to be another compatible implementation (the more the merrier!).
- Works on Windows 10 (WSL2)
Does not support:
- Using an external WebID on signup
acl:origin
checking or Trusted Apps (usessolid-permissions
instead ofacl-check.js
for access control)acl:trustedOrigin
(removed on purpose during refactoring)- Password strength checking on account signup.
- Enforcement of storage space quotas
- WebID-TLS local authentication
- WebSockets
- Globbing
See Solid and Life Server Value Proposition for Developers doc.
- Linux, Mac OS X, or Windows 10
- Node 14+
To run Life Server, you will first need to install
Node.js. (The developers recommend using nvm
to install Node.)
git clone https://github.com/interop-alliance/life-server.git
cd life-server
npm install
life-server
's test suite uses the following localhost domains: nic.localhost
, tim.localhost
, and
nicola.localhost
. You will need to create host file entries for these, in
order for the tests to pass.
Edit your /etc/hosts
file, and append:
# Used for unit testing
127.0.0.1 nic.localhost
127.0.0.1 tim.localhost
127.0.0.1 nicola.localhost
Local/Development: life-server
includes a default localhost
self-signed
TLS certificate in the config/
folder. Advanced users may want to create
their own certificates for local testing.
Production: Installing life-server
in a production environment will
require a valid TLS certificate (self-signed certs will not work). In addition,
if you're running the server in Multi User mode, you will need a
Wildcard Certificate.
The easiest way to customize life-server
is by running the init
wizard.
This will create a config.dev.js
in your current folder:
./bin/server init
To run your server:
./bin/server start
After startup, the server is available at the configured server URL (by default,
https://localhost:7070
).
See docs/Usage With Docker for details.
TBD
Note: This is an experimental research server, not for production use.
Life Server is only possible because of a large community of Solid contributors. A heartfelt thank you to everyone for all of your efforts!