{"id":13553591,"url":"https://github.com/interop-alliance/life-server","last_synced_at":"2026-08-02T15:30:21.006Z","repository":{"id":35716341,"uuid":"151128624","full_name":"interop-alliance/life-server","owner":"interop-alliance","description":"A decentralized personal data framework inspired by MIT's Solid Project","archived":false,"fork":false,"pushed_at":"2022-09-14T21:00:22.000Z","size":5456,"stargazers_count":30,"open_issues_count":22,"forks_count":5,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-10-03T17:45:08.373Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"solid/node-solid-server","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/interop-alliance.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-01T17:26:44.000Z","updated_at":"2025-08-27T20:15:46.000Z","dependencies_parsed_at":"2023-01-16T03:47:08.308Z","dependency_job_id":null,"html_url":"https://github.com/interop-alliance/life-server","commit_stats":null,"previous_names":[],"tags_count":120,"template":false,"template_full_name":null,"purl":"pkg:github/interop-alliance/life-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interop-alliance%2Flife-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interop-alliance%2Flife-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interop-alliance%2Flife-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interop-alliance%2Flife-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/interop-alliance","download_url":"https://codeload.github.com/interop-alliance/life-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interop-alliance%2Flife-server/sbom","scorecard":{"id":491512,"data":{"date":"2025-08-11","repo":{"name":"github.com/interop-alliance/life-server","commit":"791ee740a1aaa2324aa991fb7c8e99890182d588"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/main.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/13 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/interop-alliance/life-server/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/interop-alliance/life-server/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/interop-alliance/life-server/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/interop-alliance/life-server/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/interop-alliance/life-server/main.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating node:12-slim to node:12-slim@sha256:c28ca4124ac84ff1e72ee68abfe70aa4cc86f499c1ef20408dc2d35af1058ac1","Warn: npmCommand not pinned by hash: Dockerfile:20","Warn: npmCommand not pinned by hash: .github/workflows/main.yml:19","Warn: npmCommand not pinned by hash: .github/workflows/main.yml:47","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   3 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T19:17:08.366Z","repository_id":35716341,"created_at":"2025-08-19T19:17:08.367Z","updated_at":"2025-08-19T19:17:08.367Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36199567,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-02T02:00:06.915Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T12:02:28.972Z","updated_at":"2026-08-02T15:30:20.962Z","avatar_url":"https://github.com/interop-alliance.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","others"],"sub_categories":[],"readme":"# Life Server _(life-server)_\n\n[![Build status](https://img.shields.io/github/workflow/status/interop-alliance/life-server/Node.js%20CI)](https://github.com/interop-alliance/life-server/actions?query=workflow%3A%22Node.js+CI%22)\n[![NPM Version](https://img.shields.io/npm/v/life-server.svg?style=flat-square)](https://npm.im/life-server)\n\n\u003e A decentralized personal data server inspired by Solid and Decentralized Web Node.\n\n## Table of Contents\n\n- [Background](#background)\n    - [Audience](#audience)\n    - [Roadmap](#roadmap)\n    - [Differences from Solid Server](#differences-from-solid-server)\n- [Install](#install)\n- [Usage](#usage)\n- [Security](#security)\n- [Contribute](#contribute)\n- [License](#license)\n\n**Important:** For upgrade notes and change history, see \n**[CHANGELOG.md](CHANGELOG.md)**.\n\n## Background\n\nLife Server is personal data server written in Node.js, originally\nbased on MIT's [Solid Server](https://github.com/solid/node-solid-server).\n\n### Audience\n\nThis server is intended for the following audiences:\n\n1. (primarily) Myself. I'm using this as an experimental platform for incubating\n    and implementing various [Solid-related](https://github.com/solid/specification)\n    and Solid-adjacent specifications and standards.\n1. (hopefully) Other developers of user centric offline-first decentralized \n    applications.\n1. (to a much smaller extent) End-users interested in running their own file\n    sharing server (a minimal Dropbox/Google Drive sort of setup). This server\n    is not really ready for mainstream (or even early adopter) usage. \n1. (almost not at all) For system administrators / potential service providers\n   interested in running their own multi-user data server.\n\nTo put it another way, due to a shortage of engineering resources, the\npriorities will be: Developer QoL (Quality of Life) over User QoL over DevOps QoL.\n\n### Roadmap\n\nThis is an experimental server focusing on interop exploration and rapid feature \niteration. \"Move fast and break things (and then fix them just as quickly)\", to \nuse a tired cliché.\n\n#### Roadmap Phase One (Complete)\n\nThis phase focused on general cleanup and refactoring from the source\n`node-solid-server` v4 baseline. (See [Phase One details](docs/roadmap.md#roadmap-phase-one-complete).)\n\n#### Roadmap Phase Two\n\nThis phase focuses on exploring some advanced features that may make it into\nSolid spec proposals, as well as integration with external Solid-adjacent\nprojects and specs.\n\n* [x] Fix/update Dockerfile\n* [ ] DID Integration\n    * [x] Generate a [`did:web`](https://github.com/w3c-ccg/did-method-web) DID\n      and corresponding keys for the Server itself, during installation.\n    * [x] Generate a [`did:web`](https://github.com/w3c-ccg/did-method-web) DID\n      and corresponding keys for each user on account registration.\n    * [ ] (in progress) Implement DIDAuth for wallet, hook it up to Login page.\n    * [ ] Add [`did:key`](https://github.com/digitalbazaar/did-method-key-js)\n        support\n    * [ ] Add [Veres One](https://github.com/w3c-ccg/didm-veres-one) DIDs support\n* [ ] Interop with Verifiable Credentials\n    * [x] Implement \n      [Credential Handler API Wallet](https://github.com/digitalbazaar/credential-handler-polyfill)\n      registration when user creates an account.\n* [ ] Implement an in-Memory based LDP backend, to go alongside the FS backend.\n* [ ] Integrate or implement Static OIDC Client Registration functionality,\n    to make interfacing with server-side Solid apps easier.\n* [ ] Investigate level of effort required to switch from the current `oidc-op`\n    OpenID Connect Provider library to a more widely supported one, such as\n    Filip's [`node-oidc-provider`](https://github.com/panva/node-oidc-provider)\n    lib.\n* [ ] Implement a server-side metadata mechanism, to support being able to\n    [record who created a resource](https://github.com/solid/specification/issues/66)\n* [ ] _(in progress)_ Experimental integration with \n    [CouchDB](http://docs.couchdb.org/en/latest/intro/)\n    (for synchronizing of graphs and documents to mobile and offline-first \n    clients).\n* [ ] Explore using an [Encrypted Data Vault](https://github.com/decentralized-identity/secure-data-store)\n    as a storage backend. This would require some basic Key Management capability,\n    possible based on the [Web KMS spec](http://w3c-ccg.github.io/webkms/).\n* [ ] Interop with the Fediverse by implementing [ActivityPub](https://activitypub.rocks/)\n    protocol.\n\n### Differences from Solid Server\n\nSince [`node-solid-server`](https://github.com/solid/node-solid-server) (NSS) is \nbeing deprecated in favor of [`inrupt/pod-server`](https://github.com/inrupt/pod-server),\nthis repo intends to be another compatible implementation (the more the merrier!).\n\n* Works on Windows 10 (WSL2)\n\n**Does not support:**\n\n* Using an external WebID on signup \n* `acl:origin` checking or Trusted Apps (uses [`solid-permissions`](https://github.com/interop-alliance/solid-permissions)  \n    instead of [`acl-check.js`](https://github.com/solid/acl-check) for access control)\n* `acl:trustedOrigin` (removed on purpose during refactoring)\n* Password strength checking on account signup.\n* Enforcement of storage space quotas\n* WebID-TLS local authentication\n* WebSockets\n* Globbing\n\n### Value Proposition for Developers\n\nSee [Solid and Life Server Value Proposition for Developers](docs/value-proposition.md) \ndoc.\n\n## Install\n\n### Pre-requisites: Node.js v14+\n\n* Linux, Mac OS X, or Windows 10\n* Node 14+\n\nTo run Life Server, you will first need to install\nNode.js. (The developers recommend using [`nvm`](https://github.com/creationix/nvm) \nto install Node.)\n\n### Install `life-server` from Github\n\n```bash\ngit clone https://github.com/interop-alliance/life-server.git\ncd life-server\nnpm install\n```\n\n### Edit `/etc/hosts` (development/testing only)\n\n`life-server`'s test suite uses the following localhost domains: `nic.localhost`, `tim.localhost`, and\n`nicola.localhost`. You will need to create host file entries for these, in\norder for the tests to pass.\n\nEdit your `/etc/hosts` file, and append:\n\n```\n# Used for unit testing\n127.0.0.1 nic.localhost\n127.0.0.1 tim.localhost\n127.0.0.1 nicola.localhost\n```\n\n### (Optional) Prepare the SSL/TLS certificate\n\n**Local/Development:** `life-server` includes a default `localhost` self-signed\nTLS certificate in the `config/` folder. Advanced users may want to create\ntheir own certificates for local testing.\n\n**Production:** Installing `life-server` in a production environment will\nrequire a valid TLS certificate (self-signed certs will not work). In addition,\nif you're running the server in Multi User mode, you will need a\n[Wildcard Certificate](https://en.wikipedia.org/wiki/Wildcard_certificate).\n\n### (Optional) Generate a config file\n\nThe easiest way to customize `life-server` is by running the `init` wizard.\nThis will create a `config.dev.js` in your current folder:\n\n```\n./bin/server init\n```\n\n## Usage\n\nTo run your server:\n\n```\n./bin/server start\n```\n\nAfter startup, the server is available at the configured server URL (by default,\n`https://localhost:7070`).\n\n## Usage with Docker\n\nSee [docs/Usage With Docker](docs/usage-docker.md) for details.\n\n## Security\n\nTBD\n\nNote: This is an experimental research server, not for production use.\n\n## Contribute\n\nLife Server is only possible because of a large community of \n[Solid contributors](https://github.com/solid/node-solid-server/blob/master/CONTRIBUTORS.md).\nA heartfelt thank you to everyone for all of your efforts!\n\n## License\n\n[The MIT License](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finterop-alliance%2Flife-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finterop-alliance%2Flife-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finterop-alliance%2Flife-server/lists"}