Before You Start
Before contributing, please:- Discuss your change: For significant changes, open an issue or start a discussion first
- Review the Code of Conduct: Follow our Code of Conduct in all interactions
- Check existing issues: Search for similar issues or PRs to avoid duplicates
Pull Request Process
1. Fork the Repository
Create a fork of the Superset repository:- Go to github.com/superset-sh/superset
- Click the “Fork” button in the top-right corner
- Select your account as the destination
2. Clone Your Fork
3. Set Up Development Environment
Install dependencies:4. Create a Feature Branch
feature/add-workspace-templatesfix/terminal-paste-issuedocs/update-setup-guide
5. Make Your Changes
Write your code following our style guidelines. Run development server:6. Test Your Changes
7. Commit Your Changes
Follow the Clean Code principles and the boy scout rule:“Leave the code cleaner, not messier, than how you found it.”
- ✅ “Fix terminal paste handling for multi-line content”
- ✅ “Add workspace template configuration support”
- ❌ “fix bug”
- ❌ “updates”
8. Push to Your Fork
9. Open a Pull Request
Create a pull request from your fork:- Go to your fork on GitHub
- Click “Contribute” → “Open pull request”
- Fill in the PR description with:
- Clear description of changes
- Link to related issues (if applicable)
- Screenshots or videos (for UI changes)
- Testing steps
- Check the box “Allow edits from maintainers” - this speeds up the review process
- Request a review from one of the maintainers
10. Code Review
Maintainers will review your PR and may:- Request changes
- Ask questions
- Suggest improvements
- Approve and merge
Code Style
Superset uses Biome for code formatting and linting.Formatting & Linting
biome check --write --unsafe= format + lint + organize imports + fix allbiome check= check only (no changes)biome format= format only
Code Quality Guidelines
- Type safety: Avoid
anyunless absolutely necessary. Use proper TypeScript types - Clean Code: Follow Clean Code principles
- Boy Scout Rule: Leave code cleaner than you found it
- Prefer
ghCLI: Use GitHub CLI over rawgitcommands where possible - Co-locate dependencies: Keep tests, hooks, utils next to the files using them
Monorepo Structure
Superset is a Bun + Turbo monorepo:Apps
apps/web- Main web application (app.superset.sh)apps/marketing- Marketing site (superset.sh)apps/admin- Admin dashboardapps/api- API backendapps/desktop- Electron desktop applicationapps/docs- Documentation siteapps/mobile- React Native mobile app (Expo)
Packages
packages/ui- Shared UI components (shadcn/ui + TailwindCSS v4)packages/db- Drizzle ORM database schemapackages/auth- Authenticationpackages/agent- Agent logicpackages/trpc- Shared tRPC definitionspackages/shared- Shared utilitiespackages/mcp- MCP integrationpackages/desktop-mcp- Desktop MCP serverpackages/local-db- Local SQLite databasepackages/durable-session- Durable session managementpackages/email- Email templates/sendingpackages/scripts- CLI tooling
Common Commands
Testing Guidelines
- Write tests: Add tests for new features and bug fixes
- Run tests locally: Ensure all tests pass before submitting PR
- Co-locate tests: Place test files next to the code they test
Database Changes
IMPORTANT: Never manually edit files inpackages/db/drizzle/. These are auto-generated.
To create a database migration:
- Modify schema files in
packages/db/src/schema/ - Generate migration:
- Never run migrations yourself - let maintainers handle this
Documentation
Documentation improvements are always welcome!- Docs site: Located in
apps/docs - README: Main README at repository root
- Code comments: Add JSDoc comments for complex functions
Community Guidelines
We follow the Contributor Covenant Code of Conduct.Our Standards
Examples of behavior that contributes to a positive environment:- Demonstrating empathy and kindness
- Being respectful of differing opinions
- Giving and gracefully accepting constructive feedback
- Focusing on what’s best for the community
- Sexualized language or imagery
- Trolling, insulting, or derogatory comments
- Public or private harassment
- Publishing others’ private information
Enforcement
Instances of unacceptable behavior may be reported to [email protected].Getting Help
If you need help with contributing:- Discord: Join Discord for real-time help
- Discussions: Ask in GitHub Discussions
- Issues: Check existing issues for similar questions