rtk-quickstart
v1.0.2
Published
CLI to scaffold a production-ready React project with Redux Toolkit + RTK Query preconfigured
Maintainers
Readme
rtk-quickstart
GitHub: https://github.com/Dhruv-007/RTK-Query-Package · Documentation: README.md
Scaffold a production-ready React project with Redux Toolkit + RTK Query — in one command.
npx rtk-quickstart my-appNo more repetitive boilerplate. Get a clean store, base API, typed hooks, and scalable folder structure out of the box.
Quick Start
# JavaScript (default)
npx rtk-quickstart my-app
# TypeScript
npx rtk-quickstart my-app --typescript
# TypeScript + Auth module
npx rtk-quickstart my-app --typescript --authThen:
cd my-app
npm run devYour app opens at http://localhost:3000 with a working RTK Query demo fetching users from JSONPlaceholder.
CLI Options
| Flag | Description |
| ----------------- | ------------------------------------------------------------------ |
| --typescript | Use TypeScript template (aliased as --ts) |
| --auth | Include auth module — token storage, auto headers, login/logout |
| --skip-install | Skip npm install (useful in CI or monorepos) |
Generated Folder Structure
my-app/
├── index.html
├── package.json
├── vite.config.js # or .ts with --typescript
├── .env.example
├── .gitignore
└── src/
├── main.jsx # App entry with Provider + Store
├── App.jsx # Demo component using RTK Query
├── index.css
├── app/
│ └── store.js # configureStore with middleware
├── services/
│ ├── baseApi.js # createApi with fetchBaseQuery + auth headers
│ └── userApi.js # Example API slice with injectEndpoints
├── hooks/
│ └── reduxHooks.js # Typed useAppDispatch & useAppSelector
└── features/ # (with --auth flag)
└── authSlice.js # Token persistence, login/logout actionsWith --auth, you also get services/authApi.js with login/register mutation endpoints.
What's Included
Store (src/app/store.js)
configureStorewith RTK Query middleware- Redux DevTools enabled in development
Base API (src/services/baseApi.js)
createApiwithfetchBaseQuery- Base URL from
VITE_API_BASE_URLenv variable - Auto-attaches
Authorization: Bearer <token>from localStorage - Tag-based cache invalidation ready
Example API (src/services/userApi.js)
getUsersandgetUserByIdquery endpoints- Auto-generated hooks:
useGetUsersQuery,useGetUserByIdQuery - Cache tags configured
Typed Hooks (src/hooks/reduxHooks.js)
useAppDispatchanduseAppSelector— pre-typed for TypeScript projects
Auth Module (opt-in with --auth)
- authSlice —
setCredentials,logoutactions, localStorage persistence - authApi —
loginandregistermutation endpoints - Selectors:
selectCurrentUser,selectIsAuthenticated
Adding a New API Slice
Create a new file in src/services/:
// src/services/postApi.js
import { baseApi } from "./baseApi";
export const postApi = baseApi.injectEndpoints({
endpoints: (builder) => ({
getPosts: builder.query({
query: () => "/posts",
}),
}),
});
export const { useGetPostsQuery } = postApi;Use it in any component — no extra store configuration needed.
Environment Variables
Copy .env.example to .env and set your API base URL:
VITE_API_BASE_URL=https://your-api.example.comTech Stack
- React 19 (via Vite)
- Redux Toolkit 2.x
- RTK Query
- Vite 6
Publishing (for maintainers)
npm login
npm publishAuthor
Dhruv Johari — Frontend Engineer | React | RTK Query | Product Builder
License
MIT
