Skip to Content
Get Started

Get Started

Install dependencies

npm i @chakra-ui/react @emotion/react @adminext/core zod

Setup Chakra UI provider

AdmiNext utilizes Chakra UI as its design system. You need to set up the Chakra UI provider.

Note

Ship this step if you already have Chakra UI provider in your project.

Set up Chakra UI provider in your project following instructions.

Setup Toaster component for notifications

To display notifications, you need to set up the Toaster component from the @adminext/core package in your project. Add the following code to your layout.tsx file.

import { Provider } from '@/components/ui/provider'; import { Toaster } from '@adminext/core/client'; export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { return ( <html lang="en" suppressHydrationWarning> <body> <Provider> <Toaster /> {children} </Provider> </body> </html> ); }

Declare resources

Declare you resources in TS file

import z from 'zod'; import { resource } from '@adminext/core'; export const resources = { posts: resource({ group: 'Content', title: 'Posts', identityBy: 'id', pages: { list: { loader: async () => { const posts = await fetchPosts(); // Put your fetch logic here return { data: posts }; }, columns: [ { accessorKey: 'id', header: 'ID', enableColumnFilter: false }, { accessorKey: 'title', header: 'Title', filterFn: 'includesString' }, ], }, new: { schema: z.object({ title: z.string(), }), actions: { submit: async (data) => { await createPost(data); // Put your create logic here }, }, }, edit: { schema: z.object({ title: z.string(), }), actions: { submit: async (data) => { await updatePost(data); // Put your update logic here }, }, }, }, }), };

AdmiNext can works with any backends. You can just declare your fetch, create, update, delete server actions.

See examples for:

  • Prisma ORM
  • Drizzle ORM
  • React Query

Create admin panesl pages

Create admin panels pages in your project

import { DataProvider } from '@adminext/core/server'; import { RouteProps } from '@adminext/core'; import { resources } from '../resources.ts'; import { AdmiNext } from '@adminext/core/client'; export default async function Home(props: RouteProps) { return ( <DataProvider resources={resources} routeProps={props}> {(data) => ( <AdmiNext resourcesDefinition={resources} routePrefix="admin" {...data} /> )} </DataProvider> ); }

Run your project

npm run dev
Last updated on