Development Setup
Portless uses a pnpm workspace monorepo with Turborepo for build orchestration. The publishable package lives inpackages/portless/.
Prerequisites
- Node.js 20 or higher
- pnpm (install via
npm install -g pnpm) - Git
- macOS or Linux (Windows support may work but is not officially supported)
Clone and Install
Build
Build all packages in the monorepo:Run Tests
Portless has a comprehensive test suite:Linting and Type Checking
Local Development
To test your changes locally:-
Build the package:
-
Link it globally:
-
Use it in any project:
-
After changes, rebuild and the linked version will update:
Debugging
For debugging the proxy server:Monorepo Structure
Package Manager Rules
Portless uses pnpm for all package management:npm install -g since it’s universal and most developers have npm by default.
Making Changes
Code Style
- No emojis anywhere in the codebase (code, comments, output, docs)
- Use TypeScript for all source files
- Follow the existing code style (enforced by ESLint and Prettier)
- Write clear, concise comments for complex logic
Testing
- Add tests for new features
- Update existing tests when changing behavior
- Ensure all tests pass before submitting a PR:
Documentation
When a change affects how humans or agents use portless, update all three of these:README.md- User-facing documentationskills/portless/SKILL.md- Agent skill for AI coding assistantspackages/portless/src/cli.ts---helpoutput
Pull Request Guidelines
Before Submitting
-
Test your changes:
-
Update the changelog:
Add a description of your changes to
CHANGELOG.mdunder the “Unreleased” section (or create one if it doesn’t exist). - Update documentation if needed (see above).
-
Build successfully:
PR Title Format
Use conventional commit format:feat: add support for custom proxy headersfix: resolve certificate trust issue on Arch Linuxdocs: update installation instructionsrefactor: simplify route matching logictest: add e2e tests for worktree detection
PR Description
Include:- What - What changes did you make?
- Why - Why were these changes necessary?
- How - How did you implement the solution?
- Testing - What testing did you do?
Review Process
- A maintainer will review your PR
- Address any feedback or requested changes
- Once approved, a maintainer will merge your PR
- Your changes will be included in the next release
Commit Messages
Use clear, descriptive commit messages:Release Process
(For maintainers)- Update version in
packages/portless/package.json - Move “Unreleased” section in
CHANGELOG.mdto a new version section - Commit changes:
git commit -m "chore: release v0.x.x" - Create git tag:
git tag v0.x.x - Push changes and tag:
git push && git push --tags - Publish to npm:
Getting Help
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: https://port1355.dev
Code of Conduct
Be respectful and considerate of others. We’re all here to make portless better.- Be welcoming and inclusive
- Respect differing viewpoints and experiences
- Accept constructive criticism gracefully
- Focus on what’s best for the community
- Show empathy towards other community members