Quick Start
Get your first AppShell application running in minutes.
Prerequisites
- Node.js 16+
- React 19+ (React 18 supported)
- A React project (Vite, Next.js, or any bundler)
Step 1: Install AppShell
bash
# npm
npm install @tailor-platform/app-shell
# yarn
yarn add @tailor-platform/app-shell
# pnpm
pnpm add @tailor-platform/app-shellStep 2: Set Up File-Based Routing (Vite)
Add the appShellRoutes plugin to your vite.config.ts:
typescript
// vite.config.ts
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import tailwindcss from "@tailwindcss/vite";
import { appShellRoutes } from "@tailor-platform/app-shell/vite-plugin";
export default defineConfig({
plugins: [react(), tailwindcss(), appShellRoutes({ entrypoint: "src/App.tsx" })],
});Step 3: Create Your First App
Add AppShell styles to your global CSS file:
css
/* index.css */
@import "tailwindcss";
@import "@tailor-platform/app-shell/styles";Create src/App.tsx:
tsx
// src/App.tsx
import { AppShell, SidebarLayout } from "@tailor-platform/app-shell";
function App() {
return (
<AppShell title="My ERP App">
<SidebarLayout />
</AppShell>
);
}
export default App;Create your first page at src/pages/page.tsx:
tsx
// src/pages/page.tsx
const HomePage = () => {
return (
<div className="astw:p-8">
<h1 className="astw:text-2xl astw:font-bold">Welcome to AppShell</h1>
</div>
);
};
export default HomePage;Step 4: Run
bash
npm run devNavigate to / - you should see your page with automatic sidebar navigation.
Add Nested Pages
Create pages by adding directories and page.tsx files:
src/pages/
├── page.tsx → /
├── dashboard/
│ ├── page.tsx → /dashboard
│ └── orders/
│ ├── page.tsx → /dashboard/orders
│ └── [id]/
│ └── page.tsx → /dashboard/orders/:idtsx
// src/pages/dashboard/page.tsx
const DashboardPage = () => {
return (
<div className="astw:p-8">
<h1 className="astw:text-xl astw:font-bold">Dashboard</h1>
</div>
);
};
export default DashboardPage;tsx
// src/pages/dashboard/orders/[id]/page.tsx
import { useParams } from "@tailor-platform/app-shell";
const OrderDetailPage = () => {
const { id } = useParams();
return (
<div className="astw:p-8">
<h2 className="astw:text-xl astw:font-bold">Order #{id}</h2>
</div>
);
};
export default OrderDetailPage;AppShell automatically generates sidebar navigation and breadcrumbs.
Learn more about File-Based Routing →
Framework-Specific Notes
Next.js (App Router)
Next.js does not support file-based routing with the Vite plugin. Use the module-based approach instead:
tsx
// app/dashboard/[[...props]]/page.tsx
"use client";
import { AppShell, SidebarLayout, defineModule } from "@tailor-platform/app-shell";
const dashboardModule = defineModule({
path: "home",
component: () => <div>Home</div>,
meta: { title: "Home" },
});
export default function Page() {
return (
<AppShell title="My App" basePath="dashboard" modules={[dashboardModule]}>
<SidebarLayout />
</AppShell>
);
}See Modules & Resources for the module-based API.
Next Steps
- File-Based Routing - Define pages via directory structure
- Routing & Navigation - Navigation hooks
- Authentication - Set up user authentication
- Sidebar Navigation - Customize sidebar menus
- Styling & Theming - Theming and Tailwind CSS configuration
- Modules & Resources - Legacy module-based routing