How to Contribute
Take care to read all contributions guidelines before you begin!
- Learn how to contribute to open source.
- Follow a step-by-step guide to practice your first contribution.
- Locate an open issue on GitHub. Post a comment letting us know you wish to volunteer.
- Optionally, you may coordinate efforts on the
#contributors
channel within Discord. - A member of the Skeleton team will assign the issue to you and help outline requirements.
- Complete the work and submit a pull request per the requirements on this page.
NOTE: non-trivial PRs submitted without our prior consent will be denied. Repeat offenders will be blocked.
Using PNPM
Skeleton makes use of PNPM and PNPM workspaces to maintain all projects within the Skeleton monorepo.
- Install PNPM on your local computer.
- Fork the Skeleton monorepo via the option on GitHub.
- Use Git to clone the forked project to your local machine.
- Run
pnpm i
from the root to install the required depedencies. - Point your terminal at one of the
/sites
or/package
projects detailed below. - Run
pnpm dev
to start a local dev server for each project.
NOTE: Make sure you’re running
pnpm 9.5.0
or higher. You can check withpnpm --version
.
Adding Dependencies
As a courtesy, please consult with Skeleton team members before adding dependencies. We may be able to offer alternatives.
Dependencies may be installed using the standard pnpm i
command. However, in some cases it may be beneficial to maintain a uniform version shared across multiple projects or within each package.json
. For this we can make use of PNPM Catalogs.
The master version is maintained in the monorepo root in pnpm-workspace.yaml
:
Use the following convention to link each project’s dependency to the shared Catalog version:
Monorepo Structure
Sites
Public facing websites that are deployed and hosted for users to browse.
Path | Description |
---|---|
/sites/skeleton.dev | The production documentation website. |
/sites/themes.skeleton.dev | The Skeleton themes generator website |
Packages
Modular Skeleton packages distributed via NPM.
Path | Description |
---|---|
/packages/skeleton | The Skeleton core package, containing the Tailwind plugin. |
/packages/skeleton-react | The Skeleton React package, containing Skeleton React components. |
/packages/skeleton-svelte | The Skeleton Svelte package, containing Skeleton Svelte components. |
/packages/cli | The public-facing Skeleton CLI. Used for migrations, etc. |
/packages/necroparser | An internal tool for generating component type schema for API references. |
/packages/vite-plugin-tw-plugin-watcher | An internal tool handling HRM updates to the Tailwind plugin. |
Branch
Skeleton utilizes three primary branches.
Branch | Description | Pull Requests |
---|---|---|
master | Represents the release branch of the all projects. | Never |
dev | Represents a queue of new features prepped for release. | Allowed |
next | Represents the bleeding edge pre-release branch. | Allowed |
PR Branch Conventions
Please use the following naming convention when creating your pull request.
Branch | Role |
---|---|
docs/* | When updating the documentation site. |
feature/* | When implementing a new feature. |
chore/* | When implementing small changes. |
bugfix/* | When implementing feature bugfixes. |
Keep branch names short and semantic, and use snake-case to seperate words.
Changesets
Changesets are used to automatically generate the changelog for each release. Any contributions made within /packages
must contain a Changeset, while contributions within /sites
should never include a Changeset.
Follow these instructions to generate a changeset:
- Make sure you’re within your local pull request feature branch.
- Navigate to the root of the Skeleton monorepo.
- Run
pnpm changeset
to trigger the Changeset CLI. - Follow the instructions when prompted.
- Changeset are added as
.md
files within the/.changeset
directory. - You may edit or revise a Changeset before your PR is merged.
Changesets use semantic versioning. We recommend the following convention.
Version | Role |
---|---|
major | Do not use. Reserved for maintainers only. |
minor | For notable changes, such as a new feature. |
patch | For small changes, such as a fixing a typo. |
Changeset descriptions will appear verbatim on the Changelog. Keep it short, semantic, and and include the same branch prefix.
Tooling
Skeleton makes use of the following technology to improve the developer experience. It’s recommended you run these tools before flagging the PR as “ready for review”.
Root Commands
Run the following commands in the monorepo root to recursively check each PNPM workspace project:
pnpm check
- triggers each project’s respective diagnostic tooling, such a Svelte Check.pnpm format
- triggers Prettier to automatically format code to the defined rulesets.pnpm lint
- triggers ES Lint to check for any pending linting issues.pnpm test
- runs all available unit test using Vitest.
Local Commands
Additionally, you may also run the local instance of each command. Consult the local package.json
for available options. For format
and lint
commands, use the following syntax to draw from the global configuration, but isolate to the current PNPM workspace:
VS Code Extensions
We recommend the use of VS Code for contributions, and the following VS Code extensions.