--- title: 'How to Create an Admin UI Route' description: 'Learn how to create a new route in the admin dashboard.' addHowToData: true badge: variant: orange text: beta --- In this document, you’ll learn how to create a new route in the admin dashboard. ## Overview You can customize the admin dashboard that Medusa provides to add new routes. This is useful if you want to add new subpages to the admin dashboard, or you want to add new pages that appear in the sidebar as well. An admin UI route is essentially a React Component created under the `src/admin/routes` directory. This guide explains how to create a new route in the admin dashboard with some examples. :::note If you want to create a page under the Settings page, please refer to [this documentation](./setting-pages.md) instead. ::: --- ## Prerequisites It’s assumed you already have a Medusa backend with the admin plugin installed before you move forward with this guide. If not, you can follow [this documentation page](../create-medusa-app.mdx) to install a Medusa project. Furthermore, Admin UI Routes are currently available as a beta feature. So, you must install the `beta` version of the `@medusajs/admin` and `@medusajs/medusa` packages: ```bash npm2yarn npm install @medusajs/admin@beta @medusajs/medusa@beta ``` ### (Optional) TypeScript Preparations Since routes are React components, they should be written in `.tsx` or `.jsx` files. If you’re using Typescript, you need to make some adjustments to avoid Typescript errors in your Admin files. This section provides recommended configurations to avoid any TypeScript errors. :::note These changes may already be available in your Medusa project. They're included here for reference purposes. ::: First, update your `tsconfig.json` with the following configurations: ```json title=tsconfig.json { "compilerOptions": { "target": "es2019", "module": "commonjs", "allowJs": true, "checkJs": false, "jsx": "react-jsx", "declaration": true, "outDir": "./dist", "rootDir": "./src", "experimentalDecorators": true, "emitDecoratorMetadata": true, "noEmit": false, "strict": false, "moduleResolution": "node", "esModuleInterop": true, "resolveJsonModule": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": ["src/"], "exclude": [ "dist", "build", ".cache", "tests", "**/*.spec.js", "**/*.spec.ts", "node_modules", ".eslintrc.js" ] } ``` The important changes to note here are the inclusion of the field `"jsx": "react-jsx"` and the addition of `"build"` and `“.cache”` to `exclude`. The addition of `"jsx": "react-jsx"` specified how should TypeScript transform JSX, and excluding `build` and `.cache` ensures that TypeScript ignores build and development files. Next, create the file `tsconfig.server.json` with the following content: ```json title=tsconfig.server.json { "extends": "./tsconfig.json", "compilerOptions": { /* Emit a single file with source maps instead of having a separate file. */ "inlineSourceMap": true }, "exclude": ["src/admin", "**/*.spec.js"] } ``` This is the configuration that will be used to transpile your custom backend code, such as services or entities. The important part is that it excludes `src/admin` as that is where your Admin code will live. Finally, create the file `tsconfig.admin.json` with the following content: ```json title=tsconfig.admin.json { "extends": "./tsconfig.json", "compilerOptions": { "module": "esnext" }, "include": ["src/admin"], "exclude": ["**/*.spec.js"] } ``` This is the configuration that will be used when transpiling your admin code. --- ## Create the Admin UI Route In this section, you’ll learn the basics of creating an admin UI route. ### Step 1: Create File Custom admin UI routes are added under the `src/admin/routes` directory of your Medusa project. The path of the file depends on the path you want the route to be available under. It is based on [Next.js 13’s App Router](https://nextjs.org/docs/app/building-your-application/routing/defining-routes). For example, if you want the route to be available in the admin dashboard under the path `/a/custom` you should create your admin route under the path `src/admin/routes/custom/page.tsx`. :::tip All admin routes are prefixed with `/a` by default. ::: You can also create [dynamic routes](https://nextjs.org/docs/app/building-your-application/routing/dynamic-routes). For example, you can create the route `/a/custom/[id]` by creating an admin router under the path `src/admin/routes/custom/[id]/page.tsx`. ### Step 2: Create React Component in File For an admin route to be valid, it must default export a React component. There are no restrictions on the content of the React component. For example, you can create the file `src/admin/routes/custom/page.tsx` with the following content: ```tsx title=src/admin/routes/custom/page.tsx const CustomPage = () => { return (