Skip to main content
Thank you for your interest in contributing to Openlane UI! This guide will help you get started with contributing to the project.

Before You Start

Please read the following important documents:
You will be required to sign all commits to the Openlane project. See GitHub’s documentation for setup instructions.

Getting Started

1

Fork the Repository

External contributors need to fork the repository since they don’t have write access to the main branch.See GitHub’s guide on creating a PR from a fork.
2

Set Up Your Environment

Follow the development setup guide to configure your local environment:
task local-setup
3

Create a Branch

Create a descriptive branch name for your changes:
git checkout -b feature/your-feature-name
# or
git checkout -b fix/issue-description
4

Make Your Changes

Write your code, following the project’s coding standards and conventions.

Development Workflow

Code Quality

The project uses several tools to maintain code quality:
bun run type-check

Pre-commit Hooks

The project uses pre-commit hooks to enforce code quality. They run automatically on git commit:
# Install hooks
pre-commit install && pre-commit install-hooks

# Update hooks
pre-commit autoupdate

# Run manually on all files
pre-commit run --show-diff-on-failure --color=always --all-files

Testing Your Changes

1

Run Locally

Test your changes in development mode:
task dev
2

Run Tests

Execute the test suite:
task test
3

Build

Ensure the production build works:
task build

Commit Guidelines

Signing Commits

All commits must be signed. Configure GPG signing:
# Set up GPG key
gpg --full-generate-key

# List keys and copy your key ID
gpg --list-secret-keys --keyid-format=long

# Configure Git to use your key
git config --global user.signingkey YOUR_KEY_ID
git config --global commit.gpgsign true
See GitHub’s commit signature verification guide for detailed instructions.

Commit Message Format

Write clear, descriptive commit messages:
# Good commit messages
git commit -m "feat: add user authentication flow"
git commit -m "fix: resolve navigation menu overflow issue"
git commit -m "docs: update API documentation"

# Less helpful messages (avoid these)
git commit -m "update code"
git commit -m "fix bug"

Pull Request Process

1

Push Your Changes

Push your branch to your fork:
git push origin feature/your-feature-name
2

Create Pull Request

Open a pull request from your fork to the main repository.Include in your PR description:
  • What changes you made
  • Why you made them
  • Any related issues (use “Fixes #123” to auto-close issues)
  • Screenshots (for UI changes)
3

Code Review

Maintainers will review your PR and may request changes.Address feedback by:
  • Making additional commits to your branch
  • Pushing updates to the same branch
  • Responding to review comments
4

Merge

Once approved, a maintainer will merge your PR.

Coding Standards

TypeScript

  • Use TypeScript for all new code
  • Avoid any types - use proper typing
  • Export types that may be reused
  • Document complex types with comments

React

  • Use functional components with hooks
  • Follow React 19 best practices
  • Keep components focused and single-purpose
  • Use meaningful component and prop names

Styling

  • Use Tailwind CSS utility classes
  • Follow the shared Tailwind config from @repo/tailwind-config
  • Keep styles consistent with existing components
  • Use CSS variables for theming when appropriate

File Organization

  • Group related files together
  • Use index files for clean exports
  • Keep components in their own directories
  • Place tests alongside the code they test

Monorepo Structure

Understand where to make changes:

Applications (apps/)

  • console - Main user-facing application
  • storybook - Component documentation and testing

Packages (packages/)

  • codegen - GraphQL code generation
  • ui - Shared UI components
  • dally - Common DAL patterns
  • eslint-config - Linting rules
  • config-typescript - TypeScript configuration
  • tailwind-config - Tailwind CSS configuration

Licensing

By contributing to Openlane UI, you agree that your contributions will be licensed under the Apache 2.0 License.

Important Notes

  • The repository is open source under Apache 2.0
  • Openlane’s SaaS/Cloud Services are commercial products
  • Logos and trademarks are not covered under Apache 2.0
  • Others can distribute this software but cannot use Openlane trademarks

Security

We take security seriously. If you discover a security vulnerability:
DO NOT report security vulnerabilities through public GitHub issues, discussions, or pull requests!
Instead:
  1. Email [email protected] with details
  2. Include as much information as possible:
    • Description of the vulnerability
    • Steps to reproduce
    • Potential impact
    • Suggested fixes (if any)
  3. Wait for a response before disclosing publicly
See the security policy for more details.

Getting Help

If you have questions or need assistance:

Communication Channels

Before Asking

  1. Check existing issues
  2. Review the documentation
  3. Search discussions

Common Tasks

Updating Dependencies

# Update all dependencies
bun update

# Reinstall everything
task reinstall

Generating GraphQL Code

See the @repo/codegen README for details on regenerating GraphQL types and hooks.

Updating Passkey AAGUIDs

task update:passkeys

Generating Route Lists

# Generate static route list
task generate:routes

# Update existing routes
task update:routes

Review Checklist

Before submitting your PR, ensure:
  • Code follows project style guidelines
  • All tests pass (task test)
  • Type checking passes (bun run type-check)
  • Linting passes (task lint)
  • Code is formatted (bun run format)
  • Commits are signed
  • PR description is clear and complete
  • Documentation is updated (if needed)
  • No sensitive information in commits

Recognition

All contributors will be recognized in:
  • Project contributors list
  • Release notes (for significant contributions)
  • Community acknowledgments
Thank you for contributing to Openlane UI!

Build docs developers (and LLMs) love