Solid Cockpit is a Vue web application for interacting with Solid Pods: authentication, data upload, pod browsing, SPARQL query execution, query caching, and privacy/ACL management.
This application was developed in the context of the CHIST-ERA TRIPLE project.
Main capabilities:
- Solid Pod login, session display, and pod registration/selection
- File upload to typed or browsed pod container destinations
- Pod browsing with filtering, metadata inspection, download, move, rename, and delete operations
- SPARQL querying over Solid Pods, SPARQL endpoints, and mixed/federated sources
- Query cache records with result previews, filtering, sorting, rename, sharing, and deletion
- Privacy/ACL management with shared-with-me/shared-with-others records, notifications, and scheduled revocation
Public deployment:
If you want to run locally, see Developers.
- Community Solid Server: host a Pod locally or on your own server
- Solidcommunity.net: community-hosted Solid Pods
- Other Solid Pod Hosting Services
In-app guides are available from the relevant page:
Home: app overview and embedded video demonstrationData Upload: upload destination and file upload workflowPod Browser: container browsing and resource operationsData Query: query execution, examples, query URLs, and cache workflowPrivacy Editing: ACL editing, notifications, sharing records, and revocation scheduling
Solid Pod VoID file generation:
Example:
mvn package
java -jar target/void-generator-0.7-SNAPSHOT-uber.jar \
--from-solid-pod [URL-to-solid-pod] \
--void-file void.ttl \
-i [URL-to-solid-pod]/void.ttl \
--repository [URL-to-solid-pod]Then upload void.ttl to the pod root using the app's Data Upload page.
If you use this tool in an academic publication, you can cite:
Crum, E. (2026). Solid Cockpit (Version 1.0.0) [Software]. GitHub. https://github.com/KNowledgeOnWebScale/solid-cockpit
BibTeX:
@misc{solidcockpit_2026,
author = {Crum, Elias},
title = {{Solid Cockpit}},
year = {2026},
version = {1.0.0},
publisher = {GitHub},
howpublished = {\url{https://github.com/KNowledgeOnWebScale/solid-cockpit}},
note = {Software. Web app: \url{https://knowledgeonwebscale.github.io/solid-cockpit}. Accessed: 2026-03-04}
}You can also use:
CITATION.cfffor GitHub-style citation metadataCITATION.bibfor direct BibTeX import
- Discussions: https://github.com/KNowledgeOnWebScale/solid-cockpit/discussions
- Issues: https://github.com/KNowledgeOnWebScale/solid-cockpit/issues
- Vue 3 + Vite 6
- TypeScript
- Vuetify 3
- Pinia
- Inrupt Solid client/auth libraries
- Comunica SPARQL engine
- YASQE/YASR query editor and result viewers
- npm-managed dependency workflow
src/components/: Vue UI components onlysrc/services/solid/: Solid auth, pod access, upload, and ACL helper modulessrc/services/query/: query execution, parsing, and worker codesrc/stores/: Pinia state modules
- Node.js 22.x (LTS recommended)
- npm 10+ (repo now uses
package-lock.json) - Do not use Yarn for this repo; npm is the supported package manager.
Node 24 note:
@inrupt/[email protected]currently declares support for Node^20 || ^22, so this repo pins to Node 22 for strict engine compatibility.
Install dependencies:
npm installRun locally:
npm run devBuild production assets:
npm run buildIf you hit a Node heap out-of-memory error during production builds, rerun with an increased heap size:
NODE_OPTIONS=--max-old-space-size=8192 npm run buildPreview production build:
npm run serve| Script | Description |
|---|---|
npm run dev |
Start Vite development server |
npm run build |
Build production assets into dist/ |
npm run build:highmem |
Build production assets with an 8GB Node heap |
npm run serve |
Preview the production build locally |
npm run test:unit |
Run unit tests (Node built-in runner + TS loader) |
npm run test:unit:watch |
Run unit tests in watch mode |
npm run test:unit:coverage |
Run unit tests with coverage report generation |
npm run test:unit:compliance |
Enforce unit-test + coverage thresholds |
npm run test:unit:compliance:quiet |
Enforce unit coverage with concise output |
npm run test:component |
Run Vue component tests (.vue) via Vitest |
npm run test:component:watch |
Run Vue component tests in watch mode |
npm run test:component:coverage |
Run Vue component tests with coverage |
npm run test:component:compliance |
Enforce Vue component test coverage thresholds |
npm run test:component:compliance:quiet |
Enforce component coverage with concise output |
npm run test:compliance |
Run full (unit + component) compliance checks |
npm run test:compliance:quiet |
Run full compliance checks with concise output |
npm run hooks:install |
Configure local git hooks path (.githooks) |
npm run github-post-build |
Create route-compatible index.html copies in dist/ |
npm run deploy |
Publish dist/ to GitHub Pages |
Unit test suite:
- Location:
tests/unit/ - Command:
npm run test:unit
Component test suite:
- Location:
tests/components/ - Command:
npm run test:component - Includes focused
ThemeSwitch+TheFootertests and full.vuesmoke mounts intests/components/AllComponentsSmoke.test.ts
Coverage tracker:
npm run test:unit:coverageThis command:
- runs the unit test suite with Node coverage enabled
- writes machine-readable output to
coverage/unit-coverage-summary.json - writes a readable summary to
coverage/unit-coverage-summary.txt
Compliance thresholds (gating):
- line coverage:
98% - branch coverage:
90% - function coverage:
100%
Tracked files:
src/services/solid/fileUploadUtils.tssrc/services/solid/mime_types.jssrc/services/query/queryPodUtils.tssrc/services/query/z3-headers.ts
Advisory (non-gating) coverage is also reported for:
src/services/solid/login.tssrc/services/solid/getData.tssrc/services/solid/privacyEdit.ts
Override thresholds with env vars:
UNIT_COVERAGE_LINESUNIT_COVERAGE_BRANCHESUNIT_COVERAGE_FUNCS
Commit-time compliance check:
- Hook file:
.githooks/pre-commit - Command run by hook:
node ./scripts/precommit-compliance.mjs - Hook output is intentionally concise on pass and detailed on failure.
Install hooks locally:
npm run hooks:installIf automatic hook setup is blocked in your environment:
git config --local core.hooksPath .githooksCI compliance check:
- Workflow:
.github/workflows/unit-test-compliance.yml - Enforces unit tests, component tests, and coverage thresholds.
Current app version:
package.jsonversion:1.0.0- web-app release tag convention:
web-app-v<version> - current computed web-app tag:
web-app-v1.0.0
In-app visibility:
- Footer displays semantic version (
vX.Y.Z) and computed release tag (web-app-vX.Y.Z) - Values are injected at build time from
package.jsonvia Vite defines
Recommended release workflow:
- Update version:
npm version X.Y.Z- Build and validate:
npm run test:unit
npm run build:highmem- Create and push release tags:
git tag vX.Y.Z
git tag web-app-vX.Y.Z
git push origin vX.Y.Z web-app-vX.Y.ZGitHub Pages deployment setup:
vite.config.jsuses/solid-cockpit/base path for productionnpm run github-post-buildprepares route folders indist/npm run deploypublishesdist/viagh-pages
Direct dependency versions currently declared in package.json.
Runtime dependencies:
| Package | Version |
|---|---|
@comunica/context-entries |
^5.2.0 |
@comunica/logger-pretty |
^5.2.0 |
@comunica/query-sparql |
^5.2.0 |
@comunica/query-sparql-solid |
^5.0.1 |
@inrupt/solid-client |
^3.0.0 |
@inrupt/solid-client-authn-browser |
^4.0.0 |
@inrupt/solid-client-authn-node |
^4.0.0 |
@mdi/font |
^7.4.47 |
@triply/yasqe |
^4.2.28 |
@triply/yasr |
^4.2.28 |
@vitejs/plugin-vue |
^5.2.3 |
@vue/eslint-config-typescript |
^9.1.0 |
actor-query-process-remote-cache |
^0.1.0 |
core-js |
^3.8.3 |
fs |
^0.0.1-security |
material-icons |
^1.13.14 |
pinia |
^2.3.1 |
query-sparql-remote-cache |
^0.0.9 |
sparqljs |
^3.7.3 |
vite |
^6.2.3 |
vue |
^3.2.13 |
vue-router |
^4.5.1 |
vuetify |
^3.5.14 |
z3-solver |
^4.15.3 |
Development dependencies:
| Package | Version |
|---|---|
@tsconfig/node22 |
^22.0.2 |
@typescript-eslint/eslint-plugin |
^5.4.0 |
@typescript-eslint/parser |
^5.4.0 |
@vitest/coverage-istanbul |
2.1.9 |
@vue/test-utils |
2.4.6 |
eslint |
^7.32.0 |
eslint-config-prettier |
^8.3.0 |
eslint-plugin-prettier |
^4.0.0 |
eslint-plugin-vue |
^8.0.3 |
gh-pages |
^5.0.0 |
jsdom |
24.1.3 |
prettier |
^2.4.1 |
typescript |
^5.0.0 |
vitest |
2.1.9 |
- Open pull requests against the
mainbranch - Use GitHub Issues for bug reports
- Use GitHub Discussions for broader questions and ideas
