Installation

This page covers system requirements, all supported installation methods, production build configuration, and the path alias system used throughout the project.

System requirements

RequirementMinimumRecommended
Node.js18.x20.x LTS (pinned in .nvmrc)
pnpm9.x9.15.x (declared in packageManager)
npm9.xLatest stable
yarn1.22.xLatest stable
RAM4 GB8 GB
OSmacOS, Linux, Windows (WSL2)macOS or Linux

Install dependencies

bash
pnpm install

npm

bash
npm install

yarn

bash
yarn install

Development server

bash
# pnpm
pnpm dev
 
# npm
npm run dev
 
# yarn
yarn dev

Vite starts at http://localhost:5173 by default with full HMR.

Production build

The build script runs TypeScript compilation followed by Vite's bundler:

bash
# pnpm
pnpm build
 
# npm
npm run build
 
# yarn
yarn build

This executes tsc && vite build. Output is written to the dist/ directory at the project root.

Preview the production build

After building, you can serve the dist/ output locally to verify it before deployment:

bash
# pnpm
pnpm preview
 
# npm
npm run preview
 
# yarn
yarn preview

vite preview serves the production bundle at http://localhost:4173.

Configuration approach

The central config entry point is src/config/index.ts:

typescript
// src/config/index.ts
import { createJumboTheme } from '@jumbo/utilities/helpers';
import { footerTheme } from '../themes/footer/default';
import { headerTheme } from '../themes/header/default';
import { mainTheme } from '../themes/main/default';
import { sidebarTheme } from '../themes/sidebar/default';
 
export const CONFIG = {
  THEME: createJumboTheme(mainTheme, headerTheme, sidebarTheme, footerTheme),
};

Layout defaults live in src/config/layouts/default.ts and are consumed by StretchedLayout.

Path aliases

The project defines three path aliases in vite.config.ts and mirrors them in tsconfig.json:

AliasResolves toUsage
@/./src/Application source code
@jumbo/./@jumbo/First-party layout and component framework
@assets/./@assets/Fonts and static assets
typescript
// vite.config.ts
export default defineConfig({
  resolve: {
    alias: [
      { find: '@jumbo',  replacement: resolve(__dirname, './@jumbo') },
      { find: '@assets', replacement: resolve(__dirname, './@assets') },
      { find: '@',       replacement: resolve(__dirname, './src') },
    ],
  },
});

Always use these aliases in import statements — never use relative paths that traverse directory boundaries.

typescript
// Good
import { CONFIG } from '@/config';
import { JumboLayout } from '@jumbo/components';
import '@assets/fonts/noir-pro/styles.css';
 
// Bad
import { CONFIG } from '../../../config';

Verification checklist

After installation and starting the dev server, confirm:

  • http://localhost:5173 redirects to the login page
  • Login with demo@example.com / zab#723 succeeds and shows the dashboard
  • The sidebar navigation renders correctly
  • The dark/light theme toggle in the header works
  • No TypeScript errors appear (pnpm build completes without errors)
  • No errors in the browser console