Skip to main content
Thanks for wanting to contribute to Ship. This page covers the repo layout, how to run the template and docs locally, and how to open a pull request.

Ways to contribute

  • Fix the docs — bad wording, missing examples, anything inaccurate.
  • Fix the template — squash bugs or improve the scaffolded app in /template.
  • Report or suggest — open an issue for a bug or an improvement.
  • Share Ship — tell anyone who might want to build products, not boilerplate.

Repo layout

Ship is a pnpm + Turborepo monorepo. The pieces you’ll touch most:

Shared packages

The template/packages/ folder holds the packages every generated app shares: @ship/emails and @ship/cloud-storage arrive via the mailer and cloud-storage plugins; the rest are part of the base template.

Open a pull request

1

Fork and branch

Fork the project, then branch off main with a name that describes your change.
2

Make the change

Implement it and commit. CI runs build and lint checks on the PR — see GitHub Actions.
3

Open the PR

Push and open a pull request against main. Attach three labels: To Review, a functionality type (Feature / Bug / Improvement), and an edit location (docs, create-ship-app, or template).
A maintainer reviews it. If it’s good, it merges to main. Otherwise we leave comments and label it Changes Requested — make the fixes, then reattach To Review.

Run the template

1

Enter the template

2

Create the API env file

Copy apps/api/.env.example to apps/api/.env.
3

Install dependencies

4

Start everything

This brings up infrastructure, runs migrations, and starts every service.
The dev servers come up on:

Run the docs

Ship’s docs use Mintlify and live in the /docs folder, written in MDX.
1

Install the Mintlify CLI

2

Run from the repo root

This runs cd docs && mint dev --port 4100.
The docs open at http://localhost:4100.

Deployment

Ship ships configs for four targets — AWS (EKS), DigitalOcean Kubernetes, DigitalOcean Apps, and Render — under /deploy. The CLI copies the config for the target you pick into your generated project. To test a target end to end, scaffold a fresh project with npx @paralect/ship init, choose the deployment target, and follow the deployment instructions.