# next-starter: a Next.js 16 template with the whole toolchain already wired together

> next-starter is a Next.js 16 starter template that arrives with the decisions already made, from Drizzle and Neon through NextAuth and Stripe to Biome, Husky, Jest and Playwright, with a T3 style env layer, next-intl, shadcn/ui and a dark mode. The point is that nothing needs configuring before you write a feature, and the cost is that the stack is now yours to keep.

**Skolaczk/next-starter** — A Next.js starter template, packed with features like TypeScript, Tailwind CSS, Next-auth, Biome, Stripe, testing tools and more. Jumpstart your project with efficiency and style.

- Repository: https://github.com/Skolaczk/next-starter
- Website: https://next-starter-skolaczk.vercel.app/
- Stars: 1,000 · Forks: 171
- Language: TypeScript
- License: MIT
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/skolaczk-next-starter

## What the template includes, and the argument behind the list

The feature list is long, and the choices are opinionated in a way that tells you who this is for. Next.js 16 with the App Router and cache components, React 19, TypeScript, Tailwind CSS 4 with class sorting, merging and linting, shadcn/ui for customizable components, and Lucide icons. Then the parts that usually take a day each, Stripe as a payment handler, NextAuth with a GitHub provider, Drizzle as the ORM, Zod for schema validation, and Neon as the database. The testing story is doubled up, with Jest and React Testing Library configured for unit testing and Playwright configured for end to end. And the quality tooling is complete, with Biome as a fast formatter and linter, Husky and lint-staged running scripts on staged files before commit, commitlint for commit messages, GitHub Actions linting on pull requests, and T3-env managing environment variables. The summary claim is a perfect Lighthouse score, with a sitemap and robots.txt included.

## Three ways to clone it, and the two commands before you can run anything

There are three ways to start, and they produce the same thing. You can use the repository as a GitHub template, which is the button in the README. You can use create-next-app with the -e flag pointing at the repository, so npx create-next-app -e with the URL and a project name. Or you can git clone the repository and rename the directory. Then there are two steps before the dev server is useful. You run npm install, and you create a .env file from the .env.example, filling in the variables it lists. And you run npm run prepare, which the README says is required if you want husky to work, and that script is the husky install. The dev server itself is npm run dev, and the app is on localhost:3000. Node.js 22 or newer is the requirement, and the engines field in the package manifest says the same.

```bash
npx create-next-app -e https://github.com/Skolaczk/next-starter my-project-name

npm install
npm run prepare
npm run dev
```

## The environment file, which is where the real setup work is

The .env.example in the repository is the honest inventory of what you have to supply, and it is worth reading before you clone. DATABASE_URL is required for Drizzle, with a note pointing at Neon for a free PostgreSQL database. APP_URL is required for next-sitemap and for Stripe. GITHUB_ID and GITHUB_SECRET are required for next-auth, along with NEXTAUTH_SECRET, and the file links a generator for a 32 character secret, and NEXTAUTH_URL is only required for localhost. The Stripe block is four variables, the secret key, the webhook secret, a subscription price id and the publishable key. GOOGLE_SITE_VERIFICATION_ID is there but marked not required. So a working install needs a database, a GitHub OAuth app, a Stripe account with a price, and a secret, which is a real afternoon of setup and the main reason to read this file before committing to the template.

```dotenv
DATABASE_URL='your database url' ## required for drizzle
APP_URL='your app url' ## required for next-sitemap and stripe
GITHUB_ID='your github client ID' ## required for next-auth
GITHUB_SECRET='your github secret ID' ## required for next-auth
NEXTAUTH_SECRET='your next-auth secret' ## required for next-auth
STRIPE_SECRET_KEY='your stripe secret key' ## required for stripe
```

## The project structure, and where the two test suites live

The directory tree in the README is short and tells you the conventions. At the root there is a .github folder for workflows, a .husky folder for the git hooks, a drizzle folder for the Drizzle migrations and metadata, a drizzle.config.ts for Drizzle Kit, a public folder for assets, and src. Inside src there is __tests__ holding both the unit and the end to end tests, an actions folder for server actions, an app folder for the Next.js App Router, a components folder for React components, a lib folder for functions and utilities, a styles folder, and env.mjs as the environment variables config file. The two test suites sharing a folder is a small detail, and a useful one, because the Jest config, jest.config.js and jest.setup.js, and the Playwright config, playwright.config.ts, sit at the root next to each other. There is also a messages/ directory for the next-intl translations, a components.json for the shadcn/ui configuration, a biome.json, a commitlint.config.cjs, a next.config.ts, a postcss.config.mjs and a typed.d.ts.

## The scripts, which are the template's real interface

