Files
paseo/CONTRIBUTING.md

4.5 KiB

Contributing to Paseo

Thanks for taking the time to contribute.

How this project works

Paseo is a BDFL project. Product direction, scope, and what ships are the maintainer's call.

This means:

  • PRs submitted without prior discussion will likely be rejected, heavily modified, or scoped down.
  • The maintainer may rewrite, split, cherry-pick from, or close any PR at their discretion.
  • There is no obligation to merge a PR as-submitted, regardless of code quality.

This is not meant to discourage contributions — it is meant to set clear expectations so nobody wastes their time.

How to contribute

  1. Open an issue first. Describe the problem or improvement. Get a thumbs up before writing code.
  2. Keep it small. One bug, one flow, one focused change.
  3. Open a PR once there is alignment on scope.

If you want to propose a direction change, start a conversation.

Before you start

Please read these first:

What is most helpful

The highest-signal contributions right now are:

  • bug fixes
  • windows and linux specific fixes
  • regression fixes
  • doc improvements
  • packaging / platform fixes
  • focused UX improvements that fit the existing product direction
  • tests that lock down important behavior

Scope expectations

Please keep PRs narrow.

Good:

  • fix one bug
  • improve one flow
  • add one focused panel or command
  • tighten one piece of UI

Bad:

  • combine multiple product ideas in one PR
  • bundle unrelated refactors with a feature
  • sneak in roadmap decisions

If a contribution contains multiple ideas, split it up.

Product fit matters

Paseo is an opinionated product.

When reviewing contributions, the bar is not just:

  • is this useful?
  • is this well implemented?

It is also:

  • does this fit Paseo?
  • does this add product surface that will be hard to maintain?
  • does the value justify the maintenance surface it adds?
  • does this solve a common need or over-serve an edge case?
  • does this preserve the product's current direction?

Development setup

Prerequisites

  • Node.js matching .tool-versions
  • npm workspaces

Start local development

# runs both daemon and expo app
npm run dev

Useful commands:

npm run dev:server
npm run dev:app
npm run dev:desktop
npm run dev:website
npm run cli -- ls -a -g

Read docs/DEVELOPMENT.md for build-sync gotchas, local state, ports, and daemon details.

Multi-platform testing

Paseo ships to mobile (iOS/Android), web, and desktop (Electron). Every UI change must be tested on mobile and web at minimum, and desktop too if relevant. This is a multi-platform codebase and things that look fine on one surface regularly break on another.

Common checks:

npm run typecheck
npm run test --workspaces --if-present

Important rules:

  • always run npm run typecheck after changes
  • tests should be deterministic
  • prefer real dependencies over mocks when possible
  • do not make breaking WebSocket / protocol changes
  • app and daemon versions in the wild lag each other, so compatibility matters

If you touch protocol or shared client/server behavior, read the compatibility notes in CLAUDE.md.

Coding standards

Paseo has explicit standards. Please follow them.

The full guide lives in docs/CODING_STANDARDS.md.

PR checklist

Before opening a PR, make sure:

  • there was prior discussion and alignment on scope (issue or conversation)
  • the change is focused — one idea per PR
  • the PR description explains what changed and why
  • UI changes include screenshots or videos for every affected platform (mobile, web, desktop)
  • UI changes have been tested on mobile and web at minimum
  • typecheck passes
  • tests pass, or you clearly explain what could not be run
  • relevant docs were updated if needed

Communication

If you are unsure whether something fits, ask first.

That is especially true for:

  • new core UX
  • naming / terminology changes
  • new extension points
  • new orchestration models
  • anything that would be hard to remove later

Early alignment is much better than a large PR that is expensive for everyone to unwind.

Forks are fine

If you want to explore a different product direction, a fork is completely fine.

Paseo is open source on purpose. Not every idea needs to land in the main repo to be valuable.