--- title: Prerequisites description: What you need before creating a kreogen project. type: guide --- # Prerequisites ## Required **[Bun](https://bun.sh) 1.3.14 or later.** The template is developed against bun; pnpm and npm are supported, and the CLI rewrites the project for whichever you pick. **Node.js 22 or later.** Some tooling in the chain is not bun-native. **[Docker](https://docs.docker.com/get-docker/).** Postgres, Redis, object storage and a mail catcher all run in `docker compose` locally, so there is nothing to install natively and nothing to sign up for. **Git.** The CLI clones the template at a version tag. ## Optional **[Stripe CLI](https://docs.stripe.com/stripe-cli)** — forwards webhooks to `localhost:3002` while developing payments. `bun dev --filter api` starts the listener automatically when it is installed. ## Accounts None are required to run the project. Every integration is optional and disables cleanly when its key is absent, so you can start with `bun run dev` and add services as you need them. When you do want them: | Service | Enables | | ------------------------------------------------ | ---------------------------- | | [PostHog](https://posthog.com) | Product analytics and flags | | [Google Analytics](https://analytics.google.com) | Web analytics | | [Resend](https://resend.com) | Outbound email in production | | [Stripe](https://stripe.com) | Payments | | [BaseHub](https://basehub.com) | Blog and legal content | | [Knock](https://knock.app) | In-app notifications | Locally, MinIO stands in for object storage, so S3 is not needed during development. Resend is the exception worth knowing about early, and the one you can skip. Outbound mail goes through its HTTPS API in production; with no token, `@kreogen/auth` delivers over SMTP to the Mailpit container in `docker-compose.yml` instead, and you read the verification link at [localhost:8025](http://localhost:8025). What you cannot skip is having one or the other: email verification is required to sign in, so a sign-up with no Resend token and no sink running fails outright. See [transactional email](/en/docs/packages/email). ## What you do need to decide **A domain layout.** Authentication is simplest when the app and marketing site share a registrable domain — `app.example.com` and `example.com`. Cookies stay host-only, and there is no CORS to configure. Splitting them across unrelated domains forces `SameSite=None` and full CORS, which is a materially weaker posture and one that browser changes keep eroding. Decide this before buying domains. --- For a semantic overview of all documentation, see [/sitemap.md](/sitemap.md) For an index of all available documentation, see [/llms.txt](/llms.txt)