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
- Open an issue first. Describe the problem or improvement. Get a thumbs up before writing code.
- Keep it small. One bug, one flow, one focused change.
- 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:
- README.md
- docs/ARCHITECTURE.md
- docs/DEVELOPMENT.md
- docs/CODING_STANDARDS.md
- docs/TESTING.md
- CLAUDE.md
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 typecheckafter 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.