diff --git a/docs/app/page.tsx b/docs/app/page.tsx
index 32382de304..ee45e76020 100644
--- a/docs/app/page.tsx
+++ b/docs/app/page.tsx
@@ -1,9 +1,9 @@
import Link from "next/link";
-import {} from "better-auth/client";
import Section from "@/components/landing/section";
import Hero from "@/components/landing/hero";
import { Separator } from "@/components/ui/separator";
import { FeaturesSectionDemo } from "@/components/blocks/features-section-demo-3";
+import Features from "@/components/features";
export default function HomePage() {
return (
@@ -15,6 +15,7 @@ export default function HomePage() {
id="hero"
>
+
);
diff --git a/docs/components/display-techstack.tsx b/docs/components/display-techstack.tsx
new file mode 100644
index 0000000000..6174622bda
--- /dev/null
+++ b/docs/components/display-techstack.tsx
@@ -0,0 +1,44 @@
+import { cn } from "@/lib/utils";
+import { techStackIcons } from "./techstack-icons";
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipProvider,
+ TooltipTrigger,
+} from "@/components/ui/tooltip";
+
+
+type TechStackIconType = {
+ [key: string]: {
+ name: string;
+ icon: any;
+ };
+};
+export const TechStackDisplay = ({
+ skills,
+ className,
+}: {
+ skills: string[];
+ className?: string;
+}) => {
+ return (
+
+ {skills.map((icon) => {
+ return (
+
+
+
+
+ {techStackIcons[icon].icon}
+
+
+
+ {techStackIcons[icon].name}
+
+
+
+ );
+ })}
+
+ );
+};
\ No newline at end of file
diff --git a/docs/components/features.tsx b/docs/components/features.tsx
new file mode 100644
index 0000000000..d4b45b8474
--- /dev/null
+++ b/docs/components/features.tsx
@@ -0,0 +1,225 @@
+"use client";
+import {
+ CheckIcon,
+ Globe2Icon,
+ PlugIcon,
+ PlugZap2Icon,
+ Plus,
+ RabbitIcon,
+ ShieldCheckIcon,
+ Webhook,
+ XIcon,
+} from "lucide-react";
+import {
+ LockClosedIcon,
+} from "@radix-ui/react-icons";
+import Link from "next/link";
+import { Button } from "./ui/button";
+import React, { useState } from "react";
+import { TechStackDisplay } from "./display-techstack";
+import { Ripple } from "./ripple";
+
+
+export default function Features() {
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ Supports popular frameworks
+
+
+
+
+ Supports your favorite frontend, backend and meta frameworks, including React, Vue, Svelte, Solid, Next.js, Nuxt.js, Hono, and more{" "}
+
+ Learn more
+
+
+
+
+
+
+
+
+
+
+
+
+ Email & Password Authentication
+
+
+
+
+ Builtin support for email and password authentication, with secure password hashing and account management features{" "}
+
+ Learn more
+
+
+
+
+
+
+
+
+
+
+
+
+ Support multiple providers.
+
+
+
+
+ Allow users to sign in with their accounts, including Github, Google, Discord, Twitter, and more.{" "}
+
+ Learn more
+
+
+
+
+
+
+
+
+
+
+ 2FA right out of the box.
+
+
+
+
+ Supports your favorite frontend, backend and meta frameworks, including React, Vue, Svelte, Solid, Next.js, Nuxt.js, Hono, and more,
+ {" "}
+
+ Learn more
+
+
+
+
+
+
+
+
Organization & Access Control
+
+
+
+
+
+ Gain and manage access.
+
+
+
+
+ Manage users and their access to resources within your application.{" "}
+
+ Learn more
+
+
+
+
+
+
+
+
+
+
+ Pluggable with custom.
+
+
+
+
+
+ Enhance your application with our official plugins and those created by the community.{" "}
+
+ Learn more
+
+
+
+
+
+
+
+
+
+ Start in a minute and. accelerate with 10x speed
+
+
+
+
+
+
+ Start now!
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/docs/components/icons.tsx b/docs/components/icons.tsx
index d5a819f5ed..cea363301d 100644
--- a/docs/components/icons.tsx
+++ b/docs/components/icons.tsx
@@ -1,6 +1,7 @@
export const Icons = {
- nextJS: () => (
+ nextJS: ({className}: {className?:string}) => (
),
- nuxt: () => (
+ nuxt: ({className}: {className?:string}) => (
),
- svelteKit: () => (
+ svelteKit: ({className}: {className?:string}) => (
),
- solidStart: () => (
+ solidStart: ({className}: {className?:string}) => (
),
- react: () => (
+ react: ({className}: {className?:string}) => (
),
- hono: () => (
+ hono: ({className}: {className?:string}) => (
+ {Array.from({ length: numCircles }, (_, i) => {
+ const size = mainCircleSize + i * 70;
+ const opacity = mainCircleOpacity - i * 0.03;
+ const animationDelay = `${i * 0.06}s`;
+ const borderStyle = i === numCircles - 1 ? "dashed" : "solid";
+ const borderOpacity = 5 + i * 5;
+
+ return (
+
+ );
+ })}
+
+ );
+});
\ No newline at end of file
diff --git a/docs/components/techstack-icons.tsx b/docs/components/techstack-icons.tsx
new file mode 100644
index 0000000000..c91ad5b435
--- /dev/null
+++ b/docs/components/techstack-icons.tsx
@@ -0,0 +1,36 @@
+
+import {Icons} from './icons'
+type TechStackIconType = {
+ [key: string]: {
+ name: string;
+ icon: any;
+ };
+ };
+export const techStackIcons: TechStackIconType = {
+ nextJs: {
+ name: "Nextjs",
+ icon: ,
+ },
+ nuxt: {
+ name: "Nuxt",
+ icon: ,
+ },
+ svelteKit: {
+ name: "Svelte Kit",
+ icon: ,
+ },
+ solidStart: {
+ name: "Solid Start",
+ icon: ,
+ },
+ react: {
+ name: "Reaact",
+ icon: ,
+ },
+ hono: {
+ name: "Hono",
+ icon: ,
+ },
+
+
+ };
\ No newline at end of file
diff --git a/docs/content/changelog/changelog.mdx b/docs/content/changelog/changelog.mdx
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/package.json b/docs/package.json
index 3b198c6429..b7b18ea328 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -41,7 +41,7 @@
"@tsparticles/engine": "^3.5.0",
"@tsparticles/react": "^3.0.0",
"@tsparticles/slim": "^3.5.0",
- "better-auth": "^0.0.8-beta.6",
+ "better-auth": "workspace:*",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
"cmdk": "1.0.0",
diff --git a/docs/tailwind.config.js b/docs/tailwind.config.js
index 09dc410b74..3a06d1ea24 100644
--- a/docs/tailwind.config.js
+++ b/docs/tailwind.config.js
@@ -102,6 +102,14 @@ export default {
},
},
keyframes: {
+ ripple: {
+ "0% , 100%": {
+ transform: "translate(-50% , -50%) scale(1)",
+ },
+ "50%": {
+ transform: "translate(-50% , -50%) scale(0.9)",
+ },
+ },
"accordion-down": {
from: {
height: "0",
@@ -122,6 +130,7 @@ export default {
animation: {
"accordion-down": "accordion-down 0.2s ease-out",
"accordion-up": "accordion-up 0.2s ease-out",
+ ripple: "ripple var(--duration,2s) ease calc(var(--i, 0)*.2s) infinite",
},
},
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8755fe8fd3..b7bcacd9ff 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -109,7 +109,7 @@ importers:
version: 0.6.0
better-auth:
specifier: ^0.0.8-beta.6
- version: link:../../packages/better-auth
+ version: 0.0.8-beta.25(@vue/devtools-api@6.6.3)(react@18.3.1)(solid-js@1.8.21)(typescript@5.5.4)(vue@3.5.1(typescript@5.5.4))
oslo:
specifier: ^1.2.1
version: 1.2.1
@@ -589,7 +589,7 @@ importers:
specifier: ^3.5.0
version: 3.5.0
better-auth:
- specifier: ^0.0.8-beta.6
+ specifier: workspace:*
version: link:../packages/better-auth
class-variance-authority:
specifier: ^0.7.0
@@ -2735,7 +2735,7 @@ packages:
'@expo/bunyan@4.0.1':
resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==}
- engines: {node: '>=0.10.0'}
+ engines: {'0': node >=0.10.0}
'@expo/cli@0.18.29':
resolution: {integrity: sha512-X810C48Ss+67RdZU39YEO1khNYo1RmjouRV+vVe0QhMoTe8R6OA3t+XYEdwaNbJ5p/DJN7szfHfNmX2glpC7xg==}
@@ -5415,6 +5415,10 @@ packages:
arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+ argon2@0.31.2:
+ resolution: {integrity: sha512-QSnJ8By5Mth60IEte45w9Y7v6bWcQw3YhRtJKKN8oNCxnTLDiv/AXXkDPf2srTMfxFVn3QJdVv2nhXESsUa+Yg==}
+ engines: {node: '>=14.0.0'}
+
argon2@0.41.1:
resolution: {integrity: sha512-dqCW8kJXke8Ik+McUcMDltrbuAWETPyU6iq+4AhxqKphWi7pChB/Zgd/Tp/o8xRLbg8ksMj46F/vph9wnxpTzQ==}
engines: {node: '>=16.17.0'}
@@ -5580,6 +5584,10 @@ packages:
resolution: {integrity: sha512-PR1bR6zbgNRkSHZAPQQEqaHpHMyASXwBU2IbDY60gDWJO72d3wBSCiOKQcSGJRxJ55O9jitHVMHqHcAtC0++0A==}
hasBin: true
+ better-auth@0.0.8-beta.25:
+ resolution: {integrity: sha512-UPXF+77OG7FkpQCqCO3qA8wWja3VptKsLkS0k8EEFyL3WwVncpJfysJg2BqSMUjxAkHoGZnSCq6tuFMMxTLzlA==}
+ hasBin: true
+
better-call@0.1.0:
resolution: {integrity: sha512-CfLBgWyReKx2fXJb0OkNV0/ot8BMO+HDRKJRCidIGuCBkk07d7NzVZR4BnnOy02Jiuh4x3l5oupKQGXw78fqSA==}
peerDependencies:
@@ -5590,6 +5598,11 @@ packages:
peerDependencies:
typescript: ^5.6.0-beta
+ better-call@0.2.0:
+ resolution: {integrity: sha512-a2NFJP2BBnUzyaHHwDldUBc4mr3V0czleV4t0Di9e2zewzFVNdCY1m5ZugbIhzY1b5xoUN8R1yMhyZFDuZh2aA==}
+ peerDependencies:
+ typescript: ^5.6.0-beta
+
better-opn@3.0.2:
resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==}
engines: {node: '>=12.0.0'}
@@ -17815,6 +17828,15 @@ snapshots:
arg@5.0.2: {}
+ argon2@0.31.2:
+ dependencies:
+ '@mapbox/node-pre-gyp': 1.0.11
+ '@phc/format': 1.0.0
+ node-addon-api: 7.1.1
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
argon2@0.41.1:
dependencies:
'@phc/format': 1.0.0
@@ -18085,6 +18107,53 @@ snapshots:
- typescript
- vue
+ better-auth@0.0.8-beta.25(@vue/devtools-api@6.6.3)(react@18.3.1)(solid-js@1.8.21)(typescript@5.5.4)(vue@3.5.1(typescript@5.5.4)):
+ dependencies:
+ '@better-fetch/fetch': 1.1.4
+ '@better-fetch/logger': 1.1.3
+ '@chronark/access-policies': 0.0.2
+ '@nanostores/query': 0.3.4(nanostores@0.11.2)
+ '@nanostores/react': 0.7.3(nanostores@0.11.2)(react@18.3.1)
+ '@nanostores/solid': 0.4.2(nanostores@0.11.2)(solid-js@1.8.21)
+ '@nanostores/vue': 0.10.0(@vue/devtools-api@6.6.3)(nanostores@0.11.2)(vue@3.5.1(typescript@5.5.4))
+ '@noble/ciphers': 0.6.0
+ '@noble/hashes': 1.4.0
+ '@paralleldrive/cuid2': 2.2.2
+ '@simplewebauthn/browser': 10.0.0
+ '@simplewebauthn/server': 10.0.1
+ arctic: 2.0.0-next.5
+ argon2: 0.31.2
+ better-call: 0.2.0(typescript@5.5.4)
+ better-sqlite3: 11.1.2
+ chalk: 5.3.0
+ commander: 12.1.0
+ consola: 3.2.3
+ defu: 6.1.4
+ dotenv: 16.4.5
+ jiti: 1.21.6
+ jose: 5.7.0
+ kysely: 0.27.4
+ mysql2: 3.11.0
+ nanostores: 0.11.2
+ oauth4webapi: 2.12.0
+ ora: 8.0.1
+ oslo: 1.2.1
+ pg: 8.12.0
+ prompts: 2.4.2
+ tiny-glob: 0.2.9
+ ts-morph: 23.0.0
+ zod: 3.23.8
+ transitivePeerDependencies:
+ - '@nanostores/logger'
+ - '@vue/devtools-api'
+ - encoding
+ - pg-native
+ - react
+ - solid-js
+ - supports-color
+ - typescript
+ - vue
+
better-call@0.1.0(typescript@5.5.4):
dependencies:
'@better-fetch/fetch': 1.1.4
@@ -18107,6 +18176,14 @@ snapshots:
set-cookie-parser: 2.7.0
typescript: 5.6.0-beta
+ better-call@0.2.0(typescript@5.5.4):
+ dependencies:
+ '@better-fetch/fetch': 1.1.4
+ '@types/set-cookie-parser': 2.4.10
+ rou3: 0.5.1
+ set-cookie-parser: 2.7.0
+ typescript: 5.5.4
+
better-opn@3.0.2:
dependencies:
open: 8.4.2