Skip to main content

Contributing to SolidOS

We welcome contributions to SolidOS! This guide explains how to get started.

Ways to Contribute

  • Bug reports — Found a bug? Open an issue
  • Feature requests — Have an idea? Start a discussion
  • Documentation — Improve or add docs
  • Code — Fix bugs or add features
  • Panes — Create new panes for data types
  • Testing — Add tests or improve coverage
  • Reviews — Review pull requests

Getting Started

1. Fork and Clone

# Fork on GitHub, then clone your fork
git clone https://github.com/YOUR_USERNAME/solidos.git
cd solidos

2. Install Dependencies

npm install
npm run setup

This bootstraps the monorepo with Lerna.

3. Build

npm run build

4. Run Development Server

npm start

Visit http://localhost:8080 to see SolidOS running.

Project Structure

solidos/
├── packages/
│ ├── mashlib/ # Main bundle
│ ├── solid-panes/ # Pane collection
│ ├── solid-ui/ # UI components
│ ├── solid-logic/ # Business logic
│ └── pane-registry/ # Pane management
├── documentation/ # Developer guides
├── lerna.json # Monorepo config
└── package.json

Development Workflow

Creating a Branch

git checkout -b feature/my-feature
# or
git checkout -b fix/issue-123

Making Changes

  1. Make your changes
  2. Write/update tests
  3. Run tests: npm test
  4. Build: npm run build
  5. Test manually in the browser

Commit Messages

Follow Conventional Commits:

feat: add new contacts export feature
fix: resolve login redirect issue
docs: update pane creation guide
refactor: simplify store initialization
test: add tests for ACL handling
chore: update dependencies

Submitting a Pull Request

  1. Push your branch:

    git push origin feature/my-feature
  2. Open a PR on GitHub

  3. Fill in the PR template:

    • Description of changes
    • Related issues
    • Testing done
    • Screenshots (for UI changes)
  4. Wait for review

Code Style

TypeScript/JavaScript

// Use TypeScript when possible
// Prefer functional patterns
// Document public APIs

/**
* Fetches a resource and returns its label
* @param uri - The resource URI
* @returns The label or null if not found
*/
export async function getLabel(uri: string): Promise<string | null> {
const subject = sym(uri)
await store.fetcher.load(subject.doc())
return store.any(subject, RDFS('label'), null, null)?.value ?? null
}

Formatting

The project uses ESLint and Prettier:

# Check formatting
npm run lint

# Fix formatting
npm run lint:fix

Testing

Write tests for new functionality:

// __tests__/myFeature.test.ts
import { myFunction } from '../myFeature'

describe('myFunction', () => {
test('handles basic case', () => {
expect(myFunction('input')).toBe('expected')
})

test('handles edge case', () => {
expect(myFunction(null)).toBeNull()
})
})

Run tests:

npm test                    # All tests
npm test -- --watch # Watch mode
npm test -- --coverage # With coverage

Creating a Pane

See Creating Panes for the full guide.

Quick checklist:

  1. Create pane file in solid-panes/src/
  2. Implement name, label, render
  3. Register in registerPanes.ts
  4. Add tests
  5. Document the pane

Documentation

Documentation lives in this site. To contribute:

  1. Fork the docs repo
  2. Edit Markdown files
  3. Submit a PR

Running Docs Locally

cd docs
npm install
npm start

Writing Style

  • Use clear, simple language
  • Include code examples
  • Add screenshots for UI features
  • Link to related docs

Review Process

What We Look For

  • Code quality — Clean, readable, maintainable
  • Tests — New code should have tests
  • Documentation — Update docs as needed
  • Performance — Avoid regressions
  • Accessibility — UI should be accessible
  • Security — No vulnerabilities introduced

Review Timeline

  • Small PRs: 1-3 days
  • Large PRs: 1-2 weeks
  • Be patient — maintainers are volunteers

Addressing Feedback

  • Respond to all comments
  • Push additional commits (don't force push)
  • Mark resolved conversations

Issue Guidelines

Bug Reports

Include:

  • SolidOS version
  • Browser and version
  • Steps to reproduce
  • Expected vs actual behavior
  • Screenshots/console errors

Feature Requests

Include:

  • Use case description
  • Proposed solution
  • Alternatives considered

Community

Getting Help

Code of Conduct

Be respectful and inclusive. See the Solid Code of Conduct.

License

SolidOS is MIT licensed. By contributing, you agree that your contributions will be licensed under MIT.

Recognition

Contributors are listed in the repository. Significant contributions may be highlighted in release notes.

See Also