diff --git a/gatsby-config.js b/gatsby-config.js
index ed377f7e3f52fa09ad041ea0a2ba8be3c2bc2415..974c880a88000e0738d45fe6530160cc909226c6 100644
--- a/gatsby-config.js
+++ b/gatsby-config.js
@@ -83,7 +83,8 @@ module.exports = {
         },
       },
     },
-    /*{
+    /*
+    {
       resolve: `gatsby-plugin-typesense`,
       options: {
         publicDir: `./public`, // Required
@@ -144,8 +145,8 @@ module.exports = {
           ],
         },
       },
-    }, */
-
+    },
+    */
     // this (optional) plugin enables Progressive Web App + Offline functionality
     // To learn more, visit: https://gatsby.dev/offline
     // `gatsby-plugin-offline`,
diff --git a/index.d.ts b/index.d.ts
index 834494ef7e5b71a8ce43d59a771a951c72130aab..427d44c10deea0bbfd0034a50c45db55cee21584 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -38,7 +38,7 @@ export function Button(props: ButtonProps): JSX.Element;
 interface CardProps {
   title?: string;
   content?: string;
-  image?: string | IGatsbyImageData;
+  image?: string;
   to?: string;
   anime?: boolean;
   layout?: "top" | "left";
@@ -93,6 +93,12 @@ export function Carousel(props: Image): JSX.Element;
 interface SearchProps {}
 export function Search(props: SearchProps): JSX.Element;
 
+interface IMenu {}
+export function Menu(props: IMenu): JSX.Element;
+
+interface IMenuMobile {}
+export function MenuMobile(props: IMenu): JSX.Element;
+
 interface Ilogo {
   to?: string;
   className?: string;
@@ -126,13 +132,6 @@ interface HeroProps {
  */
 export function Hero(props: HeroProps): JSX.Element;
 
-interface CardListProps {
-  cards?: CardProps[];
-  layout?: 'row' | 'col' | 'grid';
-  className?: string;
-  anime?: boolean;
-}
-export function CardList(props: CardListProps): JSX.Element;
 interface MapProps {
   idMap: number;
 }
@@ -158,5 +157,12 @@ interface ImageProps {
   classname?: string;
 }
 export function Image(props: ImageProps): JSX.Element;
+interface CardListProps {
+  cards?: CardProps[];
+  layout?: 'row' | 'col' | 'grid';
+  className?: string;
+  anime?: boolean;
+}
+export function CardList(props: CardListProps): JSX.Element;
 
 declare module "@onegeo/gatsby-theme-onegeo";
diff --git a/index.js b/index.js
index eb7ba980893aad243385c68aedf2cd768b10b6f1..1c5c3698d755a54276700a0ecb55bb7f2b54ba2e 100644
--- a/index.js
+++ b/index.js
@@ -15,6 +15,7 @@ export { default as Toc } from "./src/components/core/Toc";
 export { default as Map } from "./src/components/core/Map";
 export { default as Image } from "./src/components/core/Image";
 export {default as Stats} from "./src/components/Stats";
+export { default as CardList } from "./src/components/core/CardList";
 
 // Feature components
 export { default as Hero } from "./src/components/Hero";
@@ -26,3 +27,8 @@ export { default as Carousel } from "./src/components/core/Carousel";
 // Logo components
 export { default as Logo } from "./src/components/core/Logo";
 
+// Menu components
+export { default as Menu } from "./src/components/core/Menu";
+
+// Menu components
+export { default as MenuMobile } from "./src/components/core/MenuMobile";
diff --git a/src/components/core/Menu.tsx b/src/components/core/Menu.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..0c482e83dcc45baa7ca51e6c1ed87578c1b96102
--- /dev/null
+++ b/src/components/core/Menu.tsx
@@ -0,0 +1,73 @@
+import React from "react";
+
+const Menu = () => {
+  const menu = [
+    {
+      title: "Decouvrir",
+    },
+    {
+      title: "Actualités",
+    },
+    {
+      title: "A propos",
+    },
+    {
+      title: "Mentions légales",
+    },
+    {
+      title: "Parents",
+      subMenu: [
+        {
+          title: "sousmenu1",
+        },
+        {
+          title: "sousmenu2",
+        },
+      ],
+    },
+  ];
+
+  return (
+    <>
+        {/* MENU MOBILE */}
+        <ul className="menu menu-horizontal p-0">
+            {menu.map((item: any, key: number) => {
+                return (
+                <li key={key}>
+                    <a>
+                    {item.title}
+                    {item.subMenu && (
+                        <svg
+                        className="fill-current"
+                        xmlns="http://www.w3.org/2000/svg"
+                        width="20"
+                        height="20"
+                        viewBox="0 0 24 24"
+                        >
+                        <path d="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z" />
+                        </svg>
+                    )}
+                    </a>
+                    {item.subMenu && (
+                    <ul className="p-2 z-50 bg-slate-200">
+                        {item.subMenu.map((itemsm: any, idx: number) => {
+                        return (
+                            <li key={idx}>
+                            <a className="text-neutral-content hover:bg-submenu active:bg-allsubmenu z-50">
+                                {itemsm.title}
+                            </a>
+                            </li>
+                        );
+                        })}
+                    </ul>
+                    )}
+                </li>
+                );
+            })}
+        </ul>
+        {/* END MENU MOBILE */}
+    </>
+  );
+};
+
+export default Menu;
diff --git a/src/components/core/MenuMobile.tsx b/src/components/core/MenuMobile.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..0d566f56c10b66cc41527bdf8eb42c00fc795954
--- /dev/null
+++ b/src/components/core/MenuMobile.tsx
@@ -0,0 +1,74 @@
+import React from "react";
+
+const MenuMobile = () => {
+  const menu = [
+    {
+      title: "Decouvrir",
+    },
+    {
+      title: "Actualités",
+    },
+    {
+      title: "A propos",
+    },
+    {
+      title: "Mentions légales",
+    },
+    {
+      title: "Parents",
+      subMenu: [
+        {
+          title: "sousmenu1",
+        },
+        {
+          title: "sousmenu2",
+        },
+      ],
+    },
+  ];
+
+  return (
+    <>
+      {/* MENU CLASSIQUE */}
+      <ul
+        tabIndex={0}
+        className="menu menu-compact dropdown-content mt-3 p-2 shadow bg-base-100 rounded-box w-52 z-50"
+      >
+        {menu.map((item: any, key: number) => {
+          return (
+            <li key={key}>
+              <a>
+                {item.title}
+                {item.subMenu && (
+                  <svg
+                    className="fill-current"
+                    xmlns="http://www.w3.org/2000/svg"
+                    width="24"
+                    height="24"
+                    viewBox="0 0 24 24"
+                  >
+                    <path d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z" />
+                  </svg>
+                )}
+              </a>
+              {item.subMenu && (
+                <ul className="p-2 z-10">
+                  {item.subMenu.map((itemsm: any, idx: number) => {
+                    return (
+                      <li key={idx}>
+                        <a>{itemsm.title}</a>
+                      </li>
+                    );
+                  })}
+                </ul>
+              )}
+            </li>
+          );
+        })}
+      </ul>
+      {/* END MENU CLASSIQUE */}
+    </>
+  );
+};
+
+export default MenuMobile;
diff --git a/src/pages-doc/doc/core/index.tsx b/src/pages-doc/doc/core/index.tsx
index 0d2f83c7b5d534220b2a692825c77ce1f27e5873..1298832ca84c6b1a4c7c51689e181d6bbf28e55e 100644
--- a/src/pages-doc/doc/core/index.tsx
+++ b/src/pages-doc/doc/core/index.tsx
@@ -29,6 +29,8 @@ function index(): ReactElement {
         <br></br>
         <Link to="/doc/core/logo">Logo</Link>
         <br></br>
+        <Link to="/doc/core/menu">Menu</Link>
+        <br></br>
         <Link to="/doc/core/image">Image</Link>
         <br></br>
         <Link to="/doc/core/stats">Stats</Link>
diff --git a/src/pages-doc/doc/core/menu.tsx b/src/pages-doc/doc/core/menu.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..270f5dd90686446b725001102bb57e9822ba27fe
--- /dev/null
+++ b/src/pages-doc/doc/core/menu.tsx
@@ -0,0 +1,65 @@
+import React from 'react'
+import { Content } from "@onegeo/gatsby-theme-onegeo";
+import { Menu, MenuMobile } from "@onegeo/gatsby-theme-onegeo";
+import { Link } from "gatsby";
+
+const menu = () => {
+  return (
+    <Content>
+      <div className="prose">
+        <Link to="/doc/core">Retour</Link>
+
+        <h1>Menu</h1>
+        <h2>Props</h2>
+        <div className="mockup-code">
+          <pre>
+            <code>
+              {`const menu = [
+    {
+      title: "Decouvrir",
+    },
+    {
+      title: "Actualités",
+    },
+    {
+      title: "A propos",
+    },
+    {
+      title: "Mentions légales",
+    },
+    {
+      title: "Parents",
+      subMenu: [
+        {
+          title: "sousmenu1",
+        },
+        {
+          title: "sousmenu2",
+        },
+      ],
+    },
+  ];`}
+            </code>
+          </pre>
+        </div>
+
+        <h2>Example</h2>
+      </div>
+      <div className='mt-5'>
+        <h3 className='underline underline-offset-1'>Menu classique</h3>
+        <div className="flex gap-6 m-4">
+          <Menu />
+        </div>
+      </div>
+
+      <div>
+        <h3 className='underline underline-offset-1'>Menu mobile</h3>
+        <div className="flex gap-6 m-4">
+          <MenuMobile />
+        </div>
+      </div>
+    </Content>
+  )
+}
+
+export default menu