diff --git a/examples/with-changesets/.changeset/README.md b/examples/with-changesets/.changeset/README.md
new file mode 100644
index 0000000000000..e5b6d8d6a67ad
--- /dev/null
+++ b/examples/with-changesets/.changeset/README.md
@@ -0,0 +1,8 @@
+# Changesets
+
+Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
+with multi-package repos, or single-package repos to help you version and publish your code. You can
+find the full documentation for it [in our repository](https://github.com/changesets/changesets)
+
+We have a quick list of common questions to get you started engaging with this project in
+[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
diff --git a/examples/with-changesets/.changeset/config.json b/examples/with-changesets/.changeset/config.json
new file mode 100644
index 0000000000000..5b4707422f8e0
--- /dev/null
+++ b/examples/with-changesets/.changeset/config.json
@@ -0,0 +1,11 @@
+{
+ "$schema": "https://unpkg.com/@changesets/config@2.0.0/schema.json",
+ "changelog": "@changesets/cli/changelog",
+ "commit": false,
+ "fixed": [],
+ "linked": [],
+ "access": "public",
+ "baseBranch": "main",
+ "updateInternalDependencies": "patch",
+ "ignore": ["@acme/docs"]
+}
diff --git a/examples/with-changesets/.eslintrc.js b/examples/with-changesets/.eslintrc.js
new file mode 100644
index 0000000000000..f21134d4f4762
--- /dev/null
+++ b/examples/with-changesets/.eslintrc.js
@@ -0,0 +1 @@
+module.exports = require("./packages/eslint-preset-acme");
diff --git a/examples/with-changesets/.github/workflows/release.yml b/examples/with-changesets/.github/workflows/release.yml
new file mode 100644
index 0000000000000..edf2993522ec4
--- /dev/null
+++ b/examples/with-changesets/.github/workflows/release.yml
@@ -0,0 +1,42 @@
+name: Release
+
+on:
+ push:
+ branches:
+ - master
+
+concurrency: ${{ github.workflow }}-${{ github.ref }}
+
+jobs:
+ release:
+ name: Release
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v2
+ with:
+ # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits
+ fetch-depth: 0
+
+ - name: Setup Node.js 16.x
+ uses: actions/setup-node@v2
+ with:
+ node-version: 16.x
+
+ - name: Install Dependencies
+ run: yarn
+
+ - name: Create Release Pull Request or Publish to npm
+ id: changesets
+ uses: changesets/action@v1
+ with:
+ # This expects you to have a script called release which does a build for your packages and calls changeset publish
+ publish: yarn release
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ - name: Send a Slack notification if a publish happens
+ if: steps.changesets.outputs.published == 'true'
+ # You can do something when a publish happens.
+ run: my-slack-bot send-notification --message "A new version of ${GITHUB_REPOSITORY} was published!"
diff --git a/examples/with-changesets/.gitignore b/examples/with-changesets/.gitignore
new file mode 100644
index 0000000000000..1554c1c53a127
--- /dev/null
+++ b/examples/with-changesets/.gitignore
@@ -0,0 +1,13 @@
+.DS_Store
+node_modules
+.turbo
+*.log
+.next
+dist
+dist-ssr
+*.local
+.env
+.cache
+server/dist
+public/dist
+.turbo
diff --git a/examples/with-changesets/README.md b/examples/with-changesets/README.md
new file mode 100644
index 0000000000000..257cca33de954
--- /dev/null
+++ b/examples/with-changesets/README.md
@@ -0,0 +1,76 @@
+# Turborepo Design System starter with Changesets
+
+This is an official React design system starter powered by Turborepo. Versioning and package publishing is handled by [Changesets](https://github.com/changesets/changesets) and fully automated with GitHub Actions.
+
+## What's inside?
+
+This Turborepo includes the following:
+
+### Apps and Packages
+
+- `docs`: A placeholder documentation site powered by [Next.js](https://nextjs.org)
+- `@acme/core`: core React components
+- `@acme/utils`: shared React utilities
+- `@acme/tsconfig`: shared `tsconfig.json`s used throughout the monorepo
+- `eslint-preset-acme`: ESLint preset
+
+Each package and app is 100% [Typescript](https://www.typescriptlang.org/).
+
+### Utilities
+
+This turborepo has some additional tools already setup for you:
+
+- [Typescript](https://www.typescriptlang.org/) for static type checking
+- [ESLint](https://eslint.org/) for code linting
+- [Prettier](https://prettier.io) for code formatting
+
+## Using this example
+
+Run the following command:
+
+```sh
+npx degit vercel/turborepo/examples/design-system design-system
+cd design-system
+yarn install
+git init . && git add . && git commit -m "Init"
+```
+
+### Useful commands
+
+- `yarn build` - Build all packages and the docs site
+- `yarn dev` - Develop all packages and the docs site
+- `yarn lint` - Lint all packages
+- `yarn changeset` - Generate a changeset
+- `yarn clean` - Clean up all `node_modules` and `dist` folders (runs each package's clean script)
+
+### Changing the NPM organization scope
+
+The NPM organization scope for this design system starter is `@acme`. To change this, it's a bit manual at the moment, but you'll need to do the following:
+
+- Rename folders in `packages/*` to replace `acme` with your desired scope
+- Search and replace `acme` with your desired scope
+- Re-run `yarn install`
+
+## Versioning and Publishing packages
+
+Package publishing has been configured using [Changesets](https://github.com/changesets/changesets). Please review their [documentation](https://github.com/changesets/changesets#documentation) to familarize yourself with the workflow.
+
+This example comes with automated npm releases setup in a [GitHub Action](https://github.com/changesets/action). To get this working, you will need to create an `NPM_TOKEN` and `GITHUB_TOKEN` in your repository settings. You should also install the [Changesets bot](https://github.com/apps/changeset-bot) on your GitHub repository as well.
+
+For more information about this automation, refer to the official [changesets documentation](https://github.com/changesets/changesets/blob/main/docs/automating-changesets.md)
+
+### npm
+
+If you want to publish package to the public npm registry and make them publicly available, this is already setup.
+
+To publish packages to a private npm organization scope, **remove** the following from each of the `package.json`'s
+
+```diff
+- "publishConfig": {
+- "access": "public"
+- },
+```
+
+### GitHub Package Registry
+
+See [Working with the npm registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#publishing-a-package-using-publishconfig-in-the-packagejson-file)
diff --git a/examples/with-changesets/apps/docs/.eslintrc.js b/examples/with-changesets/apps/docs/.eslintrc.js
new file mode 100644
index 0000000000000..a757b5e9cde84
--- /dev/null
+++ b/examples/with-changesets/apps/docs/.eslintrc.js
@@ -0,0 +1 @@
+module.exports = require("eslint-preset-acme");
diff --git a/examples/with-changesets/apps/docs/next-env.d.ts b/examples/with-changesets/apps/docs/next-env.d.ts
new file mode 100644
index 0000000000000..4f11a03dc6cc3
--- /dev/null
+++ b/examples/with-changesets/apps/docs/next-env.d.ts
@@ -0,0 +1,5 @@
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/examples/with-changesets/apps/docs/next.config.js b/examples/with-changesets/apps/docs/next.config.js
new file mode 100644
index 0000000000000..da1bb770fb8e6
--- /dev/null
+++ b/examples/with-changesets/apps/docs/next.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ reactStrictMode: true,
+};
diff --git a/examples/with-changesets/apps/docs/package.json b/examples/with-changesets/apps/docs/package.json
new file mode 100644
index 0000000000000..2f525e6014ce9
--- /dev/null
+++ b/examples/with-changesets/apps/docs/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "@acme/docs",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "build": "next build",
+ "start": "next start ",
+ "dev": "next dev -p 3002",
+ "lint": "TIMING=1 next lint",
+ "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next"
+ },
+ "dependencies": {
+ "@acme/core": "*",
+ "@acme/utils": "*",
+ "next": "^12.0.8",
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2"
+ },
+ "devDependencies": {
+ "@acme/tsconfig": "*",
+ "@types/node": "^17.0.12",
+ "@types/react": "^17.0.37",
+ "@types/react-dom": "^17.0.11",
+ "eslint-preset-acme": "*",
+ "typescript": "^4.5.4"
+ }
+}
diff --git a/examples/with-changesets/apps/docs/src/pages/index.tsx b/examples/with-changesets/apps/docs/src/pages/index.tsx
new file mode 100644
index 0000000000000..6c614dd8cce78
--- /dev/null
+++ b/examples/with-changesets/apps/docs/src/pages/index.tsx
@@ -0,0 +1,14 @@
+import { Button } from "@acme/core";
+import { useIsomorphicLayoutEffect } from "@acme/utils";
+
+export default function Docs() {
+ useIsomorphicLayoutEffect(() => {
+ console.log("Acme docs page");
+ }, []);
+ return (
+