Project Initialization Best Practices
When creating new projects, always prefer official CLI tools and scaffolding commands over manually creating files and directories. These tools:
-
Set up correct project structure and config
-
Install dependencies with compatible versions
-
Configure build tools, linting, testing
-
Follow framework best practices
JavaScript/TypeScript
Framework Command
Vite bun create vite or npm create vite@latest
Next.js bunx create-next-app or npx create-next-app@latest
Remix bunx create-remix or npx create-remix@latest
Astro bun create astro or npm create astro@latest
SvelteKit bun create svelte or npm create svelte@latest
Nuxt bunx nuxi init or npx nuxi@latest init
React Native npx @react-native-community/cli init
Expo bunx create-expo-app or npx create-expo-app
Electron npm init electron-app@latest
Tauri bun create tauri-app or npm create tauri-app@latest
TypeScript Package Preference
-
Prefer pnpm as the package manager for TypeScript packages/libraries.
-
Prefer tsdown as the default bundler for TypeScript library packages.
-
If scaffolding with npm/bun CLIs, switch the generated package to pnpm
- tsdown during setup.
Python
Tool Command
uv (recommended) uv init or uv init --lib for libraries
Poetry poetry new <name> or poetry init
PDM pdm init
Hatch hatch new <name>
Django django-admin startproject <name>
Flask Use cookiecutter or manual (minimal structure)
FastAPI Use cookiecutter or fastapi-cli
Other Languages
Language/Framework Command
Rust cargo new <name> or cargo init
Go go mod init <module>
Ruby on Rails rails new <name>
.NET dotnet new <template>
Java (Spring) Use start.spring.io or Spring CLI
Kotlin gradle init or IntelliJ
Monorepo Tools
Tool Command
Turborepo bunx create-turbo or npx create-turbo@latest
Nx bunx create-nx-workspace or npx create-nx-workspace
Lerna npx lerna init
Key Principles
-
Don't manually create config files - Let the CLI generate them
-
Use interactive prompts - Most CLIs ask about TypeScript, linting, testing
-
Check framework docs - Commands change; verify current syntax
-
Prefer package-manager conventions - use pnpm for TypeScript packages unless project constraints require otherwise
-
Use templates - Many CLIs offer starter templates (e.g., --template react-ts )
When Manual Setup is OK
-
Adding to existing monorepo with specific conventions
-
Learning how tools work under the hood
-
Very minimal projects (single script)
-
Custom build requirements not covered by templates