Thank you for your interest in contributing to Sequin! This document provides guidelines for contributing to the project.
- Elixir 1.18+
- PostgreSQL 14+
- GitHub CLI (
gh) - Node.js (for frontend assets)
- Go (only necessary for CLI development)
-
Fork and clone the repository
-
Start PostgreSQL and Redis with docker compose
docker compose --profile databases up -d
If you encounter an error about the default PostgreSQL user "postgres" not existing, you can create the user with:
createuser -s postgres
-
Install Elixir, Erlang, and Node.js through
asdfInstall and configureasdfif you don't have it already: https://asdf-vm.com/guide/getting-started.htmlOn Mac, you can use Homebrew:
brew install asdf
Add the following to your shell configuration file (e.g.,
.zshrcor.bashrc) to configureasdf:. /opt/homebrew/opt/asdf/libexec/asdf.shNow you can use
asdfto install the necessary versions of Elixir, Erlang, and Node.js:asdf plugin add erlang asdf plugin add elixir asdf plugin add nodejs
Run this in the root of the repository to use our
.tool-versionsfile:asdf install
-
Run the setup script
mix setup
-
Start the development server:
make dev
The app will be available at http://localhost:4000.
Sequin uses LiveView + LiveSvelte for its frontend. As a monolith, the entire app is available at http://localhost:4000.
- Create a new branch for your changes
- Make your changes
- Run tests:
# Run Elixir tests mix test
- Push your changes and open a pull request
- Run
make signoffto verify your changes pass all checks
When you submit a pull request, GitHub Actions will automatically run a series of checks.
After your PR passes, we will review your changes and hopefully merge!
If you need to reach us sooner, the fastest way is through our Discord server or Slack community.
Core contributors with repository access should run the signoff script before merging:
# From the project root
./scripts/signoff.shThis script:
- Checks code formatting
- Performs compilation with warnings as errors
- Runs all tests
- Performs linting and other checks
- Updates the GitHub commit status with a signoff
- Elixir: Follow the standard Elixir formatting (enforced by
mix format) - TypeScript/JavaScript: Use Prettier (enforced by the signoff process)
- Go: Use standard Go formatting (enforced by
go fmt) - SQL: Use lowercase for keywords
- Update relevant documentation in the
docs/directory - Follow the style guide for documentation
- Run the docs locally using
make docs
- Join our Discord server or Slack community for questions and discussions
- Open an issue for bugs or feature requests
- Tag maintainers in your PR if you need help
By contributing to Sequin, you agree that your contributions will be licensed under the MIT License.