Custom Admin Panel Location
Payload is flexible about where your Admin Panel lives within your Next.js application. You can customize routes, move folders, and organize your project structure to match your application's needs.
Common Use Cases
- Custom admin routes - Change
/adminto/dashboard,/cms, etc. - Nested admin panels - Place Payload at
/admin/contentalongside custom admin routes - Multiple admin interfaces - Organize Payload and custom dashboards together
- Organizational preferences - Match your team's folder structure conventions
Understanding the Payload Folder Structure
By default, Payload creates this structure in your Next.js app:
(payload)/- Parent folder containing all Payload-related routesadmin/- Admin Panel UI routesapi/- REST API routeslayout.tsx- Root layout that imports the import mapimportMap.js- Auto-generated file mapping component paths (regenerated on startup)
Scenario 1: Simple Route Change
To change the admin route from /admin to /dashboard:
1. Update your Payload Config:
2. Move the folder:
3. Update the import path in layout.tsx:
Edit app/(payload)/layout.tsx and update the import map reference to match the new folder name:
4. Restart your dev server
Payload will now be available at /dashboard.
Scenario 2: Moving the Entire Payload Folder (Admin Panel and API)
To move both the Payload Admin Panel and API under a custom path, you move the entire (payload) folder. This example places everything under /admin/content.
1. Update your Payload Config with all routes and import map settings:
2. Move the (payload) folder:
3. Update the import path in layout.tsx:
Edit app/admin/content/(payload)/layout.tsx:
The import path should be relative from layout.tsx to importMap.js. In this case, it remains './admin/importMap.js'.
4. Regenerate the import map:
Your Payload admin is now at /admin/content/admin and the API at /admin/content/api.
Scenario 3: Multiple Admin Dashboards
If you want both Payload and custom admin routes under /admin:
Folder Structure:
Configuration:
Understanding Auto-Generated Files
Not all files in the (payload) folder are auto-generated. Here's what you need to know:
File | Auto-Generated? | Safe to Edit? | When Regenerated? | Notes |
|---|---|---|---|---|
| No | Yes | Never | Created once during setup. Safe to modify import paths. |
| Yes | No | Startup, HMR, manual command | Always regenerated. Configure via |
| No | Rarely needed | Never | Part of template. Usually no need to edit. |
| No | Rarely needed | Never | Part of template. Usually no need to edit. |
| No | Rarely needed | Never | Part of template. Usually no need to edit. |
| No | Yes | Never | Intended for your custom styles. |
About the "DO NOT MODIFY" Warning
You may see this warning in layout.tsx:
This warning is misleading. The file was generated during initial project setup by create-payload-app, but it is never regenerated by Payload. It is completely safe to modify this file, especially when customizing your folder structure.
Editing layout.tsx Safely
When you move the Payload folder, you'll need to update the import path in layout.tsx:
What you can safely edit:
- Import map path (required when moving folders)
- Custom imports for additional functionality
- Custom SCSS imports
- Server function logic (advanced use cases)
What you should NOT edit:
- The core
RootLayoutusage (required for Payload) - The
serverFunctionpattern (required for Payload to work) - The import map prop to
RootLayout
Import Map Regeneration
The importMap.js file is automatically regenerated in these scenarios:
- Application startup - Every time you start your dev server or production build
- Hot Module Replacement (HMR) - When you save changes to component files in development
- Manual generation - When you run
pnpm payload generate:importmap
The import map is never regenerated during:
- Normal runtime (only at startup)
- After the production build completes
Troubleshooting
Import map not found error
If you see an error about the import map not being found:
- Verify
admin.importMap.importMapFilepoints to the correct location - Run
pnpm payload generate:importmapmanually - Check that the path is absolute, not relative
Layout.tsx import error
If you see an import error in layout.tsx:
- Verify the import path is relative from
layout.tsxtoimportMap.js - Use
./admin/importMap.jsif importMap is in a siblingadminfolder - Use
./importMap.jsif you moved importMap to the same folder as layout
Admin panel 404 error
If the admin panel returns 404:
- Verify
routes.adminmatches your actual folder structure - Ensure you moved the entire
(payload)folder, not justadmin - Check that Next.js is recognizing your new routes
Components not loading
If custom components aren't loading:
- Verify
admin.importMap.baseDiris correct - Regenerate the import map:
pnpm payload generate:importmap - Check component paths in your config are relative to
baseDir
Additional Resources
Was this page helpful?