The scripts overview is worth reading because it is the surface you will use daily. The dev script runs the development server with Turbopack, build runs next build, start runs the production server, and preview runs build and start together. The linting is entirely Biome, with lint, lint:fix, format:check, format:write, check and check:fix, and no ESLint and Prettier anywhere, which is a deliberate choice rather than an omission, and it is why the dependency list has no prettier and no eslint packages. typecheck runs tsc with noEmit, so types are checked separately from the bundler. The tests are jest for unit tests with a watch mode variant, and playwright test for end to end with a --ui variant. The postbuild script generates the sitemap, and prepare installs Husky for managing the git hooks. The husky configuration in the package manifest wires a pre-commit hook to lint-staged, and lint-staged runs biome check --write over the staged file types, so formatting and linting happen on commit rather than in a separate pass.

## The dependency set, and the versions that will bind you

The package manifest is where the template's opinions become constraints. Next is pinned to 16.4.0, React to 19.3.0, and Drizzle to 0.45.4 with the Neon serverless driver. Auth is next-auth at a 5.0.0 beta, and the auth adapter is @auth/drizzle-adapter, so the session store lives in the same database as the application data. Stripe is at 23.0.0 with the stripe-js client, Zod at 4.6.5, and next-intl at 4.14.9 for translations, with next-themes for dark mode and the T3 env package for typed environment variables. The dev dependencies are Biome 2.5.15, Playwright, the Tailwind 4 PostCSS plugin, testing-library for React, and the commitlint packages. Two of those pins deserve attention before you build on this. A next-auth beta is a moving target, and a Next.js patch pin means your own dependency updates will conflict with the template until you relax it.

## Deployment, and what the demo does not tell you

The deployment section is a single Vercel button, with a deploy-with-Vercel link that clones the repository into a new project. That is the easy path and it works because the template targets the platform that Next.js was built for. The Vercel deployment, however, needs the same environment variables as a local install, so a database, a GitHub OAuth app and a Stripe account are still on your list, and a one click deploy does not remove them. There is also a hosted demo of the template at the vercel app domain. The repository is MIT licensed with the licence in LICENSE.md, the author is Michał Skolak, and the release history is v2.0.0 on 2025-06-14, v2.1.0 on 2025-08-02 and v2.2.0 on 2026-08-09, so the line has been stable for a while and the current major features are Next 16 and the newer Biome.

## Conclusion

next-starter suits a developer or small team starting a Next.js product who would rather begin with a working authentication, database, payments and test setup than assemble one, and who is prepared to delete the parts they do not need. It is the wrong choice if you want a minimal starting point, because almost everything in the list is opinionated and wired together, and a poor fit for an existing application, since the value is in starting rather than in merging. Before you adopt it, read the .env.example, because eleven variables across database, auth and Stripe all have to be set before the app is coherent, and note that the template pins a next-auth beta and a Next.js patch version, so a dependency bump in your own project will pull against it.

## FAQ

### What is the next-starter Next.js template?

It is a Next.js starter template packed with features, including TypeScript, Tailwind CSS, NextAuth, Biome, Stripe and testing tools, meant to let you jumpstart a project without configuring the toolchain. It ships Next.js 16 with the App Router, React 19, shadcn/ui, Drizzle with Neon, Zod, next-intl and dark mode, and it is MIT licensed.

### How do I get started with next-starter?

You can use the repository as a GitHub template, run npx create-next-app -e with the repository URL and a project name, or clone it with git. Then run npm install, copy .env.example to .env and fill in the variables, run npm run prepare to install Husky, and start the dev server with npm run dev, which serves the app on http://localhost:3000/. Node.js 22 or newer is required.

### What environment variables does next-starter need?

The .env.example lists DATABASE_URL for Drizzle, APP_URL for next-sitemap and Stripe, GITHUB_ID and GITHUB_SECRET with NEXTAUTH_SECRET for next-auth, NEXTAUTH_URL for localhost, and four Stripe variables, the secret key, webhook secret, subscription price id and publishable key. GOOGLE_SITE_VERIFICATION_ID is present but marked not required.

### Which linting and formatting tools does next-starter use?

Biome alone, with lint, lint:fix, format:check, format:write, check and check:fix scripts, and Husky with lint-staged running biome check --write over staged files on a pre-commit hook. There is no ESLint and no Prettier in the dependency list. There is also a separate typecheck script running tsc with noEmit and a commitlint configuration for commit messages.

### How are tests set up in next-starter?

There are two suites, with Jest and React Testing Library configured for unit tests and Playwright configured for end to end, and both live in the src/__tests__ directory. The scripts are test, test:watch, e2e and e2e:ui, and the configs sit at the repository root as jest.config.js with jest.setup.js and playwright.config.ts.

## Sources

- [License: MIT](https://github.com/Skolaczk/next-starter/blob/main/LICENSE)
- [Project website](https://next-starter-skolaczk.vercel.app/)
- [README](https://github.com/Skolaczk/next-starter/blob/main/README.md)
- [Releases](https://github.com/Skolaczk/next-starter/releases)
- [Skolaczk/next-starter on GitHub](https://github.com/Skolaczk/next-starter)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/skolaczk-next-starter
