Thank you for your interest in contributing to Uppity! This document provides guidelines and information for contributors.
This project adheres to the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code.
Uppity uses dual-licensing (AGPL-3.0 for open source, commercial license for enterprises). To enable this, we require contributors to sign a Contributor License Agreement before we can merge contributions.
When you submit your first pull request, you'll be prompted to sign the CLA via CLA Assistant.
- mise —
mise installreadsmise.tomland gives you Node and aube at the pinned versions - PostgreSQL v15+ (or use Docker)
The production image runs on Deno, but the dev loop does not: every command below runs on Node, and you never invoke Deno directly. ADR 0001 explains why the two differ.
-
Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/uppity.git cd uppity -
Install the toolchain and dependencies
mise install aube install
-
Start PostgreSQL
docker compose -f docker-compose.dev.yml up -d
-
Configure environment
cp .env.example .env # Edit .env with your settings -
Push database schema
aubr db:push
-
Start development server
aubr dev
feat/description- New featuresfix/description- Bug fixesdocs/description- Documentation changesrefactor/description- Code refactoring
- Create a new branch from
main - Make your changes
- Ensure tests pass:
aubr test:unit run - Ensure type checking passes:
aubr check - Ensure linting and formatting pass as CI checks them:
aubr lint:ci
aubr lint fixes what it can, which hides problems CI reports. Run lint:ci
after your last edit.
We follow conventional commit format:
type(scope): description
[optional body]
[optional footer]
Types: feat, fix, docs, style, refactor, test, chore
Examples:
feat(monitors): add ping monitor typefix(notifications): handle rate limiting in Slack channeldocs(readme): update installation instructions
Every pull request that changes behaviour needs a changeset. It records what changed and how the version should move, and it becomes the changelog entry on release.
CHANGELOG.md is generated from .changeset/ files by Changesets on release and should not be
hand-edited — entries from 0.1.1 onward are all generated this way; earlier entries follow
Keep a Changelog, and the project adheres to
Semantic Versioning.
aubr changesetPick a bump level, write a short user-facing description, and commit the generated file in
.changeset/. Bump levels: patch for fixes, minor for new features, major for breaking
changes.
Pull requests that change no behaviour — documentation, CI, tests, refactors — do not need a release. Add an empty changeset to record that decision:
aubr changeset --emptyA bot comments on your pull request with the bump it detected, or a note that it found none. The comment is a prompt, not a gate: nothing blocks on it, and a maintainer can add a changeset for you from a link in that comment.
- Fill out the PR template completely
- Link any related issues
- Ensure all CI checks pass
- Request review from maintainers
- Address review feedback promptly
- TypeScript: Strict mode enabled, no
anytypes - Svelte: Use Svelte 5 runes (
$state,$derived,$effect) - Testing: All new features require tests
- Comments: Write self-documenting code; add comments only for complex logic
# Format all files
aubr fmt
# Lint with auto-fix
aubr lint
# Check both without fixing, the way CI does
aubr lint:ci
# Type check
aubr checkUnit tests need a PostgreSQL reachable at DATABASE_URL; each file runs against
its own database created from a migrated template.
# Run all unit tests
aubr test:unit run
# Run specific test file
aubr test:unit run src/lib/format.spec.ts
# Run tests in watch mode
aubr test:unitaubr test:e2e- Use the bug report issue template
- Include steps to reproduce
- Include environment details (OS, Node version, browser)
- Include relevant logs or screenshots
- Use the feature request issue template
- Describe the use case
- Explain why existing features don't solve the problem
- Open a GitHub Discussion
- Check existing issues and discussions first
Thank you for contributing!