diff --git a/src/components/extension.svelte b/src/components/extension.svelte
new file mode 100644
index 0000000..ec329fb
--- /dev/null
+++ b/src/components/extension.svelte
@@ -0,0 +1,67 @@
+
+
+
+
+
+
{data.name}
+
+ {data.description}
+
+
+
+
diff --git a/src/routes/extensions/+page.svelte b/src/routes/extensions/+page.svelte
new file mode 100644
index 0000000..7d84dc8
--- /dev/null
+++ b/src/routes/extensions/+page.svelte
@@ -0,0 +1,127 @@
+
+
+
+ Extensions - Svgl
+
+
+
+
+
+
+
+
+
+ Extensions
+
+
+
+ Integrate SVGL with your favorite tools and apps to streamline your
+ workflow. Created by the community.
+
+
+
+
+
+
+
+
+
+ {#each filteredExtensions as extension (extension.id)}
+
+ {/each}
+
+
+
diff --git a/src/routes/extensions/+page.ts b/src/routes/extensions/+page.ts
new file mode 100644
index 0000000..a78a65d
--- /dev/null
+++ b/src/routes/extensions/+page.ts
@@ -0,0 +1,22 @@
+import type { Load } from "@sveltejs/kit";
+
+import { extensionsData } from "@/data";
+import { searchExtensionsWithFuse } from "@/utils/searchWithFuse";
+
+export const load: Load = ({ url }) => {
+ const searchParam = url.searchParams.get("search") || "";
+ let filteredExtensions = [...extensionsData];
+
+ if (searchParam) {
+ const fuseSearch = searchExtensionsWithFuse(extensionsData);
+ filteredExtensions = fuseSearch
+ .search(searchParam)
+ .map((result) => result.item);
+ }
+
+ return {
+ searchTerm: searchParam,
+ initialExtensions: filteredExtensions,
+ allExtensions: extensionsData,
+ };
+};