From 23e099f931893c924455d5a254d245495f8a3db5 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Tue, 12 Nov 2024 15:05:20 -0500 Subject: [PATCH 01/82] start draft --- docs/accountless.mdx | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 docs/accountless.mdx diff --git a/docs/accountless.mdx b/docs/accountless.mdx new file mode 100644 index 0000000000..2ac636bc88 --- /dev/null +++ b/docs/accountless.mdx @@ -0,0 +1,44 @@ +--- +title: Accountless Mode +description: Learn about Clerk's Acccountless Mode. +--- + +**Accountless Mode** is a special onboarding path for starting to use Clerk. It allows you to try out Clerk in your local development environment without having to sign-up for a Clerk account first. + +## How does it work? + +If Clerk's SDK doesn't detect valid [Clerk keys](TODO) in your environment, it will automatically fetch a set of keys for you. These keys are associated with a Clerk development instance that has a default configuration. + +### Default configuration + +Clerk development instances have the following default configuration: + +* **Authentication**: Email and password, Sign-in with Google +* **Verification**: Email verification is required +* **Password reset**: Password reset is enabled +* **MFA**: MFA is disabled +* **Appearance**: Default appearance + +When using Clerk in Accountless Mode, you're not able to make configuration changes to your instance. To make changes, [claim your instance](#claiming-accountless-keys). + + +## Accountless Mode support + +### Clerk SDKs + +Accountless Mode is useful when you want to quickly try out Clerk in your local development environment without having to sign-up for a Clerk account first. It works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs), [Remix](/docs/quickstarts/remix), [RedwoodJS](/docs/quickstarts/redwood) and [Tanstack Start](/docs/quickstarts/tanstack-start). + +### Code sandbox environments + +Accountless mode also works in the following code sandbox environments: + +* TODO +* Replit +* CodeSandbox +* StackBlitz + +## Claiming accountless keys + +When you're ready to make configuration changes to your instance, you can claim your accountless keys. To do this, click the "Claim your instance" button in the Clerk UI on your local development. You'll then be prompted to sign-up for a Clerk account, or sign-in if you already have one. From there, the keys will be associated with your account. + +You'll need to copy and paste the keys into your `.env` file to persist them in your project. This will disable Accountless mode. \ No newline at end of file From 75925634e45dc3ebffa353d9978feb947d89189b Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Wed, 13 Nov 2024 12:35:57 -0500 Subject: [PATCH 02/82] remove specific code sandboxes for now --- docs/accountless.mdx | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/accountless.mdx b/docs/accountless.mdx index 2ac636bc88..7d0297f6d3 100644 --- a/docs/accountless.mdx +++ b/docs/accountless.mdx @@ -33,9 +33,6 @@ Accountless Mode is useful when you want to quickly try out Clerk in your local Accountless mode also works in the following code sandbox environments: * TODO -* Replit -* CodeSandbox -* StackBlitz ## Claiming accountless keys From 782731d2bee6486e4297a0e74b36261370127530 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Mon, 25 Nov 2024 15:06:00 -0500 Subject: [PATCH 03/82] Remove codesandbox section --- docs/accountless.mdx | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/docs/accountless.mdx b/docs/accountless.mdx index 7d0297f6d3..750bd05dfa 100644 --- a/docs/accountless.mdx +++ b/docs/accountless.mdx @@ -3,11 +3,11 @@ title: Accountless Mode description: Learn about Clerk's Acccountless Mode. --- -**Accountless Mode** is a special onboarding path for starting to use Clerk. It allows you to try out Clerk in your local development environment without having to sign-up for a Clerk account first. +**Accountless Mode** allows you to try out Clerk in your local development environment without having to sign-up for a Clerk account first. ## How does it work? -If Clerk's SDK doesn't detect valid [Clerk keys](TODO) in your environment, it will automatically fetch a set of keys for you. These keys are associated with a Clerk development instance that has a default configuration. +If Clerk's SDK doesn't detect valid [Clerk keys](TODO) in your environment, it will automatically fetch a set of keys for you. These keys are associated with a Clerk development instance that has a default configuration. When running locally in Accountless Mode, you'll see a banner indicating that you're running in this special mode with a link to claim your ### Default configuration @@ -28,12 +28,6 @@ When using Clerk in Accountless Mode, you're not able to make configuration chan Accountless Mode is useful when you want to quickly try out Clerk in your local development environment without having to sign-up for a Clerk account first. It works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs), [Remix](/docs/quickstarts/remix), [RedwoodJS](/docs/quickstarts/redwood) and [Tanstack Start](/docs/quickstarts/tanstack-start). -### Code sandbox environments - -Accountless mode also works in the following code sandbox environments: - -* TODO - ## Claiming accountless keys When you're ready to make configuration changes to your instance, you can claim your accountless keys. To do this, click the "Claim your instance" button in the Clerk UI on your local development. You'll then be prompted to sign-up for a Clerk account, or sign-in if you already have one. From there, the keys will be associated with your account. From f535b871f7607c6586aa9a20e3979dfff100784c Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Mon, 25 Nov 2024 16:35:13 -0500 Subject: [PATCH 04/82] update to keyless --- docs/accountless.mdx | 35 ----------------------------------- docs/keyless.mdx | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 35 deletions(-) delete mode 100644 docs/accountless.mdx create mode 100644 docs/keyless.mdx diff --git a/docs/accountless.mdx b/docs/accountless.mdx deleted file mode 100644 index 750bd05dfa..0000000000 --- a/docs/accountless.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Accountless Mode -description: Learn about Clerk's Acccountless Mode. ---- - -**Accountless Mode** allows you to try out Clerk in your local development environment without having to sign-up for a Clerk account first. - -## How does it work? - -If Clerk's SDK doesn't detect valid [Clerk keys](TODO) in your environment, it will automatically fetch a set of keys for you. These keys are associated with a Clerk development instance that has a default configuration. When running locally in Accountless Mode, you'll see a banner indicating that you're running in this special mode with a link to claim your - -### Default configuration - -Clerk development instances have the following default configuration: - -* **Authentication**: Email and password, Sign-in with Google -* **Verification**: Email verification is required -* **Password reset**: Password reset is enabled -* **MFA**: MFA is disabled -* **Appearance**: Default appearance - -When using Clerk in Accountless Mode, you're not able to make configuration changes to your instance. To make changes, [claim your instance](#claiming-accountless-keys). - - -## Accountless Mode support - -### Clerk SDKs - -Accountless Mode is useful when you want to quickly try out Clerk in your local development environment without having to sign-up for a Clerk account first. It works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs), [Remix](/docs/quickstarts/remix), [RedwoodJS](/docs/quickstarts/redwood) and [Tanstack Start](/docs/quickstarts/tanstack-start). - -## Claiming accountless keys - -When you're ready to make configuration changes to your instance, you can claim your accountless keys. To do this, click the "Claim your instance" button in the Clerk UI on your local development. You'll then be prompted to sign-up for a Clerk account, or sign-in if you already have one. From there, the keys will be associated with your account. - -You'll need to copy and paste the keys into your `.env` file to persist them in your project. This will disable Accountless mode. \ No newline at end of file diff --git a/docs/keyless.mdx b/docs/keyless.mdx new file mode 100644 index 0000000000..c0901fa1fb --- /dev/null +++ b/docs/keyless.mdx @@ -0,0 +1,40 @@ +--- +title: Keyless Mode +description: Learn about Clerk's Keyless Mode. +--- + +**Keyless Mode** allows you to try out Clerk in your local development environment without having to sign-up for a Clerk account. + +## How does it work? + +If Clerk's SDK doesn't detect valid [Clerk keys](TODO) in your environment, it will automatically fetch a set of keys for you. These keys are associated with a Clerk development instance that has a default configuration. When running locally in Keyless Mode, you'll see a banner indicating that you're running in this special mode with a link to claim your instance by signing up for a Clerk account, or signing in if you already have one. + +Keys are written to a file in your project's `.clerk` directory. Ensure that this directory is added your `.gitignore` file to prevent keys from being committed to your repository. + +### Default configuration + +Clerk development instances have the following default configuration: + +- **Authentication**: Email and password, Sign-in with Google +- **Verification**: Email verification is required +- **Password reset**: Password reset is enabled +- **MFA**: MFA is disabled +- **Appearance**: Default appearance + +When using Clerk in Keyless Mode, you're not able to make configuration changes to your instance. To make changes, [claim your instance](#claiming-keyless-keys). + +## Keyless Mode support + +Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs), [Remix](/docs/quickstarts/remix), [RedwoodJS](/docs/quickstarts/redwood) and [Tanstack Start](/docs/quickstarts/tanstack-start). If you're using a different framework or SDk, you'll need to manually configure Clerk keys in your environment. Visit the [Clerk Dashboard](https://dashboard.clerk.com/sign-up) to create an account, create an instance and get your keys. + +Keyless mode _may_ work in other environments, but it's not officially supported. + +## Claiming keyless keys + +When you're ready to make configuration changes to your instance, you can claim the keys that were created automatically. To do this, click the "Claim your instance" button in the Clerk toolbar on your localhost. You'll then be prompted to sign-up for a Clerk account, or sign-in if you already have one. From there, you can give your Clerk application a name and the keys will be associated with your account. + +You'll need to copy and paste the keys into your `.env` file to persist them in your project. This will disable Keyless mode. + +## Feedback + +If you have any feedback or questions about Keyless Mode, please reach out to [Clerk Support](https://clerk.com/contact/support). From ae9a80e416fa1395dfb431ca33e0cf1091acf4b8 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Mon, 25 Nov 2024 16:42:16 -0500 Subject: [PATCH 05/82] remove redwood reference --- docs/keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index c0901fa1fb..941429782c 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -25,7 +25,7 @@ When using Clerk in Keyless Mode, you're not able to make configuration changes ## Keyless Mode support -Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs), [Remix](/docs/quickstarts/remix), [RedwoodJS](/docs/quickstarts/redwood) and [Tanstack Start](/docs/quickstarts/tanstack-start). If you're using a different framework or SDk, you'll need to manually configure Clerk keys in your environment. Visit the [Clerk Dashboard](https://dashboard.clerk.com/sign-up) to create an account, create an instance and get your keys. +Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs), [Remix](/docs/quickstarts/remix), and [Tanstack Start](/docs/quickstarts/tanstack-start). If you're using a different framework or SDk, you'll need to manually configure Clerk keys in your environment. Visit the [Clerk Dashboard](https://dashboard.clerk.com/sign-up) to create an account, create an instance and get your keys. Keyless mode _may_ work in other environments, but it's not officially supported. From e93e616eff8ef07325e14dd682c266ebf7f36867 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Mon, 2 Dec 2024 09:25:50 -0500 Subject: [PATCH 06/82] fix heading --- docs/keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 941429782c..f59f1e1f37 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -29,7 +29,7 @@ Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs), [R Keyless mode _may_ work in other environments, but it's not officially supported. -## Claiming keyless keys +## Claiming keys When you're ready to make configuration changes to your instance, you can claim the keys that were created automatically. To do this, click the "Claim your instance" button in the Clerk toolbar on your localhost. You'll then be prompted to sign-up for a Clerk account, or sign-in if you already have one. From there, you can give your Clerk application a name and the keys will be associated with your account. From b72a48208398ae12635c04f4769481eabdd67749 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Tue, 10 Dec 2024 09:55:59 -0500 Subject: [PATCH 07/82] copy update Co-authored-by: Bryce Kalow --- docs/keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index f59f1e1f37..4fb8247caa 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -3,7 +3,7 @@ title: Keyless Mode description: Learn about Clerk's Keyless Mode. --- -**Keyless Mode** allows you to try out Clerk in your local development environment without having to sign-up for a Clerk account. +**Keyless Mode** allows you to try out Clerk in your local development environment without having to sign up for a Clerk account. ## How does it work? From 8f17db6947560c9c35c4fd4dc74bd0da190d3ffa Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Tue, 10 Dec 2024 09:56:11 -0500 Subject: [PATCH 08/82] copy update Co-authored-by: Bryce Kalow --- docs/keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 4fb8247caa..7e84e16dec 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -9,7 +9,7 @@ description: Learn about Clerk's Keyless Mode. If Clerk's SDK doesn't detect valid [Clerk keys](TODO) in your environment, it will automatically fetch a set of keys for you. These keys are associated with a Clerk development instance that has a default configuration. When running locally in Keyless Mode, you'll see a banner indicating that you're running in this special mode with a link to claim your instance by signing up for a Clerk account, or signing in if you already have one. -Keys are written to a file in your project's `.clerk` directory. Ensure that this directory is added your `.gitignore` file to prevent keys from being committed to your repository. +Keys are written to a file in a `.clerk` directory in your project. Ensure that this directory is added your `.gitignore` file to prevent keys from being committed to your repository. ### Default configuration From c7411b71c707f857090449c40ee62a195166a15e Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Tue, 10 Dec 2024 09:57:01 -0500 Subject: [PATCH 09/82] copy update Co-authored-by: Bryce Kalow --- docs/keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 7e84e16dec..168660a52e 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -27,7 +27,7 @@ When using Clerk in Keyless Mode, you're not able to make configuration changes Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs), [Remix](/docs/quickstarts/remix), and [Tanstack Start](/docs/quickstarts/tanstack-start). If you're using a different framework or SDk, you'll need to manually configure Clerk keys in your environment. Visit the [Clerk Dashboard](https://dashboard.clerk.com/sign-up) to create an account, create an instance and get your keys. -Keyless mode _may_ work in other environments, but it's not officially supported. +Keyless Mode _may_ work in other environments or SDKs, but it's not officially supported. ## Claiming keys From 95482d0a7c2abf4b79a3834a201d9de9f3f2a28b Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Tue, 10 Dec 2024 09:57:29 -0500 Subject: [PATCH 10/82] copy update Co-authored-by: Bryce Kalow --- docs/keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 168660a52e..83eb9ff5ed 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -31,7 +31,7 @@ Keyless Mode _may_ work in other environments or SDKs, but it's not officially s ## Claiming keys -When you're ready to make configuration changes to your instance, you can claim the keys that were created automatically. To do this, click the "Claim your instance" button in the Clerk toolbar on your localhost. You'll then be prompted to sign-up for a Clerk account, or sign-in if you already have one. From there, you can give your Clerk application a name and the keys will be associated with your account. +When you're ready to make configuration changes to your instance, you can claim the automatically generated keys. To do this, click the "Claim your instance" button in the Clerk toolbar on your local application. You'll then be prompted to sign up for a Clerk account, or sign in if you already have one. After authenticating, give your application a name and the keys will be associated with your account. You'll need to copy and paste the keys into your `.env` file to persist them in your project. This will disable Keyless mode. From cb0ad0977d4d79f0ec6b4ba1f78076d802eb2674 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Tue, 10 Dec 2024 09:57:41 -0500 Subject: [PATCH 11/82] copy update Co-authored-by: Bryce Kalow --- docs/keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 83eb9ff5ed..4323be32af 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -33,7 +33,7 @@ Keyless Mode _may_ work in other environments or SDKs, but it's not officially s When you're ready to make configuration changes to your instance, you can claim the automatically generated keys. To do this, click the "Claim your instance" button in the Clerk toolbar on your local application. You'll then be prompted to sign up for a Clerk account, or sign in if you already have one. After authenticating, give your application a name and the keys will be associated with your account. -You'll need to copy and paste the keys into your `.env` file to persist them in your project. This will disable Keyless mode. +You'll need to copy and paste the keys into your `.env` file to persist them in your project. This will disable Keyless Mode. ## Feedback From 0c37dfb1876582ce2063c80ce1153f79cfd41d6d Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Fri, 13 Dec 2024 11:21:33 -0500 Subject: [PATCH 12/82] add images and update copy --- docs/keyless.mdx | 20 +++++++++++--------- public/images/keyless/claim-keys.png | Bin 0 -> 64482 bytes public/images/keyless/setting-env-keys.png | Bin 0 -> 64026 bytes 3 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 public/images/keyless/claim-keys.png create mode 100644 public/images/keyless/setting-env-keys.png diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 4323be32af..07de5674d3 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -7,33 +7,35 @@ description: Learn about Clerk's Keyless Mode. ## How does it work? -If Clerk's SDK doesn't detect valid [Clerk keys](TODO) in your environment, it will automatically fetch a set of keys for you. These keys are associated with a Clerk development instance that has a default configuration. When running locally in Keyless Mode, you'll see a banner indicating that you're running in this special mode with a link to claim your instance by signing up for a Clerk account, or signing in if you already have one. +If Clerk's SDK doesn't detect valid [Clerk keys](TODO) in your environment, it will automatically fetch a set of keys for you. These keys are associated with a Clerk development instance that has a default configuration. When running locally in Keyless Mode, you'll see a UI toast indicating that you're running in this special mode with a link to claim your instance by signing up for a Clerk account, or signing in if you already have one. -Keys are written to a file in a `.clerk` directory in your project. Ensure that this directory is added your `.gitignore` file to prevent keys from being committed to your repository. +Keys are written to a file in a `.clerk` directory in your project. The Clerk SDK will try to add this directory to your `.gitignore` file to prevent keys from being committed to your repository. ### Default configuration Clerk development instances have the following default configuration: -- **Authentication**: Email and password, Sign-in with Google +- **Authentication**: Email and password, Sign-in with Google, Sign-in with GitHub - **Verification**: Email verification is required - **Password reset**: Password reset is enabled - **MFA**: MFA is disabled - **Appearance**: Default appearance -When using Clerk in Keyless Mode, you're not able to make configuration changes to your instance. To make changes, [claim your instance](#claiming-keyless-keys). +When using Clerk in Keyless Mode, you're not able to make configuration changes to your instance. To make changes, [claim your instance](#claiming-keys). ## Keyless Mode support -Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs), [Remix](/docs/quickstarts/remix), and [Tanstack Start](/docs/quickstarts/tanstack-start). If you're using a different framework or SDk, you'll need to manually configure Clerk keys in your environment. Visit the [Clerk Dashboard](https://dashboard.clerk.com/sign-up) to create an account, create an instance and get your keys. - -Keyless Mode _may_ work in other environments or SDKs, but it's not officially supported. +Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs). If you're using a different framework or SDk, you'll need to manually configure Clerk keys in your environment. Visit the [Clerk Dashboard](https://dashboard.clerk.com/sign-up) to create an account, create an instance and get your keys. ## Claiming keys -When you're ready to make configuration changes to your instance, you can claim the automatically generated keys. To do this, click the "Claim your instance" button in the Clerk toolbar on your local application. You'll then be prompted to sign up for a Clerk account, or sign in if you already have one. After authenticating, give your application a name and the keys will be associated with your account. +When you're ready to make configuration changes to your instance, you can claim the automatically generated keys. To do this, click the "Claim keys" button in the Clerk toolbar on your local application. You'll then be prompted to sign up for a Clerk account, or sign in if you already have one. After authenticating, give your application a name and the keys will be associated with your account. + +![Claim keys modal](/docs/images/keyless/claim-keys.png) + +You'll need to copy and paste the keys into your `.env` file to persist them in your project. This will disable Keyless Mode. If you don't add keys to your environment, you'll see a warning to let you know the instance has been claimed, but keys haven't been set. -You'll need to copy and paste the keys into your `.env` file to persist them in your project. This will disable Keyless Mode. +![Claimed instance warning](/docs/images/keyless/setting-env-keys.png) ## Feedback diff --git a/public/images/keyless/claim-keys.png b/public/images/keyless/claim-keys.png new file mode 100644 index 0000000000000000000000000000000000000000..4b4a35b0701d272ffbd2ade3727d1e56b5ac76aa GIT binary patch literal 64482 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�rQmQ|Wn-)B)SFcx%p-b9d)n7cU=NhNd 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 literal 0 HcmV?d00001 From 80f0d5616f584347885e40581babad09bcc874d3 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Fri, 13 Dec 2024 13:55:49 -0500 Subject: [PATCH 13/82] update images --- public/images/keyless/claim-keys.png | Bin 64482 -> 41824 bytes public/images/keyless/setting-env-keys.png | Bin 64026 -> 35057 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/keyless/claim-keys.png b/public/images/keyless/claim-keys.png index 4b4a35b0701d272ffbd2ade3727d1e56b5ac76aa..aa72e079b6ea717b8cea06abc5e11c45c3c5b2f2 100644 GIT binary patch literal 41824 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

(Nt_Ha%~4=X;NPrH(1<~v$X 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 agV_9?QM0c{X^+IfkNx4}w&gb7N&g4ByJ_|S literal 64482 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�rQmQ|Wn-)B)SFcx%p-b9d)n7cU=NhNd zr*ffMdWiq9QhO^~HstVXAT5bB2|A$7^Z8@n#~hw(eVmetyz!K+Otb6&@3NEcv-(0h zV(F<*cF%n-eQu7Go&T!;T)*JVdhzn=bx5d;P_TYL-dnyIHjv;kRqCCoyu8vuL7?(D3UcU)ZQS+dJ&2_#Yxlap`#<+ zNV;61@@pZ1)HlP&+07vidHh-s{e=D!MAo72a$-nUk19GIX&a`iWY|4#8dFF1Z7NeB zV?hG$Hhd^OayQ~`XnNcT^$;+}QN|tJ7Ih?j)F_}x^I6Er(y7B^v!_a>JMJ}&KJ7aH zO>=*#6L8F0GbvSE=&@Og)8?vscxNf!)T31DC9|ImuG@|0jY#+TG+m1h&x`eYwgb9F zIz^}=R%0TgtK)^g_IW!PO)_d~gHz_q1j=K|Im_Lv(3bjjMlQgWIr#R2smC8{5E_UZ zGlk%5s8`xyCF2*y`;0PtJ$#uGX08_PXnTMWDxUYYEI5lqQef%Wq0ZxIQXs^9tC0aH zuyA=3h(2p<#CLc30x1(*()nTa^?Ea*k9j@R=JrMFgpK3oux{(aRv8yNm*J_F>8U-5 zAMIsimHOXLcGMTV0q$Lk#Q{;5z+dUVG|nQfW3M}zpFi<9vYF|gQr=NMi4q`pm+6tx z8-FW4^fhFB|A1O3@-@CDajd!WF4AMdv6|*w?jK!t~)m0eT(Z2J-;5Cl5DQtF4{qLvSKh>+aTsK6Z35HpM>nXbhFw)`6+p!H-h@XCR4l`Jeg$Rx;<3D!yFTi2X5v7iBGP z$96lhi1Z?ukToxNF$sn%z(n0aTN{fPGbh5r!)Cz3$IP%XA9-xX|IJmgA7SDC=Q$1* zR+KXq-rs9Wzg(gUN1a zII-3B9v)y}DPpNVQ!)Ty@8l3R0UxKpCC9Ul7g<#JALZK^XSRoZVPgY6Q@QWKZ=Z3I zt*ZuCg3G*(rYeo0J21yL z`%Ca(#Ojf(6i&ihj%A|1hanlfT;c729p*Q9OxS8&lpg;bh=`ilH*mZEe8oHsGmU-A z7+!bW6WGZ7uZ14Uqws%$lftRHk1dJkxcTnP?a9Ai6q%p+?_GEfJUDJd!{fyJ3;*xM zq)M!~{|`MqydM?*9xnsSlPTm-*Wd7J>h8!~=uKvB>}Uh5_5fuhK=@Z5puB zKL2l&`PV44$nkD2MnZKGBLn#UFe?n3!o(&FpWxB1N)`sZjeegh|31NTH1^rn-;}^& z-%iO%5~+F92f2X6r5ejrB$dm1tor{@lnx_0XOPN_TaR3J@^G_=Tf&NGKl;OCF%oQR z;;2xi1qvp4m{r8T$)k$F@QVs$dUeMMM<`Zu;J@%}_=(Olr7UKy0UuV7^Uqt!PgOmd zzy5b$7r&C?c44RD_%*(t^4CBu7w7N!Rh&Cd{~`0m=P4aYGD1c=HzKk~>)r9vZu8c! z#4>-dNl?5O1`77=6~3dNx)EuElL>mk`7C?wpChD-?h>9l$Z)l|9DFdw#sb5NEjy_A z2Wc%1JcnA~a%4VzwAjVdEVqF1KTPnzV|XB}55$wiTPOW1BOr`1!JF3af1(>kf+IF& z+VRSuU7V!T&ySSt6|@TU?yvsod{|86PEdT$DZZNHbqHx_mz= zBB-DEqflWjMBq6h2H)W1SmiRyi7ATgXRD3|Kn6p(QtZ`#@N&UZ1$>Dw%jG%;w`xy} zQ)E9>cA5dwLvFYtCINrw3wy~f?279=bD6a)J`B-%qU@1GQV0Q-@)|?kMVnykPZs7C z$cEZ<{zGkKOqUdCyx^tb`Ys@FOAKXoWnw4qad zkuuDrpq5u9^?6QiEONOCoL3t#f2g-S{V8SAxa8^!px8W6Ek1F2{Wo@9O%!w`FDHse zdY#-eh9PYd!R6+~723YO1_Rm^>{4VA1!cpcA@tQ-5BjbIeMk%J-`9Ft%kKY8*fk|x z9~=GWiuc=3)tD^}PYlq8YH8@N+u6^RJ-$aiHw=zA93=Q_5;y?>v>@YKI;!S&1ODbE z7jBp>Baf#LFj#_l&=6IQAVXA_b@FtU$!VXMUc`vusR6P-PU^#`K)$aYmP-jzt#eL4 z+n9#47~IcdMFDtRjF5LBW*rQr}3|+-mQsMjkTT zf;oUzX6yTek;C}>G{o9!_&12KjPS0n;Fzj|&4S?ZPfhCc2t+;VacQRpq=M8C;C&S% zf~RKt%wX~ZvcySR_>;MRmLQ)#Oj(UK0I@~kZgBENKJkxU(Bkw8Khq<6p-by)$}Evn zCRSXurY~+@73&U|FK(@}e?Zdxl8z1F`x(Szwp9T2@{~7JtZB!Arv7nl9vmjD%i!O^@>aKEO1=(QT=8tzZq7petBWU}8Y~9Up zBV$2hc@@^kVFNiG@BdoG^jRVwTW}xIb(MYs!@(-{8q?r%QF8 zNKzlGSY)zBRk~(FL=87(PM)h#%_vJ>QC5|Jv&qS~(n0wCGi<``7Lc7q%_ z1?HLBaKQG*k%7-Xq#EU~U36}rlXgp}KCfDl4zN(mF0qJpIDuZ3wILqR4#t+u90JXP z7)#E1G6nP{7gBOtPMWj-=J3$7{7US5g&)R~3ue7AC>g0bpG#+?TcxDwKx<@=(`nWX zA%jiY%p78PQ9#h=V|cw(9?lYCMjXSAaXr~VZtZ9k^2(wVe*5!WI-o28-awkmTkhwv zTlII4Wn)29FY;gu(xBy+kXBeeoNk?xI0!vFu+RK9U+)9;=H^fZ+xu+|@bq-@|jf#OSF?*jF z!+S-A%Z_8Kn@F?<9zkk(%n&AVsE_M*?*&^QB{iHR4UgG3%UlThLQhEb{VdYf|5iT& zwR~4?27|z~7Vj1>pSj^oJZl$ye#Uj4WKmIluL7Q8SHb71o+%ayOQ}|d)yHI$6yH@| z04$+~0Z?NLBOy_q=KGaHSofEc*h9A~8);~*K(?L(oM|*^mTy!%cYUX+8-E13cz&nYtht=rs&=tYanHiPMg<|f#gN16|J z6tNV1CI{Ut$$OdY|8o{9y`F2#-~K%bs@J}Rj1w~AuifZ@J|!0X9(ZVyUy(KZw^IE! zYy?EIr!xw1YAnH@K^xssaliIM^PARl1LIl)JGCWen`T~@3&a8;vn?h8n?>QOtq#i3 z@tlV|WIw|GlRLwHA()J>PSxI%GSXwOm zOX^Eb$YCl`F{_$p>8Jgp_V7b$FlmKOf zED3_{80wr7TuAl7%rzoKYb+|FWC7kN`->JY&*s{ojNxHYC3-0U>1)J)ku-!c?`m$w z`X&?pSWS5HN$Pmi{r;d(r&i6l2H!EbJt_kGd{mj7I#K@8X@&q}Y_vr@{%bP-bF|Mn zy3AZd=^U?UEPcif%$+{Hi!*m?u57wKeG-R3uYAT6F8R(^UgEvp#eD%csE-7}lgD`W z$~**R+8qhQEigl!;i*scc5|*1Te$U@*A_@^p9f;m*#cP@gLn8)^y{$9_70LNPb%L8 zkU||8;Zn2c|5sqosgQYRe~}MqY*gC60^3WX{tdeY7@Y-Zgx#H>~|^0HcVT!pRd~|o{|+WvVs-c-u9~-1<3xBpM{~>*?Nih z*NCN|y3vhr%a(qz{inEJ&1Z3vByQ!L{UUw4(Er$_ay5pLgPVWEfw6(}^ zDkgUp(W2ZgQe-&|fi5yGPh8q82i5ti({mp&!y#!0eT~NkEgDs^dE=&0TJ@$z@rjR9T#C4hkEX=uCI z;tL~|?wRMW&73oWGTbnJ-6RhbE6^EF*^j@xyG(6tR^=DDJa$uJJIWdCX^DW>%-x$v z@w>6W`%8`KiF^V%QQzuQe^yp``JkZl>rWSK3AezAj6r`{2Y-1zmD*M9q;{vVyf`9x5 z&s$$B$lG|}+^J7`uF|CQ_V$B?ehMbYihl9Zq3c|@&89@W)-X}MY|2ZLeaO5U-P6&+Nm$v zbKg8dSNx7Si}+xp^T2dU49fLFX}qB^veHxh`8yzDs&pRX#7|OC05&uFEcuJIiGW*C zx6)kpi;a)Eef67BX`cT}CBp`uzI~hrw7X&Ecad|Ecj*joxbrb}_bu3o=OUeTunZi( z-EVTCG|@oXt;AQxo3{;0a62)j&r*$SE8@|vAm(8>OogcxB+CD6vMc4JCCBZP3u9aR zp9Z9x64?-bh1rwT{;WH-$L*JY4^*rc&~}C*=i8k6{z{ijlR0tM;Zn;pYcX}RBk4A% z(`Qa__FUWwOGB=2oIYLckXr?d1>)MpfR6ESx>w&E zci{wI&6}rGU+jCGK1*;LK$NS@Pbdm;*xZ6Z zd_==u6T$LlB8x$(4igwpjJ_XN+!mjb3Pzf{w>LpsVmEgf;e64_duvoLfdd_)*dwIQJdRyp8kY zPtUoS@*eUBBl)3GzPU?WLaU_;NiSVD$HPz~`-g)rtiaB|#xUOxSs>T%jR0-{2h47=Cs==9u|qCO+nCsiJ1I`2w`ay4jD`^D&oC z8=g!{Zan_L5RTI&(N#Qnt_?~uWSVA|skvr{V=X_m@LM2-_QdfU$c_i5WK&pYOR@en z#JZjq=*q+jhyM^f;tUQtKTmgmK^LA#&dTZ_HI&BW6O>OeZ?mFue%mXF*ZNjAAO`rg zzRAiQcKEC@;G^4MVUVfmrY@A@F`hmt-AArQ*9t;KA_*fipF>ubs`t}X&1mTnaq9=DxYoHc+@e|{ZASu43M-u~5B9^|d!y+JUqLakUh zO})XoS5Vkey%xXFwI?{csI((+zg@`UA<8~D_g~I9BkJu`Fv(+AY*fshSfH6WRLNs8 z@BX*chS~y20S@M7FJuYQEYgM%3aM2>ND8>f`SH3q*K7KtRrIZl+72N?x&Lyi8HrdD zSPI+dK4+`2SKJFVXV6L`^5En3Se*DAW6Hsfx2b0_}w*zF&t5Z0DNBy4N z{PAsqGC_kJ3JG74v3xYTA&1Go43oJJf(z%}S}XIo_Wx%&Jn#sVyQ;2d@TVkR%(?Aq zSe@ef7Y&-}aiy)IHUK9d(Hf*myo_%im2<$UENkYRjy?lf=(7?pJgsEl^a>~*-3&V{ z7_gh|%Sy#-?|dfgG$>#2KrHnvR;tv%=AJ{zcMgF zA|^R9pJD0QOC5-oF{4!#iO-0 z@xx2@3F_N-LP55rv@do`V?_vzO>E!2YW==wTfc-{zAQ-)TdA5sdj{=X7kGY}fk*w8 zKYi=ruOO0NH>1H$_TzZ2kxc^L(uwmph!VRLZ8S_N3rV@t;t9B%JJ18@)${fyi1Iqx z7x}VRP*?dd!E1pRe3kWj!dMNHeCw_@uzbRj`D8XFyZoikxZYbG>Y?c5EFSs9)qK2JA%A0#HZz^ zbg7$)MFMg*?7yBv`$n4IdK!k@ylQT`OK6K(`y^BlM?}z*g~x@pi@TbxV_YIqr;Dp* z{m!RSS?726Nv#s(iFAGMond4tbM5`>yds{;^p5vay1{iD&Pb z5sQ<+m#%(F>Yw)x@pqgfKLNjco-O#%I_3qx;hqGxp>&x-{xEoA@ppvukjfdVh z_%)o*3LR^AeKJixTVCA}5KAePp&kR59_GT2*c>He5%k&T@4Py+&zLC2)men?QNGWy zu`d!izF!eWXe~SNz|pzpgVW%1$5^h#uSgrBIaNQymzav2>^$USLV7Bq#A&0!Ckx_B z#wU>YlJ*jAi+A|BZbbgq{Vdm7bpUM>W$sCZBQ+*{wLRyk8at{l_QIh+>6#Y7~p)Bq~p#^<`}*H|#E`71K;qX@@Pe zjZV+;2_1PxNd3F|MFt~TGLH9uu|(U1x|TnqaSKH32_Ysi$^O(EMsW z^v3ZVzlY@78_w)^pIr7pabw||MRYFV0C%=Ba|6Y9z5t;mYTilnc=p=g1Pc8$1 zmM13ykcS7YWXd9VgCwOG!qHqZ@8eMd-!Q@0l;n_jq>W)eJ!nd}VqAp(#vuzR0i^<= zQjBQ`nLN5a(t1d7^wYD3(8Z4g{S;I7HnQ}c4ByT39+q}A`Nr6~xOBbehu`_~-OFjo zvJii{|Cnts74|Hl=vIGn!e+gQn*MAP>p1nqYEXuSIg9Vm*_4L`y6Fg~zJhsbK8gvT zhq7xCa6|!HDi)Re4OQ79F?X65gE8`qb%TPf$F|G(VYHHRm`JWr8YBB29D1^wn-9qqZkA z;xdTC)Dm$K+IJ?Mn5x#osd+Q6G6jc65-yccTx`!u6l>Kh=b$;~5^8t-{*61SvatY9apt%^ppDVc}UNck# z&Ln0ntqFpO<-Xj(B)->@od<3qC_d|&2Ls|l*ki^$)gdS4$bOE*oxvK9y&5r&)I-i;3^92M^b*aDv%?suP%$vWk~X_Mq!+ z%$oJ}mT{Ei(7=(`U8@a?^EGY-(}P;Ordsu`E+_E=JhnS2GK{0IRd zcF${lmIDZCG>3RUX#EMX6${S(S=+iC^vNPR!Q)v(WAUB(&EhOKUNX7kQRL-zH90x% ze!z6=(+ZJplQmRTHAa1AkJ^4%R|hU^hpz}G5~B7nyg_1eWFAbqUSUBMw=RFyyb@9m ztKA#eu4)xD*8w{!{F;SkVJwp{In+1Lqvwuow&s+*nhgbBleIYPxp(4w$BMXIP5o*V z)E|Vmc_)J=6e&{?D{8eKnP1tYZl*XR%9DvQE;6(dIh0^tx6eiO*3kx!2BlDbX$%3% zwZ+G+D3avF&?v89c&3*Axz#nVQnJL@{XCqC`1BpE)eP$n0A)%y)6)m4^V*1sKpi<} z02>!1{Oi6pp$8afXz+SEvp?=$8AE*lBn z^X`s@W2vqGmVkq1)-@2CsBN#+eNQ2(5wy&n6IGtA3_sZ?8IVCyd?&tN({{{5lP3V#h0Iqi>2|1` zud?1YVM=?2aSGR)y4TzBH4V2nzs^twR+sh9z1vNhh#YhM9jvXqc;T9YMyxD#i6O^@ z!TZr`Wk?et)pD@nT)6F3&VCU0am+p)uSfj61*XhAkI$S#hkeZIK0@!9{nBKgICm$d_{qa!gm)s(L0ACGJy$t8yP$e2>=FLOoBhz+ zU;40#Y-#TvTskk_L~O@+#e29=o08}C0nP;wo1Fds?MEbV1X&6UO$la zsKaHmWEpvE!4%~nbxdd=^r4ozLYwkvAgOM0ulRCCBnF$|T=ahP=u<%3kl&-d(>4VNGtGTTuDsdMzD1Ro6q4 zj96QnT;}aqtB|MBe24Kt73V{a@)P?)kwcj-RrIpD{0?+qKvX89dMmMfRYX?GU@{u1 zW9a(W7skcTo9)h1T1v>s!FiYd{HXO5D_<19|Jp2>QT{bu{auj%(yzrcn&18mHwJ&g zt-7I9$c->gHcr8Oblg!+95id78q^?^LaQqR5Wx|_AzGW&xW$BgKdQ-PtQdjl)v-eD z!<}x&zUX(W615AY z*Jf}8aj#Unw6*5lUaj{wJyn=LIGFWXXHR%L{c>7X(C-43M(9ss_tYZ6o@7J+>-9UD zby2CMF3qcp2+A|-+Y{^SU-b6xa}v+z%eKUhh9%}*Cxmn@>GJL>T#hBi z(zY$*+g2zl)5x12;hiYFlHCU#!wO-k%&eo&9D$tQW@?mz;(5?2Y4RzQmR<#E(B^=w zjYkvY)nbYHGA4$$##a`>qfmXVoK&}?QQr^LaA19a!4!f7(b)354(QOk*ShakHz2Ot ze>VbB;^yxnyUCL)@m(O#rFtXQbZFLyW4Y$MhqhzXT0H+H>ut>1cYR$>#&8lm6t#Ce zkB~dtZ5V!z=Q03a_G`=R!5bUAV%T%TQ2T{`7teRxLP=}Obthm)I{Wp&rC+%w>~8u? z_wn0FVE0wolrAg6lscsw9WU7J*9H&i?$agX9kcq3Ds>YX$O{LA&b%?`T3%_2n8VGH zuruJXc^jQ*TPO|-vjS1Z@2UWOy>x2?vhOCrdp|NbBK0L65BI@6^lZ!xl!D|7hS4#3 z*E^2-EP6<nA)#(Q31Gl{^-cyRy_?5&M@#Q@8?}YM!CF2#D8=Fu#lgh* zm;QuTRzIPgMgL}A|?N- z;37reU!{JJ{m_ib{&Vm$F6)Mn1iwS}yDia!a74EMqG%f}9edlew~lG@wT7^a3R^r_ z@^C)v()6l9J1#7#S4PnB$d%7rIqk@?^!7_n`egWUK_WLlbr-8Uwao1JPkhcQ4qy@Z zrtpps|Hckiz`2mbU65sYPyXu8oJ;j?ApYzg?78hWvpoyP$L*|um!E;nWj7`r3wLQO zSwvC#z=;p!uXb<;F%d+e-AcBX0u^V+uZ4Y@w)&@|rrMBF-vyBus~0-F=d{U8pQ3RW zL-BvPKT^>j@+6KYHCGKvj7r2Jx1X{VejX3{i1FBYWCaBiwL^sra9`?j@YJz^|A0x3 zuQNm|*@rtaUnZrzDK?LfJHW!qADUEGgZeN~U`=6tWU9V6r0bXx_+6A~QTw zP_K5UiTk`pC6+zzECV<=vkWw^DpN>h-4~4}l;Bqd^;a6}T>VIIWEp8v;MH^;+1@0^ z&2BaPx-P4t4-U(|d-^GvP(kjh=#|QZ`6?oChe%wB4MP2@YxAb2<`^bgFh7%;EE_b2 zxn=M%yhvYiD|R0*xM#{h6?Oj`qAv(V&EYbEUZYvBY(wxsPTu4U%i-(m?g$J4Kg>v^ zXn!%P8mzCJ&>8mKTCStq&J;5Q0PJKDub`{NNgsF_(3n`tp{`+^jwfjD^I#Xvqxq6k zPSQ=sCsh0Q-KCBQ>S&S6(|n~ zUfZ=}Dt?!0*a%)apKRNmo3qecKjBMcfN;X>)XyIeg-lI2T7k_?3AJs(Xb#S_*1aBK zOgn-odF#oe*I8BsGANPv-ra6|<{9Toy@y`TE=@mQWiQI%WKaCW{t{=sH{^F#nQL9R zmna2EssY*_@kX_c#};u6$5lx|b;lkqJ>2W#Ffm%mCygKEt8S`r8&tLeAbt29kCNZt zY#Dc&we1J*^8sV!SdDpS*pn-1+neDJhL8?~p;f$GsK)kPU|2kNxO<=H8(!L-2Qbq< zQPXmchW-uL{1nZiQrzm~4(xtu62_cY?9b_DL#7OhOMZ)I2 zuJh2_v(Sj{-ud0*D0Cd~X zkdtO3kU-;N!1lq@cfqBxh>Jc-D=o+n^<1j{MVX1Wb&7>0CMK6%rvsg)M^DzTOqPzJ`VQczr_XP|kif6r=>jfgfA*1SI>Xh@u?74Q98-jMS;nL)I?yH_g zS|`hLc0Ijusdt0eOeC`|g=5o!gN+?0mBB++x0lmVM^9h-2|AQ(VXsmqlJ08bZ_tGv z9)E2J+^K<|RvYGo{5*#3CNmK{6#Ce;^t!zAu74G%@S{quO0`b=$3$g|1eNrd+vd}g$|i(;Q27jJcO9Pv zqV%qHL2vEGCBU*Ms!OC;6uaF*VL0rt zC%nzHKG|k|5|X_YZ$Gb41Ptzne-g}-Rwod2Y}|0MQ1A~{ND2^M9vvZm)OMgWs`J!B z$Ui=Gt)CC}Wx^l&JM&y2aVQHalM_5^LL<+I9wWV^oZ8-nN$!)cMm5L!YNGnMSqbAM zH=2Dciuv7rp9`v#_a>8|O(2oZpd5-pp6Z#cXy<^-XRzW*CgUlOa9}sk&miF-bUegcZqvhB$l`wba*TllcLdmVyA#_3lUlpHQ zwcJ;Rn-_H9#G)ViGj3n8aA~)i2 z$gu)S@5rySQ47D9;(cF6xKAz>MhoMdo<-O`-~NIR``FgBVRUU|o#plfT9rG|t^8^pc}{GWSw_Kz(slJRyOYNcKj!K-}JB)kNGb zyg}NPAy+^-mn{?7{2jiDSVuNl=m@H@&QJ_JW>Xt^{JFI4c*aY@5}HJl0k95 zobsh|XUICkoaVheL%saBYS~lkWXF9k6s}gtf2oK#R7U9soHv3m|Dq6I%uNl+nZy@b z1pVjKCo-|Ze>!_<#q>xs(@9f-@yxijibc3$;EI>OPY4AbL zp_{db$jNwMurDSN5D5Na-dn0VhtLlivy;YnA;$^cv_f;!EF)=6{eT(t?`kcIp9sUbRIs zI$i0$#Br=RsQSto?KxC1=y+EuvAD~q9FsBXUPuk2OQUZ0KJBWKP|2V3<8n`7YSP9c zLGl$~9h~b6ll=;|`P(2jylNiMYsL>Zt12&}PvHIoJT%t+&;oePd8~bippZYb-}b>5jjN6 zv@5IMWwS*H=oslDvl}O+pE{k|Bc++L_h6r3^!8?}O5%1nJ_~Sf9(`xSpp+Qj(rmi{ zsQ=h%Qay?_W2%n) z&fo(~;js18ouXqkEpx~j_xy0b@%*dXLf2WLaQcBf1*p`ny8Tpx22N~n_AcpjI3A@g z|I)ozIHTr$r^@h{2SpEWa+qLY@-AVH5qZNprNWEK^2bkdaD^6xAt$#D{-1CQu{m;C zr{e^k*_KDeHjQNS$ReXT?7aHxX1uMmVAy>!OJv{_QqkdaA*Qy+VC?WPWlRihK)V#Z z7D~!jFHmy08asP;eM#W3tEXW#M0eo`HoEng4^%;7@&-r)zYYNEDgHKvMhBI=85(#ozL zf5~}!zUrM)Om;3_to=e7y7ASyTuddZIPVo_$;?*0_y9SdL)gPLaF;;i57Db$&`m4R zrgVFWBmVf+GFlh4lE`;ZKT`0P_A7}34L&5Qfzx%KPnTRAC}}P~zY-)Yb#_5TV{$%6 zW?))AT@2;cnRLA1w>UNTq4NYumxoU>mY{LGJmlZeinnpt%&pbk@nn8&ogf&(J8Wyn z>9U=)gXwT$YKvIQP~2Sy9W)(Un|m#R`pWy?EMpTgvH1?r$=zLcY>ZRkhFohjH0( zc*OzXQ~&-Ic2P1gep~Nd&xM_59z$;f$4~VS`?5d%T!|;dBTwjJBigum0TwKxj#FJ6 zH*k+F7Om0JG4g6|0yg6Z;NOvMPdPT2y-%vb6A4TmxYqHeNEO$3XTuDF^U19r=YJqpjvN0orYPwcNlQv3juWo^O?s zYZqz`dT!l#R!bo?<>6YeGyfM4b6fC`8#bI+7;83R{hbVXf+8axUGI-LCdrno*zH(- zUFi@+1b+~V(<)u&bvJikO-h)ql~OIhXJF0?P;X+)Ki|wA?U_Q%W2MD`xj6^Y;_{W$ z+ij)si};{YhM^x(ikFW_mA1gjj2tgyxVq^K%rQL%s_(EIN&T_d515sIss8#hw|w%u zb^2Hh%bs5X@5GKvmgK92*1mwQznu#fBASX+KCJd`5+dtd?TKfp_qGc)ex%x5hL^qmwC8y$QA zK`I`AfgfigQoSisP*IFtH%puMp>?4vW_?y%^h2lT~dT)=c)@t zLiOn*ze%niEb_~NYm=(qv^)*Iq z(yiKYZ^oBNH3~QHkzH+rDxuKSfwljY40umQI8A0T;Y^E#5aRAR_Y+{RSWe}$#FnLL zE@uQAC)6fiqXhG@8gZ-!AP!$EGnF8|e;9iphA?rw(lc)>4T+9ifj@X&A&hvVUotH@ zO|>jV!b;fDJCKEB+W5JYfF^|%Cd$i@1j9qm&wpL-9WA&vkMw-DyD^zpqN98B`~j{| zf_?MLpOdLg!&8{1%xLPVZ^kL^J=IA?+DS3?^H!i14_;ht1->V-;Q%L}KNUnm#3NKFL&m}tNLME=c>i}Q3D zmaCie*r>$BQV^#1m<0`>Q z4M%$GHj4_0Xx4QB%m1V5E#sny`}S>V1SFJL8VnFvTFIqEL8U{w5drCRX#we2kW^Y) zx|VKs>F(~9*rod!uFrGb_x*q6o7Ej>W+%SqaUMTA47UA7F7l4J|NP5DQBb{?2dnM( zL4LEuE5?qpL6Vr)5wEX=Iy2 z_XErfOGxpld*lB(hK*zvU!C52|8y5q2~2;WN{1Df+3EP{LJNitE$9(l{NF?Hg$lEr zjJ)8?!QeQ@K@qkUnzU2&6L=;ETWL|3{54+5bq>zaDt7>T)5$41qX9tvzp(p%z6>A3 zieu`P=lZIa*=mivVndC5jOQ=n-U1u^nKueFsw}f{irZynBejnIccisQ_%RHiF z!8Tay6r0Mv+`ohd;_~GZn(ENPwKIW6ic(M9H6yqR_%(yJLT9&La;!rBODY0K-wpp& z8LeZvuzP|Xmd2$ADqRjxd;uBPDb>cO;&2*CL7WH?vSUaz^o^51sBWJrQ8$p$Cxl zCo?rio8BbsNCmgfPSmj0d&E7fn1u|mxc}1voV8*cNn*wEvPft=K9OZwD0027ry!Nj z>)BmoI*nSc!_T77Y>voJT(VS)$e#f+Gq;7w|Lscw`8xoPMd_Rs*+lK~@_{l!U);ZF zNW2H9_-}!J%i2fDAk4Ncl9V+RAqbme59aE|6&GdS|7R4 za@7jK>tf^Ox&EJ{w1n^MEBRzry4*o;oVZ)FdwgB#2eVdnnTDd|nn`yX0If&EowF(K zgU0`9Z34f~E&*jCnvWcmZ`OcI#xE^J5gBS2g4B8h#Zt~|?=UT7$Nf=n;(xkn_n=J{ zX`ZQ4)@Ri^)k+q#q^_JDnowpTi%c1nrou=*1A@1?!vE9iYXMpieJn3mA4Z7q{Zv4- zb4id(^NdG-$a**@l-dDzPx>#|0PJ5+;8Nj-UbRvYd`)sp-^wK!MU1Gm4Jn!G3CR&c zJmGxtjG=5j1}@Q!VjCoP>>Zb@^K(B1WsfB5S%KkA=-;0iy}R|m zdlx0Q*S4Ir7@!1FbQo0-yg1*^;4Qp(m|oxDz1;TBNAK=>QfV=VmgV-Iz$rr^X@g!L zuu5EfaQ?(FI1svPI^lgXH-r0U8q{fzsy6S`{KSzzHbCI|p1Z%#(mp|!A3D)j$#FM2JFJATvJ^<&(O4BmzrtR{ zywCMR>kpdh&lk>`H1!-16uw2LjY~M(_$TxB?T-*RRC+_)?A~cS+)^n?{ruvV4-Z86#yhu+81e%S!;zmA=cn+?fb3~lZ+8OFO^}j~kN5@Sg#!L0UVD9ALg|23^Y79u`M#c*|ReB*L zc6`}C!#EjHWb~*h$CHCwKa|rh%2~~;il|kJ=GA*`kx_wIp!_s_8C4$_#Hf>=cX$ief1iW?{}BO`!(7f_y{iL>)QN(#H@5fJyoSj44eL5ULh1AfwDGV}hY z*#FMUwvFEy?V?aZ@>%+4LZnjww%1PQy;n6ESY?rD6MT?uJn?$F?sbBee9ug{-hdEz zHE#Qd;QMLz`S`_JW-ThA*Rf=XP5T@Nzm8*hNA(KUuN+SEiIZa`t9D- z{Tu9NP1Do!L?MnsAgB-}u*{%0JWqY8UoLMm9fH2!D zZ&05Zk(u{~KZrNG#}= zpK@Gm#dSM>RcpC^%~gzbE1k(FT1Kr?X7lAZ0tiU-!Bu0b zzLA?p|A7Z9(r&DK`j6q&jYX2TI|U_NilTd!O~gr4z+NP1NC7<%8Egv^;PzZ5#G*f7 z04XScRkVwEZPe!wAItkDCAr$)6?nqLQ9|FNWh)<) z+*Mm^KQXXdh#FYze1Z;#8K~PgV9Z3zGO#%gRrd?bk}G-4jD`Y~@Y5ki=#uXW@EanT zG`La40BVtgQ14FB1+vsWYP@hf%uXiX?fu68x&T@p&Vla23DI5rr_oo#Fz+!RN!9s| zLAL=Xf_+(0#XEFD^N-!r@`Oe(DES__v5B_+?U9h6t)XL?{T*uxW$(J3oeVLMHb7X$KaYC_eT8E5F@K z9)r}|`RwhH4Vg-Lvx%4#-}Ndws#Rkq^NVtf9= z%l8i==UHXY^|?7|r$bcXcpx*^oQZ-H9ynks2ex42r1{!`hQ zrik$ESd%g$Gc#$iZzW}FI7e`EMT+d?McG~j;V2t}1R-{erud{5%_)UiMBf(NHcRvJ zA9Yy!RBZA6D%0=(@z%)Kgn22b^@qx5EW2uB<;RJA55YrQ<-Q^Dh`YEFPct5qNZ}1o zZz^|xR-rqusA1~+P-=gUKKwbTyLdTa z^!WxjrsN!3>E4tWGsWMHnKFN5V#==w*xPJx?i!rc@kDAJ?}VGr$a{hLw#NVX+fu$R zW_9OzFfIY@LXD8(PTkWSh2xb@RFO(h zRoI(G%{*|eLxPY1rI|ojA2(1nPDU0tdV2^Xv)`Fo@4NL4>wMn8Fm%bEX6esB}6|?@$864x{tthq^D)eaTZ} z=W@$Gflg<3kE?>moXC5N9F-WFo|%bw!Qv*qUtiHn4^zKSE=}m#JtBlC*@M4ARc3w& zJ8c|OnS@L3VpwEybG64*giD4C!~ay(@D7)O{`!DFLSJ|BUl={$Cu>}OWcPB-to0?6 zl2L0U72mEH@a*D*CBTQt+mSeBiC0rz%3pRw9$AK+Q`@rXq?P;-ymHTPUi|@a5=SXG1466me9W=l;F*OW_`ucVHzw?JP+ck2}85HT8mX|HFQZ4O>HW^XDU9XQ_?vnoBFWOJW z9k3~9`8VD84?X`RiM04y^?A*zFQ~`K_arVQb83}E**2a`Wb7^Vu-dJ?Tl;NAx4LYC zk-G@VvmWQiHiNw2_(+P9B&*S2O>tH|d}YeR<4uhR!dc1{EUZ;B!&VJcg6aWyZ!3RS zJ5k`Hb!x1M+0;Cd;}DM^amSS7U#vv#vm}>a9!W)LFEnZVx<{Stu%CwIM%D(G8-+B{ zyG}8Kcq{9{rQc1|zlQhf!W<%kqIgpY{O6RmOe2@QMXvr;NY7F)?r^M5)A;!xYu>c= zcAc0p;Bjp5Q~S=D&RHF{M5Pcx=YsSq?(c2)1a;Wbjp?SpJ#hODaCk%gh8B{DXNJwE z$=h`J)`V{51$_0X`ic(?bIWxcKj|!*=C#p-WmW0Y`~^NNaCSky=f_SS%St7i=NnIF zwOl%#*LTtD7t#j0iDT`UVN~D04|fRY|MflxvC6+$8O5cWJmrT?yeMO$a?XOwPcm*Sx@$a&iRmZkM>hUB4~kE1Y^(6N znb&#I$2Ouw1PzMELGDvC8L1?mOIT9$+y~!(9jelM_TYKqe_h-)ymK#;rgoForfWK_ zDxm=CjCMSfJbkV5gtb6ztSBac6pMx?kZe+Z_WF34!|>u`9<8|fgK=+aHw`Mk9#eJp zA;!ZDda!dxW!!g$CJc-9afWW)c5=7kq8%0bwdiW!gb!1r42z!%5}Zop>n%)=6%Xp$j|~HLN@gRh(&m(?odL@xztEN!C7JW6K=C4s*PboU_B&YZ=4h-Pgct1b3v^ z=~Ox%LyeK1F*e_s5xI$8o|u%%0Sw&%y8P?U+mei%a`p4-!C(rcVJyQnd!O~#>G;_< z2^9^DLa1bbjF%qP1`fkvOYAN}??*<;E_dSQWr2Gzb@kjP0myBnJGt$&dIqWYPS zR5Q%~QuISvvFyCS`WjGIRg2iB>B_nM-7_oB({e%PShhBco@OydGu!j;gwS{;pS3+{ z!R(@hu_%20#Au1B6nEW&85jeJba0D%qVGUWj}`AqmMG67Q;5RQmwBv&04t6ZfDRY~ znS9?75Y>DE`GaYo&WU+dFHO?BU$#$4!J6oUh*LLE@k5#{Dl9Wt#6s!KaXIc3YJrle z?z|gQt_IcSE$?Lv-V9t==#pmsM5KI3JtaF-R1MtC7g)hC^^N8-Y499tf7(k)Ds>&T zebc&YVwqLN+2KdD5U(UGo)^BXFu#S&(}*gJh?9|75FgHy4oqiIjPh5ysvQ8|CXbSf zJ>R&AW}s9IsBT#2G^S0o!c4Pqpwv86DMf=Lt!d>L+A&t8(Ob%5?2MbJ@4fiaxJ~rj z=)iKx9@F;3*k!Ip5G@#q=0TpkEJ+mjgVhMVsWF%vG{U>Nf6Q!V9P=eZ>Paq%8y9|{ zdWB>m5uW+F(MlqW)6I^{um5bH+UuG6*|W1JtMNfJGw+k4)S{NV#PYresb5m~7hQIX zG1r;IeKL?0sS&J=|MO&2c3_O7pEi_MpO!^SjU)yVrVSdmOKLniOUv2C^oBFM zKDRtou_57^Hdk>H?mju}-c230F69bO4w6P9l5=5*P}`f9-u`JtT|C^^HtigWrH~{l zeFstj^dFAY0nba)GwGZBC;X{Nv4CM@Jdouw&=z0gHKq8YNa;|@-j0hpvqHUOI2Cc~ z4dTQldQyY5uErP8SP2qRr{b`%v*;*1Ur9j7!$C%KYv5y7!k3>0Orlq$EBN3=AbOOx z_?p?vq1$gwM=4R|zBbI;=Fvl0L^2?3Y#R*!xJ!RjdcY&;M!Lcht{ycP7E;pV1(1u@7!5^TevhF`DEGb=6qo^J6g;sMgS z=ke%J1GZkEv34AwF0G8e=78$n5aNY z6rSNs*K3_`3-P%P0pJ~wEOvdOk$g{BV!;zPE2!}rQYuw?%Sb06+eW&OW1wK3SN{S) zR8`C1MZ&w!VYGo*NIVHR@*dteYt&U(S98(P*|(WEUnmVUDkfSj`(V_7vj5DO$aCpd zy4;!As@Bn-iUeIcoh+HHH6csiDt&5^?$=sxYQ--#^(&Kagd8q~bdrvdJtoq^@leu; z5cVi3@T4o4&*zOS+{^5lajmXR8;WTo2e0y2_!K!e=tY%tJe|jT}vvzP;OAM3&GO&&_P9%NV>&m4&0WQ|VgM8$J@V=t>_cjb8N%#1< zU3Fl3HnMoU8_wBWZuAJvCk)NM{M++t*`L);+EJ{A7^=4C*W1f~Ok(FhH&_t^v9M(|*+^da)dk%;6`GDZwu1aE)tPa&8^3HK^Hg%-3jado&5Al{-c z&AOJ^Hh-^TtcWi+{m~!kC&R*t(6`UxHp>_g`ZEs-uN7aZQWsTEK;-n_JQs6Wk-AEv zu{%!S&)?za18!VT8v5u&p$8s|w3nQ#e+r9i4omA_yKc5jv}5@P?UOAv1(#TbPI&d7 zyp9|rE#y}jvvc?QFkYbb!e$`{!RXo-MoAC^JbiiE!9s(0pKA}S8+$6eSt1qJ)rT@1 z&KQ?ERo!;LZhW_tm_?4!x;$) z2$?ok6&gVHao16IIjHNd0i=Ub;5-?Z8 z5yHf$txq=)ZYj$42@NKKV{CUR;DH6_4t@U2fw&|b z;imIJG%zR*FLuUmFoD4vQCCnJbi6j9W>AeJX^wTye=gw@1~t*w%Oa{**3@EJ+A}=+ ztObiX_50j)Zt1aP_!|vUwv)6QoYc)_twyss&bp98jTLJ6>U)t8Cufe;?OKw7Iz>I% z>{b~!L?*JprV-XmAiP64h`vn3c45GhZsB^%`|9+Fu7T79&j2ji1M!dizMRWyNhCnu z5*YL?=sRAQ`!QzO8J-()kdtd)69pk-O7i5>C52&O_Qu1V)}1$4xv<0 ztacC=o%9`XRQVEFVzLXaau}=4&rMZsH6!RWe=xX-z!M})tmgs2hAO+MDG}a-fY9(0 zb=YuL0HVi!BW#aVoTU)1eJeE5fYWob{*LUjNYbz{=mY3gTtbtSX>mq_b@F!Xq@p`7 zaS}Kdnq5l_`7t#}pF!fUWf~3%BnwPw_|TQR?;uW=^<7GZb?XILxSZRos*_&n7{5rN zDLi^;1X(UT zR~l+3-5zrZvaOz*SU_?i!c@DcCuAp z@7_`)-VN!}nSFEB1mk>kZQ@d+ee+C~^(uTFD^fX7;73s^phqfWa3IU)V8f zb?0K96+@Pw^VC>#&l=JZKATeJbb&4sh?A&;y5_Ah|Cg2nZo9t0sFo>AJRE(e^%MK= zxs29_4Alr}C$_q?e_}$r>tq`w3}ZXuFAHoc*!J64-fzDj{$UlG@aKbfRL%H={X8gQ>Yfp#4O9p6g+4(QYNu=oE&q7(#%Fv%Pw$fb zIU?i~tq-C0q*H6PUtU%^d+uI)XVH8dkGKwEB(mz+MNm7Fg2l74bHlD4-i*jv`=f2H ztX!huCr06Rz!-D6?nv@58s_;Na@{Q*)^N$Gl+tq~+0!@xyIX4~CR~)Z_QxZkYf$eZ zCU82g2O5`a*JRa;k$6>B0v&C>HHyK!8Q~T#J=Jk+1)1UIyGbu$={8eBBi||UY%$*? z@P>sqs6#kc$o`I$z`&!FsYKHsP0_*9ajA)ml?`##{zQ%Pd|(!A2t#tTUt})K$0Mgm zkWz*-u_ zJLmME*`y7d4+FS=B*=9=DQrbbd9gUVF|d`Os8&B}Z{HWcsGE56tn6Gy2A_G{ttK3q z{p1eo-FX750~Ev0nr4{A(eN9n56~*MJ8o1yEW&6t4{AEj=053^QFA+Hn{po)M|@2K z(9csR?=Vg)N<9=$6DU)py3;@SI2O_HysaG%O+a%73WZ=#q2!aGS1AXk>|OY4;u+pZ zqU~~bHmi#X(flGq6elbQJZwXhLZY*qi04&0Ny^R0{dL$|m&-N?4a&r$cUInlHTWNg zl(n2|EG_(Ok^8@5wTo9=8XF3;5ren+gumolt>R>Mr=vhg zrO99Q-%~j_0{)ZeSBdYQ!TItlEjljq>D+L|1v`_z%`|FR^~bfpiI_w%{FDjgBS0|Wt#Q1;jrlbnAcBu!idX--F6sGPfV9TJ9e6O z!})KJq{d?LA18jI5j^@Mo0YEcwT9XW$F@luVg&PpqR}RKU10U27aRL zHi8Xwt&Wo%9@x5i!dw0M^kg?k2j1=Ys-I}zxXcKSu5I%lkq{>U3Yc1<)5L=xCqdqR z^b((A;cmkry(5SCu`jePBok#TAlYiyi5h}1y@Dd+Pdp#W=!4<<@x_%U9J$V+RHKl) z8ZshVg+n8ZwUBzSmKX3OQ~V5|;Mb+A-5R*T$=8mpJ)P@8(dHSSTPw{2tY>H7c>Zr0 zQn`*l$j+Xs$8FB&+I^iwf4cm8?iutGFNDJ*m96O@_W=Va1iXZO^#o zRTY^v88X#LKK^_$&@J~R(KDPBvUVDPGhR?r=pCuPmHp(_hMDA@M(VQ{1R|qW7l*)A zJ>NigG5zLU?lGBZmv-g?TJ0n(ElG5#x>fo{HAO(f<6TmO8?|NIcOfM6h6*lqT-A1L zVRnS*JOBgxMrXn@{at2E%>%_D)1{pSHlCm=`1#3Q1?Nve4(GvF{1Xrqg2cj0w5& z=6>TzOW=q4;&5}M-7SR|yh%xT`g|9qj{SK~YJHCR>=ie@1Iy2&k`C+!GxrZKNUvef zc%<-+_|>UB;k6nIBc0KTRoP|CLZN}VL>1&ky>KF3p9Gtf?YgPRWy6Z;7CG!D9<8^K z`PY~Y-1Su{S9>zghAbQhOZKchct{qDPy zRYPGbtHOD5h(YkuHMwp^xO5{ApDyptpT$lF4{M&vi%Z`o#_m&=^P|V(K*qtlj+4Z- z<4hmf!b1w`kd%v47!DlX*V?S)!(K&B_D{Y(N4k*hoSF)Bqg3%XtNzg@ROH_+Orn@t zvS-G!gws$Ac-W&A8gWOMByzsy;_e=uV1q;B5f>ZMB1`0bsNvn_)YZKI{N;Ok7?*^ zKf<@ap)>59{GU&S0H69xKvVz8k+<2VR%?*yB18b26@$q~^@R14Ee|7}II$<)x!2NB z%fDniT;6hAHc@t33ylVFTYv@DOS6A=QG`4HRcPKr7icoj=lR@11`tbgu9L11AB<^9 z-Xw9%RpF_|0?Yq$3>KSuG&r_4*1t2T{cLDPDYNtd@us$zO;7B$)Bgc04S))09@ir!Y7Os^iTe(H3+cbV;-7f9 zyg)Vg(8G8*=^_x7^5^*MOy!~0eO68IO-POKC-QxOke-dF_}(FCq?Nzd;nJgfasQr; zcq|82xrZ&VV4Am8vsQ*zGr-VHgRKc2SMuYl#o&FUWYYdfkm$}k3J;Igac{j@1F|VR z`0!8lqPNE)XYK##jvl-0s@2{zPsPXSKKH5EAx$R(!?;wkm26~jx$tfJvGJ}_ zRf+ZO`|j#i8<8zGTJF(|8~&5JzAW$U+teRgrggo5%@}5skW!K_ylNL zZ76j@2t^sl+kog?mCmV;cgNr^#7pEfOfkHE-ivAT#ZD#OAhV3nY`4o=?`8fa-njII z$l1Gj_d{0(pcIthHfiW{({dBOOAo)T5l`Z7@9v4yul~ifDHQH=`|IIq-aql-YXP;@ zG8(`3QtMrVyqbL>7=y*Brsg+V;qe&uq_4UkZAUDvmtU4X5?8y-7FYPFN2Lj0yKtfI zK{_P4TN^rV^EJj^08@V*7CutDsmon~NLMY-o%ke6$H-Rs`ai4Nu>IUIs2@vv!UW<% z1zuB7*ZCDc@-dHosmkQ90=uidYVHYOBgL=oB^rl)_i;b?78uo^Z9h*v&SDL~I-o;t zZUdc=b6E!b;(2XLLu`m372L-0~u-v^rQfbW-|Y~ zWC5mL3{Qx2a=#9MsM1;k=j-C3*c~n zun&AJ++%EQa8I%fdY@LT031T<(~>>_k=F;;ZT(qB;9kZP0GMP;s7QO(6hQZ7^?`yWLK^c~bPkO~CEm_pIAly+qZN(5k-ph1q_4_TEDo`!){ z8;(*Ah_>y#c6AYeA%zldN$r7+9KNsGuADXBd39;tXahC%b`)MQVax=;4QShIa8pd} z+%r(^a;k^Ib~QlI9V7w}OowdmECyX?ZKw={-Uyn;p-_znUfd1WPmLi%|M6JF?{=N2 z2ba895JSH5x&mwgFUv-Ra(w`0>cc&Ax)HkpWk4L$l*`*t;C&U&hpxY)t~)^K0cvV8<>rf3p;HqH#g`nm(nqYjCJp zsEo7fYV-gcCNI`k(Jq~YrcrJY{FQX=%XFMxpTS!4rZ)m5Wte+gnJ`6hNfajC*{fyR z#dDcv5``T@$L<$lfNOwx)9`_Zz?9$#O8$ifPe6Vm{4Vvw z?{~ogF%_EfX!iD`?uMu~Kn8J|WKuYs8X+)~XM}Dw@>n=Z6@16Nx8z9-_#*+i5?g~% zd#ewN2M&?C_sqodLqe<{;?v)a%aJrzKf1}VI%v%9DKQH{BwJWA=2SU!9WyNBvhQgC znI#tCG*AkD@}5s;rV{3=M&k7zXUErWHuWbhWkf*iC8vfSi3RpR333u^p}^qe?_pG{ zpFSl>5M-=pjyb6a&FOKF$g@RtS3qYUq#k&m)#rw@BH6irDlbam(T^Gau<`lVi14F_ znHT#r{LvcY)hT$RC}A4q-MsdK`=OnhuGmt9aVys3-Ob|Ni8ja@6eaLp!ZbOEVQspn z3M*c;$7ZeH$$F{$J${G;qUS(`ttxd%m!U|tyNGuC9t1s0e@ z{Cvsib9+MB6GN++P%thVk`nnJ^4(jBe6C*?rSayu*C;wHVQ6@IEW%R=O>a`u^soahKPx6PC)N}3>47EQ zRa}2i$Yfj`Y!uSAn!8-xD)#jD3yXhbXEa$AA`t8bTsJ0DaB_(F)e8(WWzjju=hGTEuO(kStW zcK)NOT1(ubIA6mzjynA?=^RGQt;aaNGgVXJ`xT-pnPDjipTJjsH~`Z zK_py_p{XVfcU~lcHLg0Dx*9^d%r@aSDE6HD1yBy$pI?PZG%cC^1uV!F&}BkH(7wyQ z(!Q5?irQhd)u1$x z2?^Lkio1b_Uo!YW;xiuX+HcVp0IWjS(+p4!TeSRLfE+@CWEKC$$p0Duy2!)Tcgu(Z z`qO|_zL*hI)Z{IXz*~X~_QkwHK+b3P%Opx}0SVoshV>aAvk73kX|;l$+3&{>ncYYk zM@T4aw$ZTbe-6ga3a=-(30A=Wn;XF_WX&{GLdZja74soJR}?2zsHAR(-7L35UWD&d zOP)vZbpG2SlfN-5!;```<{-L}vnC_0k|{vk$ECAAykpLAc`Ob<G@kKtu7FBhukugx);zXpcsuOJBqN?wb@ zoEiED-E74)-1lJSm4PXdRjG2zZ11Uv?kGgkh)y#?#olB;%jOv4nFdCtrW8rM{v`L! zCx@8Y(vJy8n@^dNBn8^!+t*Qzbq{xceP{eqA*0fnzSl|nR9dMn5&R4Lp$_EzZhrDZ zfd#+JlHXg0Ii)t#cn~uYe{5KYKE}b1aLM7yl*e}SA%=oqcvY9eH9hrtl*e7e31`jY z+6$Bg(+$Hg8EETq0yX{i`2ARpxn?x0ZDO8x3WW~3PV+|B?GF{Ql0JJoS=`&?@MR3Q zIG?C)PNQKBWy^kOc%ufpw+@{o-p^UykPvD#< z>G(I_v4~%a-=bhjyvbSIk-zv43s(XVRwV<&?q(=uWlNIV}2{+r>FneV>w&PuG)+#GiPYbvQ8B!^PNG!1epZf}{9DSZV znZ4{8QP^nX6B{UyVKONAEB7h^^p1X8JKar}72c7~^cTXr@P})a++u_~m4#xMf`9tx z^Ix34RG*c9WafD*r(cJq1a;L>N%c_bth7Xt!v`usL~^~G_SJsbohR(v+O%qs6^;Z@ z2K+K{B2opob?Z`5g>SdP$ymrVO((77l4UARj3ZipCE~HTekJ!li5sozwaAUKa6wq* zmRT96>H6E|lL_6;(M*T$M5}Ms)n#T)*QiDL=w4{D#&el)*lo{I@rv{5nAULyiC+e6 zQV&w4+z2IPgqmfvcD>Rk-2oRH|o!o4$ij!^Z0$=}U`+=rZY)Ie!g?`K{r0dN+ta zL9$@@dUvnTI#emQShHiS zid#x#wXc z3%lP|C_=L^BpibK)J`uR2UR4V`Xx>iOb-gc9uC=4Fxf6k?vH`{I)XI_KqNo37{kIb z4IrotUMZj-21h=)EA!+3E%Gfyao{o8kf6m?7AuAHvoV`*inhh^z@h8d${Cbu;A~u}mn`tgPn)%j<)@ z{-4YnzCR`FACAO??KP^qWc_dh=d$Jm^(fq+wcd1Y!PetCmpX%E9Kh~eUlJZjN0s%5 zeM`oZPhn%IyseRN@GxmY_XYgWS~&7AT5bE5gS5qu*VASZzv3XXL4>kS2*Fe-7s%%| z@C^xxo#DslaX4^yHglJX7p6xJ7jVdSNH2%oY-HgUyR7wMRQu7B-VQfifrO299OB$n z;iY^7^Mok#Bt4N?xYGKsA8~M-=uS)>0QyYIn%z>RMtqIw5BoCv_-L8lWlUw6N1R)v z)WXD~dY(aXTdArY-i@|#8|g8v@dR)?5_2+Co5S-KcYYM5(}A`rPjUN1X63OQeCM{x z<_}TYkClucoa)}zjXlyx(E6yXA>jP+yR6|_cT1O26ny|K;(6*;>vzRqciDV1+l*t1 z`;I+V>s1m}gce2<5lJ{)%fL|}9#S(jS*{$Q|F>|)=s-J?BbXs!7=_Eg<;VvoGFO{k z$!WG;cCrpiki~~KyL`^Ixq&~*cau()t?KSc816W#VZdDaYuNaBRQKxywO>B1xw~Oo zZIQXIoNw;j7=}G%FhC{#I4Gay6py3Tv|fz;QdZ$s)onZYwO*kC&dUul!ha0qP~A*9 zq|_nFvQdgTEsG+njG*M(AX!NLMJXgXD2>nkqT#IZ;E~rRt?dvfA%>Kvkmr)8W7<^= z;Op99yFXCb3B|`FLoa9g{=gDaUCZ8uFN0U9O@9mO^8N$yL&)QdLsU4PMHSf^#Fid0 zEO1ABK-gS$HMS-D8DkfVEV6o4`VXoagB-3g-5QF=dgbgu`3_44vS|ZMo!266`(o7A za~1gyHuwsi3z=S+TP}5-EFXzNws_2kG%!hE1U9>q$-WHRaf&N?hK1p|o&FC@{dr&0 zw|6vw`RH4%XTErh?&de=6L<4tSY1()1W{t5LM|*`r#UQLGx5bd7W$T%PEyXU)YqTA zN5vB+0k#3o6coXBkvh?XMr(gx3+dU@?yJ_SQU(R*iltl@cijVL#fqw~+(3NrrAUxw zt`eUPZX>Is3+e+|lSk)7ez9!CHcksOJK0hrl(+Rv*4}hTWa7;_U*f{ZR9Wog7!_n^u;cBiG4+Ta z3pOz(<${XTH+=Cd_cN-t6i&1Qc0s<ximOOlUZ(vvSAd={?!p%>jXskQ^wCn9(P$h@>6(&aw5vxKy$u+{%7nU@5ShD; z=E(&TxQu*h5`Mpw5o}`_X=;y*ZVA(#fPOAK@^!~SDy2lxa-aHddOq%2kh8v-wJY9v z0TVgl&8aeFD)GKH!#l3bPpj3wStfeA==FKPXuoBvL-e09AL*7OJsD4^7rsVsRbueWL+Z#*#xgcdC&fi+S$)h6-8iWC* zCv|ZAr_Ipca9>V276UgQsFm=-!W;9X(`D_B-B!$Syr=`N8A-7+DlBmWc1|7e16Qk= z_`&RpNh32~lD8G~BB3pAQnw0pzMLj-6EmT;9rFwXEvD_|Hyy^SsZPh0i0w)YQ-WmP zP`9Dr5}XAA@o>oB7O&9UhwVU6cgNEfq-k{j~`Nox9=U?!R ze;PXWLylsfo(E7EI(;P6B-(R!vEtD0!~c|Nu(2ad1UvG}kj7=c2dT(p?mnnLf{I~j z%D`OlGsALgs7H!7q1w(3!0J;TW-QcU_-n{;nH}e|={DKiK>qCNfwQ(;0%*%Xvh*E9NJE?lRMnS+(Gm@{(z>K`TH+vZ&Y4;s)`=iCCf z&?)5+cs?7V5$;;0kKI>q>Z^G`GDq(oMaZv*q6b)0svKzq!-KSE_+@z&Qnq;CcOPHorNCu}C1L zKKAy;|4@6LXzR+L}%x$n9!^$~^ITacW zA4?H7o)QU|LKsTANN2`i&m^7N^*EjG9Q7}{syAH2U?ZV6!b(b%m@&`@%B^|QX_ECU znz{Hdy?{@-H|tfIcb#VsM|=Yd$JWOuotAM=l+gJQ4N>IiK>a`M!loI5Wn}^L?yOOG zeqUQ|B#S2mDjzKW@~d48`fGxTb18I%zGJrKv$+_r!YpfJXpnZQ_bM6Ilcu1Y3fI3$ zHNBUprX^vF+*RR83ykZZWOzNZDRgNp{nq=l<+By!q@%*5 zq8wxlELVgc8S))kiwt0C(Mu~ExkDPsmcHBpRw|I~h!lK1SCC-A9Y`!J{2p}DLAL`> z{DWk75jKB1%~+pcgbOs`2m{Vu^4qk=qX+d_FHgNIeEWU%f3CeWd8>l)1Vs9F<PO)< z?!Me1c8rG!#@knGShm2rs?hR2KC)Ip)c|!ed<^k$+h)%08$UDSW^??E+YHx#2Wc8{ z)gAP$j@B#xhM*pNdEYbb-u`1W8KlsCkZyfFv2oF4nI+f(^q<{BA1q47KI<}&SqPrY zwRhKvqNR1fM$Xn8L@ot?6E10a&jdJhSv!>U&KFXnB^P_0v5^dz4c)!Ev(_($lj==N zC=39*t{3*@#u4wXV83vrm}bRp5Yt!XNOz+s7tGcBq*$Vtm8yycIsC{LlaS z|6jXvhzxTd-xWK_-0^=F?f{ahf6ta8m!>3w7BK%ehO);NdDCJ@ng3nEjyU5@GD+8A zoUj2WYf*Y-FFoS{qqo zZ{TtGn`M8+x6lW@6e*B=*WV?h?vZbsLY}Y&-qSRcH`UEIoO9k+d(TuNRP;9hALo+; z{`*;;R=ulD4KPe<2WC<<2f~7L_R{C~s|5VrUHq^<(sXyP&MujqeJGP^e*F~K*Dr<7 z?x*Whz;G24>(`^}?hBw5$9M|dbPs{CF>A5|lGM;>4=kT;M(WFEXt5$Q0vo*Pgbo4KG3>> ziTZVi%mFb$J5XWhk(#p{%?Y@#mh>g^KC>?GX7O6bA4n49rgP{ZTSn5_h2Iet21)?a zuf5*Wzg~*;zOJN)*~_j&G*9QLnhpb&ftP*@5ns6kt_c5YU^y|ew24n({(utq@d9K& zu13|YB^JgPpZmcPF7Cc-8{pc0!T{W(1+O$k-Sn%QNteVkzh`;^;?$r;VD4mcLJ!mw zOtB{Wq0`5U-&lueUjeJLhA)-2=oxewc-07nfCxTE#tY%RY`@{e*GXRTR-Y>S;<*f|^*U+q6Wlb(7JYVn2?BWsd@y-o<_j zd{n1MM8vB-b&t!c#;<9k$l0d(mGs-ugRxu!on&KSJ!vT*B|ZDH{qOGTYVmHt`EUdc zNLQO`zHO4hpl>~We>8Fn1&_oqXTM{-=#mWtT->5O1zk*~j_W<==&^h z-?alOQOmW1Ubb`G?^5!xxOc8mFdw1>Kq1d`1<19noHuHh?;X=N`-|$Lt#{Ld-mY}^ zdqjP52I!v_X}|Q*;(L}#gh{q_mPV(x-9KNTe3z1)210ByTQ-4`l5uW|YpB^#ySUWA zi_K{2&vE8#awgWILtxU)P2fbZvhK~#O{KBPSXA^V@*Lm)=xi!at{!`}%Tt($y~t)*)GF_ws$Z)n~d( zMlo@tC4Lj`xXh^w2jAx*mVetk07E=k!qDbG3hnND>SM1SCdJazzaz)A2JekT@hZ;y zHXNITG=Unq(uy$rLik|moe#znOtS^xw^rtPi7mBWJ?nEXoI3xL0H?67o_Ada)+GqL z3G=>Kp=uU7l_>T)r756$d8O)x5p?69EV_fZRo{Pjf0#1&fxb1}e)HX});D+wDWI}u z3;;U*;z%>Q(|^1K8 z65^--A7$?y4cFI4jYlVXL=ZKR1VPj=Iw28l5IsbR7!ke3s6q4=(Yp|a=)E%tqK)3` z=)D`GzjyMK@3YqLx8Akhf2}cd?>YCL^ErEe_TCS6t8vc-c+TzjSlEGwmxfASjO^fN zxF7RpT>X^g<6vxO(PH%M&srqMp9i^Rozh)O*toGgPnj%6$=Pmo4&p-|(52{oYFf_> z{cEP5BN>6i1GA$tW6^-CCx|!#_M*QGy5Ap(2oa4Nx?9(5m-Qr__`%L8*uLeYV6@Zr z(3}?QOMYX1-Tfzm;IU3gR4Ka}6ePPHUG9@CfwGIM;>523;wI|#yz0-lf4r}q!^gKs z5yU6hY|mgLh;Dj(Vgsu|H>Hf_n1@)x$Uytjtr;OWK}FbWDc46G!cBZB zz&5QOc;4dO&S^-=sI?I?pSv{v5cl=ej4y1~^xev&&q}~jXTppWje#9|T z(>bTm7h0djt<~NW52- z7-Gh4Zjg^Dr^#E!a$3?4?cNe?G8?FFoCGkDhgHZrcRYAVJ|42|o4+3~!TYC+gL%^X zYTWy|wJ+=GEp5d=!-y+vnAXYw)271PwVwrzGd#7nz!|Lu;Yt*I)Omtw0g$J*(`*(2 zxX&eGJs}=5hj9Cw1s~sUC>qsMh&c6bW2=Uzw#!9g9jorrb`E2vjz!;y8s4mKQ2eC% z>Q69>6e27|It@}w#OK#~%K?a5Xit6y{sV-tFamDYRWcA~$F=h3oZ1CJ!fJ*FNPisq znuUVDIT-;M7FhdnhvQC5-h1f>yzYP4ICI&YJBVHcw6#*9Ff!ZRPL}Kz2Cf9Y4-ns$ z@008sM^|N;yX?1u{&?m71 zkn?eOI7&^^*v>L*H1Nv8i9S40Q_9+h%lnBSm;~NqNWSgRiH=&6j*BejtB)SHUQZ|I z492##gpFa8nIQCVwcVoom{+C#ezCP|1+Vl06$#eefEDKI9ehy!L@KgWI^ z%OmK?CuS@+V7hi?c|Yub3~ZYt?gOhb$#AZ{g8JNcWxF zK4uJ%*kw5f)(>`W7zS#E#Fyl?#RC4H0tLN=7bbc^D^%D@ib;iBJ*<)fS|9@46uh{g zyLO6s%vD4lTgnkEJ#Hi&ICgsf@d60>ib+uE+k3hQ`lg!R?g}sy42&%4oE-PuQemntT%V0ogB;r7WCPxLH_0!dj+?LQ~u^K?~uci$DjRG@@e!} zuI$bGSAH^oR_VG?Q`gd08(T@h!O!7(WX-+`V>REA^T+3*50xC;ryUwCNv?u%o^Hjs zSgZ)Cen?2)38CX=;Km+@V|svAw;za~7oR^=^6tIlu#2$QjRXYs>&FXs7sa*kAenZw zgdpZI88f=OB4juMa-g^CpH@Q%9=dZcY!4UP`>vn%#;q__Y#uXDwY1=nof4c^?GV=r z*ec4Oq0%Qlsszt{wig$TDa(cW}qmKTB z;CLnk;xlOjJtfV*LZaT>6KH(f0TVw@Ve(4QtJ=9AGf5QzCww?St0iB8y;S>A!ugNF z7WKW}%#sf>3mbx!k+K<$A|$VC;RUa?jP1<6Juay(EuspNED!6|`X)tC#HXyq z%Ga0aUd%2v<0dL+ZL}&XQ9{JIBJldlu%fa47i=;Fx!1nmM0J6r!w^UamvoNL#LMnb zko7ChZ(^N$`kH!+n#M%@q@dC%d^m|}KHM)9+g*GZ-pg=BOlKW89KEVKt=-uBg6BM{}-|A;)uZbQ! z*tk~ZL8E=B(JOmp=-btS;pcv20*|?z^~9IC1Oy()tAMROr9TGw15YVSexq^O<4i(g+GMi(4WnEwJuBZB38^)DZ)q~=J2oJ+6jZ?jrK`aa;8NFd; zj}(|q@(jyAuE&b_E~~>!tEYK>SChX;Qjb&CEPszmisH)Nls`VWi{oTb@0l?$Bz&@j z#ZBY-=SSl)K@q{$-L-D`E1vU6UI_7vXLeVcOS2+SwuTu`SoFoqdb8oviem#8Z{%f( zr+*-|#D^&dhpQgRlDHEM%eJKm;4lgtR$gZ`6)DddjD(RZeKr$z){4Rk)&tqVld`|{ zzHyIk%`1zD9o1m)6jO^QeLbYgp%ey)iS<%7)0Bn{QB%An<3wY%*8WtesnKyJzQa{~ zRy4`$x1Tbv8wrnnq6lRt=d`b+-S6sGCi_I2sbBZyOn=d6ljK3oPqLU3q|LciJJ72# zYH?~9T-EMAf5cY)i+SQ2QE6qKpMRJKPF34Fj*B(f8dadH6(6%NJ9OEj5wcAM@zk^H zdbCrSb&$*Repc;USxQ5;P}1%Y*04@2l5A|y|AHMDs>hKY%k}l%5+3{IfM$MgSjJM~ z9VDS_!P4AlUoO`BJ{n ziwFAo_v^+RpP|$ZBNksiWODmieDnueqU61-iUW-)4(m=sImT@SM@n85D$a{CRvBqD zyPT7c%iq_GjIm9<-yNTp?Lx;aDHG$m>sA8&X}c9`smgXrJQ~e!#lEC(&{O2SndctI z1hI1GkVkR%#oDf*npQ67BFj@3^N%e0jhZ`VDXr`w&e8X8cSB4?d_kHX=7ql)>VNmV zIyPXDvi<(F#Gqv^R&f7!|2Ce3jqg((H$~W85dp~tnb!+DDrsYr0&QMwqnv%_!@c|K z0o{fSC>jSGP2=EKWbwJFp2qmYQ>@Gul88PB7F)R~l@sUV9j|9`ERH)RJwZv&D^5Bd z#0?joPfqHMYV1^Ko@ajN;C|Yai!S{5%l6{6*p78|il$Uy;4(-0^#itVj{Vn?B6>rW z<hhNCo?!8;#%!=u(B05go z8SZU7wiw6c8lg)%+87YrI}1KCqA_`(ktPyWc_K#o0x!lUrx;ZW^=_mnjIqMVE$$Ot ziufXI+z*}Uk~6oeQJXmw=;F|<<~2#hy`*7V8Gn&^%=P%0ymmy^a-QeGOZ~3wwTgoh z{wceGvn`!Xp3n+Vd0i3$nh!Ss>f;PeFXhlHC zfg+Y%LUIruo|N^@Gli724CBC}d70rh>FqPv^m;UyWEvn(Sv(>96$HxoT1MF~+iCg^ z3Jb^(6D3g4p5o^z!xf&aS~u89iN&PCksh0$@WkX1JiX-yBnfMxaq{3k)GVzf|8w1+sXt zKHuk*tcbqwKkRw$))>SSA_*4vQI*>;7FPS{svH;%gnUClauKD(*j&>D-HD8~g;$_Zt(s!e(9@&Xz1NuoMpxyx9 z0T%OBtUwh%b{tCj3`ZH1Ty~b=-9XKG&n$#TU{7~fbk0c?8$aa5$_QVEz!s6Jk3>v& zzs?m=g@0tvCz0@$!-V%a@)nJK6Gf7?3{)j;4w!eJmmG-F@+u(&UBlCC5TdU2oA;7E8}AIN~8jHf%#f#Q!j@v3Ag z3T6fS*o==?*~!>!A7}Mf_HK*JD?j3`@2dO^v~dZajvcc6sm3u&m;5l@MZzX?n80gs z@Umyw`3$9>IOAt`Y4`>cn=(A{DicD&?S5A|l zc&m9lY{1rIiTx!#c7S-*Ci{FJf~W!ukXIK7`|2GfS(GtMhA8XbIJ>dvxu#6D61`wUjPGj&)y>&;UNLI z!$L~Mc@?84$r_RP353gf>t|!?NPV<8$#t(sxmEXqil=>v>zBcTuyaCmYrJecXQV_F zNC>or%g}(y;IilKRCuIfjGx*RJe;fd2;JM^qmvJ3LAMzS*T8*MnQK5tewv3x~b-k9sbf`D(< zf>o&%fb)4iz1VrGMb3y{bbO)h<|fzQL3bA#9q)~+UV=l+%)Kf*7tzvrK~B zz@BN`jNnPjo{_Wn+Ts6>np^m2pEWw23W`UO>U<#ibKlh}Ibrq;C_-&QL#j46hb2*w z7OMoZ4%l=Q6T*a$Bohr8%+W4cDRNN;TAzHwTzFe6;k)Y2BLvHDxD_<1QrhsI-Q7Z} zV5V|EU~4R37*!hCoOIFdD%=M22b&qTii;HdEPhh+msvdQywhV(OW5LRvIs%=4%)5< zU&({E%7s7@V?@72N|-Bbv?7Yk8-s0ArHh28vLBmRl?o?#y_{zocy(e4oNS!8je7Ay z^J9tS)w^QuQ5y+X25QKALeZMdYjt=^7qhbN+(*WL;vxkHTvB+?`C8(#&x58KW@mV6 zcq{_$Bqx!^d+HOoUP|%LyJ_l+kf)GuzMTKjKWQye)g<)nBChJY{<}yq?6zPy{>wFn ziR|>46vIbBVk?s#A)#;U_nmS@74<`uY3_Nn|FAGPdlc>Utncs<%}ta%BbCs!la0rr zsRCF?3-%+Ed!~Q6J_vkk#3q*Aq9*}j@w0k6Ip4cKh-b%FhY8nt25i= zQywnh?-ZSOLxpsBvT{?c~UPD35w}8cH|yz z*6(}tqu)vx!Afp98&fFctXOMqH_y3c+MBk?Gm?<1dhy^YI$qXwJ%f98&atl6Xx*Rh zT(bPTGdB5;6fsEVF!`tPu02sx8mwKULHUgPZiA&d=t>OsI}qm_#7}mfwPZi>NElTNiZ+gZAddXY7Y3FYU2HQ_o9 zuH95eH0!!j+jIA4h%C}H7x4xu5|)K=*_(IdZ<|(I5+owGpF^}0<3Ar;zjC|9V}5qF z*L);p=Ugm>B{+wuZqH<1x-NU&SN_YwAkV#yuW-jzkYfLO;Ywy4yMp-~$ChKuQP`uk z-K*oJwb|ao8}m8x9j)Z^l}o5QKE-;KH<|8ce?mWD6{y(l(0!PPwZ zgi>dZM#ERL)0i^N-ZUx0d&rmf_Q<^?jxVlQTn>RAy!e+P68=u_cW9QoT22X3_K~MK zfP1NQC*l4brP+9H(PzH}M6p@J;I7k{8>D6=BN$|&{`KrH6O^$>`EjlAx{08TexjN% ztlEA)KH#E?)4lBb^8iu1)d5!G%`@$67Up# ziE*)X|1jD2U-~Qy2e?xCPH3)HXdsZBfkCNn1K61ndbHR}i!+kbIpWrhNTCF;1`ND2 z^KH%PKR5Y`1K`{uhNz{&8kddh5^8GsiP@-F!sVQK8pV@ko4tWt!d&b#xt!eqNoP2lM;R{WqALI!wGT zUJ8?l4}k3v3eUNkf|kMrS~o}Yv${r@cz%7e9V^iDX$-jy5C}vVwG$fgxrr){OYfnJ zQ|{bJ(dTx4z}a;ED<)lI8-T^5nq3bT_W?AXPdQ1DV;hiWn2i3?LQFAz@Ni7MO@dW}(Rs(YkX}m6mM)YeJ8Z zy1BF))za~Y9&CK6yARLfsm-e9aOU8jcA?rm{Mp40;p7uEo) zSPEtwj3=0DD^(iB^gaODu>+}lJVDTw-KuFDVho2wRS)iuEMlB18nJ`;3=&t&PW9NUlG zFT$z=+x@c5xB(Df{`N_xBkz7&@lm}7a3pO5nv$ouFuD+%UCK)!S&?e~quH&TCJYgW z!-}&BaFp}CS%hG$h<1R)V@SP&jwv^8@wG!ung;?&vD&|)m;gcL5CTj@^j5yxGdS z_d%#pSVZpOB8VBdjln8cj&^7}M-$)$n)HyNPhNbHvhN~@!R{`6=PMOB2w?|XgXw*f z2Nt{x9?FF@KC|u^Pylz0x&7Zg>A?SjfS+vlAOvRdL7VLLkQPJjqS{KS;L}I^8*laK zct+JlN7K5%0HD=dsAv;|-0)F7qccZcmGKoG|UC z7{YWh>^5VhG^1|!du_r_3Roym4Js3#Ogr{Vv;hXKBMh4M`1Xf(5!b-ocer&bx04Gz z#AL`W!EMds*#lR28JO@rAx?M60P%?~3P@Y0Ox5J>dH_oUl4s4Frn~?il2hqtZ^t(9 z`l-uf$1&Q=(WP)iPL^WouREQ`m;)|5Y<2`t-dgYoyy(5=E&usNRzYOl(T5U_cR}tx z(bfvk+yZ}swVPbn!9rDp#5B*WdYGJ-JSf-2QlgD67ilO>r*NN)#0$3oFyQbo6vX5a{x&D3I%fk67^xl*t8?JpMr*j)1@WJWG8NaAXcpT!YYTB0Ru>+qe2JkvLLGydI7A#l$dk-tJuP-DaBt~gBaowIFro>c_66CevppzAlUgs zKbcE!`1Rhcre_Z{Gmkw5_(M?!K*p&e0CXIvqK{!xv&u^`d|RC=%AU6#fH~6@AF7RG z9$u`@H%Nfldgls!AuY4lx(=88TGLU&YCGNb>SeA6?C<7%OpG0#7vp8oM{7w?ZUb_{ z#Wzb4#aG0y#dz*cCcz|6^7?8XVi@l>3{T341JSt#LgtG_(ERi{Urc}Q1EjMMFRuV+ ztMULx`x_X(PT%_L@i(ZjQn@fk89go}hd23K9Q808SD#xYSJFs)oY=7zR zWwU+{xx-*5sS3C=Cxl}$5X7($_@FT$b#5dpq1Q+({LLf8!fV{PvlFL|?*-1-TFh|@ z)OPT@x|!xTEJ}-GL@_CPg4~^!PgMAoPFQZKf)itx8p^|L{t7Br3z8tP!Uk~4kx5UM z_l82!WuBt~V}^wSb3Mh8)*SSQyTUK;F+9Iv{okyp)(7wE8oE2+Od7t76bY} zU8K!y=?Nn4E5W$r`6(7Jkuh3*Pfes!pT9{21&tV;?eMPv`N%AlGBJ8ZBa|P4-y)wE zL&G!ua`B-eRJ~+_UPD|s}RRM1OjU(Cv5sv_1>lI zVM=AVt{hM}Q;J%;XlH)P=+Wwb*0{3F5h?MpSFy`NX+>*86pVLP$f_I1w$?BuqbCq; zc4AVT+=}6-_d|3V9wNR4cLEOC7nD$}MPT?1hikth?9{|qlMy9xv61CHTudkC@<$iQazL>(OOp!HS9h&_3t@&ELeH(;o5gFod^=-_B>G>i|mAJ4V z6T2AP+7w^mPz{cV+CJ=fg1}YE-8Nbh`{XvQDH=EBGj=#!<9w+5s|T-dU5~EE7q?sC zG*VAuBPg)E&G4n9PpcA7gKnm<@}N&(-;6`K6$y2F={QUe%z=6p*N0y1UR!w}0tI<_ zxCF+_=`N1cqA`tx<%&G!<^@OVu)1gKs%8QWRmIuUoZY zbLU^KzlbBUv3b5MOG>xFPgY*wAK;wVD&Y_hH9s&4O=!?lCb%E$@ePXKk={WuP&wW+4FcCbNp4R+Cs zKl(FsnQBp^d6w@OV>Mn{Gg=uyx%xXE)4Y5lG9GyTgq*WsCk?*@2w}ovtF?NfDHID- z+gX>GH#wu3a-fmD@$<1|K7DZk%5tmDibmj>th3s4?jQUE$eD>U-POfmzTQl}`VZ#b z1!>{atF4`r0|mEvTuY3)HwC^OdP?Ex6C7j+MTYCsxf3O}Jlu~H=&8}B>HM=x5EJI< zcbkC04xS;tzVPTMkpe}2hpP{`{zIz< z#kA;2;he0F@9j$PvWpm4D2^e_jI3{jjaI|Nx_J_qf7OURUV`HnVag&5)8Mumw1ty z8;`M4lu|hA_aYiKsu(7V7boimn3~o)wr9oW4kFMNG~Lrc(_foo+7UxysHV^v1L*|~ z)G^K$r|gj{fNjb%LcZ!g)f$lZJ6q>vrhKxmO6?*4jZPuO96e?EM>(atg{a-c(Z1>tGn&3k89Vnf_%;6_OcF&Nw_>6Fj=Vf z&>m59lD8gC)x&Tls$NA(yVrJ46ZD1xpm9usr-A<0cN=K+0YlD@-LG3&E z5LKu`*3*TG^|pbE4Q^Yg(j{Ct0z}3ye;S(SQQpe%785%* zUAAxD?r0#5cdFor6YZsgjEA}t8eV+W{2pIZ#AgE2R5#CssRC`2Vo3*cjNi$5j4C+b z+g?BL_tc%5?UH_{O=+Yj*RDy0$A&Lyx##(?A4w@*jIs0|Eh+;T^8!VO$s;$4HSl=Lu7|* z4i%nU86?Tjm~a2diXb{#>kISi3!&yr!oYzUy*7M3fccu2q{y2_cH*_j6%|NFf=W40 z{&B0MP(oKLQIBUC&RH@*x=cvU@pdS5<3Z}+Usj~z@I`*v!LdGQhfRXE%j61<(#xgZ zh;I@|_8J`G^X_Ca$Kf%!G@ZSkp127p*YKB3O!Zn6i0&b%v|rQ>SQFjQ`gnSI{L7$v z3E0=N$gv8O_zdS9_rBYme+CD03eA*9*)MRir{zTHiEzghE&ibnd>Wap{vb+Wyt~^q zFJdU~8ZHJUui$!u?$1)13GB;0i)({)VbSL0Fw{UAl#Ono=bN= z)QI~RtO~%#Y&&+N-}#@q&_(9ytCDkB-X<4Xz?>o})#t)iUbg{4@Y1<7o|X9BkFWEe z0c-h#jEk0!>*-!MdNM@nb&X$Fdf`S3ioT+ElrQn_FRbqU z-!i*rfMYEdb+Z99(tV4OJ3@VI&M~D$>zWFOp8OfVCSfu!29EjLXu&WDcIf{ zG^M2-Am(fKC+rsUnkv}>;oZHLz}Ab&1p`($d@PXREO$C3)^!b|rI0L4^pCt4i_a|^hjlhIwn*_M~vBv{XM(( z5NZ>kD;skGbCvdy1<$xDj-eg{P(nmY2eaw(h1mO)5+Qb zscJ!TJg2u&ZoSMqux@kQz%vr$t)Z^<-&S5`!3k}C|GDP{!irbYOHWMMO*u@Tn&t;0 zDD31*1ZG4LkLADZ;eLXA18@I#z=4;Bm8CP1FQ!y;V@%{7Yap;(h-d}`$(xV1bY^b+ zW?=ev?(kyd-fFPGp^Vugq1#jRfHs5rYJ$AhwHy{_uPQ!W?LSO1)mOS zrye?pX8j2GPWT7rj#6T&k3+Zqy~c9@uS;N=~So*Yqx~v z!Jmsf=|Y6Wd-_y1^`>TMR3wdmvW@GC!P&Ot z7fwecbncbOk;)T)Z-ZL#%jLy(>*-J0C4E7gycX{XZQVzonD{-snWULzE~sY?A<@r1{8VCFuTs!eooI zO(Tt0zyP{)xL*`G&!k;w<8fkiLv)_v3Gr8m79uP+2NTja5p7!-Tl=b{Ri#db~QhcLwT@+)!6CvuFl|xmt?NfMzx~o-T1%I2M{Ig zX93?fqN4Z}!ec6I2iFW95i1+lhEoIBrTXPKBQHraX(!9(pbmmV^IngbgAk4aH;sQ_1gpf zrscTXmObV6mZ3ESKv%{?wJ{iysxJ1kuYz!sJll$MwD|~v5IYn6UYN9?d-@m2vS?yv z*|>#hADcTM%o>dNVw2PFj(FAXJea#fts_N&5MN7kOO?MO;AtbYq{%{gLgZ}g7ol<;h69Yu1&=Bd0scMawK@a9gJ#FG1q+(t`N* znmu%4%U+Ybi|K#g|&uCLK^)n*C8pBG$&YrpO2uBV|9+^t>a&j^b>)ek!MzS!QgX7qy3@cvlv z-08)V*Ez+v8tU-D0kguhJl5yjd&z9Q`*H?_cFZk2cHS0Uy_&o6JdH!DZ^cc-dbf4a ze=QVBX8?P2%C<)GH1K#F=zo?U)Eeg@E{7-wMQr}KK#;-GJ@+!OA`c_PUBTsj@$X6t za@&&j{mHGVgl1hcc4(JY;<$y=DI{HIR*@G{dbCZ~jsAo8gskYb*kBRxk8)qG6~An* zzmzajLOH7hp)$h;KbZD%k*_@~G z4f|2&o~3R22~~hc?D!#?kf>iDH{FY`{wmxl?S3WwWqseh=w#qHo(@d91X87Qo>tPm zo3YQ#$brGIA+I3$IqH6!%mZE=**4^-iB2K|^XK9c;ax7s%zd8n1*gW{_GG#2 zbi)SrhSM7xvbAdu0&VVd=x+~=vfl2UqYIJ! z@!Y{D9qQue&8yE-;TQ1*M9f#0*2wjxBJL?S^AzgeV-GG6M3FOQZ=JZt3!o*gl(5oc z3HPzzCBQX51fBrqxuGY#j&8%&J#8&7uU2pk-+}^)J=UC&qkBz~m;1i%cv>JQsS*SF zql0M6^p*M?(Io8>`B6Dih77G!QBacTb$O-H6 zMtk{JM@QyjewlC>S;PxdP%v>gd$>iC)2ec$uwnPW&{9+(76J^CMek;RJ27VUKaf0g zN(<^N0TZkRC5rg#G#yRZbgKN*+M`7fLLo=^PfFyc5^!3Y(blAgi}t#-(@jL8J(jT2NfP&*DLMvNXiO`Y+vWn zVaeOK;XBC|@0gB2e#MP7bM21>>ZpeX8r$;@IR z`OO{1m>$(4k3$#1j71RW7{xTk@u(>A#YPML-TkD1R*XdPz1JF_)cxrfX;;L z+;51aYvK7kE0d^%2iiKkF*u)iy3=bRV88#SL|IG?)+zb^t-)gZ+-I+bjD$i1f!AJp znOf~(bGLu{FNx)Gv>_JXqrR1N+6X*+^1JkEv6av2w=5`YqMFE1cy_7;>$lO_1R1h4 z@*`Jm*3E|P3=_(GBNq9^wCLHU@cws|d{nK+hoWXzhfwCu=KJ1A!8?Ky!mR3n;BJON zIvMG5;Vtm}0gJSXZ9!no1RrM8y4LYoKHy@E9P|TPX%q7~+L_AfhS`J&9v3l_(Z@WA z42P|i*ANMo&+3An3D1;?D?i&+?)NxM* z?Dey0)yMbSh{=gKX$+`eqWp3H&vaGHV!{DxS0!;()Ph4*QI|ZCqWU+xJd zCc2(ah2z>`*FrT#5A@8Bv0a8vWsy|gR-0>DlB?l#qA*0l<|srs!u+l+xhgmX{tAE7 zZ0m^t$6nmx-fnKP#LxOVS3g~kK8PZIEVnwRCAGQKN@-__s$Is;#3ZB#YX));!QL~w z(L&69Tg+CtQZLf>UQe5UFl_|L&d|x@)U$h=*J8H0KE(?qq5dkddbajy1JZLGFD{*W zz z#8e@-JkxG9HlP^*3t2?OMklpWc=epU_gIvgkyL>zoevG`i-`(X1rrm4>+nPYsbbLk z=zXILa*r%Kg;EdqHg3*V?-0ErV()TZ26Qj$I+RIS#g}T&U4=-;Cb+h?}?E1qK|uvZ^ZX$+$+wy7pFrA7#v?7 z40RnZu0$_ViAJVPdLRi%46l7vS~D-k1JbV`rQBnHEG9uVgJwx^Jh8}pa1d8+(i6yy zjJPjfV#B(v@GBWcFX1ys{0ls#;wfIt%KL_J{XY7@pEx;UK|Rol0nzkvUn)dR>bx!j zCw(iJ8>>qr#rZU_QuuL*Da=yYbx$#_m z<-RT7urMCpU!Ci*S#u(r^EGfsP-55Cz;167ay59i3q8G?o;~^SeaR_Pc`IsKFfPga zW*ks$i&vxj*E+XFxpxCEkFrCP-Kq8Ncz0S>-&W<6w3VH(-J5*Lc%Q6slLGI0i7@N| z?#O3%l|UTqQ7EWev4=Jaa15ZIiSS~a)nrp4encwC@iOhusxHF74CIX4aR=Lg^D>^- z_UO(k4KuIT=@#>yc(%!8nBSHUS}a7^@Z_rLWjjIkjq@m6iO8ZJ8u;OSq=TF2qE~#1 zw|YXL+OhO!9E5-WNB2vlmb|rOt_Pa_p6yHTlO?hCl>?1yTUg0tM|84tPQj6PCHua*Rja;X>B||M z*OxJS&znSYQ65J>8QU)ADzwn+)78O3gEAeV{LG+@oJC1|*hD1AkvAbliX32hUr3ws zI%|u|PsgqSvL~@a!FOz`VEG17)K6k-o%z+rb5!yr(~3W1@9%7A3wLQB4$esyr?Y;O zl^z#4Mn~J&h*I{u4sF{_u~qXJ?k4DYE<>m!KU*H* zTkkA6*!A7@GWCeUn!J~6P3tmg0^cxo+15{=d+ddH30><=8W|&1JJGpjD9noPF^5hJ z9H1iSDCUb^dF_`AJ(YYvJF)e-t*>XP;DHB9%4@extmuLumNZ0l+=>?Lc7x&zPw_Ty z;fw2g#VE{fct_6{^aTf*hTefw`yD@PE<*+#+V4a*TTX*|f}Vj-2pBR zv_E*TI_YmnXmmXhaZo&fHXxlpVlDYlARKrmPlh6k!<&qm8EaO?mx_%t^5CTJrBASz zGrFKm#FIFy|Lm{BT&rg_9K1L4RD7>e=Ox43X>fAuM!Geqdi&&JBab|i`Mb7$Y1>@K z&6&6Gb9+D7{>k1PU0Q{E+hD+Fn*(b(ywM{Kyj>V|xi82!((`wi-4x6vLWr%njmq=d zX7@r0i8Fjw)sv$kZ(Q*p!%LFkWHVdp$HltcXuXz*L?We?7U3b%$~E=;wfUp1my@Dj zqhJJaJ74ie4lE30TR%M7hu0z(G+0NLs=f8@7+w`^wPx#Zai;{ihKyYRXV4X-nQe0w zx;nz2uh{C_{HhQ6-c@?TV}rxU4rQ7SG^Zc~s}s-llBdZ{)(y4PZkW|gqwuGxM=H{) zRk!^}AqVwU6hS;Bh@U(-?16M1FDDO?$!R7|}8nPw`p$R_G+W<67D(k92uWDtS-8A?YJm`i)1G z=x>_4H*A+VVP9cK%soujo;e&G^J#;*VOdbjJ>kVR}_n3Uvq33zq*nycrPYl5b57 zp5Uabeh1FQF(p@H8jICuMO=_g^o58GkAVhC&C^WPBG>g&7M~e1_fuDBg|&N}Mk!Bd zd0Qbu8OvRp(8^beW)Kjl-tgxyNds0d$kRTmlLSt6YrD!IKKFa!dy zxsI`qh~%o_VZZ+RB|f+P1%vf~-_NtR990e|oUi&g7ft$U>V^V~an|JAGAG`6Y~YaJ zyXmPHG_2bHfP-(L6qU!csIQ+VY0({T!&vJS(-{Y=Ytg73bUnzbm?EAZ({cG`^p30A zQ7!I}QeKLiSq#8Tz)sk~-bV%XnGwga%yeg^&8}Tji^Kdl=|NHN)DJgV(y_%ysnTFT zEjh+KqH_`MP)I6II~rk3eQTpHS8=?1st-n1Om8V13y<6f-V@ zC{pOj7OT8D!_y>2_F{E}vRUajMC6N%oqJq|XkPYrXf^c}*EnU9kNWhEkxE+R=U-}% zFGh89d;KANs#?)P+8&0CDd|ruUsMvgkSIJjOS}m6<~eJdj}wgF9@K(PbP!eSsB9_G z{TVLPd~z=2I(0y6eI?`h#(+9LpAY$?M(Nh*#WA^s$0 zUc9w|V(>vq!wm_J%^71->n$>E$=yl+#Px+5fR#S=Z&Jl`PuukLcl9`Nr`K@zzLpxlH>%37e)yDG(|);u#c{oyo{Yr}{gL@>o7;~;WFxeyRm1Exb3GG-PwCe$ z=eufyrC(pNIqz`Fe*}jhlx_1eIS3DochMHcviHwiIw*)Mah+s{br8k%M-br zjGB}?*@Y>W+J3^FSkbc#LTw*lxOovA!l-g^`Sl{i{PdvQZHlRK+*B~WV* zLFAN9gfU&oCWV>9!Ep3XFt4WOiYQPL+{dodc3R55UR(h}c!bhcRfk3N;{pX<4?KU$ za1fMt>(;Y01vweb>CEqwPQAv5-=0OUp}ToLIa^&l4*cb{$Pqb8qbi!YAA3`_C_8e| zgzjGSuObbJpSbU>M1U_^KuX`KofLPa&7Z$!53I-!Gc4uCV^lQOT!v6d31+tlgoLShze?UcseW?_sHd zLo2>*S70Dg!b8QTc4;6Yl2*BA4`9~oBtE|^d%CR*9*?dlc(ZThI^kmdnY+Bj(z*4R z7XZ+4Ps+HeS1>5Mv>4%p`<(+pZgYxc?J+Q2(H8JmDDL)ivnA-xZjH!=h~ejK62xp3 z>udivY^2d4@NpQ_$Hp6UMoAFot&KrX2qMx}D5keDHt zq#WjKIVa|Pn)BokT_vYUYzs5xY|L5Cr^J|JV{#U=oKiMtQQwz(U)S&R>*n9~dOn|z z=ksyC-yi;5rCTDiilGWEgQ1#3WR-7hajZw5S9}K=P#R9pgTZj*&XQ+C`6N}56%O6UT7(wZ}sY9QXL|7QgFgtlRSIhve6DhJN86x_(35pOme1oq^(Nr)Y{8nQo9~~U z%JP`(iOMXpp^mP|JDw9@CAF3ePEB*~*D;p~lglv-D|@iLnEGOX2lb;?o@ePsDWh&@ zoLVTJrR~_g*vVCSJearN6ihNsQ8Gt~>b!-wfPF6Eu-Y(Kscysei_u_mIIWdVIMEU+4wJq4{DL(CK zb9-nouh;Upblqkt5*%IVj(dO8ZTO#YuV$4Vfal9|+cEkAp7q~yS_@aFaLa?P3*>NT zx#xdXmgnA3$f!`Qrq(hU>Z;_jG6TLDeuLHgSQ%_-MBI!B@K>yqHD2`kzReH)%r zm1XIe#bLXVslnY0jHr2kz|K`cX+`~0qlIEYg-rpOy?&2Nz>NTS>@xuY;4U;~^ z^nkTZqi_?&$R~+lKY!%8I4eA^L7Q{bfR+6D4LA4p#cTSvV$aKP9CX}|I3(#k53PHg zKmK*|cdO5V?4VpV0EFa#8g9&rV>m!OJ}-TYn3mvUq^5~XXUm0005Wd&C zq8PfeRPCzBv>EyEoWsrd-Q)XZIVtM7jf;EkPv{<^sI&T%M#QkjKm6#)=re$rdvNza0>`%_uVmd zdW6VgMlM8%)Le49ai<%^=-hdm<7M;W~3?yLLXFm ztFJl4W>idy^}l<@T>QN1KC$Fyftvpha|YO%xM#H*D+57FXK7dHj{?8l^-blLCB%~Z z4gHq>!P%f-B(rL8+c!4K03ivJG#}*BhRA%aX?*65DM%AcX5l%QqQidbl$L@1C9^yj z0-fViP^j`5W=Aayt^xh~s1AJo8-KZSE{TmA4DpU59_3y~$=trzZ5*0;eJ9Zq%34p1 zWLh=~lz?ifdNe7J`pJGJVfbFw#eyH+oW%BYa8SVs0me4%uD=g%1W-Y6lu;*wFQsomVy|xGFp9&GnO+vWx@S(yeJGP<3iG9-!aY4&D}@ICm^J0j2g)6}GlH;)=k)`?|Q ziQw}c*5>;;f#Ej34BM7Z?NIgk&l#%EmGk4(|Ru1Rc23##9=_-;{@uUG$!uG{t88On;E%QVx6e8lxIE!q*1h~3Sx zwP?HECDt_5o2m?O23~M4~dQ86N}a0Thwd~_8*HojP(HQ*HJerUs5Ud8ySNOX9R=Zjf%J2M zrO5Ya_ujLJim?~;ka!cP${aT-_G(L)LwXrOV`U#*!sxU+tC$4JJ9kF5Jv=6>t#!H{ zw2Iq*e=rAXL}{DEDR8Gz{YvN`5XNr>45a>AL|zKlIQBk8d?m3uS6$Ub38`xEeJG^d zUz?+pCnZs5s>sbh<;_8b)=QOyWb}AYeLIG(x1$|v#DS6w-wJ3s{Nou_Gq1EF5?rt{ zOxpNYHv-(FewSKC61Y3bLiQ^5VFEu+3AI37yR^=jN>KbHn&wQ0#wrCdNS-AFB(UETYpS0!wbmR41 zu7{GJbT8UNfUl_9H}5@}2+Cl(kL?QleVZvO-kA6%>pj=m>%>DZZ8+xSOZ=po<5-)& zKD5{#(BR}yUTH9XD<=l6aahoLf)EOi42_6ev3nYgD01p?`YN+_ z>Vv)|n;N^44M8{~7bT5cUdo{-=S1~#6&WK6?P+lId9^$Vyl7oa?8!acX+eFKudEJU zpKr*7A|6x)d%QMrznre%VewUQ4lA|(f2}LC zC>pYJW;XgV&`65^8zo|{O)QSj3)cShF|l}|R4G!tlzR-?W@MeCY1*VWKResSJK&zZ89yq&3|0DEMFDP~8 zHE45Cx5$)uHqvr2P(tX2R;j6mWtU5hA36UR3FwDaasjQ*O#qXF`sEn_g(ojcbvHk= zt<=_=Aj5s?_J4P)<-+YJH`2p7>@FW5lkBu-*ov(-9tw=}(l#*OeVi{d4ppg#1Qql! zujmw1p*wQYm}t+dSQ{SDtA3KfMRdg=!4$o4r{lis1~1kM^ntr7;DbaV=V1GfZ$FAg ziUBS*74XwJ+ollY9#aw2sd_(o6!8aH@LPVTg^t91kNXsG?IqEsh}k%IRjZ>c{f1y; z`9t`~s*rRxr;hxPGq$`w(WbNv8543kKUWgSp-)|SZ7li;{| z8?AppNIYj_tyV@=jDy5sMSQ|umea5Wl0oNAKY8S7--%72Sa~uCzYsDjNPoIGL z5r=MacaFF6>%KmVeQLW^2WzLQ{=StP&qedq&8>FP4V>q&SP z%#N5?ofYW@-0Ad*OQ3voQXgZ0OO5*WDPwF0fKTu@ZS4#3q!Sl{_*b|53e);7a=gX; zjdofV;Qy@l@7n^v&s;}*p1ctlKJ0L=6rs!ECN%NpLW0ogD79Y$-UI5a9f(wfO0Nh% z=8K<6t7K zi$f&!VL^NrRwvdA{-HhLZmbY^G*dJ7{ju{_7y6n%XJ*R%a~*L+1nJ>-gwFN~wqts0 z)cgP7-dBX5XtZ5oJwukfs5OIc|Havc@DrRt36lS-zk|{den6x3K(MPjpv^SPfP#*RE!q@9%`=`|+qca}) z7b^x#A@fQ}+<^%{4k2}36Rl6qp(~tdfQm?(0Ef)l$Xh!ts5d zH*QT_01|AQ-dmHW-iK~Y!W3h>bC!nwZ9()tT6gE+?s|b;A5O^*n4yXKu~j|oIlgf8 zfN&V~v8YGv^HFmVeMU0*#M6HDQm}$l+G=vY(V{k9C#&R5gV{7$YWj;IL_{Wuygl^gFC7dvY7R&8eC03m>8vs1`I)G8aZ`m@aXZva@g( z3FC>SM=<-WeDdE3Op|LS5JNwy>7^JMkOa4kRvD26008HVzcstXCmQCUvxtMH6cMYR zi;3P+#4S2K}oI9F!oI5Q+o|V3O_Hxe$k>*)3 z&D=gqjQ);P6@p&TKnN1=&gl+X<#Df_r8`?UT1}ZXysexhxMP2t9fN02IugXwp>ThX zYD#yPv5n~%*@q#HcQD{*aCFX{W2O7VZl z;nauc!*M1o$Ox@O7!z_+MV&<9Jn5}l=N9S@5TL#q1X>(M#b z*jQZhL8{2D}&AGj+@=9TQK>Lv{F6hEInAzAXpW>H8aB^f;& zQOQoJYLG8hFmLKRKlJW!x)op3SaHKD8*!VR*kJFxrX!Q%f-Go|BnG3q(*FlG)Os`c z!>TX@&P=uykpdaoc@DS8B{OFR0!pnAyH{G#MntoU`f z23$NIS0l=hO(EXet=+t%(VpOr$(hLmQ>rRaP;1L!Pi01(zcVR!`L|;+pmWqO{9BIR zD8a2BWdlfV)K8gVf~^e7th^t>NWR;#Ev|}S7!e?pXW}KZbBTC&F{u<$fE0f{$GY6JBi#Njan}zmI=uU8hH?VnlE!3N4(( zfjG7}0#Wc>YaxZDlE%t6u&T&^5||dsb6DT|6J(Pn_j`^TgxOBEIpGJ774)pYVn8wL zTBjMnede}u+MAU`W^xR>rW1_K+$4a8*n?!^54QCsRkOUg05XBn+ht^vnj40J@n~U^ zECubes$AAYJq!FiROejAz8K;f781<_#F5%rl)8*^2qm#WQmQF`NeA33kq&ewnj(p) z_`t7hMk$`hN6mJ|6LqSkc@8bWj*XF`TTcjkZnU4T3Xn{I2>2XIwCjEpHNiX^rS0f+ zrk&e#H2cJGfV4DT6iI2&wtS3n+EGwL9CNdUIJ=U_l%SM&lM=~Es5xBWe-PPw7YAa0 zz$EzLOo8SYkrdIOsu&$+-e1tPtSD7<_Hsv7zAQCn_w?D=Eu34Xq^L1s3&EEzAC6l#`#<@!IcZBzP_sntI^ zR;%`oLVT51F3-M;`Q$kPb^s@pCz3zwTyym=5@^zskR}8tnN3j40B47;1=tHIjRx_@ za4@E%hHP5LU#EWK0yp?wVs{#?;0aEWp5wv<^7{A#Hputb9*TT%B~Fq8E=AMk=af{^ zraOG$m#YIjtYi)8Fg|TjT3)$TT^y`k>uxDsL6P3PvVgHfME`*@+*XFFOH9flQ5j4E z#SGJdK1YxH3kHrC)(6St7^n0~fDF4NiAicySZc!uP2Z5NJ2@qlIUjh61RLb7J0!Zj zHljXoWj`s8Xp&Z=8e5pavt1Z(kIwn@B|neJ+cRh<_Aq&>hsFp=`u+yy1;k{TP#q7e z9jOFG^>>6>!y6xYWO|);hz^u0|1(~qi{98<$sUMt;M4|e+2)Raf9r0S&LsGe9h92r z=ysPvz@IzMAtsY2f(KqH+(juOa~LyA$kWT)r9@cpx&Y!%Fy zJ3+7)M*mttL#OI|f2UqFlY{ zbOLx64ps^ySGe%!sb;rx^Vn|iOdIiI!+86d(Gnh@8d=qM#wutm*}YDiL^i?7d!?Z0 z+#(P7*`c&*{+}-tBTba&j}Fb;*D`qr_`pKiPf9dg4C!SyN_AhcHB^KGeEz@G2XH z%fp*>TibHd4ANzsru6eAIP&a+n}_Bd#7ZQs+pA^Ufsla8h2K`f&rtw=A>u0?n0%Gp zPK?HhayOcoj2`gDJunch zp`4Z@Ane3BAm~f~0^sidtR(R081Jf-8IhU8l#eHZ8%#*K^pKo)fb9e<>ex~Js46VR zFh{taoF%{M0~vjV&j-TGt~)c_$>$D433o|@fibz8MUuVa+*)U{h{rbog<~5f0x|@6 z8txEvfsPg6XfCqqlndx1bA$;EbN7+j^9}$z0GY*ff*j3FcEDsTwa4AJVUYc<>aWC1 z#{g4^(AIx~zw0(!&No-FGe$rW`nMM%9c!FtlIy2!JSj^$4UkRI?QEl}q#Df{o-3$*Tz)#7@c7iM6*Xes=);Y07 zx1grdW& z&GP~ZndmN`y<`{~U?%sdbeRQ{=T?3D(wI4$MNJOyy4gIqWm8q+Qexj?jBTz=Q$E>% zFO_!R=4v;6B}MoJgV0)IZ4OnV1Dwuh?!}6v4(o>)Dmf~t_+^XKQp~Q|^qE2Rcgw{r zI<%mjUB+SNV_$j~TZFTN**$61z~bB+k{}Are-QTGN0%-Qkhwa|3&_UTbat|RA(nV_ zbxfX5j%Hb54WN0->5>-a($Z<2SI(D^F%Gqm0x7rtCCjF-RRGj#D0e&OUCiOshZ|rN zY_#B&;X^3?z-9p8o?Qa!|_Y5K(6r}O_=o|)cVL2fD?&cVMh{*C{+{I@m>;o%gpItG4e|qV* z0UseqL-t}49&HKmN*jk3y1@&Y95RV>3tZV)BMBXvKgHjFKsbNzuJ|uYEfJu$8>mRm zx8?uzo1*Z|7GQstY_LXoapLJFnA`#{a-p_m%B)zGLbn5eC7@qTrPeNxc35s+vPo1gQFcbuGRVMl&A5A<5Kb)wQ<$rY;ch54-pP~c`Qpi^L75?~B zxj+|t+s|Jma_f=-cCTd$sB-VxR3BV96nWP7f+@jh(VHX`IV}GJVM~WJKEi3;=!f&^ zpSR-@LBI&!wEDTS41AgPa$CagI95}`HokQ{|Ikf*|R{@3h#(+V&5 zw_)`QLwEVw3nv`y*a3bXK?I>q5|`W1Pwv2~M2;2mCo)`lfnT8MfqMZdJm5 zMrU)g*w(iCyYCshx082Pye+b7<4>O!DdwU-my5a}^4KCy3pb1Bgscx)^mE??{);b4 z!V`TsjnXIT^}dy3M0PMl99pfit{7V zG)u-M-DHcAv+n>(2@jB%9IrJRg z0-qZ)4LX{SziKv&AJoAfkU&Xg> z^wYG)RD(dua{ZvbLc=&;)QXV}$7zveh%Qn;$*$u@f0#g^d~UUu=JKMN?$13#nJ)wj z>bC`zgp-Ai#Y<5c>^;XFS-y`Q68tN0({{yhQErNMfj06DN9Q6bl2%!AMS@hhoGhHT z=SEx&y=p?u@reGVk`1138+Y{DLst`oC<(C7AhrCIdGYy031G!HhbJ&JyO_tnI!cV4 z_!hiVt3x{xsvpCHZaK-s&m_(aEC{qT`f4syITZlmAAEev{kG60bF4N$BhEL@CdPm5 zo|B@lX-~tJ*J%&v@WqZ3Hfw$RHPQj@ydZaqwz?pBW zd0hNq7v3&dw=b7Y@-Ia>(i0tj80q(Mjd$JHJgpo0gm$!~cAmxKgILDmWe-zh>OL`i z@5RqhHa<}?zj3E8)osX|yt!5weiGynZYm6dx)Ju_Mqk;kEU9d%p&_=QggVo$==}BT zQq33FJro}1gx>{j+Cznb(L-w2!Moh4p8dLcxGxG$tj6r~hDB3FYl2BVz5+X?9glj6 z974X&FOg1we0k2f7|tUD6`fW0gw%>M1S5}w&wP?>Px-`go+{d>M4H-9-V*d8%uK|} z_0UR9fI>@qN~~+3cL`^RcYyqW0_oWeKSvjcL`OgP7_*;3^fAF`I#}+V4OKfUPv%Oh$h3S&i2>ISHmeg zU%d_EXK}vn8iBrpWdTQI+!j&$k~ctRh(^ zSzG1_PUon16(N_W+9Y&$L|IXTjx(=)JL+%vDQ49>hIF(h%sWW7m3Z3*L&Dy)MZJkW zWwAfe!0g<9u{>Ku8>zSa!1Aerxw>w_!hQ}*Cl{Q5>{pc^-SGOmtC`=D+758M2U-O; z`9$^ZRWj_c<{+3QeEVSoDQxa^fGwXdk%xma#QP9HIy=}GF>z~`F zvfdABKFCw0+^N}M)|@mByLwA%T@m5br(D+8e-od#)ChSm3!ycn=zb5CuqX*D{VmVy z{6W3PF@h%&v~XK+L9Y3k7}MI`_k1Whl)r#){7es`2OPW79YlwO{=@5;F`qaiq#6G6 zPF0cmL@-Bvf zUxKKidHuj1SJ!TpGBrZyJ+hQ8nYW{ z>al}stT1Xh2cugsa=3K2wQu`{Wvh8NLf$gh4rRZ_{AthKwqh?uA|sLiAZvotj@xz+ zodYWKM^%(7z6a}1{yx*7`Qrqk?W79g`jWF;yiY34MzHt+#>r|^=&?751dLM`?BGLH zJVvUbRSOq~{?3|D2xl96mPv|;lIyr}F6#kCj&#HEQJnqiB%Yu(d9rwalm(%cwDC{B zMBlfflGpIy16@!NA;G^Y$O+pEaIKf~^CNr|SR;NW&~f%_UnU;)si>xk6t20Nlr$P7 z&A@61m><4-l&Cj1i^E#v!lKq(FVHT;8cKG{0jcsa-4fie)|%-yfpc$r-O)bms_J4D zC9v|(GpP1#dHm1UDgXBF!Qcyy(TbcU*XdGDarVm@bl!QYcxKaoXSo{)7-QflSo#t(n?Nl+uEPUV9s9?VAtGtu~><3&}QiW>n)6Ex=7hzeBO( z75IXi;^r3}G36R|U!NLBqWJGW?ZD3#1@4^DM{(H}E?HIo+o#%1CO z!M-38s4>rwQ{Vn|D1NhRPCy>b>Sr$G{0%Za`Kzx!e(Sf`OWCdV4V&xQp}$bMbvko1 z2Y35Znww%r6Zo~O{MN4HPmuIlk>WON-cl%1!D^F+N7Ps0^B$#YHJXr=NM>Hs(!<2Z z0gN9{+7^+Kv3==$n{^ibHr)R^rsvW;Z>9!@*83-B z{NF7QwpTdSPcNwa1vwpzOSv`+uE`q(_8E|Y8Xmk;HDVYwP4%(9h59x?6#8>xU$ciy zwG?QzI(-TsjS0_*4{E57O2)}QIOAUBLjZG%CtSKha&^b7`rIoDiOdI~qL z7gl*;ADfXjQe<3V{hJyCao>NI_3p`WVEg0?aZ5K#f`fzG<);}9Mo%qpA0eOhaU~0g zM}3Sx)>h4fB@ptLAFG7QWsiR>O8}*c?`ty)Ms5f`w_fqdTbdbE!3st?25)g9=Y(d0 zKk8Puxx{~22=8`j|@u%rx_6llr6XVJ35?vQ{1vVHm;<_Ryp&su}N4N?RB zS9`x1AwUVvg2j{3Sino1>tntBB^?p61NWdGI z8szIO*|iM)f_$H$5-__0sF8Z6cjt3rh=kx2TABu{xyL_4{nh~HY*Ud?8z#C|Vb)x) z4MQRS^IE38SSGc!Z|=nC=WGOVw&^P4hMhUQlmlxC@5b%hqg0g3CRZpL1E~`m7xICh zJeBXqn}L{`l-rk{--y0G!Rs{4&8HIRIz$8Q=%@bx)u-YQRMWvSC8w0lr$U{+LF4ln z*YO7{(RJIGRizQezFC`vj8t&j|Lo>ecMJHG;7zw=Jh+pi-0Kv^`)L$zA~Z7+fiDau z&hKTP|MA~Sx7-gUJmLOUXp^Y={sxW5#_gsSCoT}+{%vvEnEL?&6wskS$Z;?pq!-vk zc0=1zAOE^2k+9^M9=uX-oF$m_?@Rp-cr5~T)nr#$j-Mj(OK+8eXBx<9`t*-0RkO$X z`wG@TkJ&8Nlm*X#`cb*c(z8omQ?(jqY7@Uz%4_zCio>CYa0?X1 yS7&z&$`h7Eg$sPo&suhdPNC?~i*HYdyo6=bYVV$JrBOpsz_m%0LPNfhZnosTqMlx28ZKyeZ;a zz)WiCeOVAFy7{4+vWY+5?gBV-jg{(6cl(VU&+|ca0EX7h?0val!A(%ywJXCd5ET>@ zb_N3Vf&V`bR@i@&|MPKx2l_YpKOWJL|0e&>LkSL`0RjEb$1nW3P&;4k<}5v;H&B9OTn zoK+eW6@8|p0Lr)OLtsHlp%^OY5I*RN?cc&J$U%WT=sWaRqy#_(@Yxik`7ksZ+5Ix! z4e!4%#lc~uFDIeDR4ramg6@9Q??a?9{abeM(;r>C%Mv!j_RHZ}4&B=okaUud8vH)e zJc>|>!T|uORU%ISR$>I_u>Rr*#~Ls?fa+1w0N9j4Zwmq0Ll9Nt)`)iwu$7_V%^VvC z2yJ9>L&6SA(e(5s;81l13CzDkL|;=u+14Bf@j-d-(^vuWEi0c z+x_eLn*Uni-kbH-2-m`99?&e08p~Z1tqY6yXZ}UebGo32^RU=)qHZNM6P%V&E1^Kjtq}jf2~CiIpBJ)=U$&? z<;txwu;y>Fw_JR?Ci!xy99qu+ugy^jhPXmaWa#;J8cxOW;sh=6N~+qty>?9T>S*$j;#IVbO8Wil zqdK7&$DWL6Ny31|A~M2PHgP<)dggCxjpOno67SRApwDrv9Yml-@c8Gj*=6zMNvfw8|t#s3`cp%=5UwA zyi&>9;_ixh9ecFJL50&yhoj`b!Z54tV-q1B+kG*e=}UV0-}dI}nyjnWn6@N!vKwFu z3JMJ)7$s^IVvz>&Rb4fjsXhq+ufI#JNP3=;81FH~{2z+>I~=SB=Lif39>9Tp|L;)< zjkU1{76YCw?C06voSqJ%8oc5k0_fb>X1}4DSChi)cs`bE*`ZZLv-{zY?H?{CxbLkG z#=rG4`iI5Ix~L02xM~X+9@TCz6-=8mR{MxBlmi4nsuD)Cma6@RCWt`p!0lRj*Y5~I ze2T<$-rOz)Xo2sobY~1syRIFd3sNTAf79K6`{ci6J;YIUtZ!7pZF!bSa3>frPLmUt z5TFG4*4u4BDN*&~cXrOkZW5!vuC8uP1fupoq4bQ5kSFGjZI(AMu-#}D9(0Y%-T0F{ zJVM?*4-8a0e36Fa`R>HBmj_*!zMU1Z?n$VuKQW?8%qD&#d~-jQPfa2GFAiLP0j?hg zlmDg-L2FKoL@LTq=8R&5Aw=FW*#ZA#?|iL{DxG+GD{nR}lv5LCeHy)-3HBC;w7RYA zRCng2XZ!Hz&avuZ{`bbL7@gwV;g5EM;<^q2=*BnxOB|fggG^0toPURIb3oX0mUyw} zqb~DpbtZg=*3uiRx=)GO)OuK#Ndi9RcJZ8$++66%-}sXkTpz$Q!pRktu&WuGyAF_O zfAtVxxz!JU4C-L6McwJOE@sg!mP#dBO$F8Zjm|!Azlp31s#F%L))sNY)u(tFc8x|z zS~6LsYhK78gN7|T;2HcN(l_?9IZo_pE42tJ6=J`$$bTS1&BGcZ^ADlpSG^dAEh!sL z=<0@@|At+9fVBLfl7Hy=%NUvL0hYqIR4ToYo;=zWZYX6k2X7x22sV1i=Df(Xm}rjES~%QS(NelJ@qzj;SB4>mztTIn@gqg9;6~CM9^`u zEBhc!LrG5frWuk5ATa*?CIL>5F9mr7Gp{Zq6a(;Ta{pO!eX{V^!NJ&VtUpd+BtH4P z;<>`k)3HFO%{LZj0Lh@ZuFMDu#V$ z?zyjbREQH@7Dsi&F6mwnOyBvskKFto`VZu5%N6^mECjVKi3@0a@T{AqX)aT>H=op#;#hWxo_b4WzEj6 zInl6~R?qbX3;NER5VQ3~EA7%;*Mk_8U)j{Gf@k;fbzw}__#e6YR{_zUed92L<*J6k zqq6>keAjnvfPycy%Dg?1@vZdX2pHWxF_|j8l(>a<~i4}oq11BLjG)nP5!RGTy<3QKq zxP2*`i1osoUI@JvE_(aeoa0>p!P4rlc8lRaQGk6)K~F>P@6V!ub3fugW^+R~pqJb2 z0gT?8I(KgT=VI&v_8j}Qf@gb)&x`2&H&*?LyBz@S5U75o#|d?xlf#eS`XU_P`Saz| z>8g9t2Ao>zMlb#N`5Flxlai`nwLd1Plzry2NGdY=^!YQX?W@zJu^QXZKMpqo8Gn`* z(&g^ubc&4194>lo4`__b*ztf%U0aB*?1t*zPI80+cj$r@Q%S&3Ga zm+OG-^{4o@cXo7mJ{1(Oncrh%8mk`9Ms{>i=xC?$YR_Fxa_H zIG$n--XM6EAS)}|vzzwe1JhZJXW+)~-@nh#17E$;IeFOjcW-ZesK5V>Htg^M@Ime2 z=H}+VW-t6^=T|u5+gEx|7kEN9Us^28(rSkNqxIT@B}jRWtm;)$3lb9Ie|FzvR&{@M zq~%#P-&=ZXB4{WPdzK{zztN+NeWQpR%uS7p&J9>?T8M-D2i!#xKw;R`R0|BgpKVC@ zN~C}wN6f{qVy7T_UoA%b$$&ul#4}hRVso;GtBlOEFD=Vw3c@pa!;kAU04h|d(BA3;U z>gwvo#x#DzpE);aKOt7BZxVk0b~b&b&n57|v52kIz+OvAT)gkEvp}s7KY#2?8^HLV zKFzQieI!E{{Y^A!%gh%VN3R%xlzvPCGr4U%qT(5m?Gz&9=;b9QQQAf-_?9N}J3F)) z|By_YI1-Z5zM-kM-y04=_iBz;>?Kk_$NhrTb}_#y_Smrg!NI`+0S}2`*(7OFG8|c2 zD5tj%vBc2JDHbLsv&_N!UmncN%7}KmxkDmqv?m z$w^5)pKENC6r*QiG9i&D=Xw78IlzS7voq<#qm1SPmFF&}Cnx5QN4Cky$vvcylm!Vo zYtm1C7r}#q7{O?{msW2Y8YILv40+v7idYPH_xC+Unaef&e0|TN?RdjVNIHa@?xT}> zk5j2$ii?WghQbJ>rd$wEW@Z_shk1-Y%N$BeN<>|yh2%cy;JEF+-_M)S`L*`r$72e5 zwezE+sSS;G7y<0s@h`c2L*Rt;^^*s$_5=m&V!}QoeK);tVscmQ?qj}|q&uX1cR^N3 zoJT?epBt|7Au0>#e2q*gWJC!r9f@^Wmr=HLt8OQ*K- zn@f9wXI&ClRcyD*Y?!f7i`OP4FFQ4v#_#a#289HYd%+oD8M=Sj2erRT7jz_4Qs{nx zB(pMp4^cbc9LsB9=S9&OvA4eK14CG*-l!zKA0~-pKmgw$$xr|OMBY*HIJ1G{u~-1iX2-e`z{-vp5eP z#tOA(gL2Gz&2hL2e1Hqa#r1PSJr?4UATk7s=VN^DTq5B65h7vJxpX5I&m4|+*`T_M zI=#J9_ZTDZtzCOYGy7WKU zy+-0IzMZzxy{z9PEcj_)(W|^n$q?zC^@Zad$P9N3fgU`i}_-vk6*zc%pE4JOa&D_aV zop?Bu%D*`19fIGcb%lx4uc{jO^u>6Ukxz!{^8f%hKr{B@XggWx#jgTYgi(x%ezt7L zr8Gi3&K*yv#e4hqu{%rtj&t`V1|Odd_rgW`gS^no-r9S8$T#qj2SHjehP=e`C$kLB ze7LjY9lFj<9_ZC`9!@CJ=N~*)r&kxJA|1vg3K;w>L(0}$ZUuJ>L@&Hf5+LvSd0|Nz zy$|vHc`5FSxrqJ!*$Hi(cm$h*G?RX6^WIt^jyA@8LW4iV$Zrf9oy!lXmc?`ag_!V8 z*tGeNtHR3e{h$en%$i_fr z`$%j54_Uf8uyoRyTsmF4wT8=l1bneQ=t+0paPoS{^`#7rLo6WGkf==ejsBB>z2@SbAw2X5BHo zxhgbNkf7>o0m1Lma%Pd#^JCgHz}7Z2^xKV)aY2j1@WGTR;d#;w^h!_bO%;2GvgLl% zopgDl5URdINJf}`L9gc5aTbBTvcJ`#ISLz$$F!yf4?9OAADZ3;Hd5}N#Xij{L$U4bNpX=L+<2Mm>=F~&9R@+QiuR8A>s=y9FUEd{;lYM zL~2+)kv#uoTsk83BR|miClRq$w9!$q_s#k#dFQ?67n-_CdN5&HK+VNFys~u7L_NrG zW{^5G3#$l(?XV1uC@2wyBuuyDSE}=@dC&|YcI`%o7lt$^&?1b9zd8~swD*i*UsTn0 zVtsooze@YsvJv9Vt~`?xXq?hmc{+;I%kV!Ey+#AQY)MNy?4I-u!!`2h(h3L0>%Re<)WRQ4oI}`aWWo0vS=BB_vlfKfLW* zL@H<1zQB9G@-aKKE(S0G`ZNWqPqL240n&xQAY}B(8SaoL=RHdamfGv|p}|+H>GnqN z)^zEp3OLAq{iw}@cr}_jfiR9~dI+pFgs@G}D=ZySbn;;>J?XlG1`kV5me&TFV!PQ~ zOYg1J5Y3UUJ815cwCgiIlrNDDPfZR}0}`o&gSElLvy;7rFC=GBWXv4H5SX&W9@e5gtB* zu_opRp$}XC(r(a9mDQR76AW&)#DzCOGvmfUroE2u6$W@mHH>Eas;0v?*V40sO?3f` z1H}jpaMryTW}(22Q%V#g!U4+%hh79z5r>TUxq@+BZK=6*g-XPYHfiuED598Fckwav zGmzQ(b#^Ncw5w)lqLO1@=qLd)5~)34O4G+knE=_Do2++~mYWzAQg@PvJ1h4ZSb&_SVtVJ_rXg6OE*xcq|iu z#R%iR)7Pm*^fE9!ImcaM9P;g-b3nh_Q!Yi}e^>mbQSk?KH|+V~;~Li&!Jj0!Q_Sh~ zB4^&88`4>(1HMFcGJmsQqG=Dg8>x>SM=Lt90~(c&$AIbOp4yz4HEOrCYn_x$+p@Fm z#c;fihBtCUpN)=}7$-wGbVc0XPmQ)*puxTO@!NfCPu%>+{$$f6K!&t=dq9aq09xsX zs6>tu#ul`y(aWe9sKHY&919 zA^}p9fD|0z4mwIe8l5D-D=w3=zi1{P0e|Km57*)lMWf2CL`5Ala^cdVr1*q^Xz+s8 z4##OvAE+kfN`{9G3Pe6fam21{{ocDTAUJ~$`@zXhYtGiYOzn>8aF5DAJU_0N5+Hxv zv%Zj-PB>XQAN*NrRbYeS-<4B>!Sw>qK)9|Y2j(y9nSWF)et*l7`b7Qo;8ok+=RXfP z)8>wei2LKzR5i2*w=T_4;1V_z;@9BN-;wb81^O+v|HqJ(zRCXXDpkg^(uW6EzXv5bNzkiZb^Sv@b0XLl%~+oE9Rqwe4V6e7P}x;VebnfpWk$7o@pCwJ`T zP%KHv>vzl?&=({p;-V{$EoVx5RUD0y4o8Du78;K;ojLmJUvWJAVX*KbS*IyVleyrh zb+ZTFhxZHWA1kt)Bn2?|UimM}X46!q!gU!2mE{&2nvzFpO z=6$=emq)@~Y{Bt!8Wn7pYemx6Gl~Qm1|ze)Jf%a~meOeaeL61O{mFaVL(Pc)T0 zmh#1qj?6e@MgW3AV2d90NkLd0+fA9Y{Ue_v2|{yEvwjY5(C-_IkIJYd!%wUh*Oy>t zD;X7Rx97U|yStr5t?H@UJ#^tt>e>%szb}uh_kts`-etCMLb*wC%7rg)xj3@nv`V$H zA_lc_D$2k+49Vd?=o;PssJ!SLyS+{7&)@xZJyl)nElB6f?0v^MQM}$^zW-5qjo-+#_T#Em%3x_gp2+i9Akg8?Wxd$q;H?_vsHdR zn!UQKq_4R1c{}A)B{MrQ#3K3=WaZhvAGfjxkTS3nEX-=kwgwg% zo3wuJQtEF^g-DTe)z^{FdS{T>;$DCKJU&P8CEHJ_j6YRUf<&2YURJ_DZm50DIsevI zUEX{udpJ7#pOeDVz?-ZQ-Bmr{*pvK#0&D%u*x`iQvO$A1V9!|CMUb39Q>~wy=;pLx z9}#$zQl;>+P?wu4KhM|!#V?-%E<3~a)No;BV&*R79Vg-0#;Zb|Y+R&zo|{W4MrI}9 zp9Vybd~OgN6l@7DjOGgy?e3Bd!Ua98B_^UGj^cWkep!2utIWt(GLk~l59?4_R~ysdZ@oXsYW; zjrVXshPzJ^A<2+dy0%>o_vYZg*~j#kR5Un`1mpvZ1MB8T@~47OFS(;Pr!9TX#=|Xb zuPTI~BDJ?~0*suPYS2l=cOd<8Ni2{idGKssl{WA4;5CykJM=F@?QSndRSic>(Ubw- zGGZKQV};%@p_E3s5|J%)_O&a8X-G3yzNX3sH(u!5Vk>#7kKikl`n6R&hyh;V;C?FK zZ!#Ng-hwX2yJ1bB1n$M8&5bL4{6D{~*n;a?;{ za%wk@#Kt8SPq1vBI4VKtU~YgijGOFe4MukmskPoa;vo8X$y2c5wKf)SXmHSp6neYZ zC~Wi9tra{ZkZAaFLL2Nd($LvHiNlD4Wa1#}KpYinaGDVMYItxl3i+_%lZrDBFVvPR z{I{qxSe=R9ucbU2P21R5pEa(IO;*vX&%TwaidY{qa6 zX$o9KW7$5!=`9{zD8aBbh;f9%`#d#sSB7;C$+>wt?gR)v2!v~PpE7sobxlFGZJ3-j z{1_hmnn8zIbFYnoxA`@0)5Xm`iv{k6#!1mr;k0aj=~o6|NB0jXO-tuQ18>Z23Te!URtzc2;L0?BGO4E%6AA6vqX}Qh5F%Y|6DJU7Itr!Ck zO@;gJW9#+u@NJs3v%qw=29C-Bn|KDs)@qM(4Gk{BS|Tw3Uha(C(D|sBs%5#k6d;go z>>D4#boioV+r|+qj>-_GmV)e4^yL7+h*}G{`zXWM0S0L%M?4Jy%!EP7HRgR&-v5(0Rn{9xjJaEoR z!SkL3BryntEf9O@Upu0c0$D@69Y)kz!aQ%3VAG!^ua=$)Kwme0$`&8etdMMf$qFR` z-hMq9Em3L+^B(V$DIH$#efnwR4vt>vj6MNE7R33Z#1MvQM1lY9y2Co8Y2@YHjYJG1 zBH>Ir-I|@~>8(@rI`-fp#}ML4)(4|Nod3m1Wk(Osqueboc?3`kOHMXkYD_{759_2M zjo$sp9z`Qi>%IG##=Wofn}h&e{21_l7+5P zRZYyP5PaP1i^lE0`hw7H?yE8NuRn^@Aa+=`y~h|;(o2jB&`NSOHv2OTpz;rUi0g639&RW7o z6DIJ53h@kKSAFRf1`(b3`fhJ&EfWo9dA$l@0%s!kj@de>+0Me@@3RJ-um`PL>uWr< zW-x)>#G^TG?Cacr8rkfIS!$%cG!ulfr$K6q;n9al$Z%)lgF4_v7>yv*F3&Xu(o%^Y z%#w0Hx(jpjg;VnU8=I4~xaQ{O@9O!0Oc8?dK#T=Q9@u6e1_j2BH+{9VvdVx{0i>{E z?XU&q1@8WHv4DE61vie%e}tcjT2Nb91>(-Mbh+OX;;6Wx6V~dmqOO}-Kcd{<1jz@7E&mt*1h_sN3v&1a$yDZ6O= zj18-2RyAOGGt?DdZE^*;Nx6wj!su^-t8D6h-z~u0hTE{=A6a`5HDmOBq)@+`)i=nd z)K%3D$i+V1!HVj|WQp_HO0P@mes>l;dLOSXSPm{g8(W<<;#8+8Ik}zU64=hdZ*@nQ z0C%|1Q}grhIO%FL%PnWVH~E5m#K8aVl8nDUOcz=8ijsVRBf&1m0f>)&zX^fZ+kR3Z-?K= z|I8@cg|M~HO@pBKsr**)3Dqf}RG;-o&xE%#j3Kc7)j0$NW~9Gprz-|uA>BO8aN1sS zmob=VZC#4L@YIk$GZRd!nR9DmfxmbI89n6b0)O+XAcZr)#k2G#q_>HlFT6gZI=#2H zw!Yg7?u&%9e!K~X?CpnhiN1x{B}3jq$N`2%7Mlr7WcTGLP!SVL?0ULBU;F{0x8U*3x8BB~m0N&@z`opJtBI9kC!m>JxcrIvjlg5>F|BOv&uqxJY z`i6*E2WC64;9+&#hVR3UoBb^5gV;MyLN3XDNKo`MPeQt;D7(75UZ~L#;<_ZJs?YZo z9F7skK;Sd70gZ%@grdRBE%$Kw7s>~3Yct`(jU_e*^t5r9vHNzs5D83YB51#kXu19BLzyu>&Xk_&+V&TGkt8tYbj}X_kIVK8>c& zVDjsUnk)gEIeu-4r^`XeOjD2nf0baO>_Hz54qZjp7z#UEiL~UJ`6d0p#uLq@*86gA zujwajHHzlzO_d>haA4E8_UQ*vpm)$-!^{M$2Cc~c`qap`k5s1v zpS?cFpx)Jei#|}55Rdd)a__ui$bfimWNVSOdu0=23Sys%>oS{Y2Ltt-5|umBOVN76 zi}6c(S>9Ywy2|4)lYO0{II>Nl!To+8Q7E02H?>tlheOc2dV%KclC0)Gg-DqB-}|N6 z>gDgB$Lo1{F3ze5;<_mFMFcaSdH@WWmPFX0M~U=nIht((2Xkl*xexn|$vLq?L=SJW zRT#4)6ztC1jwW<6o@RT_So!HW7Di&K7jHGW2;n;gv+3UGzJ4OA%I_CPZW-}I_GY1a z?^q0aKz3XXp)yP>#Z?QI-vr!lU#H{D4y$8@ zM!4n)UXz2W6J*mt6)ap5ZXGx$3w}|W4>keosl4vP@8hO*bq_YO+}XR{?yY^SFa^mu z4*$Wem}y@Bcw$owCxy#g7rMngUvQxydyM+zutD3#@%~fhoj|#0^U82(Mg9e$A#%yK zqk}{6cEqaaljA>S(!qfP_-WD?3!mHGtBH+?3PIW5g%>VwGv8$3KnGDKj zZp%3+;sqaM_M1|eZLY#^=sFxzbQg%%*?4ZnBkE9C;sBu)ZGU&UvgG%3FVA>LLvu#r z;GhvAp%yZ5d(cOZq2lk?&=TRgccfKV;mi4X>%-~{$Se}W@$i5G4W=wshIOUD!<1ng zwy;C9T=-eGs~(J=D*rgp7(I9^0}_6f^pNW3R(nO5q9l{uyW4OZk8VOY(t@IP9-uEI zA!9pE!HE11^|0HESP)|)(hpg{Sss4XQwUI}U>>@t(Y|V;NzdurEzQu5m)XAGL-sPR z*=E=tWA`npMIKa9J}K+KaVHl<>7cyz=nOUHyAf$2cQWfR?j;W%thYhw${kUjvt3TW z+!|NK&5P@ZpOH+XqqoGi(gw=5rd+e#ln4dG3w_iQ6J`xI?-Sf|g=ODw^y+;%CS6PI zY#oAIry8sql_dkSqF-#a%z9`m&cCWx`t^=~*?%n#3vsfq1V1ZjZ7IXm1^sRJv)rTXT@B&RQfFfxN)S_f z-4GpL?p0PcPd%$psy(+w=tdyoNkS5g_fi^ zL-#No<<8KfE3P;*@QR;=Mg~HcLvLa>45sMOHr% zpp5SqwYKP87QZ1p_bH#`dJe1n^s{&})yB_ED!OTdr>}oRlTQnFJ{S`c%Vr*3R3$m- zm55Vvnd^OfZix6D&K36QbK)X-pZ53h&(2|M1#9F-u_K84qEI{&bmDg}D-*lba4<`{ zig(uSfr6svvOOHRGmZ*wpC8$R4U<>rWlBlsR=}pcG^GipCAg=(CyaheV#Z9uDP4q> zZ;5*B$AwjE3-*q?U3$*eZk>?eKonTE#w6fK2!HoH8S?ey6&kGi44MS-*vNRUU)ML= zd~VaH)cUp4y8i!@WoDfO&4wd47FF z+tKk2gFmyPqkq+=6A51l3`Btw-~^HIU23dhhuwQ>B3dpecUPT^KK-R0SzO3sUlS$H zqsp@~6$LIDd_z9|2-aroh>|_6r`oAL+~@5eB93lnH~rMe{3;0|%5;V4oocdHrb-lh z#~|wcn|9MYny-Y6cF1OGT&A0E9#iO*O&>EP+4mWvTK%@_w@yt?Kg-Jm@a+{uk>cao7Ox`v0YwhE2O@IIlbzxNn1 zg?+5h4h(S1PBSZp0#7F!o<%}0!&aLghoWPDCp{ROe@AWo`a_+_@Wf=PVTnYs1Vx63 zMrI?$&K*qTZ7j~5^u3%$9P#@mL&HBC&Ds1oExD8(NtaGm=m#BGMe>8ZbQ9mD>CkZ! z2@$i`W&Ku4l$_8wxg6R4w_haM2}W zJbOFCU=rjH|4k}D{j_cj1ZR}6(4_CUfm-t!l4xd1a-VPvzM^n zFPP(wwQL=@xss3{3ElXb+++UKYX>b=5dqFzeunW#GLrX{yUAJzn# ziD&;wfu|=6lhT=mr+9rIg@51B&VU^5(+|C5K2^2N6}EO0Vm%W)(XDy$B_{*9JH`_$ zY$aM)C;ZFjQB24Z!-2!6SlY$?zqt@AZpEDk@BE{EHwr_uJ*d`srf82(QhYah3x=2G zkP*dDv4~+un1BAK_|ei~1^>ms-Y5ZAz|T3RXl&r0lswsJmTvz5c4y|24iUAy*fg81unf*LBqxNFx|C>4Q>NkJWL(5<8q(I!mw0WKZIdxUK zSL!oD@jZI|;FsWFN=DHinTC*!!jZ4Irl6AV$khg2@txTVCjv58p>!NQ#vuVBOL7PK z6;SI@LB-uK?0|ZS45E6IoY-C2vYkX)Rnpd4GuAM|i?k&S*JEl5|_J|EvQ^X3j{kpAd zfj)`OCi7g=+8WNRnUa}NGel_?3N<%m4^I+!YpQNUz?F`@KNv<=bD^@>z7+NBZH>P= z+A*zTjD24p&y_cl{d@6E`kgO!GC8B?Cegf7{J8r^KNa;BoU@)`ZdCJqr zdl@y<%xsjnWsh$!=cf%*Q-<9#g_@-HuPAs;Vmu zZgdkN1q0;t8d}SW&#tQhUzzBKi-NCEnsPz=H?4qs?Ef9|na}e4tXty48g^O)mnK5U zYd6UGnP^rPm@77{!LMX_IzPba9kp%VN!dF{(1{RcZKb@h_c? zuIL7a*I2OOHSV6a_?Wf=9`kZt$RGqV=6oT zf1k}rO?oNAKrh=q%{G46>`D2Y2Uj9)vjpSr|1}|^TDdgw7uhDoCf?=$dDuvatC8T1 z{`xrGrGmN$nj(BicQp3N2L+ZNnEs++IkTO|i@W_L=VK3EMX}Dpa5D0oV#h)S<`lZ% zOP7oU+M2LwodS9=c#&xxf70*$hE$?w`>7upoccLGznyqiAu0vW)tH|2X_7W+I(zyt zt_GI-{@8ylH4}dJ%fopZ6Im^zOJ?`v!0wGqd2r-43q9G!#8*Lm0rrhspG5|S9V5)0 ztO`@cL4sq@r-)OBp&M_sE8f4TDUO3q?Zg<$fnz0)%Uu$;wPeg(;D#!!6@|3RvP4`m zp;Ik06WcO!SGgq6sw$Z5#(}4z^eb2c5&e`RDF%TxRM#3iq+$HSVdddH{u7o&QgeoM$v zvc-%DA5h&Ho|&n{a2#)YR~ZQx$$F{QZ4o3^)U2;XEpQGT^X=^1E9q(2daZfvvQl2e zk;4%ur;ZvBRt@=`KkIA!UX`fmC|ECF_KrPLNU?N-<7bM-N@XUm_?v94o%W{sc6nUa z(-9yEM8LzW9>Iu!44(|!O@%i(lQoS2YFJniVIb1dyMu8M!q-;2<95r|)>abN#XE&@ zI8U1N{}Ayn(K(U8y%0mLqrvzexuM6cKVD%Is|7-CE`C0j{?psJ_VMAmw_9wE0(-Ejc+;NVE`d{_2iSD|ge}jHHNdI~Bk8^U@@tte#){eu7DKc;XIoI%xk7l0qc>dH`@y1qk?xJt;Pv zao!w@H_ZjWF6&T+o&WFMPzbXqfG5geaTH>tP!EQE+>!~$BsV5OmKQpya4W-cP0NA& zdD1q4J-g3jz*?AP&*29z(jkL?9Tl3tba0;u-snj!9re*XYP){47vY+B9c6#@< zf(*i$-ikGK2BQb7rt2^czH)`x;ZX;Jgt|cOK?NJWW)}a?COc{|k$%`F^x($~$b4U5 z$MK_VpXsL`ywp8WwYhnr*D|$BbIT}b%o<8V;i8HFb2C2 zU_QD$9D@RKpCo-^6D;BSrIuPO%ITxgwPyvaMa_*g?(W{C`L%lfqp52^zMi_*95=<( zA?&@q5XF&p4kFclCqs_o*B=x2-q2aw_S-$4>v|M|rJ0WzHKYW;OmGG>dsE#-`Mh3h zpyuhr*b)sAM)^A>ukn^<_cW3WkVyOl6jts}bMHNG;Kz4HzdT8f zA4#u9r5b5cCk;I9b#`eQq4-#J-O&NmT?+3hF~?W8pUi)K{nlGHWtsQ-xZLK7FHi&D zO~mPfm_IN61vxm6H1Y?mYy$9zM?$pqVvjH)C2x*dKb<-_afK+{H+Dk~q2O5HXi$OQA- zXc8K;37@<&ap<`QenV)}Q0?BjCrMU{PQCSqES!t(CZYnPMjLq+b3NI4Ebgs)f^=;* zB)VP0i&bKDR>CIc)qMPZ%j2M*&hPg#yvVvN+YJXGmDYEC^3O+H@BO@X)rM{D0(EU+ z>!`I$0%^#O#{<`Mpo)yR>iM!0E)I^mBgu6n81?kEKLf+=s2zgY_hPT9G|I#IF_yXw zs7jgX_V`iIzAqX#L1xcZs7-_w5i+pyKyTrBm>i-IjJLjv)s`&kYaO>Gt|1j!?DCBR z$xhVunc-dSg?OK-y-P5ETL0=xkO#x@yWLjHOfH--96U*OAD>2ZuM3ltuB|3eJkci4 z%py#w;LLJHHnFC|fXm!%1F{y`_`|Zoc=pt!+j658_)Ju^9OMr?v|l8jk^zAkmcRaO z=Mm8=#XZdD91RqGcm4gp1m6PP3g_E8oJv?BJqTY9fgt`a|KS+I{)a~3tJ0lsh2I(Q zvx1(4yj92%jf4|eMt3NMEO+7>Fp)Ff^Ah3{)yWUUr6d3OyDmEltf74ZQt@j05xMB{ zawh>!>qF|={9?l8`_){H%c;SuK67eoD}xEYj{Ctyymh;Uu+r}gld zAH~3AVr*hDYPD5JkQfTVMNxC>ws}|vcc-&VM}i>n93RtVj^FZ22{(CmyG-MVwQAJ> z&-t&*k~rbGJNhM05@h=2G$i2d5YwnwTw2ooQ~tqs(jMU_w+x*!;Xy}xmrPT_rTkhGt!zBK35 zrU2G3{+%R_^_62M>%{wm&am#eVBp6jVa8n&*gv3=~L#_(~seq_vq~$x0qg%Nmqu=`hBqjX&X4&g*RqrYGvrXu9^pC>tiVLN2WLn z4KDcucnR(^!Kn+AQ$+U!lC=hkUy!cKxFsOjE25%{7|Ji+xa{T`99{vL#J+})FDZ}s zgJ<1bsjEtt&xiy1&2c9s7*%`D5w40yu#s-90)jUZvr3b5GeDgrvEr@cNJ&Sw_GSGm z0(@)rN^KaEyaFaNHIWJAX>~Yo!%p=4G#R4Z_zoVXpbP|Uw$Z!%ShkUDG8Ss@Qbyyz zcmBk5uNo-L(8O;O)b$_#U6+Fh+eK~Ep~2{rmlCFLO0GX?AhR`=GiTxAy#AJMpdrS7X&i-g}{TZ@xgPIrD=6mchUt<**m=*VLz z`7ulD9HEv#SnG9sO8o`oxA~Y8%DL|{gx$3;&x23#)=J`(AXmXlk6`2^Bi+Jv^zQ;+ z#4v|4`gK1A>M=V{b1t;|u!PX%GnWGOAp7Xcir&=?bB^oX>hCCDR zwXO+l!fPdtd9f3#!r_zvd8pB9d4!5VjE15M{k3az^d6q05eF~uOQ`0*ck{=1e0yQ8 z|CNg;DJ6H_Z+e^oql)B;o{=gvsOWojdf}K1XEo9TuEBp`dWGBLBAy9o!VFy6Kdjoy z`P@QlhT2rC!E{GO9M90&$x;&SuZ#?iTjZruhAIky`r<@%2o{f(>OUcr#{FYHfOO~8 zN$-#_Y3HG$t-+}D2RPM~HE=QVXSRvb*u*PfncH?V;5W^qKHCG-`vEersU_V$hR11M z{bxG4rLBd&t_CUBJu1Q-GnSpX=F`UPOQ|?p@Q&BoA@Q*E$s%yQmETO;R2W_Y^p;*+ z&4<{9mLq*!N<1p$C44aIa*QA9jQ*HfPDp+|F=3@+_tCm~1jBK1bjyb6#^|>vKtoqp z5<}+bd)+i^C==kiWBuK_a#9wF|BI>j0B8G){>Q036Pp^bN9`J=h}lMIsa1;FvqqJc zA~p>*f||7{N^NS@9<@hHYwz6}Nvy>Dy?ws_@BjCE@;vb*a_>3!tUKQKypG2}hI3S> zip+wW5;Y%0$mh!;{Gjx(KaF*v{-2aYrp;vlRpZ2NfosEoDFH`nLgt2{-^6{VZ-3l! z*ZQiCkZxzAeD(FNi6GNp2FdfsOy&2l+{UAZbp6^-ON>gjEICxYSDw4n{W4M*{svBPS1wW_+7c50}b2;H6*XBs3{ zdu|q}>xl8nl;k)_dz48LE;>|u@Zg-Ze=i!V-UEGi zLo=N`-~8D+^8;;oN}^&<*jhJOD3t%B>n5@3Mq)23UsoGZgBEJ zyAGq2+;_ZybYO1%^Mex-1nk}#V&Qn0=HAt4RjEG?SR0n>o7Z~VVf={T`Qq-1wdqw?UR^jEQ> zte0KG9)3?F_L^m0WVPp4zquKodMD@4gAy8xZ*xJ$23l7qk!O{2a&(2Mm{`vo% zwL$e%Chr*}1XRX3ib)4lYh6z-(qixla_J^SK9|A-D3~)_fm`Sn0>GwY{8AwV4kTIV zbh+Uh=zHQeQvU@%32&6C)D)lMO69D$`{UO|@A&D^4kn1^mZ_K!&7~*#($_B|d=8#I zTHjMpt=Z&E? zgL%GtxFJHaTK7ToNp+&@zKk`Kb?ffN<`XI1w_B^taGug6L5Q1>Ch?1>E(LOXjSAL~yx?Zilw`m=N0X*(uq75?}o#zJvvSGGb88;?|O>qiW5NtPg0*S~QP> zPYSE<5W-_N1YG53RN_9k5G-4!3BpI4CH!%V6EJ zqQ?@_lSB`-zt6nb&>=H=9w{{VFA47xm&lx&{Ak&~UlmPa;EE|-PUg=SFG203pc0$xn{xCxrI%wZ;R*-29^h$CXP zKU&%W3|)ryuHw_cfkhBUUiSCwmf$FN=#7 zyd)eBMl*2U{!*vIJ_nokVn`-B8Cpg=%PM0Pjgiu-b)HBXILz0odRcaC7JXf1TZQ3DAm+j0D~VAtAHq$+F@i z*}~z5`g%2EPZkzldp{qyo0X-p!W zwMvz+x2DW!ptvqvelJK~PHvf}tg_M|TY7T1tLqkQoh2!cmIINz`dRRilf=dGgpX#x z6eq?PU{W17JwFfs7pnFo&o@^?TwENtF*vC8A;s_1(xcR%_HVhyozG3RwRFvL%F4x; zD=S=-k$rtI?|0tbjAtR3>{rQFdWNx}Z$Ee5$PFGIdVR5TbrtCiqm3Z$_DNnfH#H@{ zdn0lLrgMS$nj$)%lnd_gs5o1T7r3*=4uJshD1|4RB2AV8YW<=M7`=Z#2i)eDmbRc7 znXs*_{f8eSH}`7cly}~XKmsm>?~*q)Pv?NJ>W7IxE*KdkU!E=2zzttLvPX$Pnp#7K z+;P}NP4ng$Np47H3qTVcCI#8$dSSF9s%DVqqpKPiuo*_FdLNwJ?59rzh9`F|HS^)D{-Q9 zvl{rgKf^ak1%-@{gp?;td?~4^6U4l+?`A&Ym`R^QKLm0fCTxVI+Naef%32LR&?87v z7)wWzdv4mgxs^LfJclweF-5<6!26@W_nO4nNtdZpNJ&qmd%b(t zuXHbVH{3k~hh$J)TwJ_s*YU$yAXvg42cUB(13A!2(itx-EJlZilYF`yo0^&)C4i+! z_+)3l4mcx!|Nc!bZ`HuW#1sU;Cg_M}2*d>CkHQ2A_4L043kGRDjf^xTQdQHSr+tbS z&~bh67G3MGh&93^)F)$K0mZSWYB_e~K z4+X!z3UG&*s~HMvg~q;iNof*St646fyxUo{jJ)@1F*gUmd_cHd53l$#R?J~rgF$O= zSUwAZx=~$QL~x1I9>ev{Fp}@-pj5Kg|7~qdp}zH9^Pskmi^PX{qS_Lk-L-cIYsYtX)KoP*RSP*8(xKtE1ovSTN>$9 z(2IG@OM^F0KS?QVS;^rYT@1p;X0k|o@M*wSEiJx>4rGd?Avt1Ba7s1lNZOTcU)Ns< zb%Cj1(Q=hCTqOMREZIvcv-AA)AT|`LGqif=;k&B~--`14s?=>>$X^VMzYVBvy9ysz>!jRUYi$;oPSWIr` zPq`T-nf98JkIR-)$1)lRr0~9QXRHfGN=LF>5ayB#@U9aONzApKZue?TXDRr2$W2f- zgmgH@EO!T{%eBx?wN0B!xc%(LL(7%ilbr@>pnm@E_zMbn?rp>!Tr{$pZmMWXjAvK5 z(Qn3P?9;vLb#E2^&DfAPzTo4?f%@SUHleo zdn_x{^oz2xE@3%d$?qw98%bQtT}8Q-WFv4^JTsMPK=$I6z^wl+0^5FJ(l;FFJ09pf z9~e@#X!Xl@H?u4hxPN-JxHN|OF0u@{1-%V_(^=xf9t*bq4AZvAG15sVpYb~)4RU#{ zcnqW`S(i0S9OlywtRxp~wS`WorF*<%uUt+H5~{Wwu+EyU&5gi_Y}^Jci$()8|v0zSqPiCZzVA!Sn1Rt$69d_wuK^_5}7oTU+C31UmQ4Xu0fogH*d@jUNk&y@sY{FO}gRc>qFH?kZZN3E=t_|)ZfObmVaOH~n!?3HueTm!Pqem>QcG+k^9 zQ1El|mCoF06&!l=FrixD&y`F24*^X8kF9K&#EQFfIFKQ1scY-ZQ3M*CFXzqMqtn^P z#j0gtqwXAWW*8X!J6p;B;RzyYT85~qI-ykrXD3S zOJkijy9t}rcI7n~Jm%}bod&PudnllaEq*miBk+C?K_2XKPW%bnGI~vKUAFv@c??yI zni2VrWL#B5;Zx#j6pj*FMlY{)xZ+~giX||x_YK$YfQ55&@HBVTYFr*0nRUXfp_>X? z6$>Y=sp?#mBZ{(}h_9RV;){&8?l_;oq#&XrH(a3bcSnvt7EF-UH4P&M3Ds8noP^rh z@u1|0(Q1p%4yjpEs07DxD6*H62=dYn8fj5bxE!{2j^*4*yJiPdFCor0#J--YQqQah zQ*(6^QXGcl>h3Q;J$Prk;&rJmO~k9Gk&c$QEGU$)vP=o;e~%&kXN!rH;rna|4ZI-D z2~ozS+cM%q*4CC;IXNi=5cG`er0FNYYSh|Lf&|<+hPWBIO zliazFjRx}qeI=ukSr9GvEc&uK5fK!JwVB6gGCjAI!&L}>#y*x_YL5UCzRrv)jd2p> z6Cx_6q0kfJr}{Uv*gf_L_rSzQ{8*xjeL1XsL5fHDMZ@cZYBn3rHl#zR5xk<4H#=)RF+)CJNQh2Z^Hrq_JfFWPzQ{+t z!8~$FajcW+(3%wDKn&sNskCf|_66>Q$1W3~14Tso-BGHdIKxVtiXhPz^ZAUTvi zaKs^k^hbBh^dHtHz2u&!oyCU+Q((OoML#>&A1GB^{h*wbJ5VAFuOo)!8!g9aO`*&F zFJJLVYrZfZBw{>;1Iw@+W?LQB@(#^iyGRNJkN$g)TW5L~PGhQEeF9R7djJ~d{%xUA z5~H}~JT^lFH~FI381YxLWnK4_Mnq}w6$ykU+GxN}qyzDm8GENoTTX?!!dUCEgTPvK z)$QTQ4==)*l8NKxc~b5wpfDRlLgf#dc=lGU8vCMYb5K?i5aPL0jtJ- z--#ic+3yGi>G)1-$LUd>K`QX*MsiV6DjbXslrL8BzFt3@D&Ii)#yFkU8E(dI>qN;k*3%7l}=x8A$L#B$TrKP z*?Sa>L-Fc={v;_qy%54iTA(Dw% z16BH`<16QYe?b*cCL+1_GJxZu1tcJVm!~eobhzeVOTkXQ=XOF2NvqGqUNo<_zSkRD z(?6pK3B1Rs7In_FKpWsVYpxRPk)8cY1=U67_9szO-L2$-WrC2$l6m<9B%aR zcDRovXp<=S0<7MZ^91R+konvP$zqy4r5w*=HLYOE>C$~H>yR~7ms3Y{pXeRBjEn8^ z;3VD0R03v^dn;7_PvVzhivHs*A>}4Hs&Bckd=8Xk$toONgEJP^R_q3PO;3gon)I(7 z52y`qH|5JwxA(uCWc~Pj1h147kDvJKZArnC%aB{7>q2MZsZ{i)Pk%R#!XX~%tsUH8 zkaFA)xpQA{t3xiRE7XD#F9U?;f+n^ei<>pz9X-4pC;0CR02+2x9S(nW1Aoc|{hv?k z4VQ;^G9UB1&7G{gxu2!u7%=C%h~R_vAVy$Q_|tIUrwO~4VWZEN}yTo$YO3A7};EnF~G#ZEkavK>*+AWb{vdDBd;|z%u|F z`#&8wKe(Za9}INAN)Sx--@r06Gwa;^Jv`!5Z6P`U#^f6v{*OI<0FD&!BUuO@FcxG* zAFSqH29g(rkJp+|owM=^5ZM3i6ZZf1N&R1+07@+|hO`j}8ED{DBGU#!vCm0*c4-Mh zjX0(p1Ln(<3(S^cOy63OGt?V8rF@*QqMR|(1B0!0Zx%Rzdh3mc(qSoPDP<{_g=BpI z-H;wbj!Qpri__P-^7Z!i_VsNt7Xvm#S8z$ZyRuS>Qfg9~Qaai~-_-sxu3z4W2e!)d zz4NX2l0nq~_Q$2y0O zigQ2*$hJP%g!DJX8jiA=*Fix+0M^s7JDy#p!AC95X{X7c)<}sIPVSjOCo=3IP3t!`rb{IA&y@zrVly zWp*Dwe&DsOQlJ~uj|tFF_lm@E0Du~WLRsxqvjlIz9=a31`tj<0)d&K+Z4Ce1s4b+R zpm2y&aO_5go*m2n=EAV(Gnc5kGj(0T|-EcN=16 zW_HR2l_dp363}LAJOsEQKvV!fZ{a;dYirxvU)r2cjQ%1vLBwGY<-kbf2tf}F;MwD{ z;}R`wzw3x?SA<@XqpSI$&%P#Orxo$g)u!b=u%)#%9PT;Xl{x4Fxpbu+aLz=zy7ua1 zG&uQ_^oKP_PwG>KnZmM#mvf?pw4^0kw*{8=Jz|@x9P7fD9-v&yx+5>y@(iCe7jc6$?{fk1yGfz-Oj+_YExN(El7Kd`*(;_50b zHI`R5m`}L8RScIc<<%>%*=`<6>}?ni;cPi1qB5S;zb371cIJ#cyji#;${?M@J1+= zFG^o{_1OUC=*ZB}@W@NW-rkY~C zr^T(~$9JuYK8F|3!xhvD3XMX6mEr5_>z|8@|7~flrS^w42w~3soSmJiA(pDo+<|kX zWFZa1FCVlC84_afg*sTP4C|KyRg73e$-+RSDi`RN2`NglHgVs-e~*r)c)RYl_UUW< z^d_|nDj_+U;f>iG;3I#(x3$GdmX?>xVB-ZS86rS|_P>_9+3F9~4l>XC?2Sb}i$`)& zL*@gU$h?FZgW#I;Cr!AI<>+pb-VN;zL^p{RJ$!y~@je{hVE$~ECZs%_nB$ir*%*Mw z8x=*RLE!>6U3PMFGZJU$|Mcm0m%bAKO}jrine>p+cbq#-r3ZI-C~ zv$C9tAK09u z(R%S*ls4b~{my&#?AfhDu@aHg{pP4p&|t{l&~BI}HRO75Sv`mJBN)1j9=BZI6B@5D zWi_XJZfctEVBmiI8dAc{qYkEtnss{_qOr^a%~}55+`M~!*Tu!fhKaM|!y6#X!C(kc zyENs8YKpH^sb7xpNlDRRtwz-YLU`|Mabdw`gw9dz>v8un-^?hVl0t`Lb3p(=;^%c* zpRl4Le#&r5k-`3$49}n-Weu6TcWscPD0tK~1#m$0`JYhr2fMNH(^5B8$t)$@!;MQ~tWq=?y(xB7n99n7(nE zv{=rjE9-+8)k4i?iBDVUR{7UCFY`Gw+&RdIZ8%H0Hxtr7g#6s=I3 zG{SL6uI_N<`9#(6@GOG>0H(}AraPPC-AWhHE?>^iXeM!e+8k99i0c+TtZ1}8@K#k= zDON-0Q57v&pEs&nE#|4iBU+-+{rRTa!9&RqBmiYs6g%m)H!Jg3)mgzMw{W<#Q+3X} zo~77#bG>CbGEbmJn>LMQr%72PboC8`*vHB4l{)G8^+K^m-9IN{N|3a~-Y!@t$t(xl zN+KK-1CR!QtqYmz1MbZQax~@aTVx}Z^jPcD+ZWQamtB^5K2aBr6MLfpsJn`4Riqn3 zux34J3WLJSRWi$BF%t0~q+~z3AhFwrGuHrm6!XDvR41PvK}5;Cis6dw{9)b~QENUn z2EGf~kI)x~^54H``0IIuBgh=rwcHnhBwA@vA``!4OEZTq&E-++Cnm4QwO`Z^9==}f zAzQIsZ`!;1ym<;xOrW&mhsy3aq{{Y?F2-^5u(W=|ibhYIl~gDA3~ z;lUl(mIiN5ffL#sMPJ$@G3+!1i$cmRh+o&vK(LWBvfz-PG*~MI?c}Y0oqAm_6D?;u zNsa|9-u^wY3R_9}d3LHXVE;fD0E_E_Z8|lU;=y{Fy7X!0!cZ$3WVSc}wUBbp+^DGV z7NkBB{E=raF7g>#OP{PDEqYisJsu}BI6ne_FOpVm=&9fzZ~rW44Mk$$DDb8p+m(s7 z;)yR7kOU0|E3{IuOuzuY5M+S!GEYR&S`7TiMv>&CFN{l*LtJf(v&gvw_%Pny@)3nb*0!x#Q9bkjY zq4;jR>$!$abV&7!!*q47`XgZT%=Ov)FK~W($axnZ3+zBf*Q&}`wEI75+47l>0W!_n zdil!Kx$h3PLlfYP4HXg>0jj$VC9TN_11&xhgae?Ih0C@tlFf~I-gO4KkVIdE9KpeG z)JiuA@MINyIWMF8tu0dEMe5qij*|4|iWkv7f25hOJyhy5USSR8R)+AVK)^r#0K7JTL za)Oo!O{#IGUyUd%tTO;BAsaACFSJ zFWV#k7+i@O2b_B?jPWp5=jlh zmyy`kJMjEuq!6}xu`E`-w4wBwuZPxdW~{soK$MJ)*s^H#+Zd*{PoecPy@QQcB!^xR zz;j2sNd7K|C4*thVFJs%>n0}xu0p6 zhr8;I?Gm1fb+~jefB)>)U|w_e#z&z>x+k0FBUU;00q(;I>?YySC}uaJIHQeEuT2FKk6t4Mw{ zt}R6b(u_!n^Zjfr;=SHsF)v#7MkUBh3U%=5O?$*@ZsDtUkg>Pj{Z!N81f#A085>?z zhvF(T5t*_bh84Y#i(UogSI&;@tqQ)kIK|q&!*DEXG-xyhlC#!#xed#({`Lnjy_pcl zCA~-R8n@VA4}K$-w4E1_*n8nZfY#%GIz>Zei!oYWv z57qxIid9D8cnK2?&Gam{P5AZKXkV3LF*u>wD{V}*}Od0h&`=?v29o;Y0J9lXcs?-M4oNWK4CB5E{y8G}8 zO6a0GMkM6Rx~xIogl-XM@|kM)`&@bZ?1$^A`;W9y(KC0Rh6;e+HVa@bL zTY9>Qd$JBdG&4Q`&k1ICztn!(3!$(5EaO7(%SCVqR`5^G-)_`Tn4#r7~88QXU>zGKr)CBu(nN5X@n$rF31G74qFZ3Ph zp&)fo86U^F;sx>;ZlyuILeOmp#ArQK^$Uiey4>*+scDXUx9ozDKW+8NZ;nlpl}COO zyu|HB*D>=z>ohoQ*wuge9%i+~6^E(b?J zBSVp~U%;OY5EO@qqloV|SCf~s&ifccP zsP4B7V1Qdu|5zbVr^90D7~pkxuqwjKYhVVrt40Lp%MMde3R|Tk3UgN3eOtV}xtgb8 z=;?FI`%-lO?t2SN8J8>*lm~-`2eWUc>*t}O@LWcyW-A5UE~}av3anj3-mpKf5Im#k zrktW<<52&;K<&jr-c7lLVh*=v3}4~t8m2_5Qd&Fcxc|Z0#hJeFE_tzk@=eKq;N>wp zZL&{!iC5`|YKBxKX1e?^ko;3Th)bhT_n8t~ei0nNYnCd7%t_-& z$5_ll;hBoQzb4N=k)8Ac6)Jwx_LOauiz?D}X~!c`;nlqxJS$pr*DC%1=Xj|go+OaY zPaj;QxvSX>>Q^p2Ey&f)P4A83JCs$5J)Fhl;$0C?A>$9H1DP36^MWss%vuUbyiri| zo6obbe2BzAUl71vPX$SV2Ks(;LJWN7-eX<^l_wtNQ7tuP^FyZZE#cp<*b`O-O-h-m zka7{?yIha(cmmZSdOm_30E0QICpKCSizXAsNWRV4dpLktCooL}$!es-t;&)Y>UUS% zJvO@Uh)^k04O?YoA}|P3EC*rk-|Jjzz|=G6(@26B|%b==Umf{W|q)E5NcXqfA!8MGv8^pWojCQ@7NqJZqerXGwS;BQkvz3P0kxg?IN1uSg5S+4P zy4*>ee8BA{%R`Anls%HKACXl)x=x!4GCR>sK?a4a+rGwW0uWrB5Rsq}VaUZ`q5D2n zadAxV2XQ!G9EXw?s9rQ=H@!-M3>b1se*Lm)9c@+5ZYU8`H>*xMX&Ut=poy$EIL+z5 z+&I$bZEzJq$U7%NNc|j;lQ_oWZ*{9(KPE?(!?JCz*ZaE&H>B;#`YI&jP)YR{uFLA5 z|CR<|9V?H*X+QS}<-Ocoap8#WN9=iXU8LViBYh0*xY3FgEg29e_>+)J-M=>0+BtDf zX3#Dwahm^R%JlDWO=fD*gnkX!A^qxEznyR*jSHruo4&Row_)u1w36ow2>127ThCw4 zT5sZ~G(_{(5A+pkr=|e}(x@-)UY1}w!)X(c9$%x^ZGUg@)U0fX$Jfo(drl$-5PS7+ zad_{izFHoh=}GP%`|aLFR>FBjLQEKlN842H&8A|f>B|ln!%$+7BH{+TlYs)m+8*Kl@0Ld zLdqi%RFDmIXy7gFBxF$7x-H2D&#ruIKWrr10OGiG_NSq_wMCG83H8f4L=;f{qc^6( zUmDyEx^jeqqdKl(rnPfG#J6s6j=r(T@OmU6F4FZKj!45_=h9C;74&dA+7jbA3kBe* zj+H;&_zNqgp6>roeh6VH#B?AV(f=$J$Qf|LVk-e)^9%R6cII!Dsb2rZR?YqIOPARq z!Zjj?gE!@RsD8W@o3SS^!gIlX;ejXycy9Oyn z{Q)o>^urj2Q1qS~s zC&YS#Z|{p_WlONJ#eP-?_8f&!{`GI8Am1vu;(HJflTa_CGf22}0okNnSa|u;w`?Z9 zX)!VJdQOC!elL>@a(V!reRUpbYyn4iUxq=Jjw^h4dMTeCB9F`4f#y}+kA;d(&jVcU z@~ubt-2+*kL{6H|x?q8jP_K&lX*K42S&zJ*%#@1s-)|xz3fxjyinzT7p?qfgahj%r z56l&A(x*>>KPr3c6ONxLZL3EC;Kgins;p`971pV7&JcsI{Smo7NKud%xKTLo{rBqi z7-8VWGKq3HCkO$5pLzXCo0GYY%IP~=bIi#9?~S3TIo_h+m^T};wt1eiflJdAn2tL2 z=T92xHhc1K%G@0K%SCK&s83cC`swA(zygVm?}#V#f|mPq;j46Y>IFjudLc3yp`1S* zxSH?jkaBrvFDC|Yf6C>rAal#lz}r$yquU`oR{}pj`C{x9qB&By^Byz+qe|T9){IAL zZba0tPdnR6F)9Zh6+kWld9Qc8u)y}-YePT5ddiAm;5~8=^PhKmQCL4Ym<*2tT&d8O z>@j_YSJk9yd1h{rla3SJ0->Cw&J7s_^ypBGJ#u=+=CL69lQzISD|EGC@DX&@lknW&8EVOer3RO?@dJkowCsmVM%`F40uq-kfhDF2Y3(`a9R(DztN& z&g0E4m+imW*o3VbXL8^`qI!0`|O}^k2 ze9y?}c!cFe)eFS}?c(p5&56y;d$aZb=G>3m-M|0-zVLm5E@S_c<3vpYKlKD*Y$3nX zx;r44_mSCOlf!oxeQD8eTRS7d>Yo+{9JZVt+C(5_?ula%sOoE!`l~=EELRYG#$}>u z7s>2u7u2$?^e>9NToKVY_kCh$xv~1mT;-${y4#ec2a_P#w%8kq4Cm^Nm7TK$#(uENRoMs?p`h13nKAdtuFn=Wy& zEwi;bG;wfp6eiw{hGp;cYHfT@6@bj9If*6;K+5OlNNK1QQ)2InlT)znvUP^bD&B!@&h*i26wTD8< zAs;Qzw`m~$*;y~KonsbtaOcgDoQ1zbsql-RgXc^*^*%P=!(V=rW>s*#DgV%Zj-gbt z^VIo!OUzJf$o=3+eTA8rP8X4`n})H*i-z)0r*)6-F{ zi%U?$qcI_D;FKc?(H^&-D`a_L4wL{B8`-YeBhQxzr(E>joh0t$@^WhJaz?lVK((bt z+W#&s+75FSO%o9u22<1Ox}QFsPF|LjEHw>70rBSUV3(1@qRfH)5VkxNI!o&ym}+2x=<2t&9=&=mO#q)oOk$x1@B4A-|8kpOMic;*SLaY~u6@ zs*X=tS=jE9bkYp4*&$9uaQ*5S=6%H@-ysx%=LMB~tkO}oUkc*7OEzDTkqwY8KUN)U zVvP+Mv)D#nY?j0+wz2InV z9lny)IYVqoo+n>t;XJ@5ny$XP+`-enwX%_CfV{{S+6Y0KKV$Z<`;$O|*2`eZ&Jtq| ztP5N`cYf8N>~T$V#jK-p#1KPjvv|uHEvNyOWMq-c-_M-1w(s_#Db)G4^KPesLAzHv z64^yE2Z0#KiU(rRbBmS!U40%vjoR&Vv({_L7+`$vU_t}%t_^pLx}ru>klBkTaIwqL z5M!g?JzLWUJl9>#BqZ%VBuxbAA%r676G^xd=(!^)zp^|J=SB;n?^~aimfj!S zmvW&%Qr_petpg*9(_D_k+KP48@jy~Ouq$FrM35^+lFBD2%W00YPDD4%&0-i;AY&dl z4!OYEPq1Fl2z)W^q%`LACGRo=3u%ObRl^x2+4OYjL)40L5nBhH_<$vJAD)sX(1%C( zl~T&&QibpgZZ5mQvb`ypI849w`0j8bpCEG@o^o`5>&r29*nQooklNK3T5CY9ybi)8 zUG)z!1>o)~esA--lFZC~N%-p*DX*^TdvTlmi~BQ8oVVgsc;7^kkXL&?HZpqf_?^j9 z<~PJ&UPC=JSlGH#MLu~)vY+*)Fu$YRDpYXf=$86>))hg)G+4mrn^xV|k`;Xi-niLb zdv%u6YK2?9=)Bav+6bty;${!6!_aFG{=DxXM;;aPAe4um?1kDVxuSTHK4T*zyKn&_ zUsdaImVDxGdA(Y^UhBsnrt_Q;6f3BADT|a}?i|TNgH@57<#11WuP8p!%f4f0z zpnXeI49uc4lJiq2Wi&Ij+UIyp@K608X5nmHT8dAclA4stOaHnY%(Q$VAEV$7n?%hr zGYbED*rP}CN&!=+zT5wmabV4eVvdmqdCzTE51WPrDPNdeY$8tkUhxFL=U6ZDPL=CI zf70#V4p|3Thu+X(Dgj~vceIDNdYoV$p>(whT0g-!uAsD(m+XKHM1fK3fBKoY;m)u3 z9b8_Nr=QDP?3|<6Z@=5#c~fqBl-pgoPJZeJ*}sQ~u7q8I zq1&L=>rOhu7a<-L-9r7Ns{MF0`}R&Wp5ffUh@MUlBmi!sy>6{)H_q}I5LOo(Vc)18 zNiq9;?RHn#R-xZm7{+NY38vwj)}ZtU;!h8K#uk`%BdDWVud@yLH6-&*&krcaR0(NJ z*VjnDvUrAz<>@%lKWuz_U~gn(;P2>1NSJ@eiGnXA42iBv7lc5yF_Ohw@>7IHFeyK` z99@WJFzr9uyY}t}&y2q5AB^k=Xjs3q>t|71UJkd#L)7KT_f=W1B-&fS`omxxiHLng zLFAw3nB^|MX)fR4Ye~R_HQ-;Gx{-owVOQgndq}0Tu!A5JVfc-&+|4Yo0k3jm(i0!_ z(;U&9#s3uk=m*U4#~;ZyH6B$V$NM5D<7JabU_DerRd&wkE`S6a5ERx{T-=-&6sL5> zGQtL|G9r-aH&MB|UD?zht4`R-NNf;q4d#yY5aJ0X<^C(hmt>OqE(;4)tSK!$>$h{Y zj!*@LU|tf*ZeB*p<~!NxOmZq>gGfaL-g6J~Et5Gx0n=HT@&&37Qr-fO3J0C>Jd;pV zjTL>YeHDq>lDHiX=H?|8;9e(vpq9k^2@8d;0v-1}v;ecbAuh4zXR{;e%+u>bNos3j zu#XOk6XFz6kIL6+9&zZUAe4_y>;a1f_+5dRpWZlw67=0I}VR8Hwyp5-o(`Y$I{YgH-Du*h7i3|wTrxM!TQNVkmKXaQJNimq$VcPnMB!j z<=>9qU6=V==Q3fGE=P|AFvBA}L6pM0wDjplW0zC29B+s=2pK547)A&2N-chJh+Qy!*4 z+nd!*v^XFj+nI}k2SIh~NKIo-J&T@rPSH`ddAV?M8jW$|7?lLQq7xkJb0Z_m$1$ax zA`-tkth&<(b~)v$ETU@Ud*UwCUnjH`7b;$jn@S&|Y(X0vk}QB}9wQ(oZ7A%GS7FZ^ zF35f42osbqIKv4O)Z}OqG!=meF=>2w1}KwY=j$UqhWAX=ES|*tz&t*)0%K3?^H}UW zaK@Q^quH?5QL6HI9&{t_Agpy;%f=9}4vxNJ4!rg7DsmmaVl7D zWoL2#f`-iID<9qGxa?Go6yXjPr0r4BVAOj9=S<79d6AIA;=xaO@Nf;$Zy<)N1!kwob zqX%D7Is?otd*n-Kmt3V(qtQydI{LHpAV#90Fii1^O*9E;KbmvX&lzA|$PUCQ!m_g; zLIdMeB#9d44EJYIWxXY<h;e1ODCHRA^~w#bct3{>7~QJ4Vz?9FdUO{E_7Czar0j(4WvNh)#B< zZYfQY-~y%xiP`BTU;+2MGM+sNSjK%Fw2g29*w(w^gpU3LsmJ%ns3@vRQ~!Kw$D*Z4 zSD&6ycK8EWRybJvpj#(8>|cJTu1-Bh{lFX5qP}aw30hsV+IWq{KK;6Ci$f#wm6J{p z#9Y~&9|-f*6gBLCnBHnSx!Dg~(n}uW>3$kE%PAKlUu7n_D}g8sTvqkHP!|Q9oC1>A zN3*QXUZMOZ;!e53jC^p)@+FR{U%@Ju{N=bFJu zU-3B|B^@EX8kmJKJs=BDkdvW*m{JM9in*Sd$_-DhgKao&$Y98tq@M?F=f~|Eb00H} z1nn!Wk(~3$bTp*~A8)?^ zr)F+EK224BmZp};OinrtzgQOjEc0^YF#ay~e8R3T&^Hpf6?BenQPyF)!V4V--y)X> zt40TFdgi93(};Ai1TMQ<( z)hFmkNFykscIewU{6&NTLxPbqSET%4&i+<4JnmCA>r@qG2Zxv_e`^UDFx%-So;P7w zAFb~?aDf`U%!7jYg>r?)m~hc?TP0}l3Ozq@bdcwvb$kq{E6|$S0p{_NY+cgEI}&+s zbSIT%-fm2|<%>hH{1g)U6U2 zpGwEhT&t4tnFPz?v4zNsP19tWY5`nQ{6Hcu^|<>DNmar{ySRlk?X4aDoDwR8eZya7 z-W04_Q}x}=R>FgDSb7Gn6Am!k0$WF~t4K->S$EFjd8}{t&(QRT-2o`Z+`(?27pVM? z<q1;giQpe!*YH^OBzancDY77%-V1kWRw8WQoEz#CDhg)(tyHt=z&l({@RT zK^yqk>1Sk+)2nv`s_y~5@nJTA_BN`l{;Itwp}@mvn-yF+m(j#k#e$a z{SsmCG|OiyJeU==6$0~)19DcN3w}nb!b?jAkSMDp_a+YJk%Wy>Z-ih?%;Jz8khh`1 zH*%p_))b>19WGm;%q4ar=)ebtlQ3vInTo)gtb-^?Z;?OZyv1mppeVv1H9;2wh!|gP zS({M;fgwfZDVq{n2T7=U0$NDpad5ayyImGL&(=eo0?T0!0Iad_s-G-TkdQO+!)Fk^ z6dmLL326eB{ed$89DzA9b|{Y&ANqq!{n1wlSR_XYXJ%GF256&hj&Sf$9tR)#;{_8) zt`LAoE)vyZ)=xv^&R}rl=2$v-usp=aVt?cW$rZv7>7&HVtd5Kv9BhsvJCw)7hyFOR zKk_R~t`LSuOC*w|pP7uvodMuT%@N#LAZEt`d5918#}m>LX@+#G#&?3V}QLw__0LjC}P07P<&F*EBUBL@eYqs9*9k>f*uFhO#K^dTZv%xobh`rydT!R+YE zLwx8DCP+^qED|%b^?@@A=3sUx5Ao6WM^2EYLeztTaj}O1U-LDX_VrDBb zvCAC&uWH4I{$PdFEMjJ6Ep31~l!y2Le=JZ)0uiNRW_ltAN5LG*Bg2RO7)Tx1$x z8}*&$+I1uJZ@Hzi=@t?t6XjzCUY)sjJH2Vv%E^prGI?$iLP^K|z~BK|!5*gn=9( zhqXH)2UvmH`tJHF%A!^-PFxn&E|xZ25U01uc@z{eNyu9ZD+e2QT1y*SptCsr(bsl* zTA;N!y`F#yx5`^-8#|!9x0{WYx2m?4w}X|4HNB(+mKa17Nx;d*-GUb4iuxQ2Htlx-gzLx!aGxC=>y`8)J zTTuYO)6 zIMe>7X<_LCb{D6oN6yp!P23&$=0DV(L4SWfQV@XOGXNegZoq#pw}AlvUzY!#`Oos- zn??0CZ9p!L;NR@U>3R710X%<^`fJYM|6}eyQ##H-7s$Ms;5RctgR~V^X0G@xodkjpBt(K33t(b@#f_`Jtg0WQ-=+pkQ+pa0w<@lOdRYNg>Q^QZlM~ugHArlDfl?>f^WhNEgPd--l}1 z#GfR&b+6oe&*jw=zA92~p)(r$v75~**y~*^AA@q(G@T#20yOfyJ_X8C5^T(agyfWh zM+)jc@&wUDNH%e}=`tBdqt#MMGtu;in`LZ1ai3cW5_#KUgh7{>2r1<(ZBzW0_P`<`3)pLnK zupG3@98VLG*X9Xps1J~a)4<-G$>YAjoh5u`Q`tTO9hg0f@d3$s%Z`rTvi*AXJvgeN zyA6hCu~jqqU8ek@!vl_e#+eVFEqW6m)-Z80W7n=a7~XXpI#{+U1)!#zqR^z3p#`0k z(=lta^JqiZY>a#wi3#JYLl{stT7~M1g>|@64*ux>@el=mmv`OL8cw#LNAPBz#JRr; z1(HQcN-BKu5nKFm2dd|#g7EdnI*YCf8QcJDxrbN=f#F>VBxpBoW2^H;RSWY0xRJeN zji`VXOf)H$P_z?TGUcEp+fFbSdR>QDHR;nJ&1&*;%mj1x?|Akdrf&)O-xI$jzj?$J z$i9Nnh^?na0>QiPa5zSlB6#vjnlx0x^1VL&MJV4lS)WfY87aeLVq^FjiDGE6tf^}s zu*%HPC-e#C6N>~;%BV7s#NchxioRKEY~QUwj59 z>r|keXb-lu`Z_(Z?k#5Hd+Fl`#sQ<j!;)-Vcut?q)QJv(j-|Gh>^E`QW17|Y@*EchG^@F9)S?iPeL`q7opIwTgE2} zS=MR@CYhMad>>67AOjG8hjE9kB;qWwTvm|oMO;uHtM%iiP-E346$z;}ML*fQm*e^R znqsUPPw8y%Y@XR*7NoePOvqfloX$1WYArdLa@@7FfA~4mJK7t1t*D|htUN5uDXUW6 zAYbvyseSI@=Mej&sn62~Q%$=iyIAK5yI-f&N|rVJW%9<$?fmMW8cH}luSoO=z6iL` z4a!+9?wlmB=a?#BUh20VM^Epkh6%iF3KmkTWDpWblb8Y`a=EA>*U zGmFR(kYZP4S9AC{<6IG8xH!k?#D4J7Dd$4-;9$RrEmAw|TCat2wN>4qWCA-Sgn(DSQ^!J7iO7No~Dk-9}@@AIvAq|K=+B znn$m z<9KqoIlBAsELr*tTnem@LhtuCcH{TzyLJvA96Zh;3TNV1yPW(nVz6Qi_wl87vK;IF zNR-CZ=3e7T*yQNibTIHX>aEG<-0pS%@S@75?$OM;^J?a1TmLPwQ3%zrX=mGt)ba68 z{q6C!laa|`zU9;GEgDliQxVgzti@)`;J+6J|KJ=cVlG#(@r#1>P0j2trG3sKfWCDG%OWHmT z7QSMxV!(F+i1Tp?!7F+FzSK`fVhou9dV_n|VEhakZ$V{o4z6 z`XsJ^30}=7KS&?uLNxYr59N&HMk6JNr6a?lOTxX#U(k7&?q3PZE}S(kx>l{{ov|sVV#Vyy(1CF!71V0>P*eZZi zCD=|Ky0#XG2aIwxTX4Eg`2Or(ZZ<66XW#Ozhg;?tH71 z>5Q-^)*{*BxNGVwv2z+XQ;JRG2M8E8+wH8oyl*dIpJ7RSwrsfh*>Ug7<(D;=`6M;t zHrK1ICl>u`1*!$`0vf$Xx;JNwACB1CDD+cmYJC&tOF7HJ%AS|GRGye<)#*AotuxefRF<=a(-JT^x!VO1YL*7fh>fccQzgw*1ZS)xS=f+wP30eP#SA z>R{_5w;hJ;_Z=0TcZJEl>p%Y}yXxcVwfbtPY*ZS(M{Ndv?`^pg z78v)D`Inl4+Ii-P*li=&dvB31Zq!(k0@QG8{JjZV65|%KDYkXfkG(`<$mMM+c1`rF zs7J{;iG0p@KKf?=`ZUJl%SG_uVNzNp#29#(JmtDpdNe&bi&l9H$?&|Li0Y%D5+ZV5 zYD@4gJ8d}j_?fZr0^rYj3GZ5z`T6Ll;-SM5z~B5b`&w__>?gPxOzls4Tz#OikoOh( z5Sk?!BYE}x^BL;_@QN?a_VeP%BB!{NxSn4c!e|z>bBf;zYj?P9+xa*g(dB=6J3b@S zRJB*I5AVogH{EHUJ5L%ktGFG%#W&q*y*n=4sJNR?^+eWp%gn9*7Zx*e6TRVT4Oyv@ zA--)wpM>b4lUk^ug{TBasAFM7a=XU{&c_QS9IqjQmlB&=-ln3LLNZ{c z+kvBTPW95}fboNNlt-FDlxsB_2Ph~nQ50TFX+u!=GcX(ZWfJZv`W50CpKM4!mBLA` zqYr=l@S%*Wj`~peTJ!kyeREl*h*ie}S%L>L+CvZOk`rhZ2~cI;D~{Y9Rka^cjZ{=M z7j+FSG=Y}AGvAf%PKgwiE|pdyGf=Z_g8$IRZ=H`wQ5no1L*L;y-Xy|A{i1`ts7HK5zZQ`0vr}zyRD`>J@{j|5^9wd-et8p9B88Tb!U;Y7t#5g8bi+zlc*zWupHt zmuyVriQWa+YW(+iA~yxif&TY2kIr6pV1V(DIqd%VJ=qYd`wGr(qaFN2Qn&@2D&OTfTo!BZVpQe}(zC$^Bnp{$I=d;~xLN-8^s_CyFfE4Mt0GvZUqcYr`6e>f{p+6yo_mSOloka$! z?c*4q4Xekv7mZ&_Wo#DC_1pgmfk5ewcPsT#eb)0m>v^o9O?`i z*MBr+QuK$Z@(Z*%n%ms9dg#>loNbV|yZ%T$6DJjyknr9O?B5st=o&Bv|h{nrf5b02*dOlDcIu@Nk0hF_3&wwoJfNf8hcoEbL-%^Z{5$ann*@H6!v+;_qQn3!#X&~a*;w$jS@*jZ_QwM(J z$0Dgc)S#2Z_9cBrtmEydu1CkmbZyCvQB)B%Ig`nwf?M_{jRroZ<95PWtN+X_gcFey z)#RZT{wBye7GeatQlzfWEMxQm?Um9zpmDPp=fdL|lj15EZ)O{C;wW?_-h{p@GuuBn!VP%# zSAs0W34}RU<2u||BT84d+4Ksk@O@L~CW>hCVn0iXvoZ2{7sAx{=Azk}*t{{`*TfbU zP+1-1Cs6#A6<^vuD1>d7*~>li)erePfIB(g;A1#9-mtj7@4i#Xq|+kZL#Mq zd`-a7TFy0}J=68|zx=i>^Hc(T`SogSymdR5jFCzklj|An!b%ktFo&)L#S{a1(?{;1 z;AsOrQ@t7DSdH!7ygaDmd|T?@rc_81C=qNzV?f7;MWy17TV|`@v`cE!LI94gy)^;< z$UY1={*+cPB~;$l2G4O|f1Y=kY#Qc@^Fd)&D40vX;BVumMT-->u=M3wBz|vE>pM8# zU`u*meSs5a770g|O3`!qkuA;My8~0LOk!&~=>z#*C!fRQa`IGsH~%U1xUn9{S}+!h zPWZ%m2*#AGm#{l%`fFt>Oi$K}uW!~NE3;JvvJmjOJ7?K$!x?Mkn!_uakI_u$?(me0 z3-Cb_{4Zy%d*4w{VUuT<<<8>F=K*L%2A)H2|-y= z84)8{xM#gPFvf!=4h9!HYMvKM^!^>w8VQo)rR2o(irIHVcbJN|EgWON2 zxpZ4(Lu-jYD=si`eQ=!7OphtE?Syf6d%mX)Ay{lgFZ?*Dsx-Rc?E7bJ!C^Vmf<4IY z0HfKnpD`5^KawP(oOb7#2mi8cVg|HHJD+o)R)(WVN)H!Y;dCv+^_iNH_tXy|6CF>p z)=7Gopk|o7^0)2MQUT=4=6YS?uU|Zw{Xx6!=Go-1CnjyNVr3`H-S{)fS$~PSX>iyb%W6(K7ze zr*k1cogy2lmCDL!ed5Wc!Xh}(lvib2M{I&{Jzi*7Zi#;}SSW$Y*3WQWU_`>`kIBbA zQZ93yE;M0vNv-PQL-e@E0~M>*;wts2C)xD=i+Tf+dI+r`YaUw#^YG*lC8wZdVsAaf zt-kn6sWBo(NJTEwVu$HmUXEf(f;SfI_(x$8_<>v)h7>7+ErhKsB$F}Bg|Ix~#F&wB z2F^mQA4~`xF%c7AVAtH7-hDpYNqv@f36@-@k;JLECx7|~Zl_^jD8T_RxYRUFV2y_J zR3J#V20-;Jll|f#}C&LWA)WH6@6B8Gp1#j znzYZdjuiaB#mr8vlu6)7BW`2*U3}suNF_>)2iGMPT5oK?!K@;GHF4usnRc(2pf?Tz zFO*mKmsT#_%~kx}h!JB2x{_Ogo681Dx4$uS(j=#< z-;3!c0;II~ilLK_$|k6Gcrt*d3gKcrDi%mi&9$1YpGaI5t=o4B(-@IJ$B67u4kxR> zk$6eV>EABHPf$G9Rl2QHTn}%DaXM=h*jKA56`oGOut}7IxZ?uW%DJuf?Kj_0()iI(@aXUXkA-*hqdsK8yJb1ak|?8D~!zc zrcL;Cs4n7kM6$hc8$d#$XA0J#Yin+3`n&E!2ApC!6f4Lgc!pK*hx@waAmds)#6|B}jGepxw+}rSA)S619BzWj1_UBf1{)v9(hZ^*-L z$K8Ea4E*MSTBBH4GE&&XcI_srWf%=Wa9bp_-yqn-UHpGtu6-aQJp-QK`W^)&2UsfsT$=sr-L!u(|cQIl9z>xm!q{=;ubK^)o1Q*}72UzL_s z8dA^eJAIzUns6wuk-hSSC+LwR86#%bj*?7F_v=QNV3}%jd1r=7stuS|{Q0tPqcKzB z0n^gdKiIC~+gZ)n^pa>oMw+i>H5xW>?a9LPP_#r-cRy4;KH_Fb@dh<(E^egc%Tb;* zt*rz}8ag(vV!)Wv9Qkee&CJLrW=%XzT-T$75_@0dtJPd@e*Zf)2M}(DpuBUv>FR^K z3=7P1-0K=Sov-CaaItc=o*lukO{@KDelDqT{k)nQ8-gR{_gS!1>-F_kQoU3LdHU_D zidZj+ss36I97;~m} z%OTi>%^8#ywZ%2@d2__UM1y*7MIO@!8Rt%_TmA$rWI;AYiAq+rKTkScR@HXB;5u|3 z!M+*&-uQAWB4V~>Q!+e6d_N}$|KV#jkiCy$lD*nsPLbG}%DSLWiQ}?Q<)SY*TG~&6 zd}@4~@_BLBS*fwB&SLx)AIuuWE@_kbJQ5wYvHX^*@#6m020eB;PIwc0h-W~PGYtm ztyren7!l7JgU(k9q`eBt<}8~3l|nW5qw1t0|MaRi09!R?b8WdyJ9jn}ksbc%*4#+i z6#YW?j21{Jj0Bh`4^=v1nPZ}wmRx6uCJPq;$}SdIc!wmEi66ruGD=n(NQUDgn;PDQ zUz!in^{z`rg055Fli>3df+=6~MkfJSdOC%-uU*CbeR-&Ry7tyLX63lI?3msOsU^8a zBE94de97-y7&D$Dib>WEX;@}N4l6CQ!FcJKg-_Q&*%@9Q@&MJ|X^DUo2AXxsP|?L2 zj>1V)&6G8Lu5}Va4(5s$%l-`C3lWeDM!WlA-pLnMGl}lxO%UWl8Jq6!TFCqXF(w)W z3a<37_&k&P&eiqM26hTa|7AHV1rwa-NSl4^l^T{1Ojo%6!{Kq6am_YQv<(lHm;7u( zL5tJr`qW|rXNs>;i;rN2VSD%C}4o=@Cs z6m7kj2kdwwPU9mEp*j{F15=qF9xo9s*;85zExJqBjQ4zD`*}Up5qYY-qYv1zGy23F zs(0eHdvlNcwk^7cKisg4U-uXa+@2booZAvm7 zBS)>{gV4%i6iztK>x6%x%X8#+P++w#KUV zqip|W{X=Uaf?oIi9bxh5Qob3XfwRW*FHU>P$nHmwcJHjWHaQyo=?)LBS^^K%AY)!~ ztrAyLK4ebf7qQVW)p_G#v%}yEgWEYeINpD;lR=S=Rok^tud3-uh0%oVZy>E*Sn5i5i($1}qt5P6DvpIx-C=eJXSFwl(mIimNmK+>kDyew0% z_Yl1G3~I{$tJu9GxAB+WAdIW1Q;8^{a6f~P{}^)hqv|ctjn&mV4WYz$67Sky)jy6; zJV1fkiQLtT!4s4t(~e)?X%r$GP2>%vgL)Aa6}ZiwplrM54q5sge}eKCgn^|(G5qsS ztT;oc{9e~AH9I7cq>4|{Zu|pAnl})1;F&{vi{Fge9`#~;@}->*FqKQ42-l%L%_St7 zsD)2m-Iqa1w@(Xf8IVB5hxOz%VOGxJ-d)x~WJR<7u*(X%4wbYx{AOsY3P)f^A=2CQ zi~d_nuL4>##HsUA#j{#zC}^nzLj~V^>)EJjkLRUNbc@W>%SG_kWj07Hx_t;yX%+?V zSVvqXCq^5a4?>k31x9)C((F#( zb3`c$H`~|D3I}ReKv=zI7EL@G%%3q>r7pla9Cj*RFD=kaB55*=)4fnYB&mVSO~L4D0%8cmA|OE+KODrv|8R$aX0pj`{OQ)E&Wr%EedKa7aFY~YddO&P z-Lkpy7voqGm748vko)-4uE9lSlBtrSOx^Oj3q$xi4GwTI;ait=1n&q1{%8oCn$3*H zl%|E+Tim#OkM7{jo!fqpq$7%BV2Id8C;EJVfT~Y;4(o!kMFHp8sS&to`v8BaAr#o^zxs+`23unGvhw?V`eb216UgzPmK?=<>^6I z?vaLz`K0us$$hLeqGe~Y%@g4TAuV@}FW^VW^qKjK8ompM#UhkOYW^ciBcw@Nu~?y- zWA||dRJMP&vU>mnHgg!C0GO)~EC9pFMyTVYDATZQP&3Af1-hx;QlWB7xK&(sSY^HC zrMs>7-IYI^u9>d@#T21f(LXTYkTBZ!2j9`YqkKoJ#olh%e+Y|7{DuY{uu9pEDRiH$ zH5Q*}(zl|RBBB;y^5(MB?9m5aD(tBt*tVR{aw7nlFO*sbIC1Ue%*_C*{d3>6@|{oKy{Xgo!DMI|VgcVrZ+d)#xQiSFy+WM1pRRNy;ro zHnp9-s-@INMB}P>8Tg+nL6C5)Z4?u$`e8gX6H7F3{Ap4o`yH|!5k!P9>B@?hZfLh9 zuch!8|H4zJxoW6AsZ^_t>9N){h3B%4F0ue`H7a>~Pf4DxTZsAiLVSN$W#+`QsE!Xe zJ~R9?k9eWUTZ?#nHz@^MtkIvXOJibH8Ajb`&sLxqaU_lkKZ zU#8wPiSfVZV(A^E@g>7tU)lS%_kI?&3caow&z#-PPpF1S^B4VRfeu!Z-OEyBb0TtU z0*ouR(w~2``vOU=zB0O$cl?=yx@D&OP#4iD&?^;s)5JTy^PeIhnd*TxJB#jUd{R!v zU>Qyd6a2V~1a9do((JC6pwQ-GJYCu5oi;G~A%vVjfH2jgCA>;iEvc4`Y`aEzr!@JZ zR2hhf(Vb?V{71{AfdxSU`$2XL8xu%D%S#c7%T#ijTx*IC=Y0G2*A&#eHA{Yt`rmHLjLrdbtGC01w z?K|+viK29FR##2yPR2pqL6iSrJO9e&1F44%@pks!Yz`g8CjC0Yw za=tO&A2vyx#ZtH3%o47Lw%fBDUy*o(J^!ysn$zUor}NHVok~KzkoSj@g?SUl)gj{L z-<`fJhWr2e;_px}F{{enI3!l^==BSF^3HMfU^$!d5u_!vW(`cA>vPTV!{Qv5bNP$c zSD^MQyY3#G5l(|U^1vpa=-?%J=#Kst<0R<-X+Ljr+7zxNwIhy0%PcnGA*A<(V5vth zm8WrkvNNL{6Ver#!aMGN`QKNq$a;~_z`{Hh637CdJ?d^!6BUTGAX4N11Y@V2Y}v?- zgiH!Evu9S?#JW(-PS5Ju3)H=t(|=ibMa{``gw z;Bduo$W&A=HJ#Oxta5%gKc8qd{;();CA^zsbeZdt6bd`Nb?#C0@7fO&J`(83#U1SR ziZ3j%D(Q}xkQU$VRA5$~TK-&KhPSJ<7g>*t>7{C((Q)BNK7(nxqH8fP2Bh9`*XA*c zQsdH54fam^tv+2h@%T}22?O|P#Fp+(8~k9AGrS?y0r+1HV#0C(uW#mN+dSCjq!|7j zaZDPY^D@FB@z)DhV>u0IPyPW!Ue(pe>-5))*}UX--z`EXWSwEMp-^;2S!EadoF>R! z#*oXTclI-f-e~<85{ZQ{@*C_;^?a4N{M6rHaK=J%l|bCS)+`uV%0Uhz?Uu`GzsAbD zdIR;XtjycIy!=&lP(=o57zgjB%e^y}63(H4@&Z_&2wxBmDq3E8j=o!}>xffnJn5mp z1R}t0@kN0o;)2UQr?rQYH>>#UzBSL`dTnLt8+(=`MlPSHbsrv}CKayEd}#yMAoq~i zX8C$tp;>D+75dcgd3^b5;=1Ium9TVQ=oW)tPR7^Lk4-jX;<;!UgeypTjm81_hFN&x z?K0=F`4}*A2S>hk;6g$Kg_h`T!-DhW>F7FJolSUSqY+>9j9pCHv>fyhdNy`H%aA8?#_xNaWj)6zpCzK;XOz$yUvqwJ&aAX z7)s4e!iDAWo-@ip-PV-W_0&2oaOgIIaPFca$*CTaP~iI4*e~`ug`PnQHETS@wg8AG$){ldwJe z3yz>zzLa$x;^__L2NY)gI%@ZK{ql9usan3P<0Q5V??riI7uBJ<*kva^myPhC_qYtn za2!oy=W(u+xw0XuG|m3!XYJp%aM z?wKX=`mnC`tNFR51h@TMdPhQ9`k*Jx>tYq(zj5dkT0}GIH3Cw!;&FBsJHOmf^EdQa zBg)e6Z}i)irZGeUBoYPDL3pCY>Ag_@oArqESu=lbE}@0D(kJuFcMbbi_G7JA!!BI7 zZKtD>?cHZKfOiHpFk+*pWfcuRO6Jr7LV$hxcgw$)zCZ@FGBwG6*)zCr_9L+@p=~8) zcQU1oX~DL((}pjt6~f0I=z|mzizs!6u61ww=t7>hBMD>Z-2H05e^=x9qqY+laB$Os zDWRT7^KQQerq_l@Ky^uaFgxX7dYamKj`-Pr-+BqXzl3^~HU_>Mk1*ACtnFtC^62Q$ zzeC=_a!FkEtBtJRZ~5PCA%dybgplOdiu0mV^(t|CcpIyAT^UZR?yswC2!%+Ep~4UO zXIahLg2sy^Z+F(VB=4K1giT*P;>L8Zh<)StY3rJ>l?_+9hGSSu_ERSB%yd=Lp;j;pdjOnrd6cbzx~( z^4`XTNKfFR?jS)wDU{x18ip81W8|I%ru5O*Of<~y+#tc8u6 z!S)-an$=*6%6buGi*E=g4O9>nvZO+0;CCm;sL-13>1u2j#I54e3j4&yM5Jd=;+^d6_5x^B9MkMe3`fnb(~HEuQYX@a1xh#2bE{OhxtI4M zmgn1YlH{6X{L}+P4wT2&KOay1Y@ThcEY}lu1(Bc&4ORIbI1HYsp1k4cJgIQ;b+}Sc z>UZU<5ajJG{boh;>pLPfKu^u6u?gOjK~XC_J1&(e(T>a;T$#7~wt6K3zCDDYg0GY( z50do^UG?Y11s5;Fh7S273jfp^b#~kDE!Ga@9KRPyl`wD;;b>5 z+Kd=&q1B!^f}?FI`P-;CD0ybwP)E}R%aAeVok*e~`H~q9^+&!D;k?TsTL~>nuZJ(mu^u}HI9D=ggRYl+ z(OK&Ht#0Tk#awaElYP4vPV3F66gcW8byLswdeDcB!{8fNT`v{{-Ufy9;Oaiu?C`(; z=|B3SEhr>e?Qka;9f0_4#fTDIHL@wD$h*r**lhdVxfGc%d|QXByXmR`;9Fw7>OFO{ zHg}86>AIAnKQ}&{%qrD#OB@H{4=oLC?eaKX5R5HEh(`#@7^<4`!(yottJa9bNs2@n z)JzOE(h|>xxx#?Jae6yB=TD&e=E{z&fl%Td#WIfR$Ks}xz$?rC(;xss*$Sfetz)x{ z67ufY*wW7RhE5<6ViAKfA{JZ0+fw$nhgNUJk%5}+q2Oc)GD#PB63$)ByO@y&McV3# z>^MK6@w;3-#Zkn;6noFBOY^g_H-Un`xnpzbXPajUF~`#Fp=Xk8*6tND;+x$Z-QOJ{ z@$Uruh?Cs@vfdi(mLbwmEHSL!Um?sS5|@(5JW>iVjpPXuTQ57VFA}fl2zcIy^4$04 zq&G>9jQbmp$8mUJulBJRn>H1;rWe;{PZ$F$=@f*>|NhrqT!(HouZ^A-+m%K>g%_>s(+{_ZR*SCOW!ICH|DB4vXy)Hw2+ z*#6BsWN`fn!5;Cu%L$W1x1{$BY*WKgET+eksxK<|FL*9R+`1{HF0`_)KSvuf(&5Q3P_lMYP`MY-d9V5- z;<9kU*Ljl97IBgrshc#q2m?+ItLq8+eqfE&FAdDH?aJH5b>12Gf-1PngQMKC5{pbe%Sx>ZZ;9>?6XpcSpL_tPo9& zED1)1yBp3cprx1zulIyp|8^iVqNtfQ0^`M!TBOW~0K$#7d9{<_JO=8M@AI0Yt4tLS z`rNJM?MKQb<&EqUk|0F5PH-;|f<21FM9NeG;o~G7$nbbA$<(st*GZwYSRX6ZmCSl_ z@Y^2r;yiA)BrzcYZy*5MQxWaK)fM>hZ@Bo<;npUNZ{bfvFFe+y>|kAI^?YdYgT}@NA1z@ft~&@Bm2kM;|x+iCYcNy2#CsQ9s?a&!;0Vl7>+| zady*N?7}B6toF@mcVoCHn3i7)y8gDSEwHvMj_-_-HLJz zR&cNluMwxq6pseItbINi?k|#htUS18V1ScXZ|o(OF@!yb8+~%Yg(abOea77F^6p*krj*D^;6l>CFBgr^YL2V6?>8dI| zV6t0v3h^A*dma~!>qDxDC8iq^>^f}Q{m5~bRA9_Xey^BqogIsEM;>nQNm#8v>B+IN zmGLWGBrH~kG2CsR_o8z&Z*&^h^AqE{azwa0^IMYb zkgiQa`;wfCHX;a%_w3rWr75rkvU{40!%0K-yMQIcZIc2 zHH3Qg&+deZX;e)h-{7d+)DZv_@WG26=TyhP4I2#Z<-L3!SE$vNoTYtT-vpZEeIK?S z6UF89iOYIiygxu{SjoXr6p`qbnJN|-RqoQE)hlFo;(hw+i76*p$#xGm%=6RLq?OIK z3H%e4j(HATE%Rjyc>D#~UYKn=Ln{|&6@?h7XZnuQle5Jwrj{;<@bUn5?gLXdhGSNl zVN|i1lR@I=(n0<@yrlhNsm#Z`b|z!9&sW0Cj*8<9ife(SgBs@~8Q<{ImWhIi#jZs+s74PE~b&AYA&_^A%KcVEKu!8_Un#8qgYmwD>n z_4E047gVjb#v%v_xV<6$;l0PCO%RW>b;gyUqP}YkoHx-7Zq0R3Y)E?ist16>QI@0_CAI$N8{4K84K+hzHL}nty(>kuVo9R|hv4$wx`d+O7 zrDv}Oqh3g6N@r8gJg+!vIaLP}4f?>#n@7q(j$tlCr#ARhMysbGcuM%FKd{__Kk1Dv zXl4q}J=NLiljNWRhYHC#XfkC2qnY=x(%&%J&-Fa8d!i`;e67~`?K>%d78v%SyGG+!POA8T#igv zBy`1B>hnxmjfh??tKQjttdnx(xh9$^s4bCufS~=nysl2LNuK2{GT z8`N0IKE3pD5SJk9n5Tg5cPB~m7_Y|_eaG8m2PIXF9b1V5SH!U@wpt#Pr+HtlCB5uB z4O6K^Jv&k8Ax&o3Uh7Ln6WVO1BOX3+WXNuM4X_c)=cgn1*_fPIe)&`hx)xvQgM4qN zbHXWj9m`i-hEW@CDv<4TRlqy|JF9j(VGEWld@fl+s>Vlci)?~QX`DOLhRqT@Mad^M zirm%cH&05BH#q7dN&SMqs+qe^U{JKbpal0=pH4AM zD`nq9uAW{7lHdgJAD0D@?nmOn$015yUpKs-5s`#ksTNHdo z!fDLRr8gc5i*prHXTMRn>IJmPIzx+Ib1M z%`d}I!3eE&Bo2RzA*uNuPl7$!TeH+%s2~q|T1ELYR4R)tqP`6%mI)#BTm;W*K9lor z)ClY`Fr4ccRT-q+=u?TSk~?#nW!WI{=4f&TOZVVE%XoL#1V2x_v(rjz%MGI7BCEW) zrd9h4Y5u^RMngS;%a_&E^}+{vp^zv^`4DiVvVHmRoZ7XU@W*bb>yaWU~zdx_53vFY@C@AR;(uB1zK07!id$@X-c^FI=)rI z!LaL;LTd=Mx80TBM?c1pDnCldN+3LnYO9)2llLo^EnyvIfp}^Ma3R|(J_IM3vA}^ZGnur3gd zhXTUJF~&b)gLS6S0lYV2!hjkXvd=MYbEm1ZErtAr1zEy~*=afxR_Jy&vYOEG)e>>t zP&oIbQabA)*o)X{ZuV-vqu0;u27TzLssBh&XE}!yM zK?VXyM5n1vZ`?}JZdbfR;fh*4(9!NJn)^_|J zKG{jPKAfj8-G@9ch_CtU(Mde=kx^RGvJ0d8yl zSSr&wU|?m+V#(L@2(EXV>#98+R_Ug5JvVV)n`1gv8oTw8J%g+YF{aZmD{3kf{qi`( z0#7%+F7vD<+KJpVb#&{5ZwsQ$6DzDn;iBGSa^H9cn9@f)7B%H~DBUtM{)k4;tbhcc zZ^^Q4<=ZfGFSl^+IOFj|o*z{V3BAaj0LNS3T_C2=_6_$?y+7d_{Vd}pO4LksZp;B+ zcsh1CfEu)6Zr1s>NQ|UNR@~=z1E}{UlGAxA4c*uLrxG*;7h}zV4jF2F{caMP3JsoSrB6&buX< zPaB5({a}2z&qpoJL8qN6&jQnW3js2qya>VyGkr>3=%6hP>JMzv*nAKVOEE`?ydm;k zEpP7URpgtOUjuR`af$%ZAo5Slgx51f@Un^Bkb!3rs_A+EhpDrUiYjc|y@G&9sets1 zh&0kt4kg0SAtE6?q;$y)5+VYUBi*5Ncc;YAjkLrJjl>Yrc=o*CIp2HM^ABsW)}CEY z-PiBBc8L1y)4fLXk3l&C-_ASB*ah#2<3=_UqCX^$-qH;AZ(0Oo2(F;XF5Fo2K=5n~FIuEL#xNe)Ixw=C00%myx{5 z=$U_tMas~d+^zhg0#%w;rOB#I(rsQDWkQ+DFJ_0G{jlHS#{VHea>Wi+wJ)qjj-r#z zCxq{?IFRtY-K&{4Ub8~dB)b&?1*BV|^Y&GUr3{pq*y=Yq1%oy~jntR_7dJ7HScg3z}lJHN4_7i2)ndm>Do)`7QNC1hLFeu*SA;a$67T%y~5jhp0v~L z+o(=JTl>e32Typ+(NZVS$ECjnBCOUdVZtS9u3FIK$i^pr*(2}0l$t2=%*uZS2@k8) zvq8kgC&Jq~?k__)q#HZN$fYQPWFzY6S?HafZ}^G7ll;@&tySGE5#C<>xLsHBtnZ@~ zbssy?`J;0R--7`Ct@KL)g1fKgnOhLrN6R4~`!$```&i-X?`mx{ak3>!W4Qt7U6!y& zvqOjeU@YpQt4Qzq0h0ID*vdqPO=LuS{{8lpzZFOy`#0OgJ$HE!cg{kgF?W zE8bQ*-$#G3=b7><809rL0(2mIuA89GfSUx1L*h+uO73NEZlfy#P_#1fHalNZYh?Gh zt7r66>tZ!ar6qqvg`-o8|1TqtUg4&5%a@)Rx@;vW( z%Tv;ATl(V0+Wca!^eLs)4|M-Ax8MkpFnoV52DxKHzU_Y3D@?YU_B(UwgfFs8FN%*j zh%6FI4H1#KwL0C=1))W&s{h4;;|cL}L_TjiX!Zj9f!0R(VebnbNoAwX?d^9`M}#LF zgjofVx!x|LPqnF`i;0i?vc(<#2e$qXtH#Vf_*N64!y~C?zD0|gk1bOl;c%ba+J7x_ zMCd`I8Pq3C*UP98IaSTu#}#jwO!ND{a89}K14Re?wTXH%iRcJHaezPk{e?YFKODg@ z*_U6#bY^x1uubEMxnCcp#El27xp@Wk)qCHB<)b>`#|?y%eh{EJDzr~`x|>iG3}s@K zF)2`Cr=n_3WV7wH?W}pKEn7*w!+}@*@)d`x`1Gw`cE${<;+A^O~<$Ms9}AZyOa~sSIb9GAuV%=HjPLFejtA zjJPyl*f4deT%EoDA~XDWFCWj{6Hse7wB?xt1)3#)AR$p7?+XC zdB_W{I8^#_{WRX0cQ^x5>+3K=s|Jo_i+KO!3 z(0YEHO+Zt}<7;Vs>8=`ld)3J5e_x(KLOeBlJS>O$M`L-7^NUr$fRgdICeBEh@TB^7 z*S5Q^Z{NAnMg{DIo@mAg=`bRk@Fhi^QZ@Vxc`-&2-E%?jabID z9n*qh{4w6IwV%gBSxj^cnr#icml8_7F1GdWp37sIwry|0V;#Pg3Qyh1|4{@%p#v2p zZseu@mj|QupOt%Dw-24qEbKXOj`^qvq;KjSuEB(t4))kAhc`5n-^OSMM{Z~Y zpEJ+P2;AZ>(aVe(8FLln%y1Xu4J{DL&vPlCt1cjOlDMrsD-34$Q z#!oNO^eXjE|9UVG`=ME^m1f)JP^^Lr0fGbVOoH}A;#(E`4YX9X8gQHqb(1{Hu$y>l z12{DQTok!iC`Osf$ zTB>YYnufnb;E9ERrQ<9BUP3>r)ARl3fevARgd=Q9`hi)v z2|m*adV6T-HuSukm_1cfOGezTkYKcw$*78(#_>@cEDlnTZA^{aM=>}VE?h32^3Hdh83UdWlJU~oIH~2^6dWQmrUB?ww_#3o z>FeWKblRErpY7OupD>5r{2lF-%3p8al{6E!^90K>@XSxXxVNZO`>bxi=R|ZG+;5xp zGC7zx*&IvGz0*NsSvcPC;SHAejt?8zdzpR8i~c+hl?-$>Bms^45b$lDEfOgD=xxC)@YnwiK{Tz&v-I!ZNVc*s@ z{+c0s?^t*WpekrU_I}oSb5bU{9XS{L$GnlwX|jP(Rm`fIFnfnxl!3x$Q!We#FpvqW zMdl2MA*(!Q?u|LC@6f*mop%?B#h)mh{+iZp)tJvJMtZ*z_R6K3Ed8!tTUu=A%aW22pkLG*uUfRX2-@QFu{I>n}EsXQz@%lBAbsGgd0WB_GYhUGjL zyvZ6)U|6mBnMuqCg+u~o3Ur8uw|QUdulT-E{Um^v~6#e|&OpM$5&#PJ{k=YXPU~whsa#)@@SR06hUOD+5r5rLcc&yOD$79lk^WR>4x2?dqR1dcl8se#N z{_Byxsqjwq20)&IOYWf_{T|pTmO6y(I&dRgXqdwn(A(oT0<$974y*b{^xqF(y5_zy z`;J{!qQZ26_nCOyKLT!FM(VmauxQ&{4t(K6E$jyFmg{-@uP zv|c&}f}t!KHWT-CYl=dp`b3b!X~KPPHOfoP0%ExVCnnnl;6CI?0RH@@wEqek_itfC zO7}li0ha3*i`d9+rak9iG{DCA=w}>Gjv(GaZ0}8usQ9K5H?KW&((lLkH=m)y29CaL zqfwoD`~Cg%A1;rh+*^I=ck4*)7DczJW$X0j@4_{(Hi*_92M&hVAqtf+QUh0J&<*Q98ys^xKso2*9|uoX+hg` z=&XkCVaxzcGe=$X+iBR-+{ZIDHuIk0xG80=xk#6i zc7!kLlfWx*PZV#{pUT4m;%15Tr#ICt0!tqt;&q7Wrp21n)9Mg}vY+@m-UpoMi*wV> z9~n1K!i8!LT}YH^3X(wtKZ` zwI@k*EKny_rPlr!1z$-mTc0V%u6da+K9B-#&Co|%IzxCvwB1{`hxk_joXgRAoWn<* z{mXYXkZ z;mk;^1@1i) zdF})_?07clF@96}*3>4~+q$}5_r6MPoBcLbcUDhrzsfQy2KQ2mg?ZzcMOD957BD9c zh(la||3p*d5q}Oy-k`zV+MS_^^uN`vr7k|@o)utcGPe>KA>>MC6XOVDUAhoAx!|Fkl!QrS~XF4)rOPe+{{~N?FXgX zO1OlTY$Q}#4DT?~vpMU}%VWKr9Qo~yoyWj69Q6}${-uWDWtq2K|K+C1!wm!he-GCs zgFv?tk1A%s{cp(A2*lzyE?RCbb`l5;y!Obm$g|7=XqN|voWwfFND*#zehY;fJfXM{ zIIK+)dQJY~Pr2+zI5SdWv*_4aTlR96))<&~64u5E_)tU_{1P*R<}&LUH(MF~2{$v0 zznsDcanxCkKi&DyXtK1bU3&?8!}mlCPhg#T9Obs<2-qF2yA*vn0uEDf#UKbDbcQ&gdBE$)?<}#mt%MvlY0YR1Llh&KU*-@;!9e2M= z9q8VAQQkV_;Hd2l2>*=B#aM+%Y^2+L7#@C@3mh0zjTTKuhiPNk6-2%G)nR^f!%n3} z7a4@5qT!4veAq6#^tqC_^z%n(_A+daW88%36tVO7B|fjQu=Nuf1nE;0uHz!Gz{#~X z&rU)fwN{gP)4d}&Si6u|{)B(eFojY;@wx;oQzng8)3n-tPa)yC#)ZJ%7WcGj zm-I6tqJDwiFJu?rWAZY@5nIe}Ge@vqUxp>x8MD)HWzfD*sr3n=jPpU9S(e8Z3!dg| zkHE8&!u?FaGK2 zU8T^F5@mqP^Yiby=e>wSSL*=4*)7P*HrUv;`QxfUuYfwg*TIvj^KssrzbQ>gWA)cK zOwyA7^Fi+`zHb*=)K#-S01L|DB(nKJ;c^TLZW*WhNUxs4|HX#I+uq>fGikb=T6T*{n z>`)B}{qcuqIqI)^f5}z+Nj1{>$ zhsrrvknT(4KSgLjdWv-y#M~Upr?7!!i*yf6xY!%fdN(*sZIbxW9cNQV)QPOCEsx~# zt6M~n(?LGSb~REQx3*|Gj(>vG;(^hZ@d|c9$)q5=!C+tbEGYe;?bT z$?@j~na#?@*w5TI6;lt}Z$s*pEWqE%2G!DUIeUNo;QhBM!-%=YJC!``UE2)bGIROf zeRNFZjBkH$ossAagN16<)InEJt>8cB)K4slf=ER2v~{Z6u1-@^S1&1v2g-T6(##{W zsk!twrj+4&pln=eQaI3KlCH90y>@M6iiCt~<@dv{vtl6jC9@ z_K$JU;Xsd9b7s#=B>T&HG+A`2&1Sf8&UfywZ)srFw%W@@EVM&#Yq22z>9^23Gl|*k zzmUPYD0UEcIER#fAae%_utgD&LV!+qUkza%8R~u33FbX(e#}6Mgi$YV^pZ3d1VaaD z&F(z?=ydKmJbARL)IdK5LA~8AZSRQ-I@C?Q6YOi?sSCdclC9M}NIsD&DCe<4a zo$#@dBx9e9ROr!a0XT_vlTQOLk$w3ez$ke;SKnf}hmk!|R7Z%oMr4JP9GD(;v+(TG zUB{~GEO#w$YEe zw51CL$VJje+DXXnvK1XN<)S^+91;`(3~Poejhq--QZI4kE{~qN!iMjUGr=&Z4`&GX z4ffh)ihlj6LuXN;lOZ(q>AXm!#~3L5$rM{Se2VKNj74jl$?{d0i@~t>hQX)+;c?6c zp?Lq=xE9S(c#S{o!Gft9M9yq>K`nJv;NY%dTQH-mVnZqabiKbkq10!{>MD@D5w7o; zpA)9HBWg?f9t{jpt^%eULKN+v&quVF2};$@-24WahcwQjXj;X6ZH%VK{<7d58kQCR z6#JqVoD`f*Z2EJ^J;SB+y(f*=Y(D2T)Nk%f?UjQ&GQd-bVNzTMD*4Ibq-Jg8#O$Fk zDH|gA4OoFQ#flWJN6l|BaZ_>ER>1lwURPN#D^$Rln3iztAP_|uF%}Y>2wl+eKgvF) zfTfo4Wcx>`%NmQX?U;wt(H$SiOVVZ=)aS^hgn;Vg5~h<~e%@8W_u%NQ%BnC^6>DR} z-&L}$Xx5;|7>UBh1Ab;}iV}T`;Q>iR>Mp0T%J>buTYTLNY;iI+enl?|gSz4C>m)~V zx3gHu7XD;U`wz!D6*t}@NcA3k#E_}A*CxeGm^FM05gJ{^|7PYfowz`)Uoyktc zNf87i4X?0htmWR;rYE)0AZ2{_fJ{!?xT{yFKzJv9c&AW(>h^ELO|}@p=HcR@)Ft%| zIz$P$Lb}-Jo?vEQXMl@JJEDDp;AO%|E|nn`$*X!jx)-g=B{e5I*%g_mdYs~_=KHA6nuX0u(g)b=&~Oe$xwf_hfa@3YDC)fc=?>Ox55Qbtk&*3pPR?& z86f&|iCGI`sN2^IPqUfnJvvEQ*O?YIn$;oEYseJx=E()sasg3dpB~DE@pJVS_$XDq z2>d;z9J%fRlqM)D9K#{R^ZSD@Ms0(FRKU9+20AkcYdOx9Xet#D6l@P+XfeFS9j-&l zu^qC*FfF4V`C;O1DN-x&ILBtI`|IlOdw9@W<90gUn8=Bg_rHR_4-LJ*pUuL|_B>xVY6R@Lnov%Foi`sJg%v@ic4d=s+u9a<3REQ=n(2N6A zc33zI-K4#g?I?@M9Ais)lm>|1#(rHqfaTCrX=ewI@x>M;Ts){MZj5CT3a%_TW!WB} zYjn9!StdW{2DfLH)FOjn9T&6Io1#SYvb`0cK!kqSFz zUew!C`U0oUJ2E+zaw!(w4%x*t>T?7%7W!0_D8o38!ouNEmZ}BCyz4Ur`|A8eNp-Yq zhi|LMxBB#_PuQl6p0lF_Y76Uz8kzI(D~n4yrzXwT-giF5d}XyA3QSD5_!$4vNF<-e zG#2wp_e4Cof39mhE6nPli@k|KMmRaI)y;v#1E|!nKKJsFvRuE0G2s_@Rx6`43c?T( zsYHrNFz!CUbk76UAwm*L1*S#lO+E4BHb72Jcv9{E$&j?dc+B=)w#wVJt_ny_Oahbv z7RN#zCEXn`l;m1&b!5@miyctZ*ikv@_FiRW0x~`n%eI|Xbq!pbXZi(*n}e@hwAt~= z_gPH_;lMImsO)A&{rH$^glhpEa}P04pyB^vwG@9yEv(MDtTstmTdOnM z8yt-dF-R!Zw4ctI;8#{NT0%mU9L`YW{NpzkMa5E7=vSDhgpe5aK%B_Au}{U+mc2K8 zeN7K_hx!z9=j0s<@X@WSsH?Aq79jbq?S)QRDX>*+2TyPDK{SX3YOw}Ih9@rBU#if> zF@qG5n_Fj5k@dv?fHC-lqk0QDmw+0N`^&NxcAmSVun=4ywVeFb3tj(mnv#4at2W0Q zGe|=8>-Y1w3|Zchj|S3=BY}9(uBSz^~J*4ZKU`58+LT1 zYPF#h%TYw)f01N#u(-z!o3dZsxskN+WAs%fzS)gyEV%k?(H>8aNo+V z;)w8ex2naln9h|J#a8Zdt}87|W1r&4R}~^Y7qis^n}my53jryC_cnZqMMhn*In43e z@$13ZqUM6sGwKO-kP1c?^OYP5akolkAzU~x?OLhGHJPKGxad7)(m38YMx751yuO2t zLZ#$nL4UwTxBiG>o=9BXS)=C5TU2#=(RN;V_qJSW!p{Q*ROV6EXgj1tx7ov;RI^mn zG12Xagz0cu=+s7~P~%)!eMe&;Wj!ZYTwZZ)QmS9fSH2-!7IMicjbIAy-3n0X?OWSq zbt7x*r-ltWRdpnynuZ75wkRJ+CjB6*V1hho7ibrtSgiVb^ex5x^I21|=zG{Ci%%$v z29rsDnYYfuhu@=8@(lI0?#2?eNFUqTO3Sq|PD#r**Jy3u@rrHs$Q>`$p2}FzT2GR3 zzE{t$yfLPi47wyGb<}vOnjP7&=Yk~(^7{T@h~fYzhMW102-oke9_VMd(ho*Z`*Er* z4^%ff;b*&5@Xwfdw>P)&iRC^M2$LNQX#Pm^iW1yjF)YI)5tCi}!CeNY_0elMw!v@z zWF|*#Bw#&xUdj)0_feBafr4&ZuMnfzBTYW%zlW|O563VxTRL8^ba`6(xz~x*jL$k~ z;(eCg+|VpmdtE7vqz!tJk%{{+(vP)Zpc93WvSE#)R1wY6W^>5rId?jmu@!cXGPwAO zl~>C7P))ZXJHOMnIAe21MSd!(L~sS8mqaUChqSHK67F^s#y}Er+k}=mKRqAde&YcI zu-FUU@smt#HSf1qUBGjH!5fQA*PyqeveB^X_R-h(jRf2gf0V+EsXOIp-?paO-3+9` z<4(S49xe}^aeXaK9HD=x2lGt23}^CZV4({~?*NP3{ZK{2hSta0Qp zO%_?-8xl}FtO9NEM#t>0RDrfAW4ZE-98mhMS)m0>W{0?3TK@(%zc*1?1rVIx(q_xU zL_%GZ)^H)fQC(raxz*IxTdpX1+AzY@JQ!?E&2)v`)c4nTzw#_F(puu0IohzLSHbJ5 z5-*6=i=(G}`C~EMi5T)Qj;QeI;B^crEw4)tC38P5Fvdw{hm~h_Go@c!vU9VuKSu+A z-nBng%V$u*s#a3VeY?r&u0ON#Vf)0En+oAu#GCVojWnY4(&+lnrH6%j)~)Bqk4zlf z+rd*A)sPatbxc?mqf&bcn;aEPmhk@W=m2s&1Le~b^8x6ujsbjcGBaqNo~Yj@BoqEs zTyHavfym~xC_Ruti5REeSRnH ztRZRLQWVdtK0V_obtB(y?X>Y%*=-m3m+svJwl0jSI;#g| z0LG>;pHa~`O3baO2c=ou7um2?;CU(ovx%k}IZKEk-^1hd!9Evc!r#e(#}FBV%vUxd+C&q{Fb$VuxeynmcFP z{R+_+Tg`hqHx0cH=9N$0y0%x4qYyq5V`yb4Wpq?>O%q%fi9MAt$P^9eKE1ko!BF z<~CC}5fnTZRC|=N{}T4qSrSWtzb@r4eImo~gvuW8@- zug1x!hOa_uN>l4?IUPb58Y9D=GI%%lTLT)nc{@cD$H6lz6h(9WaFlJO2zKvtWLiZ! z_A|>83~afqchBzjiRtFQ`L^qK=UrqNJxqZ|==nV(!slh3^AiEZ13I zPhR00xjs4=+C6(EJT+nYJ9B9v^GKMgr+vWqZ>6iFbIW`15AxO+a`k&LwAR0Vu}`Jy zgqJ4nWi&)u=UL%Z_fl-=pTx2bI`tJi#tG*OS87N>_FC)M^iJ!R=Z^&+D-iv>~$g7ADM%lJDI zrU;(VVp^Ag<1k8n>dGFl0%!oDyp{VFi11yQiE-1Z(jne-GG+lG5D3$yd!= zYEJawbm{7WwU~hjL21=j|Lz{^pYUs-k>myB5pCvU)M2H1$F*=JV07l+2??4aICeRT zFMU4v!uL$k=ViLM;>XbdRbEqgA55bGk`AymK_^OU55nXqB;7}8j!pFfUL3`Nv(1fk zMx$8QLiCZ;XHF`=Q^VvNI9W?gw|Qi9jr$^zwR{cq*Qp3B{{P!h8Lb)qSQ7-?T9vf>54>lHw9Y<<-S;`$IjpeyfH8aYFT1fbVX<@kT z&_Jz35pMOM(>OP(kKZ2iJV?OqVIu%F^j)nH2H3HBruAH~KOdg#TkNHEX3Frqk?*#q z`1h(os)F}53Vi)mVqKoSR7E?t@hgj;e);D|1F^$#dDXe+T&-sAans$~Fo4^b1%^8< zqV|_@I&`8@rPXM|cRK((L!y?|0{;x;#f^hRj765U2p@GGCp0E+=SkY9tBH>0dO`bo z$X*`riH=1u4=r)vrM#OUE4A|(WF;MIMcFK2U$qV(CBogvpQkM?P`#04D`QCD#e^{n zZtsZIMpf-VlJ^B4jdyxXSQ)i{v+LB5^l^IoYs$wn^nrGE~O(8j*K)L7X=;)6)1t>2XSlY z-VE-HrzM5YbdCY7wqyXbO%+9czRFry$F>)UX9UN?n)qDQa^*Hv?kutXx9tV?&B4vc0`&e&}uta8vhAsSQ znOHoh+FnUZct#lXOgVp@wF^8Jq9W0u_aZxnRYHT>9PFGoi4_R zIal6}{xr(LAo%=$;-YcE(_7F?q}qK;nAgR}mV;;2vMmR&1Z&?>JFZR3PJ3iV=x0gH^(KlUfh`V%H-N0<2mEJmCtKU% zYY)i35*U#4Q*R?l0Rfsf)8K`~HzCcSS#t3trP16PBcqGGea$i%hv)zUKrw7_G|eL2 zI@4v}`2Qlku`J)_PqQ3GtAl$ttyucsjIoU5kH-|-y>W<7XWja~CpdN|@xK{{xZBeA zxLnU(y6zs}{eBFDKb^ zmD`0ykC0xIS;}PtINKZ=hc{#w8VjB*kI_#jyBEFtU0A<#y{G#hnV*osUemmvHr?;$ zynEIvkTsi57Jz?n5yFiqy%ZIJRs%M+@^9~FW}a+^)V#xJk^F0)K{}2 zpZlzBJLxYFQjyF1P|6V;Chu^x(d&||AU&Aq$+-N1XN*KyarcGe1rs5>8wVkrksjT(R#Ony!f1Oib}mGwBuI0X^@ z2Nzdi`5@@I!ZqMD*h44Vl|J~mamLDrP}1KAVuR-Og9(5zqaGZ zd*|H}moE?@5NQE3Mr*38og$K5fjbh1d?C)Z%r9~0;07s?Ny%b_I+mv~dV|xZcyLNA zLdS*bPF4zhw`Q6b1l)8QKy+Jxr1K`7={1KnTjEZ;@h%TwbZa6%ed(1m(KrF|`3%Ho zf#e&?84_+%7ia2R;;RrDALeYk#Wzx8x?QNwBC4((m->(X<)%1t{YSRPglbt`6}9az zSl)DrZ&qb9-$0zM>=!1riHtr5soxF^zuE9V38 zHdvAwWuMdL4aqPdV~yGJ26$eo{{9R*-%W9>3Fvwgng9W?QRqDof!iJy$DjVpLIaTu zMGFh1_2|&U=07w*+`%EM@)jq-#tkPJ10-&m5p3k!&a+ElL!wW}J?rIWKZI9k_-t!; zgFgPzvTr$=BCv*R5pB4(U9IuaY_Xv8Y2;U%{!$=7E&(gMj-E~9EWzIuQ}`bNM*Xrf z_n>3IBKqO{Aq^keWzlF?md5Pg^(o)wK}^O~HX~6#7$AuN!?m~&0v9Jl;WZi%`b*cO zMGUZSg*tg-7>+JDd~AUZywm{4<&of$rgC^dXxwlACjkT(S*2%uzTmg|0m!&P?|HU; zbOCJaH2+}|dVq|U?)4NW<49)Y{>p~;pS1)N)Z``K#l>mup&pNDc!pmj;D~x1&AJWevQ$Qgzpx z|KNz9&kfzQuD{U&>jr>POWg7cAhs9P1Hm>Xx#vCN@8<@@V0Y~x<9c|UX%IgNhM}61 zh7lh}R!Ob&lc<|2kaLh%*t1%Wo;#o|qJhS94k=^rJ0G2&IF|^rbZ&4EoTUl}5D_*-5}v~KZV0BZE8O-lhCSgSPygcOlivhhDd z-7N#~PIhalout>~qVQWLV9VNVs16?Y&6m~@fX%$kRZiG)o34@F43>G9RcGRGGG5Jk z^UJM{FTzJBIV_3{hSPqj%~zf6U#{VPGz^D=9Pt{6P>N*XUgNc(5f-DfSygyd>H&}+ zQw~&KS~YVq(jrhefBnoSeqod2A2e~OlrtMj5@|o&{w!3ET-+jEfTLA--JY!xK?mK1 zN(+OYft}lL2UMl>j#F4{O7mG_Kff{B9G5<>P}*%dT|DBqz)aKJ=YJ^$7;EBDE!#cy z?X9+e<%TzWogX9i}gUSe!6i4<}Igi33L}N5c711W-=&iK3g6-gxYe^>>$ZTF2Su zg8WNcI|fwhl065x55jKKm3M#o`7MI4v}TvW3w8+zIbS(6X=pWRM2P?&*G98=`w%DU zDcsqu@RNT~_{B2`SZ{)TJ)0E3@{D{8xepnw8{lmkw8O95?7a2k*}m6wld{KwoUV+h z-ve0O^9b9NNH6|cwc%I)fXR=?sh59yeAG&+5+vY6l}Nctr#(a$$GMIQJ@FT*;&stZ zBwVjS`R{;@OuO_QP@;qfcLH$nJ!@XB+XZ>#p-qM()fv*;??gO>P!MKk%opv)(~Gi! z%-?US(#IW3)$rWF!Jl6;G&dCoW*P4MTGtPuW4TsS$*@7LFH~3CF6`?0zL458h|lzW z_OfCJAX!c9ZFwJwIEv`v8S_Azw%Jpt(qU%@VrEphG&l|^psOZ;L@nUo71QrY1+$Jk zPR|i8UxD3yxH^l<{3hFl_YW6HbOv0R;WC2Nw0xO(n_&~5L}GCYw_LE4#ssmKA&exA zE}&^}!y5h-VvK;;qAJAy4k;ZZJnLQuWx#Dd9#P)IVx3<TtUHh->4nr~c@~+T31u0I3}qJ6`_6Lr@oCNOQ`&e^286c?nw&#uJzV9! zGGaJk^e~VHBVX%^qy;bKfeo5KRc_)Y+m&`=GGh8_GYiSPK@XudhJPVm_~sk{?^w`& z9GK?0sNW|Tq^rPavUoNcEcK?AspXh@;h;G8j9Hao`5YK4-%SPd=wpIif~LQ?$oR1|U!Ed3Sliybj4|J3&@cV;QIvgEhd0F$p#bFGb{^bn;{Dgos{H+=2 z9P3V*_zo8>GOz=0Yp7Zh%qE_r82h+33*t3OnJWP$^n}-QgeOlx4r&(NF@Nrn2r~qT$TnBmR|*`^ zCdync0*pk00&mK_unQu9w;A726eo-kp{46s#jseO=~Yw1EtHmNZ~2pj5r6_xd**2O z;j(udB1(B|&XHM z_v^P_e;fOGrE(c2%SU0&5a6FhK&ye9sZ|2fE4uX9Mu|>{I?2jFh!bc~>0DmDtzVZ$ zxC{K?Cs9HWH71mq5kK9n`6?AFeRGBxz}$^>D>41@pdRG$+c{uhh}$i;HsJS4FxdD| zz={#vM_`QZlF3a619N=NPj)G$K2vhnG)`woa7r|rs6ez5Ec`Wr`x@TvI#MdnuOoB7 z+v0bodIUE-YQw6K*G8%%OPs~mv3Iqb2-<;*GV^Co63YKnCMt;bnm}7asqk@g_oDjLdt~&@R40 z+x{RcNW3ek(mF6al;lZ#uI zw!gT0r+mVrfSrD{{=>wlo)o*ZyxT6ITyKY?1=HN4`VewdisyX`)uYu{qS)yDP|x`q z=V-f@3lY1DQjE)AyN4d(Ro6c5^O<`Ai?kL^JYFyxg%aiPBnMzQ-yTE%l&YM${5Iu5 z;>wC5K4Csy5G6_oMFV1ZWDAL*ou}=lHMckTV)JU{d<@k&YjVSX@8FyHr&j@n9v%_m zdr^cU(gbvI{TpbJ>&|aodMs}w@t|M@nwd9rMGYS&#}We|N;dTFm^;$e&J7Qg1ANya z#eXh*truuLW+AiB+>GDQT9f{FJ~H5v+eRA=>9cZp{S4c{KN*!a9&P@31P{d_N+LP1C3kyfo! zGNQQLe$PsB(eSG=O_77o2F!@5p)y88s==Mq)VtErr9^PV!#<+n2ZKXDak!o1ur`Wh z*pOv8B33j z_idnVCp)9ro|1{PNUqW8N|}esrjam`p!Hr|shnR7_q)TDf zT7lF_9EPOO#Nl(oWBu{b)tsjqU)Qo>QYCytP|PQd05YLoai^3iEnSm2spfphvl;gZ zwE?%uRCcTM`~3a4^PLQW5sde>=h@b>znmp}=--t8l*57|eKATYmx~+Jm!Ba0apKI($834Ec&k zJQ**Y8}*Qir!G5VH?o+x7;lD@Kma|FDRu|)9P?9K@Pxp)RCkJX?6uFSu z(s8b6oCc?@G;{xmYkEZ}#^A%^KekYy4inPxyR}k;<}OL_Bf0KEmskX;Xxalymo>{L z!~5pF+hd~EB-96)+XPf&UuWOoaDRGP$f6FzmQV^e-@(CIT7)u49U=$)r$L@kC3JA#$Wj_r^ut zo5`Z4s`t}`6T7_)7Dd2db`0^rZ-~n(K7QiSzJ2>7c>ex`+V;j3>(Z~Befz`1hdXP0 zTiQHn{kq);-3=srtKAys|E%|UmP^G8FWYRt+<&b6>E&JGJav3=lUM1O}zhPB?G7;%YbN5pvbGYn}7}NDh24dQ1e4mP1G~2I3n#y?zX` zGqCJQmR~GTX_`?aXO*p^FpPrh16i~#GC3oC*#UFrYepx@*arc3LSEwK=_b$46w^)r zp`sDrQtaY1Ol76CwCZ`(=O(x{m+v!=U&e7<`;@$SB1!iWYiv6eI1nVFbNc2Q>k5yS zXJz;!7uxCd*2yH41?=SXFFRP*10m^~?4M0hj31}Q$>v2p8ydell}9ywIoG;TOK^F= zZKk|688dwPy@;uZ=B8J1l-iE|J$MpUo2;SYHyG7A=E{G?g8FbBLB3FXM$_ zS!)@~uUZlbzdKL9r%SJE*YpybCf#HAu_EC#Ts|&@z|%e{ohjy5x5k7K+x<94#CBY0 zN@vMDDR>??sH!PEACnlt=bJq3C1({3FG;s@wh5Dt)xv7zs*YiABpZj3+KN<_=bp>a{BRsxGi}3!T0LqNxWKX1&mrMRV*%=(Q>$|7awun{F znDK;{%D^i2AEalGG@79jQmkrQBBi&R>k^Tm#bVn4R;It-UoV~=0h<_z1HSKV80pg= zJV$VV=S`f`F_i2Q8@kC)xnq@Nt3p9g6!CDax!BWr$Ge;FmV|U4Qk1|JyvB6R*vVDh zBT(8QEnGNw1b>^7UfDLo;O#JNdypHE?6$&{u_GB7hE90qsYgX#WiJ}ZtacKFt!f3H_HCPU&kBwvW1|)-j2|#6F)C>$mY~_>g(jXRG`G#L6<)pZJ*X9} z`1Wev6E5`OA<@teGJk@y2{gNzZ-^-v4s5NHYioSUqkWGwXEg(pp3S}9I^zG~tsE-ce<~`~iS6Dk#@eujYwF62ibcDnwi~t1OXX<`aRMzM5A5-X!i;&^Y($<8^d?OOBH(?eZ6C zXg`wLPX6H%g3hAjHqnI?)%lLsjU{7OMgqS)m6N`7U13eib(j)4BzpYeH=h*L0XVe7 zk6C^TD)Ub?`~1186aT18=V{KQH^fJj_WK`^izMYrUvWnIybJmB$^inHzLiFJDnSdA zu8+Z4tK1Fwr!cE1>}CettaY4f)rZ(wiEH9uZ)%k{u44=E;*#UaU}e7K3H=w_jFeYJ zS;j}b5iya(=x+;^BktYR4h2pUkz-mLG*nyPI74bHNCtMgaA}RWk)UiwKk?_Z%ia~)03elUVc|5k2meH75 zv{hYj#C)Clzq2~^dzW#;Co$-fzjnica_Kw297i4R1kHIizBBL%OA~1~D13fr!kvBN zMZw@j0dK#RE>j`$0}=K|qEss-#MY1pUmVkQOTaxE0k&i*E?dHsQbQyTkBZV82HaUExz4Fytxl-u zX12btZUx$=A2u8i_f(|0;Aet}pFK?uyMEUGAN;H8;U2bb`kv}*7O5U4CEg0}BsQrt z$_ygvhJqEg@g>8$?jEp-^C&PJXrD}63ULp^6(1+*{Pj8yQ63Sb@>N2w{9!>tUT^=9 z7L{Nev1k8VvQW$X6|GG~Vs)+GRE(M3uE1KRdmZe3ygIUq!PQ&~=C8If)~7!I#69QS zB*jJ@3*dfEb=zJ5L4G^3?PiF0Xvg^DtHxnL-oG%ZnfyJ3`&$aBN*$(_vH=ZYI(zSs z1SE&oFZq&iiSBKM=q-!TF?qM$59fM5Jm=*$gZabiEt}&tS%Y#TBL&TZyt=NtVAo#e zzStD}Hq=~Cd&b#c>(_QMVQn@(OV}}!hqlrT!OafdgI{b#Naqc0k9t~>>DNYmDRbKx zKClYS)(AXtY`VC0H(@*M57>vJM&mOoBDUrHb;h%2=L5Ma(gW8dS4x>a4@+8Q=P!b# zt9rbZyDzK$&7n`;LYX9Yc5Bj2DCYV~S4Zr{LfmyLZW@3);#RR2;8c6DE{I1bh4=am%+tgWT{5j?06xsM}bPtN!VciVJ2l@ zaO|Iva+Ue>|HIl_Mn$>yeV_^|Ai^La(nu>M-7`u^H%NDhFd!+7fJzA?1JWUlbPnAu z4Bbd~jP%fW?%Dg@`+1(T&d2kKweB@*=Hj}q{MA1!vgq>c89i?F3sWf3qR!)qgCq7O zw_=wRelBapDy=urd!j)B9kuU-)pX7iA=LN7VWfB`%hfNBTj*Qrb47;p_m4#TBqp*8 zFV7~d#5#qs0x0k3wz+3g&AqW#FmD&#Wt#))36xT0mg;ieSx)a5pE0&uFla3Pf=>de zKUA}DKyK$_mHl2Z7)KFb6W(EY`N8Jpal`#SA`dm~?lYzX1RVBGf70dp^-L_!#6zqD zwPl1vK+w#iz5=eWlx;QNRqlBWSJ49o9h&W(!)O(>NUEC>I$c_2yEd43yjuJFmrxuA z1<+<;+vAywn%^sSRNk9d0dCSCCfN`7&13v9ZKE@0wkwWn&<+h2*f>yQxHg?Vhh5mL zl~>il`)5N=(eTkoZjprQrw5~F#C+Cyianow%y8dfmlgN&e=oi~dxTh#ZVzY)Bnq+g z;$2)Z6sB-ks!GO{mTXL(W%eS&y@M6-f}ZH_Kcx(q=L}T&jzYCZ)y!utjObt#ZpQ&p zcRRY#?2;JVYyKzXTIv$ZbsUW|dzv>03Xsd&2tF}1IJ650TxghhwvQ{mdz<1?Y8O-n zv6rQf3?2v5A{=}3kR$;f(0TFUR40R9GP8qUlEU}@>t{{xEY~$J5|kF5$EO=dqKF#* zr&UC{>cFYRc$k2Ej_|)*OQcJPdH(!{~(Xj+jD^o=5s-T#9dqsJc`Y7;*MuTx=Z3G@)Ifqt%Wy|1;jse7#OPZj_SurclZ@jCf_1=yTW)@iT-SHus*B)qo1Hdo-_L!`CA=Xrn450*e{~wA*`L#VVTqDV@ zBl1YVW7eCGz=V{oJKn52j+|jaYXz^4=0(ZSn%4rSHsGU#^|KY2N$ygo?q4tRF(VP) z$>XrRG5U8YJBGQnfWW7&_ZS1fviNByG~etrJ2<=xqT&yxai8+QC2v@~n`CFWLK(^` zznsQKt|#{#W9Ah4HFj1GsGo%}bWjpN$9N$D&+ox{CUAsji7o(w(vhFIeU{ci{%7s| zB-=a2r*%k?0jJ2%VC87FBarJa;jtKu#|(+#MUUf71kh5mhJd%)feWyq<|HM|d`$Eg z8a)$^oZw6c13Re**bi{3rb$am9IKEY0RM-nEl~(Fonpn)&s!nZIyN#G04^tz_z!^f zI>e{k0DP`!>UfHFeMO`?&CNYJGRBl^^P9GC103a&s7mR5ZC5SqH{}j{af!Myj_UhOHYtgx#() zp=m=SCuXs9#kOM|j|^ny>R^s!)$+%l5=28~RRbF^?J12YwUV~i`hj5Z>JyMHV1tJ_ zsp?*|&ZyD`VqWjUuhXVeWf0&XpC<$OsdeJG8tHZ^3rrAr;`^qfl$EM(o!Xz;Ba|kz zSr`@TsF!9eC%_r)*#dk;TEvQGI)OPR1YV^gnkl%@mZfZCDF>5`kHkcke@-|u0BC&M z>u0^BD7a-Kko*6}<5o#Qsgmhl<0)-YSz(~_*-|jfO6$$(!22c_ul+A4tsIcE@e;pr zAHeWyThrR}4I?x}J_)8CNxuBGp>l&saBbJ0eh(0tc=gGuDqR;2-`)e{%e1BbMTyTE z`_{{*IrmvkvnQTZRwBI^DZ@J86n4-(RWQTDn`%C7+?#tcyfZVOjhF&6H62Gp|0w`S ziHWk9<<-?I^Ftu>oD&7wwJFR+e7gRKL(T187M_hlqAg9#ltp$*rd5HeVGnlTw98B) zkUh`ABm^CLu}$jhB32qZM#iAOGq5XSvDPXdD_4f{c*CQ!xqxv|e-5Uq@-NGwOdFZm z26so#bZh{#%&P)mfd$3+d)$SAd~!`H;B&KrG<=&P=%*!slyoE>=#nGme%;^9Unuq# zZcqz3*Eoiry2p7DI2w?HP}RKY?|&`xg#uW>J3d*bad>AaUAtKDE`3c(LuqNl9nNe0 zs`k4^=?0X(KmIU!rJWXC8WYd7hT!(u_XRX2Uuk0)<<*~1EM*L~8&B3vR0&qWlHCTG zusK|W0W6ifdW@BL5Az<8fB9fX7;)xT&G5^fQU<$rRPYir&zH9n2kA6!Yl|_Ba}3j` zBR(CBRAWrBNKAmm`U({YG(k$sl2z((29Va0x%i5-rA1FEgJ`Jyep!AHvoO6k#S&;V zD>nJNcEGK;vMb^Ga~om+S-#<8XUSB};q>H*6^GBq+q1_QuepL2lml(z@O!FzN+<24 z&?dr>)}tkQb>Y!&XlGDio-2&E5ZE`3ck)@fU1p{CFpz&H4U)zBt5? ztaXDYCygll*@dcPTmMM~pusMyC04&<`d#l8F_ZNZd9VY3h2|!xSdY%$N7Nn)K_nLC%2sv~utB31cfJJxD>aHT_Gr^X zYM@Xg8||?ipT0n9-ABP1L*ebfR%4q3>R6A%HW5zUr0W)hx)_=bB1_@6mK|#>pG?F( z+{|PCI%y%WFq2{HHOr4R^ITreLFWg|h>k0yqu(fX)j_mFap_nfPR|&aTnBD-zjqC& zjnl9W6zEg%vSyS2P6sGqSZ@I5zD1&TPBUWvh*zHAQ%7LOM@v}S;1;ka<7=jH!}Brq zQbKKFlSTyny4-JAR6fM6h( z$GJb|qI*~LvEm>>sNd3(c0k<^D?Jhf^<-U?e1zjAyxFo9`dUU(OnEHWJqqqa;^XbIZV=bPwQu$r#j$ zslH*#xM&KfPdv5z96PNY2HQBdv}|(rx@mZ2XP?bVp{c(7qD|Ua`5cHBiHF-yGg`z( zCA_@9XPcwjxFJ8J&0j3&y|>WChp%uBoG97It6Xz-?`gs?x%4pM%@G`<^6N^E<7R!{ec9fz+!@srHW7aMWLIZ_&+ zxJvJQmy~H77jsYq_cd{=Qb~39XA_fS{Ex@G8}O|h(~*_XCf-XZiSG$Pev$(GeU;vB-6z9}o@vh+y>0v-zC?sLyt zRM6G=$%i%$fr=jJC&U_S{V#Nm5m`MVW!eG32cV#N=Hq8u_wE`HOD{)H@n|BsK^*m_ zkW3Q}gGDoSr1VN=(@J;5lZvBX)MXr@pxHpCI6b@Og(cNiaxqwQEKyYHj1#OOu~NF@ z=b9?RfK<~l$#qsYiPKbY?SX}L0yB^4E$dwvW&I49_Ma<{VUnP>shZ*a>q+$M2PGgs z{%A_!JA|V1EZNi+yRzz!f`KDgc)K49r^|Bq@l zMUbj9hcRjGeRAhsnQW484boPu+W@-uBbQ6U&EV^7RwT~BStS{ zJraZc;-R8^OLe*yxq%XN){0NZpv_h`PY=c-SF`;T9iN7-V%Y7=F37a-VOIYWT1$RVO&+acFsT%N;g)HS%3xD0bJ(&t2m+3+#cqqD! zb`elHqp*EptozMlTf2D659h+Oc-E|ZvtMN0L3 zJZ`XQR}ydK?niK@1xj3qx<3QFC9g^eIkTNz)%Gd`+`DVsY4h8y#5mW7FP#V2*HSUY zq+XsX9;Qm(ahWnRmS2a5qZ$mzTXui8y~Pi@h&id!Y5d4;W7G1k-d2D^k$weq8OJh% zgn1@vv6(}V=LkgkFfm~I5TTmBM*v)8dw~NmS@)#n8NnJE-ieyrt7HZ&G)>)AhrOrB zR<4Byq<}d|JG~)E|5IA;^&y#SziZ&#io9PhT*+t;nVx3vlW!H`aFNA2?yujw-^&O& zin|ZByJzHBy^mlr`$f9HufHIf(Pff3ibJc$=(&Lc_3ZY0FVu*5&zq+U9Q}InrcunU z`J2*?*-P)GCr`3WNY&xm*1LL?Z6lyqkNxzoTG7dYe6vwWtxvin15;;prc~M9w$nnY zx=DPsd6CYf#t|Ei$NWb{(h>qQ2Qrc>&8@c};q1j#&A6`oB-?-Obg{Gn9&AoqLc`nd zzlImzFR48GgkLs6!DsOn)rczeNWwjqXLG(D#tz=}xSPP;FU@PApn;z12D^{$HdK=h zQjy9i_3r?BBcJ~2ORDC!`GYt37>c~^L1_ho%b=m$>D zzP%|;Wmo1sZT+X54o=}tayM*pGJE@kSQ$<8L)$gD|Asl$Hlwl{JrT5M*sJrT5tt`x^hJ$rjt#q&2#RqgqunL^RI*6A>Vt zb_8--wi}p)%h_p)ha+DSHg9};(7R9mhHbGcf*KT=UkcHP?|q$46Fd0E|NEZThghq} zXmY%BCCLQTI*a0pX#Z8VN);Yj4m(7XgMCl2J8>y7*i8%X6Cy=$tgYRHA#&zSHRhs^WP3jnkDU)*mxz-3 z8XVj-NL{GIytEV^#rK-Weq$Oop3<9WNz}eTt+1zNBYfGbS7IY3!{g>zWUlaVnNMX| z4oSW>=dCu-0?V1VVV%0EV8Z(=UgJ4o(?QWU*R8=<;#E$y)AUa3ATzcOPNY`!<~6Vz zUwW{>YY=%f6T^N0=&aZ$FSi;W(G{1afXC$50ET7XJFFVgISPJqMMXD@o9t9938lXGO1Rm&e&D7;#sK=hv?{Cd2y9^A|78?!^hL0fAU2 zBVff0MWtQ)wjYyi=@p#_Sc4+BiGw*N`iKTiX59S7DPJNr=3}&4MUmb_YmKL>*yB=& zt$5pq>krd!nSX94b)~P6`~>>|7fm5d;tomE)#2A!e^RNMAskK|vpK=O2z$e6Pe`wf z6h!ichX>`EJ&n)fr?Zfs%S0g*+nr{R=-6-cA^8svQqkjm^O`h08E<9X3umu#{V#Hl zbJ=@_*a1q=6b)y3>8I8is4sFeqHgn4TE4`J*qEEv|9(Yc;WwcFhN3O=Rxiv>#>nC< zKl-bz(w&ozvWzx#ML=AKsi=WonTbtajT2Jb-0*%kst{VqM$ZI*PFV8TD$j@OQq^t~r8#6dVV{Ta57hV&46Exk8 z{awQ|d=ChixErI2T&dcwY}L18yIfN=K7>1^>8c`$@m9glooWB^NH{2ld(Q@Xmj1%mqGXyz?#{(H%PRti#|%xvcA?Lw<7sLI4+x{(vZFBdLUgaIySk+nzHL6 z&MKE$3OO!5bwEQ-Q=h(E!TJ$S+BC&M!W?Dp9_CgrUfI=;DnEvyItGWCI+)C*jsfFn z)&a14C7af|w`m20KZm1$dH~d~~-t&UqSs6B|#plY+pWmdRTEN{+ z-ATN1Tq3XQE|?*)w*&b4Tt83wWxMNLv}({^=u}8t(yIPa+JDa2%fEBoYL4qe0eZak zQoa$Vfq&pD_oSx?qI=r`grFhO5~udrb!v7rKAmA4sf}1kJi?~4*E$s!E!arrHW(i+ zAp8c)?rqt!v~y!lsD8MIV%ACPh}$h}DoPEXwBB=zQgf90NHh4qpts?dr#;%i7j;)z z(Y}#3IHh<3^7MH5<~jFP*#8f02L4PC--es8NS%#u#apO`ee`N85{F9C*yXX_@uQfF z2?^)2pvzSK4^aG^8mn$yDwBgSKv$|!csFzHU*!6)uM~JePrNNK6~goJf1h_g0Wi_! zQdlhZf4&OybQ#A-gy*gDFiG<%RcKQ)rzTCxeqPG8b)M5yacw>nJfYI}};p1fQPUqZlXfIk= z(Xc}$C^emvPX|y-2#4Z@14K9bsD0a-r(o_#E>Fk%(#ktcj6%14XoH)wjcp&#XNvp^ z_}XsV+pzGn7S{dSw^5+ft{a}TYbjxz6bNu@9HcvX!}Fi+!yu&*nEfY0(E0)M|31IL zG~2&Fv-5xZLO>GJM>Fv}f8Ry_1^>@6xbYQFnr-;a%dd+^psBlD0r)uPyEtWZ9ezaJ zt#v6l)`^zV`wT!U$kX+dJ70SaT7Ti2XYYSViRlR7V@^aH0mzMj@qXji&6D+oH$>)l zBtO*ey5@4$DYy2%dcPPVeEjN2gE43b2VCZF4`En73pv6N3o(UV2W2!-!r<7WGgG>% z%dO3A+Jz%&dh5K6P;~OljNdkuz$U1C$Z?)1U~pZ+oUi(N!!-So*OQ0cst z-fWq{44oP1$YZtteJ=hG==Ib$gXx?Sw}@SjH)Sz{V(Nbe1+_-R8-^g@=ue^cT90&Z z<<}K>poMXN(IfJ|Mp%IMfZ6NXy#v~9?Rl@_y_NkF<%xsFyW~^#Njz3cGS<;?f5vs z&HJH0VwP{8z{ke3Ddd_RUE(&^JXQT?nfr#JF(+EoD)q9yQ$T>$#6<=ebG2;}vt6#Y zM#G8*!yr3_6_jA=4)hCz+YF)KaW19lOFVHb*l_Cei^%II=-??j1Y_yXZfsv0=g=K) zx->((n2I{^WzAdeO&`p72MZ5olcj`w&mYV%OW_|I0Agt;l6MR@6w-hc)y!$PNu&32 zn>NF+5Q=}gl7sSg@u%E0KQEWVUREK%C$TrWQ8}ujNTR}23uxPpluAPD=EJ!tVMQ~3 zOk)OaeX7C^)>%~zLDF7;Wyf&<0NV$TEqTmz+ByH3XYnFfOh`k}`7Yppu$9~aU~4EQ zf%0=lqI6tVBE=5d4hDPQsfXgwB`D{J*c$E!k}I*|sXR*N$4G!(Wh0ILorIhn7RxyqXXh>4vZx!6mHs(Ycc#|i;ii08* z_(sL;f$}RjIV2rGZYF&5JAq8;KTD0NGSTA94?E^bmEv@!@t({=I*f)Z0`U|l|N4Od zKcS!BPjltRpH4=cBp=_O3nBUYC6yNAzAIWy{1JQxI6~5L(+O*1y&g?oyUo#7Q0p*_ zRY<=dDDxbd^85TIRXQ<9n-yEaM_76{Vq9iw5Fj{ZR`vV zY4E1d!3hO}aYy_EV8@Z5a4=|7#9`CI6JY(w_Mfdp4R&i%g?S7;qfhsQBaQ}GcjA2U zIcxky_kmJBr(+~%|MS@o#VLl0Zbn6?gninW{YraE0e?4>(8u_->ae_7fKgb^zq`~o z$rnHmX4e%LkKM|sNC8%^IlSQsfsi1-9f!-uo`28zmR+Kdot@oMBdt|n!TTVtx>&3~ zJjZ_>iS0j*Fg_Ogd$gKTJlvnu^e!^$x>>)d3=>gypqA=e=A@Hi6n!D?J|Pd{r74WQ zD7X|Hs4OGpd-Kn7Qab*ybaL`Zsak`)g-oFMQ|F{>^Uq#=IH^=)!~eA^Dt&md z`t0O;=L0v1*L)Sp)~~#*Q^HyTTEd4Y7ya!wmd>)1zbz6GK zN&>x#e-yUrZ8jv^t{C<~nHM_eK1nOo_pXfXMAH}TTZu++T?*#wGDEgpcvud4JMr{@ z)^R)vK&<$bNf@L}Fs2))K`9vV?jT696wuNj@%@%{fM$adif(@Yi-4{9K<#@xjKoky z>i}_Pc!Vj1OadM?G#z8PeST?rb2mbRM6+oKQ%M^c;ozFN3P9a{h;u+ZmTdlAlf%v* z6DckN&<$z3*ORunDHE9bq4s_!1ttO*YY?S}c@LfUJD@l;E!=Pc;Hm@wE-Vgi44sZY zToEwA7%1V}0L5a^HjEy;ke2xCjTD6eYlC9b+Vx$h-g>Gz{5$J`AK((3o&e;%4$uUC zE9(+0V7c#e#(4i61DHED0k|!ia;GLB4|B&Gq5mp2AD838 zJ`)Ap@@0e!7aUy7?AeVj1Q&+xVjW4pxO`U8hGFIsF`W2(j8dAxk{ z)W0&vp!8MKK$&aJj1bAPu2(c<(^B%E_khSwfg2d5WikSX;VUEcW(Kq_uwLIp}PR9YqN>^;{_*nMSuKm)7`(ey)Z)XD{E zS*lB;bOG_{zhTn~UaoTy?pr#}L&IBDQZL9K!4<7lFy1mDjKrC81Cx2Xj!~qwbL4Y! z+!ndoZ%@M53^Dx2Jcg2irUKLsGfDjdJK{upZg%(v*nC({gm253Lc8zfNQ#{;0PT?< z0ZLmlp6>x(K_tc;yN=0T*MB8ReS()Ss?yKJ$6jnc>oXKYJN65xZLfTNR?vJ=uwEY5 zXnzC**)yKcW*GuiQ~SEgysCn}Jmzpo?@{&Ifjzj?cslLn*=uqLhW4<&p)Xa!bwwSG zZpYac?)-`av=ik;vu=x(Zj;8hf{UxGsOnyrrsBR?@S7P;6;yeP@g?SFlNTnS*8r{l zTL;fR13|#Jt)Nln6R@fs8o!*bB_S)%1PGig+`=qQ;7cW<6~m;~qs@okO0q66gugYg zp3ziCf1GVvWlz|MV)X7+G#+UHP?v9dE;7 zOKZ&Y=BX8BP&W6W7p4?MJ*X0?UKW}K{@U&=XmOHBzZ$4gW|~5T-db;cxQpYGt_(ZC zmZ+4RI`R{{(U!tfYQBa-vK;zJ9OG`L-bsvwk5CoCVCB>p)koy*|w1`IrcvhAb&ORsJwwmK5yB>*T*I(i-!y{)3+w2Hv;~|PCx{a0qGqrNOAJPC> z=VAg}vpAXnF#@G(Isp_E`cM?B^& z{^N2m%>$D^7n4GmA<*qhsxkrI4rpm0GKHkd4*PM5!UQuTB80$qaVuWZS2J!{R@nL? z)CCAt$MfUDLD#sqmzHc7M_9yV}d%!KD-gt-o?&lk{2LKp4s6uhb`%pzg z2Be`ydm+C(CEgw;OJE%^y}O0^mW3N}G&&G^gJGWi7J|r9jHgo7k;rU9tJBfsygc?2 zpz~F%F#?5=ey)Cu3zvy;>#yo;+dfYRbW4jelCadLdHpVO+b(SHqc*}|+{XMHEC`)1Dg27{LXMov@>Sb5rZNLfXP>K8rc{a_fcmY&;fE-}_ z=$i0LVA6_740+7X&I=;l0X?*LQ9`=*NKep5rgDY#Ezou422KQ^l^0pVL_}xoW2oxH zq+hEn0FxPeD&42DBKI?b+u95hX~EiPkDmA5 zJ&TFz=+d2gLBdRZ&wlNH;4GoY8p_3J3s#sCvr96zl9dfn;IZoC$`au=1!vIGGz zk}y~GTsm-@ozV}8+`^s5*EJ03=n#&FgM?eEult517D^U{9CKSN+&wlug#XeykwyZc z_)g|{=(e=1BCYtUak}Kq>+!3DKH%ukSO#h8*YyY7@b znW#}mUtNgu(zo{*+OZpTy-eOLw-a8gXWEO!SKecvyjpW0Ga}D0`+8H1ubnCFS*@<| zJ?`W+)}LR>9dJVic^}Vx=vn^>0Bs&315vWH32}kOWtAv++hm^${GZ!ZG*~@U3avNt_l2( z(1haFuwZnfj3&Y@W(l~b)#1e6NRPI=z13VmY>a>4GF0;}4LKdVc$$;vnwn408?9xq?EiU&{tJo>RjvtursvVD_TgzHs$y^G{r$my(`ZXM->{VL-7_cwBFUaI28p#w) zEL&Fi>o=(XO&aFP_cm6z6g>OLx>?|IAg!Wwx8nlfdQzBDYJO4gE4;MM8!yqIhQz{Y zP)<_mZ5o6(pEQ~u$PvDJ)~{8;-%f5l`t&%$zh+gL15n_ZXV{a_W-&cvv27m9=K3~I z6Da{Q$oChw{JATLs$dE}nVPC73{IkV$culnN13+#Fpc2>n4Z4RFF1;8B za1b?~*3u?G6`BaoXS?;lA@Hb+oCG;?_zHI`>cARAX6@@qC1X%K^oc8GOf=FGf6r>< zmJYedv9?#f5m`4N>V-t`Z9-^YhrRnNi+8kChuiLsdRa0 z;3XAa*?l2UUBK6VO~h?Hflt-BrL;zhK$h9VT%t>idP5_HdtPXO0FQ6@;#7{7i8+0v z{j$rG{vn-DE29E^=>yy|U-gFE?Si;)?k#4Js0ju*A#!xz)HBRt*;R4QgrF-p%5t`3 z&+cJ~+|e~DT)RyU2pYS(GnAA0ljJ4yvtlN9w#+|r_Q`1J-fP2l%nqb;%!{Vp;xxSsW#iwxQ{U$o4lC2Fd=76~1hIuU(ooc$hiO@i4N=md3jid-t}t@#73tscxza)v$C6gDcTd;Lh0K2CRd3ZM%>% zXD>`q57ihtIXElQFhVM?f=-NX=U~dMKQyD%?LhD)%YoM#yGa5ukI|idvqnKsZ<%%6 z+MR5MwB%G_{oshy_XbDBw&yR(mfGt~t&N^CjV1cZ+Teo|19FOW0k-v9NmW_d+Z}P~ zUhI$t2G|-~heacAZ^?`)P2GF|(m?6>UG_{@q!lg4+8MC_#!tu;3^H8Ertpsj z4abE%))U{_X4#Lywp(QzzCSU7+9ZsmF=@WgZ1zbnNeS3Pflk|gxj5_b&tM4SlBxz9 z=9oTOPTCm@iD^2BO3Rz)XD|l)?ZV%y@5n+H6Rs!QLw*fCFDN|B=Ju5zKS*nudfX7O z3JC4oyiDN~_O$n9NPb+1d z*~7i)O9yZ_Yla_7aMxxF2$t_zgsYl(S5@q~Dzc32)bYgm+JxWS#foMyh3Rek0HtEy ze_7amVMzR%R%=DTqd|TJ(0I7I>_zzh_8ty5j^X(|N%9fl2{lSQ4y10WG1%adD3scXB zLp;q564WOgu|D>*lJ=#ZDfWucZ>vzT;RbhpGsc;TT;Q5k@uFqVd-t-zKVDDiCN{B6 z>eJO&N!q0^BtFWzwhfaq5cB=v5#WiJyJ52ISF0!tpin0k@b-~7N*Gka%d#xo(q2k? zbS}Pxrz*$S4<|_jiIO?o2}xhoJKzU<(B_PO5%e!pG2xFc7FM%Ib#L2?7p28M5F1a= z?=#`$mQ`(j%GAizcd_F{i`58}R<))T({n@7%p^N-y7d*o`*$1>{?J#89iF_ zz=0+UGW)PZ&(7nbBOa(VwUHD2xb-uRrss#K`2A=0j;oZg)tA@-GQia|)p{Hh8P$YZ zie_i_9B|j47N1Q-l+61p4ybt(IbW4KjLD$G5hu6##>aCPvFT9Q6*G`s`@(IeI!w(= zD%xjS%Wq(|mRHw;6_fpjM+yQy3COip2-}{-I(LhwBhRM})k}eYEe5bWjRmT zeyrHMqFAruTKqxYDrLW}ERv)A3d)O|v7Ps5+pT=At;D7%sTGgh;G`e1P<=VzKH03t zpvkM8RJgF7^RdIkg7I?~tKNPl)3g2fz4N4Nw^W(SbMe_iTRXi=?a}v+6{B6DHkW}? zB}TU(%I}?8@1o-_wA$ z)nxiO^6fD?2xk5^%|;KaqK#u~(RTn413SWD%3Z6Of}W1Nj@2!KHn~kdQ^7rvbzw9x zM{Fuf(sN1eYA5(Gg1b|luA=}nVZvj%;)`nw9V0};8H31~!6jWQPo$0C_aupU90fxm z6plVWBx1w%$(KndiYwNWr77va2>-F^341=c7lLB1`?XJ=kH7?}a1&O52;)0MMG9vX zMzt$|ivD%0TvemeL{;*@Opgqt_Gbx}D^%h?S1`&gNln!;iBqp(B>JYf7_0!wCQ@~q zmUHkl7@W?`)t!@r$DLGZ7YZiY)g$M3%zJ}nE$^pBq~rIJn&mi;6Y|`#;s~=4TkEE{ zT1U}(^b>+g*QAy^Lw`M@@h)6i6L5GorMYT%{dI}egpDtiLqu)(OWxJ@O4Wx}=fTSb z636*cYmO);oy(~_!g1mB3E0$>!o89}C7!RLaYY-@=EBD9FKK8pOxKqiH(V<=4(K zBbKLnThp}pQYajnyA(|s`LIgH#*@rqcNsFAlx=j)SAVXYs_L5wS$W^2W>~c-)lfnu=3`kRDlZ`8 zd~!EoW}lSGAP^+}s0^|>RSH$r*Wqa9uI^l^iO*8n7Lqq8SSP_d$%mG0I?|VRK3x0= zSl3wH59;z(7t0W1ofZY*Un49mdW^N8-riel_$3Sm9=$H;Fy+9!x;*pq$FEZh3ZS#a z5l?GRkmtG*Zs!mC9__HFUHO48)znYp z8(?VxFz&~c0LB~qs!~>5<*<%u$_qx+%g^=5_aXkJwk&=1U^R_YIl0wU(?D5#_!BX8 zW~Vl_LqxoB+zPWM#NN<5wPoOuoy{5|GGdwG6r36taZ+|*-?$ncalsj;gjQR98wBW^ z$M(hF^-#Ug{h4k_>Fv9k>9LQP5@d=~@&N!8qlfX{g}_igWV4ue^gi1<>6rMe0hOtGO?>3 z&?VqO0KfX8j3_9D|9zQl^qLQ8lQJunx;KxMAYO?s&`DOZrZf0$OgFwh7gP6l00}(H zrM{@`7q|(aWXv7-)bV{l7DUCcvSO20iZ8TT&iYk*;7G*2D;Ij0}K@Tg8un)EKycH1*5cp zr0{nEEp0?Y;9|ml_-Wbrx*9(@gq144(JHdy`r(e%?=@0icIXt`CoG4>y=W`Es?2R6 z55Ab5x6Gb;_P1L7LBOpIKHvC=30dBhJ?Y>#eCBts!X-c00l6C$8GiQYsWLZ5)~2pk zh>D!-rkK@=->L>zRjPTj_nPI5Y;8)N$7NiuPec!-G$;5qNOf4TPM)42K{9t~1A-$7 z-t24qh_)C%ntD0@`R1AKAJJEkEd09bL2<0ODeh&D_$!ZFVh~Ll50yxp zWLWHmPh}rh=DA{VwtGF3^(zxmcT(DUKPHgq11tmJHY}!%S0`96X!O+Bq!!vfaoI&N zVtg&U^pRwQ<~g|-*_;s$4U+mUVE}gbtAF_B0141LnyN_+H0WTAT+be2@B7;KtzD+F z&84QDjqkepLMjb1vr52@v0B}Qmq0AHuh%jy(--B!^VYJ`0swV^dIhv5HH(L( zjB{yVYrRMdVl^(eY>xwLLKj~sR11I5x7`}B(;Li64nzvuMWC%?XpusD7QsXE4uNQ zhG}KU=?zOnL>`PNWO5zpq-vTw7P(NZw^LBJ&`ajc_VzNb{;fHHwKc1}pTVK?d8bhM z9!QNkc9{U;0~5M((MA4a|58?NG9Pw$=!mV0<49vYuYd!od~aoOdbyOU(PW=(UWAn4 zeco>xMi=^TSH>>vnd{~9Sf^&PQ*>}XO0Mr_1x;+v?hYaAhVIeL=^e3h_iF)pSIv%G z?*j1oFZY`LMFTdOcz153ul{`x2@izUJLOeX0~OJ&EPh5`;6|BamouSmx2`|=YFNf1(=TKK zom=9o^DBMDtx5?0I#wlb`hzcgqX{iQWgimXu@Ct2?Vuq=k|`wEG0e0+9z%h-ap%Xa znmhmu@PA{gAo4@;w>ltFsxp+{+4nPbfw{gY)W@8_=%Q=a4&v&6*=11hk#avyAl+`q zfG(vfyVw~Gcy!byEUri*tD=#WG4cHx249x+Si5j)!J`PWn|}svOFn(ei8@_zxQ{DR zi^gv=Bc8ENlkexWi^Tu#ml|tUeZQV4%sT#ra4k6aQ z&fW58W4v7ebQ@3hXe(R620#WYF@h>zCPKR34f0t(T-v^e=v+>4Z~yy?q6{r=Uo-5| zb2n?b80fa^3WeX2`|bInDOK%MTY*i4f-_N&<6b^$||s!Q7|$)dH#+d;=t8W*p`5GC6sDh%71tIPlCz?}~t ziVG;iJ@T%+4H(X;O><$g_8M~EW zd*JMyGXpzgyn_WpZhQcw9U(`ZX!&$u+RqZSu8rd-vf{$C8NTlxosmQj>e*b^)-K*A zf2=woPni8;%S1U!H3B6LRRDZv8`ITQig}lT-LHls=O^F4MmMP%iC;JOeB%Dq;J;#e z$TxO840FUa7ArAtRb(;baNOApTJR|+5XS=12m#`v^Cts11#aMd`FuoLo&>@T8Dp=X zDqJ~O^`}3Ada;ch>=A6&v?ohm(!>eB0CSadS3w=mKh{0UqZD($<^OKgvR1d8r1NuK z7>r%Q864NJ$}BivXBq*~=14K`51auLn_M3s>Q&P4{5#XFUYgENO3W}OOo$b$ zLQV=}@Li394@PCDe(YtyJu7rR?Ew!} z0Q3u&0&z7Ror#%|7fzxz!aW|@a}D8L!h7zSjsMQ@f+ydnw<7MwJ;k9XUxYAdxhg;U zMx7X~*H~o1?yX*smIHQ9Oclq@7(*MRSAhCR^_l=4!yV@-IYVq<0GM(hgT zurpqHi%hV&^7N@r3|}B)KmKQw0yFyx_g#d|4;;QR!%I!V(kT2fm6_>>>xXxHrCrb> zb4>0NxmtT~3s!}=&tri}ad(>t^=@(tpVyu3@@3A)3(?71cYUcUATUy}{&(GuheQ>O z#OI&2od~y(3v2Z@)2QK2?Rtfu=-RDW;%$wlMcL#&fd=J$H{4wS|2;4IHeUH&BKo3F zRjkqjzu2<8OmrLoi5C18uB?Tog-a8mIMZA!X>VM+DP4~%y)jy&D?pX?w*akh+4Dp4 zhmT&>fT!^6)5YM{j4I)GpBLu=xj&g>40IbUp@I`lS~|(_CPi?Ozs{B3*87>MC`7ZW z&FiA$FJjVh3OsMu<_CZqA+LDjtH`?546nHq*PbH6+N*Q~mqDIue)!K+VW3j1#?er) zgx3oF><^JORsXj)l?Ng#U--Is%0h|%kzm}xDhR!W$I3Tq1G$_|niB%&rl2?07yh73 zFsrJII6d4PJf)v6>b&(1-nbq6^N~WC-|N^IDw7V4-Yw=ML1sUV+N-yDdzuljYQ4T- z;%oZ202_;_TXA_PMzKt|<+S3S=W35-^C0+=|9#UaDoLnui*sv0yO-ZdhLjMqIw)j9X_Tu3^%$pfskDF~ozTWL?N_LV@xrXW{fvvcqz&ZO@lo^@_5 zLP!kt%MeIhm7nw}zRqrV;XKRbw%W96IsZyTIfApP%DpMY^FZpv@hQn$=!f)sBE7GE z*v`&OdFgnI81zbi3do)bE$W|fG36!kow3aoIBlAoOBx*%E||8OoEsUGr2cSba9Qm4 z8T_~G12YUC0rC`w;-!8C7|TzYdo7^8~g6C;0SQyys1ODM06Kx6-Mfk_DUBys#pVB>+ZhbWxI>#S_V?x zK(y=IdyV$=1(1v;7(D!fATC-lhvs#I4`+#}7Tr}|A06Z-FedBbCFr8wRj2-Fpg!kR zdv^Nm^h!Ze*!N5vTdd%gfE6~3e$^ZjvSK>1aU0EJG??&hqTs+oVtzo(k!h5wPrN49 zMY-Ca+o9z8F!-5qzI}L6-S{+h%Qg@IR_xwTw3;#RuYSdGSrN0B&UL#er8cYj5Dt}( zbOaVtgae8>I6rmN?z6sNtd4{%899xc9i#EsEPd{~xJwMHCUPiHV&``jMCWkzv2wHv zn;GGb$E;dl-*bv^OiY?zeT7tZa9**-INSf&;uk%A7~5?5y7+9wlh$C1LwkWk#?f>8 zS^j(V&aWl}3)bu@Gh_=gmox7>D=y^nI4P;z(u5}tr+Qz<4CRMEn?@e=?8+iyGpfbi z_86%Yp+-_HWnjQ2o&@9syCDDg-Y6nLg0X>Lb^mmB1+Q4S_OEtlKmM=j`knALvn%6I z7sXXPrSH%y{f2|usjiX80u$6v0>}NuBHD{nsf?A(tmz465*gM;=ubt5S0xqPF&e9H?5;K*npu|zU!sQf`|Vfb zRroMhG*}*z17oK*M0Ke+K4=Gs&QO&*Vyd$$VRYIfaZXmEbon6~|8e)zgQ6Uhmp$IdE@hZI>Q zrnURGjI!k!{qw$$GAn~s>g?>DUz^$75nK=>#-d2C&}z}~B2FhaD5YmXvM$7A&u;H}_N>YeB+#-3Plh)T z;LKM%j1&HzV~OEre&&WU&*YL%-lvx8aJA$%u#a71&x44QBy!aE|{q3 zG?k7TnV6Efjax1V4k(Z)wz}YgsVoAC<*sPvf@?azx7B?A`1vOyHkH(U*6@CF?z5D-xj1h@;7%A#fnDm6)2#Gh8$f7xzm+#hlR$RRVk)1KWCvYuP_HkDzY$6~fX#Mt zT(=2S;z;T8nN-WawZj9Fp!bgUTY2jx4f!7keg0ec++!RsC#sbRJ1^#?%e-aG!z`;1 zS(2SE5wqr>^$#A%%wlM_EZX^&;-$^lv91Nl>+PAJ{lO6VdEu~W6jE1Ry+^SeSp(sR zNj7FgRLq-?*KS*}8N!3(Lna;?xk|6dJgkD>6{T8PhOh@q#R9lVMB?D!xz2lGq7=n( zlxWO#p80?)laA~~RO#i6r)OL`Z}md*`>W6$RcTpdYQpf*qsM^5Q_?O*+V74X-%b$H z8y)6E^!w1~diQ}kq=d?d_eW7AKP0E&;$fLCXV8sWQ6i@*XTlG&m?pqgig|lv$xl1D z^9C|cO>t;l=im*-N*1!|vs?2xvyRjr#9pD35iFI~JSQEFe7NeeAD!PFJW=2QLhnyD zAWWs(F(M@H<}!o^J_&vfW2EuWYsJ8*x@74n)C?3m1&K>rl9~TXHI@sYrtZgprwz>uPL?!H2z_K--f|# z*?+JI24ywtbW70TIZJc3b+2h?FsbP?;qV}=KVj8QSWKHmp)fod8I{rY{@cBw?O zuY>m6Mk78ZeNL9&*-xn_4tFgC+~%@-_Vxm$ zEk*K_e}eR8lQpt1={z>|ny7(k61{LT<&urQMfj}y6LVK{ivoj;5_w#4cXu@plfMvw zo`U40c~+~78D9Oc4eH=>p%i9Zi%gj8a@W1|)qK~lyO8ya=k;*bjF@@Z-1*~J8O$hg zyY#n2j1x(_eYBjM{H+nc1Xt^T|IKK5S3T-`kevaWBQTyR@;KxS_kfZ-TW@pV?{_ZNKwUmBJU%IXHmwU4#;F zKDh;`2Gg|TK;?A^wjh$6jk_q0E9q%aUNR3-5oHPCqdsT1W!r$dX4{t;qI2NRMgLv* zvVt7k19bebK1DoxOCK#e#E5|-Qgc+SBe15UCQjzy^w|(FT8~?Y4;eqng7;h*3+Qbb zMC&!)_gc9`sV&FoX?9$*99?>o*Ej2b8uw-U1M>%lng-iJ%!t(1G3=P#r57G^>2eoP`F#&Zs#c4hUJ$?y z^ENnTKHd8Lo#fMa3&}HAc&2;uR#d&tpM80UA86O)OB`2CU1N^G)iB#LOk4>02r4{B zUe~8mf83*B0Ib^ZASg=UlY}xE1DlyAieDkn5r|s4xKuf0l=%fE;t1=Pvh-?jut=kM zOT{lHj&z~KXV`}lRaWRZ*T?L#F`s&ql`ZCq6Leyo$4M4u(1ZAB0jd^PkKof`z3~nz zv_fJj_pAnFq}r<%zc6gm?WO`g!65Dq*Hu^&Yw!=}D|nKRQDUxr9RDyM_xEeo zly>EIQ2u@+esTBFf(72vbwz3E@FzLOlm~^d44f_EDE41BjL!P7oLt|_rp9ty2+uG> z?0AKmTnx=nTh7gW7sz4~uosXJRNx}zTnOSL)7n^jX34O6_6?ZAra4Eq4WL6!MfpEVyZY-rK1z_^*51nW@A;^Fafr6iQup?JzM z%r5yqEgf6{HuL@aUJ4D{=3Wx6#rgc#!!&Pns>fIcz{WMg_S1#Z`XrWhY0^Al z7J6&%BtZg)H*4twSOFM7~Cr%7s4r60!7f1-p@Rulr2?Y_RVCyi-jY8t$Ou#-e&O<(ScR)wFr9uB`gfb!TMAF^s{g6&uJS<4cu%}oTMqUKuqApWHV zIV(o)VFuN4IoDAdxcq+b<0;nu?esK(jvvtXIoI%NqHGZ8Wiz-d;JGf?p{tqyEW#Oo z09?Z{l3XIl5*n2)mdW&SzHl0Bp$A7!>9YxBEu9NCDMCq#XSH}S^1hKkJ}}}MtpHS1 z^zxOg2VWw#+s={9Zc#TC7ZPGrSxc`Zy#wz~yQXjq0f^TeI3vwvf6(stl&o&0!vryV zP=PCVAWhYQL3+gwOyf(Gj(MjLP$eA|P|;RgVYn;cwg=+n!!B_XM$0Z#RG(zW_yAlh z3_K}@6%X%w`y`c5273yPbW)AX+5SG&yfnea*hI06Ck6N8(Mks%rPd%lI<(3FC5*W$ zt5sxjp1s!uBp6!Kb4$v$B%$^Md+}iyI|S>en)TeQM*ucMs{{sJAfokLkdPesHKXDQ zim;Kj(psNF68?D58j`Oy8eScNRe)2KjpGzpuQe>V=F`$hzk%ikgKvz$CT2(n-um|Qd*1OV+}T!@Kc`)pmH5Z&*TZ4%zN+b4Wr1puE;u_as%Bs$8muR?o9wq!TI;A)iJ+y= z?2L12UFwOS@iAbe!v~*qBeBdKrK5BSLfHL}*)m#tZ(*sso28-<(Q4_Ej5nJP`1eHi zLEAAOaBO{P2SRbhO4>-7D4hPSWJ?np>}-YvKu0J6V`kQq`t}M!y5qs93q{~)TNT0f zUZFEE=m49kLT)V?tCC!bLFHEZSJFEKCu{(Pd3>qacP}^S+{-T%*KoaW+P%w%xNQ}M zEdqWy8SuN0Jac$Zu+{XnUHa!V+vPAgEA1^8KM0BA-foxKp;**wuK2&=hcKPoQC{@k zf~0VE#~`|(m$ljST@}zWonRJawA-j`+j>9;o6H@^xBFjccz2USY&dq%HHG(H*Tl4ArURbCwu9Y0`c$ zfF|TTxqBy`P|fqoPerjf9-V{H(fXivIik8xog!##d|11uWelsr<3$Z4tfV`$ye9IznJ{-w4_5VjJvtLFhSFi8xjR?eGD z<^Snw=}M@$Js;W9;wVxe5VV=OP5{(03z~#3v>ElGI>`o$M7d`0;^d*sT0ef+5xi*r zg#Kqldf>>dYVA{?gx}%*s(2|eryC_{KxB{Q$RB~TsYz6$=rw6qmsROX7`4hh%q8We zqFf`V@==CI#_)C~iv#1>Fji?1eqwFX6rHC>s)P!?; z0GO(YGj!qdtEh}1*l8i>+%$8QLbMQA^Oe&g-D-%<#xmcu- zmrhkMWz(BYkFvqGpRKDh8VGWC?S%|&Jps%(bgr8N?gneJkMU22Bo5+9g+1l-b7pk| z0Bo+F13E%L$w7#>Kwaq?$rSH+bfUU+jbsw{w}&$!oIpYo%sgnLV+u((BTd=BF#%m5 zR8Zeu5r=X*f7NA8sSo$s#2M5#XxegOxuYC}SQ>YqiZ$Ccw#`*eDY6YyHqPKS2`;jO z?JPrRE=W;BAp_Ih5*obcmCIyilCCCBH=V0CM53+cPSt4$tZQajEgk;Rp;PDgeMwOL zbpHBd?cx@0VY>hbNbKzLR!Ij!DWMCSvAb?8UOhLK(|G?1Xg31X*pT{T*>Qf!fRoWo zEeo6H+fh$(B6&jV9d`>qbY~1@l-?LJZ7f5&cAi8-jgb6BXrjo{s!QnQb$6d zC|@F?7`7G}u+&r{N%+J*PB@0QL{uzL6 zzfQVes2F6|k_T0Z9Ve*d$@l>?c_U<4ll4_+mmPhhvw01>(%(uZ!n~DGR#8D#;&#UTO%aM9c0x{&idSR(5^nMe58bg~%Ty z^~@Ye%~Hz$rjkpYQ!aL+iw$H^-jh7y!!!-g_FE5#B+5qB+Rc?}&f+AEY#_c#rC^BYx^1?*- z@`AlrP3LCQ?~a(8`6rzPJXhC=86M!bmaFsLW?OpEVR)t3$AQjS)hPvEHgi$>c zBC<-(O%xy7ZFI_lrlO?b2B}HNf>e7=xx_v9XJ9pQold_wmYUA-NFA|*qSlI7fy-M$ zZU5miqZ!H*Eu&SpJ+mihR0L9Ra~F}JQNNSUOu>URPB|bzd0W=(^LqBq1E&O~38|F= z!SfpToXXV8u8ImWRp_DsdXKeA4T2`{A%XZ3mvZ{BB1}M3P`RlL?fHo&R8^ZJgdNu8 zA;t%4Z`PZ4OelJ>&GaGX=l|Zsua*s*I_Eg{$d@2RGp>sB(}yPs&~Tv*i-IRZr3^Ke z=Gd>;cQ)*6@+EWUqZ5m|i|GRa)xh4Z!JyE6;Qd8LoIs*p1--?g>WlrFln!6Z{^8WDD2hhI51mutXVAzE{g{l7zXP)!7h*6rxyH z5#w$l(9Q%&_jLre`00OH3g6qm;IFuPOMOziwDbfkf6=q)-qHqY7(ghYIbqb}&?so#wJQakV*w{s-*WEu_@5{X(+==W6(f)_I%5fSq3>7Ris@Z_J$`qQ}pI)M_9AosD5(z+N!H}dc@uNeh+Nr zq`+Vr2?6t|QBbK-P!|y3)=bw1SzFRDM$~MaF`dIRNtUw2p+1;&5IbR~UW-L}gDFnj zqw=(cs!Y&~RCw{{d zx_y1dM*4)xa%mU-vrqnM+q#wq&qZ^24MIf(%0rzJg#bJ})4;K3+Kg0s4j*Ht88oS& zIA%s4LQ*U6&*(WIo6ME+uoS18M-^$C*rPffgV8`>5fcFBtpK_ZM~ASyyDxV*LbwAYOIb*RL<3_0u~N| z)BqIn!A~0^sml3wuA&}LNA{lkulR+q>2l^#_9Az51PNHm%=DqUhK77_R7aKr%PF{(e;a8K=a!CbUWAtLEagkn!Z8Waje+6F-)JT7}-0{DjR|(!|ubM*f5FiIl%t>)P zJ_F6EAR|=p#P}>q(&^57b&6TMIjA6rluL@w?3eadb?4~^RZ|Ky2THYBQJpr9g$M!zD zm_DP+?maQtsh%hpkN>;K_{W_!j`x5b2)EOj24GKcb#ONJihWHrRNNGRvzrQ?zGgY@ z%9|xkV0x{wiiyPCU#Qf&Tfgr(U~XGRmii2;4#jl%W1DII@op!)anAK$I4`%{(=AkCh zx~XHAls^A*o=#_{3k%4Pp+LsJ?VVqCRaHHJoL^PRX2ry)_M7Ys0OGeh?g~AmxtN%~ zq_wgGfbUy7+P}1md0uwxr{s$zjv%mta<~@8yGjJ=)l^;X!gD%Zt0tv^Cu8d~?r_v3 zN<`N}IpO@apDG>xvYUd1JY&koPjnD9+i5HQgI!BNgU_Of5k=T^Mc#$_Qh&YwN{!=e zu9vJYGjPbfzcX!?J$=<84~|6xVFm9!+9`g0Qr)=Z;F3%DR7XNA-#PS)Z^m!z`oJ#P zHnHy-WJpbA|L%fCv#?1$MYQ@$;ds)6w&NqLIqXi4iQo?2?=Jg<41r zlt-D^Fk4ZAHxrXn zp^-Z-|K#KCk6zA;#%KL!xvl$d`BRGP>HxMuK5nOtP_=4XD=N@SfqdX5%|AYuhvfA7O?0KGaBZJULX|(;So{D&mRa}dp*F*lxv$V7tGh?z(M(ylI`OAeX~W# zeibNa-yFguZ$p!(wwtLj78kHA-Ae;5ULys@k0*ARat_7ze$a+OFa3A(iR$)q?adyU zj+qW6+kWr&jzHlP9B4WY@OyI3((5a&hpsA~J@%-qk^x-*Z{hKsv;8SG&Aubdr5MhXDR6u2_WuJ7J04jdciUar5Vup>Z6DAzBz;ne$ZudY_%<=+t6~v$ z8NM4UfgsHDfIC;UUD?L*RkQ>#Ai$;##59&OX-sA?b^<$r8~@KF%8k~s6FlhI56YMo z%ws44Lpx~3`QNyzQnI*FI9Ewi#$BLJ9-l=31zfY9+8DO+{@s9U7*&ooiQ4p5}j0e%ki!reD5U zH@v$^ALCx3v(i;#;bu*{VTg9~>$qw;=@+$B(>(9*H)QdH`cGdUW0%^!ZHEyZdXL{{ zl(HkpEB%KuG>+t`82p^_R^Tx^7B;UBPb+Owa%J54nVT(=tDhK$6Hy(leyq3fNJPlR zsy$=R-p~x)5})N~^y@`hd#kHP=*xbSViKn}U}O8*#QgFuYCQ`k&+Jt!TfF#TWpmDa zXx$3F?b8rfWp#JyR(=!tvdhWu)!}VT%beTuYin}!BXV7~wV^ls^{dmW4Cd+~^Kg&TZX>#)Z_AK(g*A;9 zH;*N>{#Xe760I*XvM%v-|K_!qgspcl@;Xxr6M~E5mYlGgq z4z1_Am&ngiR*wXEOO-c1+#~)#*ibL<_WO0_!<^8*akZcGawZvUxi&|D_2W)BIUis9 z`qn!ZH~j{ZBb`bL*6*LGX(_z<>}KGt>x(7w*y@MzpQrSjTiWZyMIEZiY}m`brQy?_ zHI7qxPWwp-yPFHn-oDA$G-#yQecCN&f6&^y?El~>L%&L&TYMGo;mVzvhbyQc9A^x7S-nK zOHZsX+v3Z9_We6sPyK2=_MS02Ug~^;b)}w*G-vZ!?$>XbtV7;qVUxcXC1mI?(g444 zinXQJCCTR|;{z$l@rBmsA^q{k<-cn#hEKZun)MjghAu5|f_EY#V)HKNq)$~@Cbc(z z`P#ycTV09o{fX|m(_0S0t7~$cOKN^|jEXt`>sw-6c1>}6lff5zxbs|S@-+0OWO#A2 hUz69=+1!7>Y4gUI``PHPegpj3T02~1oWK6({{t;iDZ2mw From 13ddc22e032251d12df92030da55457d6a197b15 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Fri, 13 Dec 2024 13:57:15 -0500 Subject: [PATCH 14/82] oxford comma --- docs/keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 07de5674d3..96234cf23c 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -25,7 +25,7 @@ When using Clerk in Keyless Mode, you're not able to make configuration changes ## Keyless Mode support -Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs). If you're using a different framework or SDk, you'll need to manually configure Clerk keys in your environment. Visit the [Clerk Dashboard](https://dashboard.clerk.com/sign-up) to create an account, create an instance and get your keys. +Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs). If you're using a different framework or SDk, you'll need to manually configure Clerk keys in your environment. Visit the [Clerk Dashboard](https://dashboard.clerk.com/sign-up) to create an account, create an instance, and get your keys. ## Claiming keys From 63aec2ed31c0562022d605282ce17b574a8606af Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Fri, 13 Dec 2024 14:01:43 -0500 Subject: [PATCH 15/82] update description --- docs/keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 96234cf23c..d1b373ea49 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -1,6 +1,6 @@ --- title: Keyless Mode -description: Learn about Clerk's Keyless Mode. +description: Develop locally without requiring a Clerk account. --- **Keyless Mode** allows you to try out Clerk in your local development environment without having to sign up for a Clerk account. From 87cf5d98eab13fdf94368f464fd197bb602c6d1d Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Mon, 16 Dec 2024 15:34:25 -0500 Subject: [PATCH 16/82] Update docs/keyless.mdx Co-authored-by: Bryce Kalow --- docs/keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index d1b373ea49..630e359385 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -25,7 +25,7 @@ When using Clerk in Keyless Mode, you're not able to make configuration changes ## Keyless Mode support -Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs). If you're using a different framework or SDk, you'll need to manually configure Clerk keys in your environment. Visit the [Clerk Dashboard](https://dashboard.clerk.com/sign-up) to create an account, create an instance, and get your keys. +Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs). If you're using a different framework or SDK, you'll need to manually configure Clerk keys in your environment. Visit the [Clerk Dashboard](https://dashboard.clerk.com/sign-up) to create an account, create an instance, and get your keys. ## Claiming keys From a63657c84f085bd79d6fb6c00a683586790476a0 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Mon, 16 Dec 2024 16:00:44 -0500 Subject: [PATCH 17/82] update images and address feedback --- docs/keyless.mdx | 11 ++++++----- public/images/keyless/claim-keys.png | Bin 41824 -> 0 bytes public/images/keyless/keyless-toast.png | Bin 0 -> 392220 bytes public/images/keyless/setting-env-keys.png | Bin 35057 -> 0 bytes 4 files changed, 6 insertions(+), 5 deletions(-) delete mode 100644 public/images/keyless/claim-keys.png create mode 100644 public/images/keyless/keyless-toast.png delete mode 100644 public/images/keyless/setting-env-keys.png diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 630e359385..d2188826de 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -5,6 +5,9 @@ description: Develop locally without requiring a Clerk account. **Keyless Mode** allows you to try out Clerk in your local development environment without having to sign up for a Clerk account. +> [!WARNING] +> Keyless mode is only available in Next.js projects when developing locally. If you attempt to build your project for production, Clerk will throw an error. + ## How does it work? If Clerk's SDK doesn't detect valid [Clerk keys](TODO) in your environment, it will automatically fetch a set of keys for you. These keys are associated with a Clerk development instance that has a default configuration. When running locally in Keyless Mode, you'll see a UI toast indicating that you're running in this special mode with a link to claim your instance by signing up for a Clerk account, or signing in if you already have one. @@ -29,13 +32,11 @@ Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs). If ## Claiming keys -When you're ready to make configuration changes to your instance, you can claim the automatically generated keys. To do this, click the "Claim keys" button in the Clerk toolbar on your local application. You'll then be prompted to sign up for a Clerk account, or sign in if you already have one. After authenticating, give your application a name and the keys will be associated with your account. - -![Claim keys modal](/docs/images/keyless/claim-keys.png) +When you're ready to make configuration changes to your instance, you can claim the automatically generated keys. To do this, click the "Claim keys" button in the Clerk toolbar on your local application. -You'll need to copy and paste the keys into your `.env` file to persist them in your project. This will disable Keyless Mode. If you don't add keys to your environment, you'll see a warning to let you know the instance has been claimed, but keys haven't been set. +![Claim keys modal](/docs/images/keyless/keyless-toast.png) -![Claimed instance warning](/docs/images/keyless/setting-env-keys.png) +You'll then be prompted to sign up for a Clerk account, or sign in if you already have one. After authenticating, give your application a name and the keys will be associated with your account. You'll need to copy and paste the keys into your `.env` file to persist them in your project. This will disable Keyless Mode. If you don't add keys to your environment, you'll see a warning to let you know the instance has been claimed, but keys haven't been set. ## Feedback diff --git a/public/images/keyless/claim-keys.png b/public/images/keyless/claim-keys.png deleted file mode 100644 index aa72e079b6ea717b8cea06abc5e11c45c3c5b2f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41824 zcmZVl1yq#Z7dMU$IS9y55)wm)lF~J_pi&~zDcvbKbPOfK0Ma0cf(j^|(lJ9fBA|3h z4>d#n=llELyY5}@yVk6A)|~a6^X&NSefHjGKM8s|8uv*bk^%sL`_DAh^Z@|;X#fCk zngky=^S+Ev762&WeWs>t5Qw+82=xD?M6T4;c4t$-Iqa}S_^|Y|v)2q+>p9W&hfkYG zPe6pqDgl5J42Zx0{*R#-_`k{jYhZ%_0JzEjdpO4X-{k*qhz9`xxPSlGpacc{H>m{m z66oj#VBTSr`~jMjy)ZOj92^hI07l$W;zq!6B*sZK2(S(61=bKKMa6@ri6iKgp(GT5 zn0SmH2;fBj-x8(pc+dvke@pm4fKwPoj}^D#xJwwv&8lk9^>rpd@-KLmU<9v7<=>?$ zv?_7)e@onpWdH{8vQ%IpnL&UP)eSqu+-I)^xGbv%bu-zDWtRrD5BRA;?Ow8Wa}ab& zs;EK5OXXdn2qIqd;$F^r|I7V|HB*b&csR$P?L}<0m?}f(T+Sc*Qw`bUiEw{Zyjz6b z*B6wyZDj{itnF}5R~yQ!ood8m<}Cfm0Y7Wn2&uqU`mFX+%&H6kdnpbaY0!^>^VKtZ zO~AP+LmE2=(vOP08gKm9vo!oU7T*%E$+^~Ctwr8yCV(~&m*)P;s+#weQUtzaPCK?- zu3hzO+{A6v6V={Vz^j^zG%F^0px=>11^)1g)pq!w%Nm_EVx}I|O*#QyEeRV)YtwhW z-MTA%0T`L$4Uu@&5l;nHc*GhgzW8l;l&OwLsfSUkr%mgaL=AfS8MDg*b431e3_eKS z1w<4ktsjWNcu@xgHxmMo3=MfX)B7^|WXq&Q1YiG5xiC{dqr5>-f*S-^_Ke4wrP9@i z*`Ci+Sg$^)kyhTbqFz%CBLA^B!z|@{P8vVtLl3yK$Xs}A?y_f#IzMm~D1B)?o+a>T-6={v?I z%pA4%p2%;rDfem=e0u%js7gGI1(7s?V&G(;aTLtQ=aO?}XLyXTdA4pTk;*oqI{oQE zGUiLF-wGm?<<*Gj%Z=75ca@u#LUXAa2x>+e!N%;Z8lE|L$ zs4@MNko&xjV<^4DPvDjYDjwO=)gF_*Bm6JwuO*zP7vq>Q6k1T`lYaq++o z*dwL zd3N9Wq8}Em{s)U#8eW~ylaY(>yNADhz1I5ocYk?q^d%V$(hFP0Tg8ZcWQa^Qek#rR z@qLtLFz+kMOO4WX+xK;<#(-xdsta~62P-x&4*pzS9fm`0PLtdh&KaIo8#1vn2Yd_6@TWlW4*Xfq;6N$=&#R^d{AxlfWhA z{7||atB$an-h_1H@yyr#m;I(63JMCcvz;XK3b&fS@78@O#b=M9EF)53c$uuk3I=Q7 zXrr2rca4$!$b`qb0%q%0RPwvC1>A5pL&xPmGO^B|uZ$_)wb&vp7yLIjH%m)PtJ-(Z zWM|vl7v4YrY%Y}b{4)o8Oe$;S|4HL_gKs2Wy-kUygo2cpu%{`Tc+`sP#cgAg*yYK- zB>IU~RT|IWUzcsnu$wE4(5~p3vlvGq$3s?O0uh;jgYMCSEAvKC1qB6pd4c&z3BlbwN)^qe zsG_IloOM)xNRD!Ha#mJ|Ias>B`#?StsoZI@fuW7u^YW*0K)p(edXBrxU9jK3{{DWA zr%zq#bDdxhtVweNE`A?g7j&Ei+>S1h;cZ7rr-;eQCIXe0!SMkb;P{*Gw|E@a(T5$- z3LGus`<-gTwigEkG&JdfQTN`-O;GsWS0Q01#It<#ejMLf{2_^dubfJ|7#8n_lcyO^ z3RD%f$-d0u{pA>gAsp^$aL)y@$Jli$Qf{iMs{Z%v!-e?EtnNW9l4H9$To0lT0V`e- zlos$VyDn+aA4yXWm;7dqWvks%CShkh0WCDFfZG+LzGy7F-r~vL5cmxOw`cgTGvF0D zK#ybTy0xbE!xCkU6BJhr<+kAjdgir9p6IF?SqISeqU;d7!n zdkzqVqu`RDq7)bTuxq<&GXBTwi84i>wp0PRZ^GcHac*=!}VWB&t^{RzfD~^q5)G$kYX~1E+rhnBb;9>#e7)o*-n3{~b$x9hotI%OUnXQZV&$sc zeF2?DhFd&rYm(`{fYUNz5#^VUMY&+50a($12K*)(U97nzkCPSNK%Z<+;OX}9o9fjd z%VzV0RuCT^AK^DXt|NF*YC8^XwB>#gNt8%=rTqI@=j!J(MoZs-kYq_T z7HYVa?>j29m9Gj(?E5Hx9;q^J`Eb>({U;5M$#y7U5UEie{GWK7{3Jl!V4F=mR>iR7 zYD>>R%M!zKn+Ft{ThTZ%p)@KDRqrXW>#4I3D`r6b&fr*&cxdkhXb_o;fCqplXXKSy zg8(LWfD?rfidFY=mwHn^+TM5>pLG;sjV(FTUM6Mj3WAeU*BSr;_rKc?MpveRh&DkSB0=hil+vyDc`k`}xtLMWuD~s8vX)uwM+z|HrXVos?pPOBjF~ z+$|S74>cjWD}sKqW-UgG3dam+GzCTYp8#sQSs~DPsz#i9SKq=J>Xi6N4CQ28MK?Ec+$$NOHScl46^)MciTKEd#`7v)S6zbM%L0jz&-*sa_~NhM+v!3+2^A^DL$^oZM`9NeSb)t4+zoop`Ri^I5e1C_=l*C^ z$Oz)YcJBWhfVutPif9#yIW?5)l}{up(U;s$G^zI%)b&aNAM;KPo1Xl~U(q^&pLB3`G#!+*<>l}gV4c-OI19-BtkxO#A) z6ZuG=^eugz0fJQL#h=(f$tJ?D7uayv#eCbAO#1Kp3*z^Q3I}ouw0yQkU6!wXSWLzV z5Xek@$mG;iYfDQU3})39e0I7s)!yEYGs2QdEm<1g_2C>b$Fai7FJHU@8rXaCE1`#f z+fpjoWo0ibtW8Wzo=iyw6xd<0Sho>&cJ_ljo7M8>5osj{_S(v)1B=pTHj zXd}7nPz7|2ZA+_*r+G#zNTjQa3nc8?sllEneW(8&lhculf+9P6WZM;b<3-sa$Yo(}aH%8wa4y*E z``km1rS|=d6He1IUwD9*S863=yOqOj|GT6grPtTmEXc=kM6)@Ctbu+3J!>6@=&_aC zVx=mLbLzEI{&QwH!v&?a%7CyN&HXsE^4><$*%hgPZ^-5uQ`QrU>= zC@Tole;))@-SkFjpA7j6CVKOOy@12QoyvNfU*C>Roq1q5gu^JI*IAggJM$XgA61=s ztpWt>3n~`1mSoLl4&91q(}Q5FRKwl)`T3s&zBDw9yVpw8V<*4LO?*sO*yNsUk`6O0 zclYp!!@#|JAwIsoRM6sp<9x^iFj)6saO5|SK7?5$U;LeQJP%51VexHRLI%9U6NkgI zVU{Gh^v8kwcx0Lk%xqP$a&QXcpBRl58M*+gLyL9@NzxHnAtvxxjEd4`l8E(~nUmq- z7&Bw(e26+rF{grbfxxA z==nKe$P2RoY$=mTU1<_YBqI z_)B7lbi4b~85f(PWvbBQ)%ALfj6GpOxr zxuZzTOMQK6Qy$OWL2p{)lch+|;u&d|^y1mVh_~tiCCmu(kL&r`c$&<5CWfw@|nLcBaA^s=s@VN>8g5iUv& zeEj%Pb5e;2Hmqe(U`@e65pekTy|+=FDWOyHQ_f0e@J}eV#%aDQ8hAg-1Q_5a%QEOb z8x0!nB|QJS`|HQhp4aQw5AvQa*i%%rwXwJsv8+jZym_;_K9DZH)i|4QGrfDp(CoE> zKgm<57@o3jJ~-K@9LdiT2ZAo?`S&)&dod)%imIZ8g<{Skt)+;Gi7WU&RaYZI{hgdp zn@_77-S7_>ZnunR=$M(srN^c0gQeWV6l}vpZNr}QD9na2@C!et93j7dFZi-3bYiaA zt)-XlwZ1_E}b6oIo$tjG`66%1Ko^sui#oS0Zul|DAfpS$?f z@$JwBq27x8_*?F;6F8ATU>m@x`k$4tip+t4LWlaDWv( zL5G2t7Z_ayUj>H*%gM?v`)oIsPF2>|zc>FS%)3TDcVdRc<#k8f4rb?@BTTN2(AD01 zlHU!>E6dsfkGpxGc8-qeuE?jwmZ-hTFHd3_q0J_5K5dVm)rS{&Eo9v9IoGy3`W-( zocm$aYt45tTE+u2dq!qRoptf)GBb9!F55IqJ1grQy`h$)Q8KTQHgZ;LBsvu7KE#R- zWplt&SHAgqTn;%*63Pk*-7bghCb6I7K`e~*J9b`W&Twn&u0nQv+L@@s8CI*W#rq>4 zg*|+8f9&zARfV;ZAR7WxO`Y7aZlwNCdtcFxZ>XUo?ZmU>B>fdmKrZrPsC}2FUOyAO1$ZKSold1;~WH=HB_|BUE5avcu4;oW>ozgb7WRVOGmf6n-) zp7CbH*uJ%F8xSc@+~J13<}yVvg_>R4ACG zz4qrNe1>%kE)uuPtY;jvsa+K?IrWhjE|4acW1%g=(}>&*!0k*WsOD9#-Xlt{h@%KPl}7o*z#` z1bL^kp%zc(3lwL~L~a^lh!s<^IKHLjBoA29!^^I1lkaS_u3a>9LaZQ@7Qu(X)yEsR z4+Lke99|k3i@%0nf=GfBNS{3O{8b#ZzeDt=S>{h{qpnax{zAx(*4Y~3vDjrH>^;GjI|o&z*pz5QovYD4wD{HPg#1N%1G@9h<#Ioka_?G-1eh zp6@BwGX~{~T0Rk=w>~}`BQcEAAO>h%W4<+KeyL|dD+LBMs8s_2)y~hpwmr$MuD&wm zd}r1LOloGk>9#o8JEB*;r4JSA21hrRuYF{*Rm#y**n1p}KDPLf-1kw4e+)GI;zDTn z^qbJRRSt?cJc9S~`{t%&;MV7mx0afmsHR`?aGKoU3EuYb%vdF z0?ZeqjX`NI*kEi5pTD*Tnl8zGZgrJRj)4)A9IZTcG};WQ;a~gi4ZR?NEK@Agl0f+O z4NQF>`WdieH% zs_T%V5yZ#G=aXXl=R&481YN*pN1uhsm{-@gJm|oq<;daJsX(G>bQRU7(0DZ8;h$FE zF@SzsHv^uWOg;f6HC}d``vD#IWtQmE`?RapEpT5yKNg~C`mjLu=VL){m6#zDqbcig z?cBGo9JFne+s}s6R(}@XexDuUeIl0j8^zf@M>+X>Cu^aM3p)snM339AZgM zm$i9mJs~e-6DWGtLKuk0&LxQ8=eWN9-PpHh(KEHG5DR&&-mdrR7B=@zw7s22fcM>p z1SpmKn;T#7xtaKTJqYWPVgw>XdJNItLZp52b8{Q!Scd7;{*?G&LgY43eqM4U39MRB z$&0`i>osu*OV;G2vpj)%t^I$a(sfr4^;KXqS6L5mm7)uS&4C(ChG^?QEIg&F$!Yk+h9tGi-q3i)RF0MsDkv<25%z#l_Dj z-uPeNlZ=#|+kYIuXzL<~cAb)LT7Qj?cS2$@_?BtpO3wjK1h9x>MH5GBYc_1i4s>w1 za|QK-v6Edpd|-H(R+|h2DyuWk+l^%AnCD2~ix-~|PuyV}-uhIY@RmY1=j>I!L+%x3 zZvZtwqm5FmZ%!ZU{~_ojMW<~fXpTf?Sr`dTbKd!tRouI-ezmf~6JxPBGgb_xg-&eU zzu4QT)rfxicsEjBD%WM?PqRgD0_X|x|qwX{3mbk2=S=)Px4 zA!8K858U%(6eE1L%lrg7-W(EzOCcJ1h%{FSM!Q)t5d(``hU?vG6r)7o4##lq^N0jo zGK^Bi2d^4TeTYis8-1SZPA{UwZ%-yI_DNKeG*wf?*)6&jRL?;5IT zu&uar(=l8XUREW-D0TB^z`K9+U!Ny^{^EL{bS@T&(o=tvOwG@>bpPuIKPc^`L91bi-1>u{Pt$)-y5q(p1)r)rxxH*Tpcz zLnp-E@E4?fH+RL=vZd@Sp!D?S(DJYC5j!8)j0IwTgcs0xjn5qOWiu8_^=$s@zDJpe zt0y-Ith0p+_N0~1BQ)*H_Sj$9Ja#|qs!_f0WwV@6p^%+Tt06NQ$gjsEShlc^HGckQgzT%4G9}eg6Zb=sQBXcu^FDpFbG9)bUK8m0&2|0S7@*!ZNvqRl{-kutGV2A`a zAsG5x!!(N5j(mDaC9|_^lG=d5?(m~=Y5V-$ALG9r{9m}^YkM{DUWqWa%_sn*kpEs~ z)xW2EJF^x^kn^l?8J+`r7Xfch=sEef*_@DGo9kOUKg1W9GwZMI>N&dYp}QN15&5EF z@H`7`(?c1k?Sne%dKZmLp{0qMh%>S5?ilu0zOH2$ys}O6|H6S$UEGO}OP$tNRC#9n zOsYEWft#W`gO4H?qY9X;=eT{?pJ?zVMi(9RmbONTak6YwREXjc94S-bF=CXS2<$%T z77!L56UDIg$iV2c=#U%)4pS=xW%PGSh}K84jl)MhDb~jo6@C5vlV$Vs^V?cA0=C}9 zNJgV{0U4PcQ=2uldNPcAD;BDVXBY|QlXesn`laHDn?Ep?7Kpc-Piu8?gcW1rS_Ke z_rNobxsM(~n1?Uwh04se9ljXUOy$pT;qzmt%oe9&az=Hd36*iK((IeXiB@Uj@NN z*j6sb@1f=Z^}9_dUxb9W%ExC`M!yqF-q z(6L}*OkRlCq7;j1=~)0oBq#nAbpCJ-Dh%yu96Vv=Dor zxt-}ZGo!ihMqAzOHX^*;Kq#&r4!k*hYAUfR?DS-I>QA&2nfitlN^e`)Aaar^&v#rn zpMmI|#4lf??R;gOlzd9Yu<=?QR!!l0FeFt{*@N|p?U2G=3GWvLj&N(R8ec>sp9r3_ z4Nmw0@(!F*9*af0QF1PmzoLs`RIKeV-y()Zz+VNW7sN-WDP(7+|3KyZhjZpKGEzypvVM?)kNB$M-G(*GI6LgO5q)2fp5PqiNPM@v5-oS0;7Uq*T6+&? z1kj(wQ1MU+I^3_&W$@zU4-s=DC(H^c3l;m=$dCc&z=Wg%uN8)f7!TsmRAW6z<7Xy? zx=N&-lt4r|mYYTfWUrF-=>?X~o~h9CRDYKhmz$w^-)8+# z9^af?81&s~XyV`6&T`l%INP7~9lhw(lZn%VV{gKU2njZJRtSC&X4}bG>1*Y)DaFa9 zfgYsL?REoENYgTbPGlD{SVDMKqVY-PEI(R>hX5=>51q3Q*Ep}DfmGOoqCj~8X`H{K zyO5KUX}&9}%t6HvaGs0T$@(-RbU@{i-SCgj&oBMicd+^avE4c@cM)#Xh?CAX+b=I+ z1V?zd5;ey!Gd;bd)a7>&`TlO;wlk3FG7p@bc{?8A$>2TU{)sNuz54Vx<=)mx zbp1;W5{FM^w4plT=%bg3I;@>Z-;!4sfRVrWm8rOldi~JN5Pfb2Y2!W-u2LG|YJH@<3LCi^?o#{HZ|&a=JL&uH z5H>oGcs8IK%q#N}hSNY|v*xb(oD@0S+N`V-m;g3Qlvm3koR(x#OhRPFYxuk!9$(h) zw?L$q#BF$ePDn_gJmOElBX0KwK-4;xyHt--I*3RG1qJIsd?#I4ja{-Biz=OGTyIWR z2;%nW=56vHe`|=%D@%`Xg^@)j*@u4i>i+zZguQe-O=ity^7Be5&wU3Sh4CdLi`P^v zED2R)Wg4T%5}A|e>J=up&E5sM7n_CZ2b&xLOf16xC^Gwy>V@(R0Xn}LTx9F}S;A$) z{t`o*R`>!p2#QHNky5tDQm-bC`{k?R8|lZu%D1gWLPc9UAXV9Ag0DqKr)<=jWKW>2 zr{GuDiluW#oc0mK;wMV~`iB?vSK&rIee}9qma;jg{>k^zNjvs3rOIT=JQ|_eg#Q9f zX8-NA){LI)@G`9yo*Gp+lNr@>56#y+aObAhQD&_sSyJP(Oku$lgUzN3jmHau#r-~d zgm2z{tLu_0Fn^+qTvtU$wKdGeS}~!aI%a zi($T1JlmR zU1V17A>NDufuaSuhK(^W8y?11|0?9ZTy->c|YyEj@vei!I$EX?c9n! z!0=BdY*@1KF_`bV)&YUoiV-3x+j7lEe$`RrTBK=ASa(!FWT5`)%{$Lg!EK$QflK-4 z?r*cUDTJpk&C*-swm+BZA8Ev_bx+v*j@o?U57r?5Uo~299(D>5mh|)?ONW7;NY^V; z;>st-a_77?K&|Jjld|;LBY)o{%g?^R7@M2-W|0dQe1YoCe>FIXxYF?0!8N8F$K+bA z+#`<`*!NS#13v*wzs(EKP}O}D2yx~hx#7utn)N9F63t6z|Ev3Lb)#Mi`)kPTE7~va zGP`K(3mIgKI;re~RR;A!CgBzDND1+g+qWu{Y|WZav8nv458h|S%cd-wX;j0JaIo12 zD8Hr+&w(N5O{P93S%gfKrOZm3fn;+aT?6{zRVVPGu%j&>JM(Gh_uP?tYA5<~PH3@OPv>YPSlDkilqzqIUlVxg5Qgx%JxN@RlID-&s1EKj@FBEm8Fv$^rN+wfyT`%kEtbRVImVb4r?PTr zr=HZ~hsr+Sqtz_3Qg`u9G15q4+`apIdQnkP3b4c|gQ-PiU1DNl>R^lQP_`aLZnD*# z-jmdZX4{2_w}Me`ylI^vaZF1?R{X=o=d4V@5>ymJBLf~Dve512_SDorHM<7y-`jmq z4E@qv{fL8EY=gWzVquh}mGGFLS;(3~;5m`y0pPjKOa6e%Ks<@L?y@)~ib$J~Bp`;(qj#po} z6_vygA0}=h)F+x0&kbFb7n<`I$vb)(!U*5DP_f6O_t0Bgtsx;TD~R_i)~W;dlr{d5 zjTLv2s#aM>-y-89KH>y+L4T)8mU`R~Y>n?XFiF|F%E?lTzv`0)AWjx-rtU(-P-*aDj zWPelk*a7IR{Du!4l{;?Qcbcb3o=bgk5<)e$+*oQA>T+gQUcYpS8Ke8kx*t3AX1xbZ zwX33YMS_hG0N>ni{0y!7q76NHgT*LbxsjbP@Pk$B`(}Bdnh>7`evc48KR;45`$<)J zwoJQJNttnc%HNqELNkinFH>Eq#EdO|Jmun+%FF7V9JM~7ermkOX-w@vY3b7%G;kAQ z-1o>hDt`Q<7fG}eQcwW~6K}p}e-9qC2vOII$>SXCCTM<_x5jCsNgfwJZmS}Sx=(df zB=|yJ04#7{fYQ}h$A)j;_RIX7CYF*Z17zF|&7Y9V`ipm|M=$vv>L>MEWmM8Wt{@6} zl){{oJ&sup0ecJ&WeHoU@*-o0i`DPmap;Vzu!#$`RM5sK2R&<*nO=7>CJ{{L@@Vxg zpbMjPQPJ(8rZrq?jNj@_@3B?k>E?AxjyV_)^ts?HRwEtT4!G0(v^_$-5#65U`v^N8 zx9}aRBnW21&YepMXToumVCCsCtk1C|C)=-I!vlmg-nl11Q=z!q*@TI|)&<4B>H-$Z z)0mf>?@|zc{W}|k1@eacD!q>`!%|tPm9z8`oy=joF}|l^O9wPuqAf@P9Z1T< zJ;QSh3XOpK?F=GUR@l>%!8yL4E|zfRY?DAN1J6ePkKg-Po9NoMe?fGYkJp@aB#OzS7CJ3cR%Bn!3$ASos)nNE zH?!dN_1cP_>)H(_kQM}p7E>eIpIxAgfU7`)nLHFd?XVF+8@5s5#*k8OXs57p8XWrR z1vmI>H_&%?c{$=)fBZ%dgDnnEKmk&L`-3v}cFE9nRm&PE;nX^T0Ql9gtxq=)CI1Mk zS+Bi&vd*#6gGPwqGfh&r6i+$}PNNZ^paC?y0GM}qmIGE?mk-_ELU6he{7*nwYZ>d8*3Ms~ zey;1=%4~@b0kzWM-HHO>+Mm7yXi>ky#e{X$-=$ag2Y`-mpO6V#wDkHd#{O*!!L`WN zF3@2EZ?A(;$S_rzGTt0bCav`puak{Q&GgHLRgv>m`4W^s^q;LIrS) zx}W}S?gV-HU^^{C%q-5&&$+-(!vD!%U)54zbgBudaNrFOF-L&fuUiqI%(%aC^qKH` zXuLGgv8$~i7AGyX6@uVRcI-Gp$OK}rQZo0io4ou#T?{unRzk<=nJf+VIfq~rK?o?} z+D6GaXb5TkyR;)=0*!FZTm6KCPs5HS&QmeiCU4mOK=|s^LaWA4pTE;i1!YTZP2&Ky zVjBfjn=3&{j{N@#H+7=~CG&0>S^A%L7t)R<6b2->3we!(kjQreIGu%F929JnB#HLp z4B}yiZ;K(MC=;$EQx@r?GbVt;=`qkv1xGGHdz1=f(vaREdxO(9Su_)L`E%uSDhNaD z_j8};zpcv*7EYyJ4rv6X-8$+O{+oOcN`)@AyiGC*JYH2VT@yMz_|qD2Sa@F;g{*ZP zQ-S=I-~ylB6W04sX*C2hep4_7YWN?z!8Z9&J{&wI1T#Kz4(-|NBH6Fuj9t-?{P_8@~6@hvSLpsW(A&o*=C z^N+fnOa>l@od3;IFlyi^cL*ve{cSSuy!orORxFAQ*ODhazCl0$`v8qtN&_7gK`9Y% z&s5N_5~0Qg?e(4nHj*e5Fpl^afiMRc=O}m!YiCAOvp^mWWTzSy`RHRsuS${90bmhS zt>k50w;o^2rqkofU%P9^f#MIj)1Qq!+3|b$;bZdS{fnzg!^i0Z+Zu0MEi%3uJc>Ih z)#rb$E6wb1>-g$fQXj{6&9bR#GqKWL_(9SAycf?O@mIYzlgv{uXQF^9-{~BYML~;d zU!x*rITGA+Xx|8cVJAeRS7|8xGt2Duw9cQ@Wo*=ty9| z*w)EdLEoDdlTy>lTZZ3<7qKc`LGj;w>rEMTEXrr5SB?YobGjXsnK~cHu)_Vz->Gr@ zGnLBI?syWFs>wCGD`DPc7`yLpCh^lV5vm6fQ3@Oc64TZ~0TPlq8=NA(I_eOwV^*9{ z_#KUH$lZ5m5b&oZ%CIJLAup;n@{KiITM5guAUxKc&8xeF4;)upYl?zhFI>IQAB6qM zrCR(5#k@xt=+As+Gqfq!8AKXA#l3@JmT~Re2R;O(#9}@{m&>7LP&T!vST8}eGFIs% z_~p87>z~!E=7s%K{KcoDYLLN=Ct?qd;zk^z;a?t7V@brD`V1evM`M5fahZ6#8b{%h z()VVVmasc48odHjgNQIoZxBSs3V|66|MG*C*4Khg0`s8Tc{{$bqM-=*?%8u}#5o5# zGECm?9-$02{M1W&nMl8lq0~bUlKpJXe%Xplj338JD+f4=?RrfQ;`Vww8A|xj?`r#6 zln^H*@$DC(UIn6|wl^1p$dg-k^zk(ZxG6OZ9XSNLHe@J)7P-r85d74HlumuUwD0~J z(pDH;Ftov%0m2`!RtV<fA({5VY`ZN_JHCAbs}Md(b+XF;*Z!P8*A~V-G)(=bgNTHJyS{2^R4_NLk{u3l_tlL5H zrkdYIM)DZ)9LvMuT|tG`J%l2kW+=m^S7ddQ`@997{dy~}|B@Nj$)s6#@tNnt1B%Zc z=XeR=;gx>{q#_Y&*V$`j zqxD+LmF{Ml=SwguLgl3k!_Fyj1O(0f8UL-P8XG)f|teL;S#dWLM}LtCwRFpp8q*#mcnIEQ{G2M34J`yKKD%I!Oj+ERC6J(;ziXzhhQ8@xsx-5@krb1IUW_G*Uo zAP=8(=irmS=X?fPrN7h&)r4GbCHGxbaDuJTFTub9C@uELke+f=lnqQcXqX1t-v5gL z$gyZgV=;F681`}v_zkI#r3_dS2xBX?O7+AU}%~_>K)qZon zfK9-zg@7usvfRZi136V?37DVe@wGcclN~DNhIB}m;c~v*40R&W`s1eKjc$sxz)C_( zc5=41aeT`tDl0Dimim)nSak2`gM;yrp}6;WF?=loN*#L+T~eQOOJF^7sTK<9N@+2>2we=;Wiju{b4=&fn({$pMa$TS~_UX_qn7XbQc!jeyP)7 zag0dp0e7JD-Ea>`UOI&z{kIO6JCY9O{9npwDSW=HBXr zPT&6`>)K)5Zz=u?>7Z-6Icb_$p7+ZVxJ;zM0rWcWj$E2SCRaLcaXcRj&W@WO_-jG% z$)$2j%wDJ&NBH0q6m{fVb7QM^ouADv22u&Mx4Lc1aEh^kcUbThvn+%8U9AS|>$xdY zgp65WxnEmZ?Uf+wK$I8zLAtI9=R?`xk;LPO+l*~0z5#o<0O&$JPc`dF;d0CVEy zb_tvuq{+bu%LqJdyU^z}S+=fEtpKnD<30u`f^NE*eI2Og#gd?agJh0x0DbV`Ey)t5%{M~eq6;Gn`_)z=4tX)p=Yn#UkySnwylCiXi~`;V|q!_eJW5u zolm^rB3`g`=?!i~A*Y?Ex>O-LLRic}K*w&;;$;ZAXsyC*x?i#|e?(h^q2-}U_UR_E zz|I`4SMZwruoYT#yqFv8G4kfZ+hDNCMXmANw8D7O+q5u!?73+US4&KH!zQ(sza6~%bPqRXIHl_WT14rdi%M-1IEkjbrlAY+=e`>_<3q zX(rWnqtj7O^Ja~Q=yScmdq5n3hJ{6uP@Ak(t^AK5aeb z!d6Km?;RM*Iqi<1$WgG$N9I@0*-Qf-*I0?AK$|281fNE>x7rg|{d;dF845brMq=Y6 zz4%=3nZ1#(Ll!gtBhP+6|701-TSr-IqtL>R%?5`&g)rCQ)72M@dbA2;?#19LjT$AY z9HAqrW&z87?LymCHD^^XkdkP;_6%r5(P(O9={W( z)GSk8HQBOvq8kA6r-53O7^h~C5>mIX8I4-_UB?6bw1omfKl~xJm*=+5!`##G)=F7m zgbxKca2I4(EXr^clxj{iC$8j%UmfoW^$*s_o7lUJ=_Y1E-NbR}P;v66Ghv3)_|MTa z&}7JsuYn}!m4n7pIZo_0Czxr5TRfg^@T0j7%bD-Wc<4i{_33kn*L}$P^siQO6!5!a z92791p|`#kmMgal>mna~W!*kH37~D()65~HU<0~v8olnx}CA!}- z_}akSnog@*8>alW>3KL@^{kLB&`jqGThEHx#hJyY6udSubR@Dsnx9|(wMZh=y5Op| zG4rw0cja|XWgfdrUue@8#vJeU9-olVPktWzWEX4w2zbT(m1=9Cx8~2fN#jt(xEVXB z3u)tXz;Iic0ba13TZFL+u4SuVdVF$>|8?yD%RDie@(0KdvGtxWugNgV*{|Tr>$dGe zj21O?D-OF8Nzh(lzcI$gX!b;?pRhjy>IFQ}G(pm^ z02?hjb}R!*6B1w0)IZ`qqz=jMF#E+ul^dbzH4wu`qSmEwrQZC>x|Dx9mnTA0Pa={| zh5uN}DORS+M0zl{!uX3irH}&REfMVV6Tp7f>2xn2!j!C|~X-`rN>pk0ZI* zGrdAWL8?~Bk=W(3V1;l-lMN|pSAFnhb6H17nQd)r_RQGGyh&nYq1boB&Rbsss@B8 zNE?{H*mX$u?|nmEcxHvalmCGG%lN2cv~0`Wd(;&E7h3N>Ri9^zgEPhaDH%cz+aA8> z7DY0Ipo_o7Noh@I_{!{&Zd^n{m)V^h=PTXqIJOFv@)5stp;d3r3H@||!1bO2>B~lU zzB$0gyorbBL`Tw4j_bbAUs@4@s{6CIj;w$Z23F~N3M(T{{% z3d?bo4O`Db=J&ao2sAZU+&vdK!y={5ji61)o?p~V# zu7Nian8up5_NFC^*Ow+zG)OQ+7gD!2k(i2(G7i-A`Y`~zL)WsrWhLu78%4QkLuffq zW>10)qt6-PLKZd4RVh84kU;OJ!QxHz`lw5f{0SD}ZLqEwU*i<|8p zDaa>IyyBL;s@S=n%i{%$$%0TYGv4IR!g0qu2OBB3YHSNCmHbH%`Dc^{0$%bAvduOA z_uphXNVYYkddOitI^z!qI9G&&dDo8ZK5Op+7;PhBTaE4ZXwixfe>QM@yZ)n@o_I3! zr^X$<#`zl{e-x=C&`3j*yx+Yb)}~$|Bom;J_|W(njZCo0U<9rqRJk-1)q4^kvs(pP z@A0DTS8$=+Vyjwb&z8yAAAm&@DkPY$n4-r2f>S{+)Z!jFN_TO6$$cb)Yc%2}iiVC~^|1kB|0a1NH|1gL& zxP){p9nv8nv6M)sN=Qp8-L-T}EK4KONC*f50t!fXDk|Me*Rtf2@5S%)yuW96|JXfy z@7$SFGoLwg=9nMc^G9L6LSepx#=Gh**fkp?ih>(1AW5LS=fyo+m;*@rg_|T;kb3_J zmBM~ip!R5Zl5b1g0}TZCu9JQ)nn{~-VwJW4CfffLEU}!dKK}gkcex+gSP8Nm;HcwP z6DM|(OF4)uMgu1@z_a&cbih#?V)C0HYb_Jn6j}zQ&$h#(r-+@Z5KR6Bc}?9Pzr6Nz zUc%BB>vezmrv)iq|pka;k|N5vk8FAqIPewFhd$iA2MU1K1pCkwUpchB| zl(h_O?CNHpi63-un#ye~97LvxM*7r;CQtIOe^y$4prG6G7W{6>PbsvXS3`(li zZYqdp*mr2jK&Rs`Pvj^x^Munu+{P0g9Pq(DYK5)0E@t^B)iry(_@_F1{&Rx3lPvCd zXJ@aU{gAAL{Pky6+NTEv#1lE0N0RDXmygH`glt*ASSk2*wUH-%*Wt$Rwl=+w)wMsG zWj=!_O9q)J!eOf_kj-QolsvABA_Q7tq6{%q7A9yr$~lnWLho<<)as+Ln22q4_@qC` z>0P+CeZ=gmuC7oV6TRwt`YQNcyEwUMp~R;eCCE9(6}wm8#fQpM?bSMUrI6ALgQ!vk z?mC_|GI-%dpnsU*9ER}34H5NFI3dMo?OIQI?X!rN6KxS{R#%|{*Q1Xsd{e47uzPt;F zAkpoY7Q@Zci)}~OO<$vY{O}G2Ey)p0U!TE2^xdD6K=kPdR=|*p8Hg^`l+WywMlWIf zEI||{{SnNYyXTP#++CWN{aQL&#WijXf-8||`5aMB_sy~!H%fRZ_UezslTid#hLAQy zPW`UhtkfV)oB?u>o2|T?^8P+H_lJ$H5vJAQZLY(L41g1f7z-6@j5Y^Gj4~XQD@ujx zST$b<>@Xz=L8L-KKkmLoE_BIW0pcnH7}w-Vkf#MYTo2y?IGPK!9A{e6kL&ZsMIQ3w zde7zZdh?@!|G$r9K%xi&i&Iz?;;NwpNqm6LKRV5WKD?vI0+#v*dJb8@KVCX(Kt?5Z zDqB{MXMw+TB*gm3AG%=zw?^wBR%4Pt?*sA%aL20Xl>afK13>j2ND4>?VFen%9r@mj z2;bONhd}dgh|m}mXfA+$J_}ePk_HtTXOsk*8{bd9yS5b3wa$amz5CnmA)2IF8}bfV zu>jyfB7F+T?5HjgigafJ9<#Uj90gDL6GjzwbV0O$gWkg;$}PJFU^w!XALDLJXE8mG zPT)lh6&%*%8_x5(19WX4vfo8NFNAx=` z;1}&;<2o(KPC_C21)Y$_^4%Dg;#D-zh_ zpdZ|NX?FdQ-_e1r;L6fQR`Bk<8r6sf*<18jU-D(j*cJ4N=jLUZYm5%ixuS=ys{3&T zh?Aj+php9^)n`|Su;5{?tG~Bc;qGw<8#z8^@!U59$4M{)^T4kevUrQZ$3y~&h$ASQ8xjFy!?8WstRt*lz~->EVQ zLvZFn-B%OD`A_=?XlOWyjM)y~LQy%5ZY*-XA1b(5KE_X`9<<%w90cD2PDiTXLn?#@ zbR-hH48Bnw>(JY$xN^*tmMXmMTJCK=es3to6A zZ+ad#nK71e3HTh`Rl%S9t`7TD?L4euEZ`R@SBt)@#Eop@DGv+pfuxZbixa!WagvS@g%ik+TwEEsE8hMl?0N8D#6v={KjyN8G>_G6r^Lnu#YdEG_i1Pt~L&+SN|6mm>#r?IN*`I*0h1E2(0hbB=XDLtlLS=C9)^OG^Evm2Hmeb+|k>DSAyH zn1)9BLIG@(e*n)qU~T7>YfSr78nz?cjs1+M#O5`|*sN&q+l+1?8OM*2?c)h;ZOO)^ z5p6^f0W0`Y5#st*3G#p)eGa=lhowWur*Wg9B=zlbb_)xEXY-YGu3EG^OIxLRwmql) ztT5{i0_Ub>9KNvA{q<~@n;wCn4u7TU-tSdkzhSyPyez7mntrS+U4+}YwQkdt-~g@31~mF z5$DqN^eCKL$ck2m;`S~)Lv#_;>X!_1E%~l{s&pqm3GBn@`bz#sg%xX`oN<`yb%ZLL zR`1K-@AZmV%Ua!8mbeSTW>pa9ECp$v{%NmUl{t#2Om;aVg=OzSOYR;cRC*vLmJ2zF+^(f_R#v_=Sy8-e_X z_!`-;Cu~WD?qnLnaBTn<}-u;Jt zSL|TaZ%8jrC$(q&`MSQwtFcYg91pZL4W7{zE56N&GNO?V(F%MsS$DY1JQws-sCnZk zj}yEa3xxt&8lyDC;onpp;kWw$ZQ+>1iz?_N!*{P89U40~7|FB9vd^8FQ^J!6g|0m& zZ9%VRQ_2A5RhBCAX$=X7drF((4~M$?SSx!PW*T>n3NiD2Og8Wb;Ws@i!;X3bxbP$B zPw;L8bSgg3{H$0$SaDU3mVW#5mN+|@{;_=zef!1vxEdrjE-AJrVT14;sq7M&_|q5R zSM2Os5esl~eEVnuc=DB~;%X|hId+c3dl-Z9;9s(6 zi}gFP!eapqbqB=&|L7McFcCal5kiC{Sp9V#|5u}31@Z=itToBW-UDCwtW?~jX_L2+ z2~5A?IGNaq?ddI7Z#30B;8boh^f`rp(Pe>@qFJ|;2rG9M zDl~=?V0F;bq6&2P0lV&~*P@_g#ETtZx_|cr)M9bcs1QgwqbyZ6k}MNnVAD z^=yq%4#hkm7^nfkV0YGr{I*PlW+uPoPcly880fQ*CMPs1o~XMnP&t*d&+C9%TAbnf z0?q(DoxEHe&;BY!Z?V4216J?9lx)qi;*z<^dQQ0)W7-e${Q2KPZu$D7$^CBcbTeT1 z5wR2@vlp*8y4-fO6S$3kmt1~;MYbSVn-BIS7h7;X*u*(`RnN>(BDy?t*5vGD*p=9@ ztx7vg`^kNgqFCHtj9$3b2F@wG7E)&FQ#mMEQ-G}KQleKe6d+>TkBtbOB$BpfQ@9%0 z6tf_vsLr%=i@Y*Nh3O&Oq!EJz8o1MT=r6n%880) zUEi%HBfNXBA21LZui=Y}{VYLG+}rz2iMn|TvE^_FOnH|7k)mB^MKJTbt0j{FWy;q6 z1B*4yNkahyJ6JVVzQfyMpTgtgj>0!n}e!cU{5pMQHJON*u+QinK7f_1*ss#clyN1r6yF3a}% z*K%o>wLg4qwar8c2U&FAWB5()x?R}%&Wf1ED=_d9+PezaWZG|tb<_3Zv&~;vtwDt@ zdd&AC=df0UG=fga<#`ptYiZ6aPHGADNM0U&P8Z{GRvqH{_%{5|3Y?YO3X*#;SgHfU zPq>`VA+7z|EItBm+^%4uDw@x>Nv@579!qp?Wj>6T<F&G~(Z8}NQr`WM@ z%b+tcojJ0a5;Rvz*1mhLR#&Qh6M%DU1JI-A5lKxgjs3?bKir68EDi|JhQ5JvZJ>uK z6kl#^UjWXl7Kc=9|0~I&`R0VFUY3u_d1DsR>Jay|Rj~tZHaOS4w-pGW`6nLF1rNW3 z&di74WO0IPuZYC9=`!MpG~X{74Sm2MU;`gpa$Kb5BwVQIDH%UO=F4v;iRo@&^3KBr z){jcdXS3Z^qhpX0-9ap1allzUT6iZpP|G0_Mu@JDQA?)@eke@nQ~4HkjaVN)rWzLn z7TqTSW#XbW49?OiZ!z`oGLeOP6E5}bisH}C@{pRD1$t3Mh<{VqqA99lo?bWm9m$Dl zDK*24zJ~*9c>srQ@R=f}*i-KeCYS`rM7_6$#MReG#Z26O^}>t zKSvlI+R}ji{Bb)brqmb9%}Y-eZI)v#3;HU ziA^A|^6SN5{;{;guc`aKJiV z!5vT=|51z~1SqwsM_bGV`FQ*h4FQ-#(fv zRI;(Pw`NUdaK=(B*w8|9{@wHE7fPrvCr>Gr?x6WCAa(G~QQlb|)V{xFi$7Bg+nby& zq3w4~E-zv^jcZjkHK*(A<>*k)bsemzL*|nOsWwCT?r0s0{nLEL>Ml!d+^Yp<&=I?{ zG6LU4@`*X>1IQoD(y2Q=uNPI>pM=?UMcc#@^I%VrM_$T%L0QA{lXk8#b!eK~SIr|I zFRsT#%gk>1pnu*I|3BwvayTGyHD4J z(SHSZ-UEey&jDgo)`fb_7iAE83(~x30OBDMW?T3_Og0~V-;1Pn$!5zj=#7p&pl?}8 zCi2r-kt-4WGo!{xCWzSd4`G*ieeJdXZ39*KnDJu3_`uwE8G9i};c;~fYEV&h_(92N zWXoPH3s^Y<@US$kr5oR@yWFfF7=%&{c6~KYN%dSX{l=rzc7+=9v%HoJ?d+j4zXBHC zj=WF4P`l*yjdd`9)LV6?GHSpdZ^H7An%wNh!MEpqKpIcv+Sf@lsT#?;Vc*;9Gou%o zwb7DP|M_tWE={olH6R2}v41U@t3ek0HW<1Mov6?f-+V9k8lP8d z%U&M?4{cdZlzQ-kb!;YFr!Oc8rtn|2*IWvvR{r5{J=UA(5C}#O0qzWzTgVl%i!&1X z@GhgCD(bKU7yJ+{fp^{ozLEQwDOK{pXTdMS)O#AhwB8n8H?wWmv+2-yPyYYfY}LX1 z^8KBIz%Y2Vi~fAmCg@@!?^#HsZWvewJyq}^8I~q|Vv2I>z@~~{0~`Z|W(;Tv$-q9w zETM44f;vRFQwG*&yTHB&fCR^P-H|#F@9N$H?PVC5(e+<;GM(#n(U4 z0E{~ln~7w@mI09G?hn?e9QKWh>L31uG-VjsI`-Ks5?a21N1@?fhIx>m=vlr-dq-<= zbLa_xZ_@LMCp;0V&eNv~!2y(kD$EQdILbk!IqnWoZ7Z_&hCg=DIFc|oAQ&Nej1?xW zAnSf1!KX2JeYTjF9*i2`oX|(8`rILGV+2OdM-v>ydWGP6y-H3nqpPZ7>*aoP14X{c zj*5P~;po*Ekvk4nUlxty8_Q!$9)z;&g)Wbxolw%vaj9&9oqy<6TGoNUgDe(B|M!sx zyDdpt&d}h^g6J6{f$y6vV&YY#8(u-El)U17s5}NX>iGiA)p?(+mL#hfwYr40ATy%8FXY)SbKc%Xe+z%t< z0B;}wdBxG^H)m}w2&)}!NBj8E^3vSzTF-`(Q)iutjgozFGhr{I0<~tVi2Vd->U$T z+YRX?F;?Ls?2YG35S}Y8)GF!dc_?{xOM01^^^&5cEnz;^DtQ+A=9SUkm8++0cV0X* z;kOcCU0&Jh*3+2=v(gXlYQHQMR12Cf2TocK0$pqqr4PHwIdF7t( zcJ;`XUxrWD&)eNCKa)|QC4lt{7BFoI`cmYwKYE#5|3!w0JHFWUr;5+-9^bdi^|S3( zfP}#y7kC@ppWyE7;4FhmoxTog%cuz4Ci9Fi!;eNq5^v=E=QwYoC~gIU4hbLjqP}Mc zafj!vHVbEZg^^TVC96oWpW}{_X_bg~HlDy?*heZ;!#084 z=L(Wv^SJ>}`s2=evedP&H8lGn?7Q%XEOIpNVtAc+mjlAc zCEZtXk5y2d)YQE>;tuV*r0A3@Uh()fG#yd;d$weccTKHyiD# z^gJjBxyH*1Pz67crUq0m=GBHm=a5qrANp>PvV=!dS1jM#`Iuq$cEVKW)jLO=luy*& z&)uK#x7!JAeoI7lxZT7xd5PJ-rJ z>#>2y;e6|O$l*S<90m~O3<&>KEnh0pG}ZHXd!uSgOF}`IJ>qVr2l|y_T)4>8d*~AB z(Gd`fqw}m9JO*IUUAt;FFg@>h^vJN>9L3J3$jf6qzUgg|+VG>c z!uJClL;3oZ$F5Am_miN*JJKBBde?*GH(B};n89>OB3zTEJ`8&eo5G%iZg6P7i{4J# z%}$#ZhWXM1)~>fM1s6NQScgMF9>} zzFL-sdU8|;+l+0ZMiMBv@X6xk9AYyW^dN_8B3b4Ab<;%je_G#{+7&QNwW){u@-ZK% zP6(hkhqlM!mS{IlnDsl7;{qKDM{-AgpOU7SZ}IjN$Lo@ev@#KF^Y>CBuzK?~#?rkN zAnRU?DKIg3ntxttu4;~{A8W7XjHiqi55L+iA9@p{U7wU3G{;P{?H17fnp}-Wly=muPT04$WesB=i+~0 z_HN{r#ZvZ@_<;>IR0l!wft4Hw8`y9_2puD(x^9(!G^prAt1r{2eCn?;Sd$1NB5d-) zWP8+vjkeE8|Lm}Vurk{aLXUq{hwM&ZqWg6jr=zG-K(L0)D)}&>UgFpJAER5_<%E?; zj@^B18`?Pfap7&&>Njzf5LXz3L$`qm%t$&Slm3*+eJ;&; zdq7#OW1j5M5W5QhBc;60bf)1sMfA)pvtIX-vmq-iUruq@FCC&0;g~i2yWQn~a-qld znQ*}U*mqUpVI2i66LG4oB~D;eg-q>p-`SaWhTos@3?i}7*2bhdFBx=udexC@B~s-$ zs#geY5n08YJq@+w+q9HKnLqWJ5B)oYvItjt;L0#+`a0Oo+N4SWMky?+-pqBp{!n{% z3wD+T^zN2sgrc~j!C-r(yA%#(NMjQH`Ofu$iQHBU{g9pfk<*_qWK1DNV&K+A; zz0DQct;^;+9zz$|tOAi{!J^yj%SLoD?vAOBn^>WQWR=&)pn{4XmwMXPmSWFfi4yPlGTg$fbTBr!YQ7@|P7C`*7-An?*tWvkdKWzFhP_D#Ujj zetzA+xsXVp22nAW5IHfIaQ}63HpectzbG9Lo+}(!AhOjuy3-qr=t{*#3j#m=zwcD% zn$51O-U7}Ug$HCM#Y28FMPXoSwZqFpSUCi|+=6IeOBo?nYm#B_piRN?q?4nyl-+o>de)ld z-{dhwT2aH%+C}g7hRDbp3jDmvMQP9&O<4l-&~Lz+S(>U8vfMc&z=?84_EVRhR8Wsq zeD@xwjjzRfVZ$jy%(JQ(&_{{f>7@Y*6ZOs1pGABC3{BcGsD06(p{^EQlNEA=>Rs8QhKp+X{{Zg^phGUaqAsiIqjEa{&ddN~ZC2`j?TD*WB=O3YT;V@P$0Nhw)XAV;rRqx{Ztpe!7u3h{Qf{@@!1lQyzzd^=pD5J+?A|PSUEEN^aLwm3;b5YOi}kF z+3HXqc(d4m96BPn*I&+Z5yu2$}GJ< zrYv~bQGhRbc7(Kf*bd`VQmXv}t2d8%jSBn?E4WJd8ALfk~6bh&lA(1Sw)s=++&-OlKM6*MPhR6M>mE6?9FDm~w9*!#Mml$Gn{u~YU!!)`p>-S|^S z3eSeuen%BaU|apcnac#Zg^nF{sig>E4?N&6+a>R2%`av@zM4uX^$h!>8zk}3jLLRS@#V@%8?-W6o{DU>(N%;^y&`bfl9p)^J(^&_zJ@Hj*#k~Ps z(}olJ0&Ht9M1z*yJr!L;GDSN#CvD*vs`r^cPOk

(Nt_Ha%~4=X;NPrH(1<~v$X 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 agV_9?QM0c{X^+IfkNx4}w&gb7N&g4ByJ_|S diff --git a/public/images/keyless/keyless-toast.png b/public/images/keyless/keyless-toast.png new file mode 100644 index 0000000000000000000000000000000000000000..e55e21cc8d024c1fa664e28b2790e48092ad380b GIT binary patch literal 392220 zcmZs>2RNJ2+dpoPQi>KeTf4RQmJW)lRch2$YVSQmYpcQ9M?D1Q@qCfAMD>+tLjU!|VScuP}}eyQ7V*pEztTcSh;2pT41^f9~VCMLfpW%pp#0zFQb}|?-29-=ERZChjeRafU!Z7 zn>K_38EiIKP?xX;|1*{S^fE1DH9uS{(vt6XAcdMF^C~7^_1@h->pngpY}x!RH}1V| zFFBVDq|zG^cKR$%^zG-dI3U)D8-db@0>`KaBT!uXPrc-ZG9l&TjqLla_lTm2aY?H2 z`6ASV&_ApG7B|JWV65qhx9Q5AC>Pc7cd^cK^rmLSSgiLC;H&OY@yI`G{}#ZIxKY_{ z`RSjHaZ=DVOz9Twnq%j`>Ee6Tl?(THuCmKE3lp;i*%PuV6VxHUNP6z+d`hN;gvjMIb zL^T6tM9mcI5PL%`D+XLB&_4ty*$d;g$qHd<^$*3*vxixO0!hX=LzZC~rh2v2)`=D8P-JI9; zp9JjiHziOUQ)ucaoZKQ3mpjr~yt4#H(44~!&9}4OxL}ful`p7*(C)L2QSIlj&&~t& za-`UykjjHJH;|@*4e6l+Av*q${x9DEWdrG6>mcw70>mA1NWf&BasRoMlK6InsC*-x ziidAueg@x2<(<+?$kc#rs_a?%{`aa&V+H{~8fR zz}OQIrU<5y7IhR}tUT&vkfU{^jJB{-)d;!ZukMFp^P(I%vmnSR9YvtnqkUy6BEhfX zv%>@)F)u-)RYM$U4dRcEKpKCChfOz-cLt3*gUAx=d0o7cX1!X=w$x+-)?6@K)m}cB zsu~5Ym~_4H)1QYjw*VwWNz@$*W~_%3&2rf;AY1O*d&juR*}kYg*N1^61f>2f8_+#< zuKy=Q{=;_wnse}-7bb3`;4mdKol4U6 zhZ?zUFN+jTBK54J8~ndxTR*@yphTp#5@!*F=!SDj=D2VkAhGW6=#IA>1PBCq2PYs; zRvZl;V{`^uS7chKNsER|=`qse!G?YjFOiEI*2@Ga>tTfoYj>iqc;)4S>JOZq_V)#w z_CjF9SH`gvjbr)p)DYx-6X=%f#WxuK8pAn7lM|vx&MBjC>VI3Uq}}x1 zhQIWtw2oUw+rZr3ua6`lLB8VjmtBla{jIByBzM_}_64thFmb*ZpH>>^GP*bJYJq-0 z8JI-u7RJ7+h$9^#2+(SugSvr*Pb7aQ1^|JEkXZHtlXm@=SU7l7cIG$kfyYcKp6O>V zUa9ry8QD_(?@J_!=|vQzTAql7!_YEgDgc2GTCdW!)%4OsdP|8C9vu#>M3)4IbG^y` z9YS!+E{U*WBJx}Vdz8yVq<{MpXgZkq{?kdpSTHqkyBrNsRpGB%j$C<#2ZTRi^-WMM zK)7L7@1D~OVvPud)8>FMk-jx5V(Lsb9!=x9fGGr5D>>)GPpmUrDiJt7R+@_gO1dz= zHxXprxFEr4{pM#&Nz2*f*&ibc*uO;qoTqNr-~SaKU@YKDU{N_)1c@Hfk9yblL(d@k zw00r=Z*G*vUn(PayHh7P&eP{Pzu~%zfB>5)tifG$9o1gDyIbhwuIo*S-nCLUgPhGmaF7_$S2!Zf8() zUkHHPG`fVRI}%V$K&APbwTmM~W4W6*G^(uKbW*9B!ugB!?+ULkbXlDM4}2WJY4M z*53u!zj`449$&G8*YPQSH&q%8I^-Jb@SG)F$$!_4&m@hSDJ|o2ADax7J`u=johhy&}~!l{BNLsrJ^)k0R;wu7$rZrlsYM#FmkMZN3Mw)vsJiEd=ib{ z$DzRsC_$n|TJ^P4$Khtz*rH!iEY><2{2s~5KdM($kmQ5+e5b}b`g80fWtI%pN1ROVNB~*Qx z->Lc*ysA!U7#I1AGXar=hg>iKe+iGB_B`o0#c9?BkkTD0UFyS!3a-BilRH6M1?yK{ z3yyA4F8Zztz1<;2bJ!D6@-_9!MGPMeOLG0YG_lYw%l17h{I~7X*B8zaYaEfcnHLxM zyWAtTBjNdCbMmS+>!c^Le>j7Q!spyy)`I9kVz>JjNrC#Cpb;1vayX466%8;ivO4(? zZU4I~^>1$iWO4N7tH2o^^$K6kzS7X?~}O&7qw$M*$oE3iwjeX8&P<|#*E zP*MD4o621)BJb}zXQW`1O(U^b;2K<<^vU~C`|e}mFRIC6*S~8c%RPnM@>HT>3xQ8Z zm{0Xxzc!#+)wB#jYfX<$e-CsH>u435h{cqPC@uXC$J&~7^@1c6V{Xd=VEpMH_@2)& zw2&PA19%7Pf9D6V2yg&)BV^MVhY|!~il0&l5p($^FdKJ(+64=dE5JPLnvA1njmBGI zL%vsb5+3#X_D~Y#e0Cj+51q^eaZ4Oz8ZY$KAaAt#>FY+_MqZn#rrBa^YSZ~TH4WK> zjob;UAH@aqK{1T6Qu1X6R|h=HR>6bL)rA$|cLUY%p=02thC*D2)qx`>=|hHOxGlx9 zz36WzdeQMi`o>}V;(2-!NI!Vp6#X|l1B(OQd_Xo5oGd;~2Pn=7!J`^q0OqyIvs-`2 zY`!>=wJI1Uj>vDHu_zF0_BvD&y z#`oG7B2#?&z~rm2buiNC9`Y3A-{g(^oH-tw%%Wjx)G9uGQTZjfHnlyQJ#inIla&9_ zuvf^kg*}CC_jDHP;|RFzqvwyN!@pF-0qNv~6PV)u#2#%| z-X$D&L%|2gn>3lLo(P{V&7KD@=xy_6_w^GMGAps4Kixn^s)8=c;ydDBXJSQU(D8HS zF}hyxlaV{(QA5R!So`Ta6WBAWU;4^Fna6Dwv5hsUmxxCeMPU6#`E@x}y_Qpmi$pAh4_tnxP@gZ#V>qZWCpF2-3zZ$j%K zeI+7?kgT*^cP#zO=6{j|_XyY|QVF2VUG!4(0od!AyUS^~r=5P{WAK6&9diU}ubs5x zWS=~i4>>B-IjAoTRwv$2&9kdhvh(`QRW=gVt4u~@BJp|fA^SSW0|&J!7ec#twY818 z>+-d2uYivwGhP0R!3iF3pwp9|de<@cUtY;NDq441!zM?TK7Zg#f(V$mcOoAZ8Y_+4 zM~2_iz7@pVO`LOHynwvEr$BhF{}LY@Sk#%Tob<;A`7l8IFA57>#fsAo_x1e3IjOqg z=5qEqTEq}=-Hrd`bi)6=w)YEg*posxkc4H2V{ZMO+8 zxQ`?ptTogkS)ZPSto6K{FbM0DwfIbPy`p^M*?VyT=r%NELnf0zPM8YXH+Xhdbw0V( zEr|U)LEH3!dqU)aoA;gV0A&x3o#oYStXBbcfgO10DiZ(18V4l%Y6a+2(n5ziugPWY}KRIR_0=rU8VoQqW>HLB*vZ*^HigpFbAJl?Zktu^-pNg|kJB?5#))?`8|T6I4cyK=v2%5k-? z5C0C9uZxIX<~j45JA%_2`~@p6I7AKR*ai}~^bPPZ%4*J}tjBVHJuu2&BU@Sve&uWISLZETM$W?Ha5&fxn= zqBzWwk$GC*A4eSGX#JE2WLM7(ts&uNY`Iu}<0(*S?90Dzz) zo5si)g8WS_7j&EB!#>|x`Tb;)iBPYi!7E<%!2V?)1_FXx$>xdO!=D-ON8NT5V_bdg zc8aT85nWY-EaN}B*=V3++l`j2t6WIyZamkci1{pCJsLdbVBD1(m3U;kK`Z51_|oZV z?A_<|xyQtb#GZ=k)4z9d$PxS6DzQZ`qO&qp$?FJ|jG_gl0nlq^3H_-9t`4Rm;b^hgrbifSpUh?Dd zKMXM>oFphVdA}San2#AknuLMFZbZe&+VVieH&N(4e$m3;@tD(5}PuS&Imodqhe2uQrIy z4{+*71T^yx!$lLXYpPaF1sykV#|yft9fD9aIm=%=tCFGC`<}`W28@Yv7=3T}RQD(c zTfP-NCS8BwTQu`9-gA1Qy*giJwN#c=#|A}s(@6J4t!zw961!6H|U$3$#ZY{1JS3Q3Z9@8GztY0(_`OJS6jgmLgj5?159&jiZHuyJ74BFQ4JLiYi3Iy2k&>Nniz_?waWz?8D9W zm26@!;ko;t=aH;BB@bM}km3gj+D!?;Dd<)(!cXpcTq@@!Y&TIgx`u|c4i#zL9hinc zn-04^kAo@0@$I>Y8nSA61S*n(B&UY+MB2;Snf+N16 zMQSoGtK%>8wi$@HBDsjd`|^n(4@*WY7a*}O>taQ)eg{ZA1NZHWR+)xl1CL9-^UqqR zM%NjuP9!aUw~o=3jc331$ZCC^t*)n`r?t1{TLE}4yk&C|Gx5ncP{^5PJKTX4hkI%q zqmSHEW!!X5+Y&)TceVwG}>(IWj4(?5`x^NG)&x<9|d~ z_Mes-cMgJEs9QM#VCUR{)+!?7Q?mq83xQmb%BGtRB5rbTw-!Z$VspDX#f*%ln7(hH zeUsF0y2RMCV&da6TQ75Va3c)&E=7K-{sINxHw9%95u2UM!YR?E6=P!$SzP?~9r(=^ zE;ITjbMhWLh3c2R|G9EsCri>z>+12(jP<*Y6Faxxy!d_ZGh6ET=4IHlTyChEg?3*x ztJO?y#(O`rACKI<6t+(YUbU@0cVCK|lr8jb(wDZnyPY&_uc6cgfqV5bY$@Xo!dQ2x zHzgri^_P%}Qbx>X%&3AxiaELOjdgS!FwtA)m0!1TmC_c@AP@m*rFO2_lJw%X06kV51KwYGELF;R9Hm=)J=PIFOY@z?h+kyx>EE^;EA-nhpoan}LR}=27V<^NO}|YU0yfZDIH5ihq8gca2DO ze)7WFOz$Rtbjc!7Is`Ezgw_AmyvqIU-9MFp%@KY6IHD6!oF1njtK`vo-2m2EP{wt zm!Lzx@Yn%1#3V(ym2v(>cdf+vjAp7v&&7f_oNID>)~}> zE32+Tx>N92Bd_l{?8tp<)gWW|C^!UhtzU2hUL3adar`#6C)GP_Y~x;PwH}9Y@RRG~ zvVD32K{T!PFMh|Z**=fPl3_2BRllhcKTECf|Pk_H8)>H$J)|&s|L0@jqIN3-+O(@%S=6I z-p5IQBnLWuvX_TZKGU!Gtv=Uh6tH?KWNvKnaolW>KpO9b!dXoRMah$ZT)IKK)K7l?z`h-W)XO^~PJyLs`jUh(&+qEcT@nt1S&N!3o&zz+kK7eR=I%J}ThfZ3$Pp6vB3QWJxA^fyYD0X zI+-%=M%Oh|y}SW}D}10++Q)BYH3u~$OC@v_7k(x~Xo9!XBr#I2cfk85K%&fP zu&U%8hM^J0)-HBhM4*_^r|?wgdwcpbKtA=>ddn*UXGx%F%9H&CgX;!flGj-n`bm_T zl9P-z!sukLr@S8>ig{Ie&^{%a^SwFwr=)EHnZq*`6A`XktwEKW6LeO0FgHx!KY5TV zhT~;V(T~&6#pER2FP-APnylh;od9oJJBR1t*q@{Ik#WEp_?(*%|Njp_1I{8c2HFn* z%7o5-0DmNIx(dmRcy>Q+si)N8%bkzn7|eAmB9zt5eC;&F*F;@^8t?Z94eSg3on}1Q z{*cmq$tggmb6nhlA*>=7VbRSKVTV?8@CK*_g!OoWAui>hT%`0^fL(7=echv6QxR~O zZ4k6TakqUw{|)E+_dc9@USX46UwS8GDwg=Va#TPci~)1t*c+rwI_`FVlD(Y{tlfBytQ^m|h*r z7+g{!`$DPHKk4=|XrtTUfS138(sUqeu+~6*Tp<0#&3+-6cPYNuQx$ zsg0hx9Y26I8z1>@7f$dxY3Oo#iR;Mo@*nu&4LrJaz;aY8@#r^J`wN%+Ho-TCt0JNy zrW{#lHxdBfZ*On&JAddH63BI69WbcBtadOI($4PP+5TL;*kP+=D0;L&yFyKFO!G#E zo7+56&; zP)quim!XWNRE;#DZ+K??$x@_wm$8oX*V+@pzyu=2NK?_H!(k zQHONpr?A{&XyxYU{nIMV=dBLUcv-5>PJLptjK_O#l$`r}tE;`8ETqYAr%GzJcgpoa zgm4}>#)!0i?o82QUT%@=+FO6UWET5-FHU7L*geBeHQ+jZfitCpU#ALf(YFKYzE-1) z)}qwF<0P`d#EQ34kL7=D%}V3Krb7+lgAX$Q3N7%tI8O5p2j(1e6hcV$n(@T#xyHq= zEu7Cb`eV*+#MSC%UnRZ9_&vWoWk15gSU>E<0Msso=5S!tJkovR&?nn)n$S6E5oJe{6m0oDt5dg-|4-)lJWufP{84&+pMi+L_~)7=8$h5Ty2isNtdL7AV;aS7l4 zEw)l(rBmsY8Jl0$Vw;~H;=p=ZU&a0Q+ra~!)`KI~V0F&fJ+AayPp0=2uH7M|Km*rW zF7)naZc+Ge^9gXLDK3BUVp1Qc>v4_>b3``UyD;>o^``;}7LR+o$h#w-ZFAqe0<@9e z^gQws|MHKv00qFZ6$brC(pu1@bg_&B2jbkmXm88;FWnAfV$+CE@9{Ty)e{!fatoV6 zUy{1a)o_&IamS6WuU>zmOZbb)=s|NcWa+J}UU)_2`{P9(cgzpt-|-8eu;i5ZOMtVX z_lrwdaJ#Y1{yX^fPns`L2&=pCC%#fO(#MPQ%znwgIg;|i$$Y7)gTgZUvti6@RzG^z zS8XxGmoycbMvK?XX=oi|{U}x6EC*LA&8h2YTI{bo+5(vdWDoO17IK!Z@f~hkf8B5! z-l>-wvP*%eFo@{w2PPwNUK(g4-RVa z3Vr<%2=e;#NU~Iw67CD9|Hj?via|nxV)E0aY+RoL=l$O)_97)dU81cpULq4O#vPuT zum+$421w9fJG9J7;0keXUPH`OB2z5FgFR>9(&a%umYWR@oC#!v!lQ_QeQEy>2IM8z z2PiiMeOJRx+YS5`^50ZGe$(?UqWq51$6x9;yKH<(yCpk_I_dRN)Vnm`YL%q1ox^I$ zspyGUeAb&MOHn3ZUO#$?aPjrq(14xgPIC6=lM%#7!#nRL1U!W!*Qw~Lru=HKX?J59 zwVZ8BETz>j`?vsj0ErIKKoiC+HP;{D1N8f6xz#hGn5~${Fc`{ml`2!pHIeW&kSo zbzlcm8biCRoHCRAxJi{l!FY;`11`<~eqbfu`lr5{+{F10Vv08Wztg#1qUP4IBN}ac40hRRlG}YOrsZ{gq&8@>Rg`l#;m3X|ak%#f%ToSxPpq#q^Htl=C|KWEDgu zf11WA3kR&56E>JrtZEL^VtRo?5RM-B-vJyACVT)7Xx*7ud04w@vs1VQtrSrN5mE-` zzjEZ~BzuzOoQQocYYBor9J6&z_^D)fl5mQ5Bz0gn>*+#)IZ3-I4!oasya0BiZw~%+ z3Ed%oW4kQIO_E784zF$9a6&?wh1G1q;9H01`flDqv5;wH&V&?it!VuQWqo_q{!YLtR`yCjdlkY{taN7}mn`VKiSBUC-kU4GpIRX^FK7IEvyllAu! z$1(BtEkNcWg(d3yPJ2TocwGT1Sgvz4k>bTNnp1`~xB9x9aO4eM4OWs%<}NG*@RbKB z!=FY6ubyDNs1NPGw)kzE#?Sb&>6>17?6sPUNAZC5C;P1kL<*2^JBI?{ow%Vg^>)(h zHQtLq-wxC*YctJzPOqOuV;J@JGKNBC~o}VKAOCN4L58x|p zn$66oqzI&>c|2CNC{cekNEAcA?P)FOW!e)vX2E)?#}8z%3R)lJ*}>T$xhmtSzug<8m}3_>?k zPB7A7I&y<`Nxx~FRM-6Gg~}4=2g27@as9rgMbWa9)%?pEgfu?MM+z*x{*1jvp+C1^ zud{m?>;Z1k+r>Ia+0+c|%b0f1!;ajpUmtSML?p>Bw-Bfd@5_jaTlvRvv?s`j($U8A z-GA2f9(IfPV~WEJ0aoxmji6fX5cJ{9_m!V4q*Xk;Pa7} zKNE}Uz%^VjQp4C!wT_`T>%q%?#`^M+TVj|%O<2%o(71<+PgL;ZAY<$5^p!L2q+}ua zX7hm3j28AX|LXJF;!#t*=WGy}$dwlGijP60h%>E~1lK{!x7PW3J$I4ttp}cI8dZ0| z0h1;U`Aa4x*$0^GL8q~bk#GBSR8p;euo41-znQA(pim3nMrKx&+`_&u zj4$>HoTsNRZdBK&OLr};%$4t4X)YU}`rh{P$SvXdPpLIp`x{IJu*W#hgmp+o!T@{z z+#|2pHzy8#R-OKIX~Wn0Uu3O!G77$5>Y;2gT(8cG8vAHb>uvKKmE^9?VINO>R^YR7 zPNk??Br2^W8H3&+1=#AF^~6W+o249tq0ro_BYpp1I3NP}m^$c~#{%_iMA5U*{+fl{ zk16fHXA43tkFLYTa5Si{Zv~8sE#weC&1=a&-WDdW1j#%>;+jklzn)slZP|LPjPo-F zA1pBcUS7f9wr0y#+|=9%7AZUwS5kLI;;dd6#C>91xKT>=?na(ki`hcGjO^q$e~Znk zlZ^eX0R}fM(Y#J$OCIb`bx-|+rfP2FYHz6DY!$;Ba4ReM1Xb~ycSW^!S+glm*joIw zn%JphY{#X2X&6h^U-rJfGTG}_`@5f(@b<@KAi)Zb#_>+3f*JoWEd4h~fqDSXR=+j) z&?q!f3K%dfAzi)+bfu~hR2gID-e9aSwFY6hgCEvg-3*IF!HH2A zTGW8ycspLO@=I*ynU)yGEU!HzxKaEXIfK6t60zuYGoL%&uduNfc_q{fvqn9QpP z3UPd&F+UaVbpI@SG%4X>oifu`XTDmtn8q3V-WT>w%h^`DLu4+Tny@|oDkyV+(NLyY zQq41`q-Ho7%Zv5zU)bMG(OIIJ?&X+1c5^9v%P78VNO`C9z_GP@L*jrC(ENUih^*Jr zhJAQcUFXr)E>6*(<(4v&Ws>P-Hh$YmxOS)I%ZcLlEd;@V|9mSZI$s;0Xs-{L5+q#waqQ&9%KDFNVJb5M0(t6eGpr8u5cI``N z&0x*mv_;-dO!L(jsro%FzD~gHkD^+A$(cXwEHK~omrXm_=XpO)DLiD~`qQ_0&9wtV zCC?`x47h)|h&BUpmQuc1<;UY6fVdtEK+o1MI0~#LvdloA{UcM>IYvinrZcROD|%(( zp?7J%%_KYi$_m=V6iT<#-v$Tyu<}wqZe)JoWBssg@ggphF3b6bHv(e+@w*zsSySB? zhi8*5xBMznc}%zov9+TMpxtFgk z7@g#oE#4nhHv9H9$Aji{#Uwu(Wn#<)@%{1h+1F3H!xqa}&RO^%2*|qg=0Cv=jsg<` z2|;Rh4l7tnuQs(WHAmvd;gL8u>Cn+Gg;ZVhReQ;vy`?~J+7tdaUyyuXal~00xP3Xt z6r0kbXYQVs`tEEzh|}7=wyU~!el3)pW9$6te;yvc*{*E+RlWJMb9MFy=IQ}#5d{1i z-(TJW7XO^AoitN5pTB-G(AUz+Jo8ECAUSe3Ggi7|+?_1#$6H&>U0Ol^amDqmyt|SGoTZ%jh-F5Ln&$Ps6(*YC3(MJ75F=aa z+J!}e?lvJI7}A)f$_Gpvd8sx4LOC^Ch-K1m9QyW?17SoQs^Fu|%#sEjSbNeo+Ib>I ziqPxTmPzePc$Dlu6q8Ii4M@L19r@=R$t-ndyowB)%lU2qZ=%iYkm6k~Dd<5cenc^A zT}&#GtOjj*XTV0vCRuqh{RR)GU_SS=qN)n=psEnAL`B6(qdO~fTE0~GvW8-0G>bbh zv(}~S#xc*?Nq;C@vD)H`hA2EgZGlH_Txm&9mM5tY%j(~XKsah>ex;*@kA zdRk+e@d2DvRM09PIyR)`y&1=9Oes)0H3sr9>l9rV2;oWqsPl5(J*c0q%1L6hWs)#185r;)S-%@vI6ild4FH)Xl0?fE{2*$j)lzhNV_W|P73 z?%R<^6^*5j#hZQ`te|l9!1*jaOA5se4&rBxXxGI=2Z=`?IDz}G7KgPmS}h70H+Wij z+37QpAj`5o_pOAdJe^GKk7PdBC>-z#PSuQ&>Pui*+3>{m>14m*k}K^8);gQ9o&}6I zXKF}XaHt6>%QQ@8`PKDaW{F#Z5o_XP_LZUZ@A5jI5%YJ3(0qi1rCqtW(ee8IflwNC zj|H@x`9OTrf261}+9-iR%g7}B91P$wLJ5x!aO}qNBdL=5dPVJIy%mE;Z%FNI(`*lD z$P&oBu$W}W8}x+I(v9!*RRw3XzbJ?9bWW2$$MKK{#Fa*FRxuolXT^eHn*juEn{zPd z|5kJVQ``M1>KwlHL$9(3VnK&HXV=Cr&$Fw|X_}}%z5!e5KIIxpy2-$5X}&1tzI}j0 zQJ}hOufTd8>3YwZ_*SA?~BRr5;kd0?nozZUxrC21c)x^fa#wBgT#KT` zs~(JaR0>wv+$UUo+)#9Sf*75OE4c|Dytbmpy*#4UVHh|?G1z>?9m?p(dUhgIkQ|;f z_7vjyvCEUVoi+HS!pqmAg4ZWFRm26b$irL4EvzN0&y3H-rC&wa=}zeA28n4%dNJSz z9y4U@YezPAe;a922%7)+%DuhqCl;eTc2^CD7MRy%i;dxvXxnsoHc3#UYifKL;UR{( z&hY`9ZKhJF1jwxZKPV1RK@-bND3$jpm%E#PY1;0NW)hTq&>=x+x}zc`3FQAs!I1?V z`R60xXOttO8}5XM#%R?0`6?HM7a2|NhbRhqJKSAADA^&-jW3)9@a@xI5A6omt%fxB z8U$PxFD?z_h9AsO?I=N##~(WvAY6eiP}^AR)M>9!eXB|2Dqt6xgk!o7F!KtDCWW-lSX zMk5&Ol(5;VyXhYu=vfz*oaH6&9^PElzVF&XO0R83hrPI*JhqXKd%%6IWdG^o1eRyX zr~Zzo+(t8nCGv=3{D$@YDMR~1l+XB3l;b8TUc0TQy3#N!&ugrNww+$(cUpPrm zq`lKq`7SCj;r>V}7-Ztf5ib_|5E_mPeG_VUkP7A_dlw*@%8efM<}B7g$4#lPac718 z)9QfcgMWA@c!b_w01el-mLA<iw5gSCTmBxVCM1%PI)hH3kS2860yf4)k)3*;{&K zB%Y-)mqt9Ma&{2HwRiOqjAlI4WzOt@#OFpowF$4U@xGN|-e}rsGKXdTjvGd&u06UK z740K4ecZ|+uo=!^bAyeOs%zYy5Por)s2UW+lzkj3)pQh$ZgIcW+gUipYd*?{mXmjK z6JQWamuIWlxK>EERs3&4T>$f-@Gyk0lFZxNE4Sne6$f znNR38p|xuRs!|+jysSP`OuGF{IF@-b^WMY$ZXFpV;3d&=vY+rg1{+lF-4%x|4fK2# z`CRyEe(lo62{|PyWdz4-cKAqi9Iem#^Iy&x2d)Mb2zK2sqf2SH*nzfXca1G?QywmP z3YGlp1Q*FPFy|8i`{a1{1BT7p+@|ksW}Up907)Q~_!?)-#A`-VEspbwAG%5hzj4a$ zzJvSVnX7j5`wJpwVae1id_oIss znju32+cg;(#N%H^Bq%U!Qd>PfVJW>gzf_z5zWVskO5!dDlXA5s~e zqjZQvb1d60TJhTE{ZOe-El1)NQ{>GyOm=b2%SSM)0zgQJ%2NNayIsxXq5D88IJG_+ zvdBFYg!5CqMcbhLWbOPH1IZkLsYTuN;Qed@U~~X=i|blHQ!lh{Z%`e>>D2BKkG12c zYJS@O>Y3w3uie^*4Y(PmMRxvxJ&DSBmuC7{p)jjVe5qEt9k%fZ+=}lu^0&Esncs1h zTxUfktJ8YZaX@oIIbMC7LG_criWk-4bBloB3?7o*z!;OPMeA_ z5W=BLz)Zgbl2%Tw40y_b?1iJZ;dp2H3g@=qgY#dV^Vl>71{PlV_L#YOva+}HUvfyf za{-|Uma55-^f72KZ+zMxRVfo(GXBXMpk7dbJTPcW=#A6arR!hDV*GnTy$-=(oK7ej z#r&v{acr9pux!+x#bFG#!EQMA`dlTL7CAs%p0Zp3UIc5|9%;cYvUYxa>%&}3#0f)P zLs|JPwAMrJ6t1ey^yP})1zT?BiroYC_ZDpIzW?p6*h_P7Y00k0Y3@ap0vPnQQ1GOA zWL&O#z_>7iNo!kQTwY1YtRwIR)?r`oKwK5@Bf|oxv zd83l`Sjy{#eOVCX9vRIs9$Ds-!;X13nm#XTd!8mXXUOSZ#D3cvvMCdJ-PJCYXD9ZV z4WHw5Ce(3*0hSS#Q8Kp@Ash5^Ng1YB$sLThLcpDUP}+n}782)>E%ie$aaKKh z#x9vsw*@SQSs%y#A)Whclv4{b^&ZX`@7eaX>)x=a}FWbWZMJ)N%nMYs{!zPVoIiPn@e~eU-O4B- z&B}emo?MUxe(ppfxvMl?1PK=wBCx8v&0Rq~;&sv=d{G20FuQa6A$U-AZ^zt`W`poN zudmsQE$Ipc1^GLLG^KZ>&&NI4OA;=(Ljt6BE!Z_eYle6h3xbG}pO{8|>&r?~X=P+n zB#DwtstE((w(MNWzb&r4YQBrJNGau2S^LhrO+jlXq7urw8WQCb2j;7bbXS<2d`L~# zO-FTy$3%jaK!Ynyn0kD6o2Qc{HU}t*?LGSB40L5sJ}YVh#DK#WDNA{@8LPBFKJ7mg zTbJNcfyPlv7;ddX{9YaAfa{NGGvp&gH*C^eIj#GD-PT&iQ>&M?yvLc)hl>b`?ypXCh@_UYRs@$V7C!o|EXzReuF}2>|NiOosp+Zi<X7{l4wse#*A#je+m@`Khe>r1#n+ zEjbV>&l3*qnlSI38x-x@0q2^{!9pN)UmZ0N*>!KojJ7`=tlT~z7dc7hQ*TzEzWNK6?112}MZ3*~2vFW*g zcsBSwn4mfYPIM&!23kqoGRNGLy?jR{tXP2$z`B4w&P=Ol-eV0(x6quEWro~_KjG?O zp$vpm8PfvGIbH=@W5CTz{oJ|Q_Tsz|Br`5MeZ26ucffJouQgLoOL68wXMl0~J9$B) zdC(p%^-+tN__T=C97pCJ9!`1Y7!f)(O#?k6qqunBSHq(F1Z7O>?}2#6vhaF{Oz6=} z8;KyX59`2-^$F#VhqI>pg|-pn!YGbrm~`|?#9|GX-hNA}F@t#@WJp#wv&q79*M&ma z(twOx50gDLP*cYXR-dLWQ6Xnspy#xU7#VZckx|`Ct?gvL`9S4C^MvJ^_V+c7SA?QR z$fyuots;@zSuRr8~Fm6UU>zGn9p?c&~R<2mL8y1Fj`G^AefeP6c|&7 z-(*v?C6k-DzoJT!%egt>rEyG8h^}&Hdoe&M9+%*7BvibY$L-1YjqjNpK%B+$(RzcM z_6oqT;QJ5p1`UF+{)89V6IRo^Lem0PXfGQvzhte#(VY#OMLU!EQK(}PCF)Q=sFvgw zPQU}G)9O2B!o}b3I7GE@K>Igd2-N-BCt+J8G^n|)Y-jtvO?fqV_Z%}lK2CT|iS9p{v4WzLmR6Yv%|DtJzK(O zmQvZUv2HnC*ZH0M4he+gh3w@|cE*9^Ub8mSbOeSQE-oQ%XzvFWR;%2SO2FRbf1bws zuTP*6C{yNcBHSLAXC0+do=Lc%nUj+Y!7XCxjkFKb zvThw*85E_atZI>aQQ1!gi(u!e1=0m^51Tgl)AbK)o56|O+_v75=a`OUH@1)mrgPw> z#QRn`3o4(PI#+*5L=v?=eWhy^7_l-hin0i5muz<0a|ogdjhvbu>4SgnCm$db4EV$5 zYZqj|-vtX~vSTs&5$x~n6N1$0mILRtRjf1D_K=@<>+^@DnT|9DdiGjCE)S;X(m%AP z3w|*_lS~sgX^eZA*2=TO()as1`OW5^QoO50c|F#5rzaG0pAD?~y{;*Fbdu-&J;6)x zt~e7kKdidxP=8&m)p4xUJ)Bzu)B2SYh(ff@X~VsuR^gH|oT1_s%^BpFgQq0}QSZqu zz6xxW9(mbB?Q|_aO$$C4%q1&g#pU_ky)kR0%SZ_@XC*gM;Lu+&U6^r0fdRI>^7*P4 ztxd}e2yB|(|2+@+-}b0k2kWk`$ODC9NfdTJkruCbLMaJ1M^|nFZHYq535Ajl^LHYh zOzQFRO7G`LEfcYPsdJ1WP7aI2w}!8qwX5p>t*Y8=(wBp=Svq#WA9Vc>6 zIsYK`PV1|C?&y!^`qcTN%=Ee>7$0cCv|zpxc{ z!MizIr}9n9wDo-(7YUBL*z<2DokC{Ojg8oF+T!2l_#VJ6=;_y#m^;ZWR8(XfFtwE* z>92%K|Aw7e4``@~5g9;fjHV~!P5%@GqrS{QCMbGDz&s!*LB{|#mV zd!Z~;*wh}Xi3Uoc%FdJ0ht`RtO|48FX;*oaahUZgW0@$cPH-tJ_eNpRfd_y35&4Ks zTd+0arThTiagd3a&E@;6yd`@{`ME&YIjv!#+7P<2gK zi;{lzBckU?6h$MuWty=}2G0aOt<;!C_UmKEmp{#LrL6fLr@Uh5Fk@ zAnANMjyIKvKhBWW&3A&kAATwg$&=;>mpX6Erv?|2I!m8mJCg_(G`WZob9 zZe#bN^h-?pm+L0gXKnx7KXYblwyWe51EdmFnU~xFD?rmXRLIZVwL!FFpO=KE1pRi+ z?`h~;cBC%>HP;aoMSapEmUB8Jk5+hqJDc8nVTkW6U@^+b9n3aUH&U_k9Iz(jwPLrF zd_x1jdrk@A;AsI?Tz9f5{mNh&DDE`XntbmfPyw&qm6R%m|DJ1;8vI;inDM)#hJxTF znAOCjk;v)b#=2KQ+MOR*F&2Ke&f&)Y!b6u}xx^ z*>~Q((g`aR2eoii#b)=rRrZfh3TwyUvp&7k)5HirbD!*37ntPeA(5gLz zMc}MAj<8sqYWAeyA(4_yYH!w3+-O?^s%ud6jSljvPIq>=P$AD&*d(|RqqkRd8Lj@y zD#Aj;TDqSi$#8Yx_Tt)g)g_D_t2dvxMDKq9RNhYBjvH8HGWMw+tv?M7{`pZrfgb`_ zHwoOt%C%hdG$FxtqshVhJm{{gLeg?RQ%4@qy$2LHH0C;-^2no)y*wG(=@|Sh*dM8n zFx5l!y6wSyzdhtJ%TqoiTX&mcp4A1EN}gqP;LdBwxiF9sIOOMf<#TrT7}c))%(3@k z(ei+N`{sGFfx-8yS(q#5-Y$oN_p-PiYy;{fk-jOoG{sEV7Ie>C)SSPCm%Lny$jR6*=@iX}O<)WLW zlwefoSd7j$BwWDIA?9IYjh5)Ghk)*(KmoOzb3aY+pm$5+rR<}%L&WZe zGqZr>7Df3u@TZGygu{%w7jMPzQ*~t|k!QdJ@KT!RnSrB`{C|y|0|o#D5s)#kbbj!n ze=Kmv#xK&sru~KS**Ok~H4Dx-gAswi&%W&kW?NXb5}k;EGl8&!Znr4<9Hw!!6Q-cG`>_EHVh>jO>CZ`| z$aW$&Pl6Y+*$GlNUm9OY#8&faU67vU!j4jSUX5vHWs&7}7|<>3FJP3(pHe?@T2QaW zxSlqWQ8ZcbH%4q<=?fVQ`Y8Lt&!!<`>@D{5Ws4-@D1zGFi&J$l=qg@hd?Q039jbP$ zx?p-}S@2r&5f!(vLgx|W=y<9|L!FGXmd{z147)T&+Z>wbFpt4nybbXyRBUbGH{GIe zR0?fe!^I^+R`AFqjr9E`%WeHqUGkE2>df;aZvM++@~pw3HxmE0VqL>ntT042qE2)l zz|DYAn-x#bow=U}d^OrEy1Y2fJ^=n1;rrhpbaCUHvJLk}6V&}#pNyvV_L)D>GF>~_uhd?fG7^Ji$=4ePCbIl>!%v%0~*qh*|-+nn|LmF^Z( zup=3c;C>$JW!vN1Col|nZvj7MkJW5@Q#VT-EXBBgu~vagvqt3d#+_mefL`0Sn{34~ zNj%tL3ILCD{kdN&+Qw)SaVM1lEhEt6fq38v`D14Cox?Yl;(7K-F8h`@Pcdcx7iCOB zAVFX1xY4d7(1pXol1Nv@{9+$qkvzR@U{cjHmeg$>V(E0b=GdW|AguPFuTn9z`?Sn) zFZBJ8Z_+}G;hefs!Qug#xiPmzgG#9Bak$PB52y8>w7xG4Bk+4yO=?E+(l3gUR&$PU z+cv2f=OW>n43Y{*<`Z~#uzbeJJd0(x#V|Y0P~q(^FoEu%{kz=$hS<5kXV1&brn%^H zO&AN@4Hy|>$e^Za^vF@8cit-kPI3Gf^AAH@Q6YeM;2YV0I{d56ZQj9?fO-y)fS}NN zDx;^HXy3EJem@RYceOw~$^iAtpK?mRM*8^Gr$4_Hn4{%Gtra+1V7^{=pBlYS%o*^& z`zAnRXH8pxWiAH_)pER?rL0%|5%YA#+&h@2B?K=$P}7f8v#1r!lCJ5hF$n?x0P&_x*kB)&6q- zkaI5Jaen4^bSL@4aVFb1#&RA_7h$oH>k<%LB8}vZ>9*aA4l71A*hE1;P1z@qIqEs5 ztaXCO3`$7c;I^6H^AukNm73m@^ig94)jX=5J=F;P_Vgu6zL3Q5x~dARBR6vo9(GWJ z>h!r4T=pLwX_tjZLj8VcmT7vvbLrVj9gP!8FhIoSE$6=Vh0Red+?Vem?%t@arG*#J z?Q*@V9HXp!Q;LtDfv=XMucxm9VY3=}dU`@*|KF?N!%~}v@N355SF!ek_0`M$`?HmO zYnublskNUr54X3spC~#!PHuljeoRmz^3H_WYdGjK)s+sG?oz=Rq%dySONpkNW96d$;&(_Fiy!eq?Wix3bhw zC6>e#^!Fqi))SSIlU8pkf0J7@SZVi35u$$NFB zUIJdH;8-sj8UD{DS8%#6=5^53>G!bK^$@@EaJpo4?OYbBC!j!}TX-Z$@~Hx`gne2k ze<3PI^XjnI(2Ud*5GGr2%eChpnvMEV=3vN>Z#gleDrde?G$Xx^;*_mACfDfUSYbXv zd}}h>V@lh@`^PqxS0GoJ7b18HeZN4K77N`5+2+O+TDa&Cbx4y)HizK4NzqYC30XW~ z5t1|E^+dXLA~aqUQHsEYxWMl+ef)G_q5uIrfTIp_MX1(a(nyai4EWU?Nmm5L#lI3# zs1d8gVyyf6+ueerfZ>B5n7KbP4Qs|Q&V}90(71`bMd5Sd#?*^??1o7P!jwzi@i*=i z$`zECho$cF;TOLmrRX4I6!AwTg%fM7s@H0D%I|DE3cSSu|M9qph5Y{AI9A?qHMo4d zJbJ8O!Ny@SdjW1*ae5u@^txDkDbU*5?J1tJrCiO_-jQh^&yxOHDC{=s5Z{Qo%cnhz zgcqD5vMVIU?RG+la4R-w$*i&a(Ms%U33P7WbB|iKTE?^#&VFKiJNM0ng2`hb%ewvz znU{94+B``f6aADr!R?bB2$IwHt%2A!!o`lT-+J@WiX=^~B07(ommJRaQjm0b;O z;1IK*G1M)TJA?svUnrk|k{jUf?|-u&byUt4(o3mLPd_+N-dkF#ic#%+lJDNKT!`_5 zvd7tEeDO&^2>D<$*{%_?f2R72an35dy`5f9zQ zN&;@Y1n>Gir@uwUvrQG<>=oW?^~Jq3C%CFs&H=(Aby|${Xk@yHwf<%eV9R5zPcQ?= zBML$Klu651ah#XQ&ik|Wo!oW+I4NNjE#f@7n5sl*fZ@^WXDDqjA;V$#IXG~JEEQLO z(MpF?l?opXP=jy&p+o#9N<%s{(5*af+9_*>zD@i<4M?r;-0VTQ`qD*m#=m}ezpm-_ zsd&zd&cglx@@%=D4=*u+#HwW@E6VV_!BToCxD5Fc#AF<~^>mNackU5B&bBJV7-poWFSh1|NR?l2yIA% zdENtek8=7HXpfcZ5+)0lGmvPuGbmjv_Xri6Y*+f%-nXVtfazPrzF@lfvi9yFvDMaF zfLVLa$F{A|o9*+Xl#oR}Xg}oznZe*q)+c59BjAxEx_Wv?tkoVzR)Ewtl@vFEF*w%xR$Q8V#|`GQLzfV1r^YanU+>yf8hcij|I#{wRqiT0Af? zP$-`#{&^SS4+HcT2P~k8BZ-b5IsRu!+wpq}wud zBp%KR>jHD12PE~HAAr7na1y}kpU{KdSI%G($Uhz%TSrK~Y(Eo>n4*H!@>GINT3W!* zCoxA5PSDUr_r=@Gh4N3oOq~x!P`0<8a7$?@sWU`yN*o&T7&xF>X-YL+IcxSagz385 zastUB7&2XpV;`gf@hU$;M%t1#hlpokCTZ~@O?owz z<^ANTd^|be^R9OVY{q>K&x)Do_?co{V>7aIU|><72csS^t6|y%@gY-r{JU>!N8veh zTkXH!yE7Q0*hTMVI@s5GT{9oL#d?2g_aJaTqn2t|q+?Cf^g&JRap;m|KyVyC7$hZf z@*(CRHa@5V`K_ea47b75bJ{6Z`o4Tv0h>VW6X% zUki%?0^s#cjTFQ-J@dsDDN=_gENXXv^h6YIePnZWhHjT{j}$8r6`pq-BrN?2bFcLf zmX&&zD80`iqLrgq_VxPDC52$He9a-c!yq!4=sP z6geE6cShVB^D-Y-$NyDRfgXV!+8Ho#4WU4G-ca`AY`HSlZG<4ANIxRIeMXFB;3$xiBF^b*yV$@ic{8(0xBd}=OGAl5;k zg0R-}C=iUls*A{47$p;&`AvDVK`d8|=5t%p4v5ob!lz}y{HfUl=kUq*w(ePP!4As) z;2Sx9d$5|c_`dy+0HSNjrVqen*duXGW!2*3m}2G{TGg~OgtKeA?DlCK)D}-J_LdW( zmd<7AdA^!!-e{3&Hxgy9Ch8|-_i;;3We8+zV_~XH>@_1xJ5b|+Ya}IqK6dtepd)Q$ z(mMT;kx?>K#Zi?)|z&6)_jp;i6JB0a!+6e4M(sXg$W)d(l|Wq=Btj)kA8nSkN5 zwcj^_aGEk8B)82d^_fj4g+dvmhG<;T4-F4n5fl2jqp||>9KObQiL`vqrX+`$!5TB6=bR2;eMp?jH)91>jX8bYF4|AV4jNT;*dbReSr#f<5{#` zT`+RN%~;gt-_zB`qY1*}mAkDab?yp6NbmkcmYe9->De0q;^*u0gzbB_;x&}Uy%e(}%jZ}QHVMT#lMog7Np1C-xu?eiVSXd9;vu1|t z8yl-?iD(}G1kZ!Zmg&dYmfxz-_ECrBZafN!GEels=(2$+LCQ8n0cIci-G55HVtf4Jb2Vl5gt>@Jx<~hQztPt*ld!vj1GKa zn4*yIL^FWz@X3vg=9zGfmf9!*s7;pOjBG=CQNg8F-fY|#xZvk#b z*|y7~J%8@;Xrv>JyL@ARXcfHu(|x4fC`8&S^Ufgm21n7z#}hn+lsGLnu&mH-{f=+t z)KXT+{K5P72}_4I)Q`AL*06i|Q~2Ax+n|fU>jIT}VEbzxkZNAiOs5f!q)na1vZa#q zZ@vr)O--p^eoe3PL1R~{F{l7kk&*U?W5W!BNAUimlCe9x?BaX*7=l@ z)pKe7Dx(z_46$<%v|SFHzm z^1jGUxb{EWRbAwbZsRcvuO>k@eRZJ5g5FOu=mTVaZ`uopz~WyjDo$#j*)-&S`3F z(GfD`S9ly2`p-s%i|A!%r6pc4JOdCr{~{&nOl zv3al~>J${N;bVp6@uk!f1kc2-jj!nQ-r=RB;$$nbRcK`kzb{w#$C5Asg20pKynyY+ zx{hgk8L?G9s`cvH^i#Ff!WyLKd&?zIv3}nB=X6YqV1qgzrF}6*{3;ujAAJ#><4r0D z;zx>61`bCCW4~@Pfv*X*0cRwL%Ux~<_eKJz!`B2H#wu$!b;Zfx@(skXy8Sa9!`GF* zyk+>Bvsv2<;0flC?+fK}Lw?@|W5sMc;srdu1DFa6=W5=~8p6&W??gE+I zrhsO}*Ma3ahg%N#{F(bkAEnep%*@Gxw1(e?7c8CbHQ93Y`lZ{B;5h9ppr zb;AYayyX*zyJ$n>TjMRj|{=I z(9jl0@9?xvfe-1uz1&CJLyhCR#80bHP0O<6p_ej@2m`$Yi<1WmVO4Xe53@MtxQd55n0gxn8DLLzd<@9OL0npc1LSzG&ID{H-6UvtCvEA{z? zP5CW_nNgzq;#iXI*?!2GiOeGbHv-N}DZ|CI z>8~OVR4|5eBpxfNjfD-Ud(oUZ@w=!HN4|iqN$pieX>UsB$v$;)TGKUU4<30<1Ix) zp3_C|7WN6qJjKl=?hSEX6K%D+IX<=*X8h$EB^{T?L($k6qUWeSU+4K;7-oa@rD3r-yTu%gF<~#H&r@`Bgq7=!v!i}&%*SNU9 z*$v{<3$RFFqI3#%v)OLMPD@2B9vPX4G9;#;*mdo4yBv`bgQG`t*L2|wb7L<1g!tuR za$E#aAU0eB8R6l{5c&c^2kmScfg{yoQX*E`yiS_aq!d$;%v-~30IP~jn(GlZ#;Dx+ z{-@@szMN&4p);rxpiIu}FX-7|b}fzZ4*P!ab4dM6>_%}NbXY5)K=zp6Epw@bIoSd9 zVDFm^uK7Y59Etb`2AQ+~v9(FTP-!<*y*) z$Sc8TiD?2#5DpGEp<$ISgZ}h4Hx4nl1uDCLcYOYr(iJ8EKOJleBT|RI-|xjKNVP4N zVW$H;L|t96rjv?ckb}=xtdY^Gge{@(aKE>?A$n-#qYlcD#p16TXU5oAbKto$g`y#m z!sc-y1&nq%vY5{%Pr#q9u&=YiQmUM2(9=2DCHNLu)FYDlrpM82J8w+vzhjJHAVg(l z3;&44h1{N04LmiiQJej&+pxdL+-S=jIgh=%*f$$Y<8KEO>Je}2t3)AL?5Pdgs?o>K zh@cj+*4w;zZ|Obm=qFAT#vroh_~F4^_>}kRleAM}qrq-63fpIQ1BKJixt&hbOO!Oo%#ns za06P&zS%N3&KuGclprmvB%s)?G+)M+RU6FMeQNwd{z1#$6EA5Zt#f%`B$%BQ-YloW zK<4`a3$rMtyc|pGMfMF<0K8c?!FC28>R7sgO26=>wV?Z>-%%0FN-m6J4gg55?(UN9 zN;kejCE%Jz78Vb}odImU)bZ;^82gt(K~6d0vgGce0kGxC_Xt$ zxK|*n+Lh4p{IJxsvzV7>_BJ!&hI>NfXP#g?5B|_RYgWNE**@k&~a%u$qFtmD8 zVUpX=`Sf>uqm85@_qPjwWDF|FGSI^7`F?vK#*Q78j(SPG7|)yR2a91RApDk6%*q{W z5y$LK*l~A@-7rSdXMMjne076*n0sw{VDzR=fBbKlD|oFcxnx}Q(pbBL^9gn z$Yei|gNJ{i4jKAYw(0uy+k!j$RE=i!{i@T24k+L?Bd+U&DWvVv#U{w5$}O9Q>^I}$ zD)*s-5K$e5L$j9PEw-m1Iu;gHJWq{f#?xwim+A4=*MwiYyCWHImkHz&>2vPA416VH z;+LN=P}>m$JQ^QR$>RH<>?y`LS^6{&oweJ^UA$%Gkxww$Kky=-5I^WcXk@)+YWx1W zaWZhBQQg_<*FVmFr2Y9E0MAaB)2?C7cox9nEu@pVl~!`lBk`jTxItFsfVL<=K{jvSlF zx21*Gm~UFDIsw@`pkUc9cRSc(@L)ZZ4dn)(PJK4!tPxw<0&QZ>B8xmZz5slx; z;Ej}I$($|opPN_v_l57~3Aw(g@IZCZy zYLWV0aBXYieOv#l)P#wrBt2;wW@|8ho%FnAyh87W7hwUR4Wnz9unvB>*Yv}6wCK^w z?AKu0{y)631VC&+3$a>6r!u9-=9%->H)6(h@T!U@-D0nzI|~>XS&X=RG#3Z zTW7BuSc*`N!6Cr!8P47zG>BKD;D1QtF-Nx5=Dv;vxcAC9&hPutomOM`sHB$rpAHTT z6srOErw$GdZVUywo!JBEH#}8F$99{UxGf?(D4v5gA}IW%EWBbm(UWnys;yRk7t_T! z`+-QinAJ6FZ(K_rs=RgL6!~x6pD|cp)nX|F?;j%q%T_h5H)U$5SrS`Eh`oy?tJy9J+%63HLfuhIG+up8rp*t z_2mzHC|hc!E8foSm_X>c(WygW+A?s7Y#8_8(hF!lEN1be^vv*2Kl}Js2|q3u#uE`8 z1VLmvo6z8BMlF3uYT=np8n%jQf1TS>DN>JG(b>{n3K>cnJb>CiM!XaFY2zCKl!_tG z+@cFsgj3Y|DU@+MnmfMq-XjnO)+U0sRCIs5<`B`I{6>mAFIyumD$t!{4{Ka3?X&Pt z3UP4fzaUrotj%m_e7uRYSm z+VON8X{AOl?`=~F_z}pwJ3TWb!U{hG8OWoYgn-Mw#soaM2G@-U3=BfAi1RhlHJn*h{MNdipwU_+Fb0QuEt*o- zBXyt1wM4UU`b!7TESmG~*c6vqXD+XA8TFX^Zz-(WeP3Ak88AIe@7wu6vg5;LYM&0g z$|g$je^nC6ja>Bn8=yLa5!hLJ%Bxb>unhJGjYLZ5n=LbCv~xtCHYocgVj_y7f|U0C zWyZVb@P z`ReXCrh!E%CCC%Y(g%@qeNZ{u+4h!;4hejQhdr!N#?PPQ1eFBoadAzTi9wkH2Sw%2 zrSTXv<7wfb0sLWDX`OkOPoLOgu39zYdqmj6oTk#Eu6kEbRUeyf)bhps#|Ed9PS_;p zr_0nC_=RAF!DKkdwJeCz2IpmL(u~wstjE-f0f#Jawi5DzG#vw!n$bsn1=9PLWE6=6 z!yw^Tn7*|4jg4jYd?b9!Qcts>z)o9RajK%#Y@SPLAsKVu5oOEhG3zGG{j8!dR~g9Cj9rs?M@fYyVd zUV_V2qeE+Sp_iJX)GUz-SGo3_DgtET2fsg^E+|DO3uGQELdCN?C;{EJ#gF#G` zSLJ6YM1Nl)a+bn*g<(SF*H;Xh&0TOAZR0PEv03@dqbe#9=yh9u@AopHlw=^sssqrd zUwHf&1@(Ws9sgj_1vL>Z!6H=VsF`J#wLufGIn~$(r2d86XID+ye83Ps1Zp``iM?<5 zLnzT6*Z3XwQ&5$>h{6Et7sY~*MS0tZrUE0vysw?R3l;CV`2_1L&SYzxzfT6=<3W{}^dDR53&R+Y2kYHoB?M@hn2o+=!Q&l9}T zbZ4?_-b_IbM%Q#>RnjnPkIFDE7Q)7MhP_Qrx`f9Hq6CXNGtjL?>` zVK;|+5n!VGq~fE0gi%zs=l6>=C;219Co{sVdL)D%+2xniM2w;({J-H9=Y(R)TMR-y z$rJgeR;seeczuPWrt!t^7Bls5K|Em%Ro0cm4HkM@lnFVc-vz0@jz2zbKA)8SX?#7l zn%VO+qzj*nk%4?UHiz&FFO8qkCL1D+7VPhx9EKkz1XRVsYe{Pyi7A{|rQ8_n<*Jqq)-jp00u!a?`V; z#+fyho+Z=B)4?N2F#pv6dI?S`&Vnf;Rey===H(GNueGky4__gy_sd}2E6i6cm++k( z3l(d`0z7M4>qaI>9U=n9qgn5O7v*7u!QlPHMy=q>7T#6roy>Ae#JR8PU63;CnyR8u%;M z$iboVgEVXoLH7?UFDQ(flPnJZ5)_$6N+M7dHbfP{dv0#uSk!uH*no2QgbmYjdU)UW zkVe1X3E8b4RriBC4GSi({0stgzc=ssSpC7HsibTk;P3fZU^~x5sfSs_S558xoBfsl z^Fd{8?)yBi^;Q9%NrkY{^$nFPtF6tz=&sYVTozGEzl;pY+yXZ}nm!f1Id2>;h0*gk zu+0E{>9s4jx1NA8qH`xDs!srV9Vb$(<*b&GOq0XbODt$V-bF9wkyG;PvUc(+_AmeE zh1J<5SCTVAe0vvpW2`pQ7%6xd=#y4-N6E}tFrFvt1+Sct(=_GbduCStKa+H~hgYjV zKCNgqMZ0!kq&N#?xZf=KE_-?&f)Oa4ww_ zy|UpEX|k%f0C@Y_*_ERnfD)+dwju%QgL!7_9FL%gcayfgn=a98OMgb(V&z0X1!kFt z#FWW*C=!vA3L2Ymo7#AiJ%&|#9a8t8K8dStUFgluy+vtzn7&Of@?3Xv%1TM}DKOAt znZKi;4cmA0A0)>o@FX1Nvp_FZkUQ5j!+S?Iw)*H0>9Yh@6rO$Ov68iUyd=U9ls%s7iHReim_#uGnY_d9>y zCZJ%WX>AbjA{q$u;UCBDnBgMZ-I6hhdC*XvMNu5b)(|?bB=?Qreqf}8wO1$n>79;l z7wCaP{IV}X7J%^}Zg%8BuwNy656@-IW);zdz6X7iiXN(QGUfvl>ciZ!7%{CyC8c>r zo#0KJ-5i7#5+yuTk)+pn8s^K~0#5#1Y~3W5cD7PF`>s4G&f0P9H^KH|sPW2(UcBI; z`Xl4kl*?wgr%pZ{i=zdy$vmuZ`6+-XZN08wL#wsDu#!&o za6U~tJ)t?wFqmqLvnP&YB!;yc?QA9)zWB04cpD z{owm>a5#YFJl#2{czsNn|D?v+3gzs2&q;aG1NsIl*9nu-!A@l*S9@4G&bA#Eb-L~U#{$P5+t8qC2i7SbnP!ckCm%Dq*$`3>7*(Ci@xqM=%B3OLxrUZ|c(oQ|@|3EaP@V)38wjlK1@$$HRn$ zhnyd2h&ABbJkN`Ny}uNn@uHp{mSf;j{sPSztq4O6GfG4aH6$vlU`+f)?_A>W%TFZG z&n(Me^XVWS57;KMH0}dwJG(DVRLI(Tjx`j*w^|i85BL2|(pA~ecyD39tnr{opp>uD z9?zVQ$lpoJ8a933@P7I=iDSl?gb=cz-C!{LH8ognaDJiTkb%Zn0KgldGzaUgd~GE? z|FKklo^vP4o}A+ET7rQB85h5@IppIKU*zS=J&EXk!6he9sJrIz51UzJ!*h^{+#he1 z6!&ibPGC8mLvu+>BH@HErW-@v3uPlA3Xhy>LWhgu*LpfUCXWJf>x0yL-FKyt4&fts za{zQs?%e2!KHR4=`aZ|3E3bFck*J~q8PixJ((&|H({iE=1$med(9;d&VNZidL>aT) zUh+k~MwDSnVa%P>fD^a1zL6E@%-;gGmJq9w;Bw|m6v&OY&hsWRZsine6(6n(tIMTX zE|v@t_VKP7)1UQc>++rj6Fcc7L*?Slm4tqB7I?iT&oIAJ3>VMo_(0XGjH*A#nI9%l zug1a7J~d?$R}y$@GNnG)4>bhWY5&9iG*1Df$jT?b5U{g7%6ioRKhfxVegPA&Ngr)j zqH#=;>7!C8H{L726T2k8+|TR0yj%I`M-Fz1k7p5X%Qttg-VKFZQoQv6A2A?X0C2?r zdjWb}3;SNsfd?@1;_^29Z;mlGvN7b3+o-<5qvG*Tq{4GoF$?}gGU1xu*~*E9Vr`yN zezA3F4SWAUjH)q0q&+;+kY{_RTBxLJE2zDuD=T-?IfSC6W$sb%LA6J4JpG-taPT_70qDEGZ)m`|dC#ZLFfcKGi` z!RYVq%3jKhYWRiY_!%-%3ebFcuN}E%qit4cPR!0?U-3&uN$So7Eo^;pN?a*kWwin? z>7w{urrfvKw+2u7y^%7B(8Nk#qkL<47#_~4YS4yPu~q-4PS7it*tqu$-&m%qKVOHp z*)RO@drz=-Ib|6WLeiRkS|!h+x>kiMkO)%#!7xo zO$`779&>%&MwlwYFV1W)F2P#}abj%_ruZ0u2Z*bXS`m(T2IU7w0UTKeHhl7ju_4!*uqZ%V zJ`7(S@$ceZ!m51BT2BUWe=iRA<-Bz{XXpCTssD3Io|)fEgAKzQX{L$Zt0CdjQDVti zBIgUUim4hqxbHq|*+eT%B2ADM0;e6WZ9G1@m%>z4S=V)`>NQ$$VU%Rx8u%XRe+R*T zeSC=YWi3BaS$KKUuU{4|a!+5>i@9zq5<^ktRa@XA8b&9Bjn% z10T1=ez;>DUd)RmXL{YBadtdqzdfk5^Fty{Q#_eMnRQ`MynpctAx#3c_YT`4AW=c&J zE$>iryrg^{nFZx)I!-qE5x!+oqGtazuUzo-`;_=};< zv(fKxmfCcF=2tySW9t_K3c?M>4xZUT|4eoN@s%N%V3G+|jR5e$)KqxM$^QQR_B9_F zM^Czow^r@3xL`0m(sZ44S}9MMXC%>VltpM!s^+`fcL?Pd?l4^ND(L(wh$bE_?|~Ck zAxW{iUeL2G4>&-d9cVNlnnV$sFT8YpRA~k)3~atui5_FoHGG z8j*Q9B!I(wOO>D%Ec+fGeLuWlUZy}(aEVTPeCYahX0!9P^FdW0tFVo9+74Gbn5+4A zf-}L9y&{Npek5%6(P;-;cYSH?E3`58KXlJYHOS*`_F5qS?48MVG+ zL{uIEbv{CJkf@nt4dWcsha8j{kvS9`M!gN6l)RyOb8@j|V~+r>?#Nq{=;Ni|iYQhU z$3(~0`Bf273gfA$KWo>pdhHd6UeRe57qg8!>oxH{pB1U2Q_Ak}DtS0b)6B75?t-E~ zWg4i_Cnp#G(!JyhF%fM|yyJ6=AM3wNmEAhKZSN-b|D5Arsgla&xExyS+~fiq&s&OH zle9?3-D_90>w|H=&w&x=MLLf2wwiSAn(yMqxhCQg;nf zhLh0aX-NRyzPqdusMVt24e_=0y<>EdISXcWerBC+a&FF|8-+#U$&`*I#8g->nKfy7 zQIGmPZkp~PJ=dPB)(HQU(EuEVwWtx8F}=S)B+wu4(4*;o0kbR>R6-I;_Wzrl|Ick- zJq@Xq4IC<}sWzEj#Bg+lVz*XIRtVR4%Dia0exio`aKTBxwzei|)qHp*FCMNQA`;)u zm&|;$lvMs$kQ0CKsZdGQWN^}Qnj6)NcbwVqb&enfhH*6j6P`n19lzkE_BHTn(iG8m zj$59=J)`ZMt~6O(=Sy2vd2VvkN_CT*c)?ExR)oZ6S13ht#jy9KrnIQD{S~s+Q{9i) z>nnC!mlWZzFy@b@+vFtgkF&?5YrI}*{6=&OF7sGAUob19h{Btx9tiDGI#+&5K6CvIXCPRQ3(cR%ZLU^11K-XoYt!7obhX%vzmGA@D1XbUVlx3=2R(!1+IVz2OUkVw-tTgeM}<_TwVX++grbvtnz~@< zo$+sKj1p_ZT&umb&(M#k%fCotP#cqWMa6OqI) z`46=o1VC;MlRy+8w|(yk32nfm>FW~Yo zb49J{%~3l0)r7|&Ft&4V3UcdqpuDZ~H?_tX=*CtUt+bhn-!?Aj?OWIm=hz2JcL&_*5%Qz~8W(>EeC>P zg@y0WFM}to$;F&;2>uK2s&{LQCYBjdk$O$A$1*rBUPm1HV*o_SYR;{9R0FRF66Jbk z3D?PmhBM0%Bl=sMsyyXwJ`rd;JZN26xPC6?>uGN}Mu$7@tDh%I)GYiRxcXw#Pa`6^ zE{bj-hJUvLfEzD7CB@<}sr&hLLEAv^dMK=7tOA*wTAEmNHvCtK9yB)lnuoI=TCI}O zCs6DnjXRgrvFu%*JAuc^PC}BmV!07X29;cff{MM7n(T)1?Ar+3*ZXpSU=B&c<1wkb z4!)EQL-;pY9|e?=Txx}Tmb2jeA~*c!H7NyH1+v|FLM?gD-^g5s%?WKDcwfRhYoJ?t zjBt(h2aUv5g45Oa!GV4+BS-U9W6a0G4e!U&1a=t--`}v}ah{hU^3Z@M1drB1)+&u! zCBMYgs|g0(tNssPZyDAG|7{E6?(Xgsx8fdL3#CATBE_Y6(ctb@q_{(Ym!iepU0d8G zxLZgj@0>aFzjx;JehXjng#G;X-fOLG@9flLUuQs#JKlLk8Ot#kq4`27!+~gze>^fZ zX#aN<{~xyp`a?X0ZJ562QZstkD@G|Gl9sSiL0Gj5oFiGog`5{P>Wj$`>UH7t)5xDUFI7bz_RD)6H-qr7X0Z3EpyuPm9h04R{ zkF*uNQ+#SW4KawH5LaG&LP;AL5V8Zsd(r&pKN2*)rjy3gp=ekUpilCw*tPhxp_x(3 z;diU4-7@y8YT3My!tTRfRRhIis*jf!|IMIQD4!B47#-gz(>}P%fZ?{f@hjrAvg%Kg z8RR~)Bd~8FAbSpfVSfg&NOvOPo2t(kbq)9RtXQ+ z-|#%@w%Lm=L`$oA_xZsrK=Nioia<0z>p03zPam4lMif;K!cyAKuH!Fi3yd>gsNs+b zn6~F-Jl6iBz&Jp;qPMXSQL^9JPe5XvQ{ikTzRvb%e%;|5G8$_k{V4w$J7I0cF}kA1 zT%02E<%g;b$Enuq#2a2Q8fDBu+JY;()NG;JCEFYE+hhGFDW+dus5cayNMGZsGHRFW zpx|!k19W%keg((5{aR3po!`Lx@;!CSn& zb~K7$QHc1pkY2ju;6>zn65HKo6%dc{j`6SAZ}#zFJEV}4)^66?#02V;20dMthF&FZ zmSbO|rNyY8?4{D?+}j{sKi9vQEix!;{nMikM78oA9)-# zCMltK24xM#8}d(`;hP=i-NV6;<%JP{!vxyklcu0X+s=fc>6>pnv;4O!jVh$}VsGus zsT;p6XzGKgWP_bG9V;xfU!@acebwrjnv+Ki;y}{XJTJKn@@JpO7K@wUGi7uGZDEVY z{+JYL8l;q$ez{l`4ZyPHnW$nDk*n6fjSBNp_|St;tYpN&CZrBuU&<4VQaP0q;V7dc z6_^s0@w zB;o3Lh3g+dS!DAYI!2!>eWWb!uLP7z)melp8iZ4%$`bc2IJ9TWbH`MG&7Fi_RfyO^Yk%$=AL!6l2C%DG}uLd+D8GcNg!v?FX2fG$qmm*o~m8WqKsIudUl zMP?1W+3=tbOc#pUx+kJIA-brE8A4O`HOjAjx_XKZOoU%aiy3yw#N@__-_4yC3+W!o zmyB9Ol)p?w;(l$f9xzvPJg~y&_tQQ3UAWRc-wgSX@dhCc1GO1y#DObe-vOid_jgnR=b2)^T zT)%HoIzlc&4%yBN$1+3w$X`(Ce0OW{@#OLKptUTRegYv-*So^g^~zV!)4!uK^ub&{ z4#*tfxgnbrq605r=KEP|*+T#Yl$JCjoD2?r3tZE(arbf@7EjDUHadPIvXE@X2b;Ww zYH8kh(o8#Zn zE|r7V+s3tYKT!Jh=wdo^=`oh?QrXMv63lV0f>Z#T4d>y*)@G&3mPJJpRhAP~udI#$ z9@`~xM3KV8^ba+f%sHC*jT76%=K;H+-cJkBDQnV7#UGN!ue(ls=)${?xZcm!grW* z!fu}xwkuB-lTm#8(`qfS`E`GZaOnPzMh`(_;R!AftCf2!cxPW zev7my?E6UtN5U%%T2;m)67ZN3E^mBwUdYT#M6B`u7A=AfF38s$^ zce~jmW%Y$(6Q7gZ_3D`K(B^V-C>7Lmkt6PCXXZ3~yOsY$hi`E;24Y{s0~Ywz>4ZN2$`Co9>v%OA{^8yjq|uR8u=vc9elvx+{7|qy zS^HNCsqiQ=-^O&b#$(n!#HH}z#}#S4miN){#rb)G3Z=JQsspm6?VjG6-ZbFcwrb3D zlWeGYUb;DZUhLV{DG8-=HROa&g#^S|)Mn4AE7a-zV`uS~-a$0S8nJ5K)IGEQzEgHl zyBIl#=RZ=Dn#D(=m>2V^0lbCOyOwG-$jb7i30`RXvzYg@?=me%B%Bvxim#IE5)SCW zLyOZ#)XSusCL8SoqPoT{S{tcSoj}ziHC6-c2m#}k=(uf-2bREkzEi*cCW?yA#|0%z zx|-@YO=WDU&)VWDOAit+2sj3_&zP#X!U>81QgDWY!^Sr z*8>n7h*-EsRm6^{nCX-BQ#F6YwWmXpqc4ZYk@v7KeA?F&5X1x47izan?Xj>pr|!QN zPmK`yw%vCv`tP~!Rnr^TsB-Zcne@)MF5Nd}MEc7W#1acwE&>TabjQAcF3r?myobae zL(c>s7m!zgIG*1FX#%uSISOv?6S@Bn+)YXms2cPkEFZ(e3QI5s1T_wRY7(sG}~qekI>bIM+cH~3KpAV zR9w`KAemvgKIu^=8VwXe`Nw_n>&rcf_?q3Ku+BSw3BtYV{Tbky-o#9C{V>^3_Pu^L zY%_2z1l7{Y6!WC$Knv<)S%A;SQ~rt)kn^m1m7LQFaJQWWO5Js4eH8+LJpGU*qnhy` zfANdZn>xk?<5j=#m;HT*l_ir0Tf!Jmx#P3o#WvE6wS^>88jz=+-pcH?Evn`lTZt&MaW!+G-+2Z@oiO^`P2%Z+$rY z;q{q)sgfT4s-46C15G-DP+oDZ8^PcH_5N#@2`q7kP9Jwfk&`_l+w$qFLc4{QFb*~u zXa9n4p>yBC<_ni4_5{`D6qUa<50BB>RW)=N<~mUPNzy#6d3n#hqa+0i_3%~7)mQl# zPED10sB5Y(mYV`|hGf$$)hzN_V2MybW(gJ1Y<>F??)axe*~+a96NbUG z>cTD?Iw!(Fgl{=sKO1_J_$bYL_!UN=r>Cb`fuMuX#l{qwE z`??d(@tVrN;d{#Ubt9pa>BZ*3dy>PhD|w?h?Lgji0#3{+rE+vj=Z`S>uR!7Wrkm;U zOLrH9#!tVny_!z8T9{yAUwfcXwWdNa!L-0yZQ; z*;DB6>nd7!8I}8n&LYyOg{Y{eKQb{{O@$zn?(Z|e30cwS zlm^el=5pG?w>7@am2s6jsWbs_91&W;@eY!PTejL%qxF`?n>6{G!in|3#-oGwx&75T zMHF-%(Mw3NaPAkN~(?#l-dLPlApHiJUKkUSTZO+L4|-0*ULPP6V_ni0P?`YNDr zeLRaCrTsp+m`WQ*EI!24uQK{R|?EUR1OoHtTuY2;x<3a-dABEg1gJ)-} zMPCjzb!J^WMZSN%u*N{2{C1Jx=CLC<{E`G3usT8|`=j*iAIfsu;G+f!EipOr?t5dJ zt1Sxo5seGGOtT8~jNkUuBK<2tkd6Yjy2~trvO}m0-b5SqG%rtD3yi({y_lUOt)t&C zg)Ir%s)i4`jsGpBm9yzuXy22&+iTL-&cV8PS&&*$1!PQYReQR7pTE(?SULQz)sM^G z40F>=JBq`EuL<)m!+Gg7J1AT8m*|XnhE5tiAX%l+E=rFhl#!!Ej5U--?0bB65(gZwCQhcdo7_N-_Mux@1i<$%Nd;`gxfj+PS+P zqpd>~XaS9)81r&i*y8r_{%ciela~tS5^P+6ag3CD;)fyo*xYCKLA-(+_PtBYycYm#bXvF}vomP5t zS94Z%FtY{cf|76S@A9SQtQ%xi+`iO!){Bsibry0DD{G_NsI_m65)|<9T)l0}U0#)& zfh{|_tq9z?u z&c05*pfd~(N{x(;r&*x(OC`IJRBfF#g@NL$7K>}?p#SxGtv?rs^!VvREvmwMk;RYd z3*0frUCyik)Fo8xvWt53zk%BMz5GTX_`2zz2?UNM>K)G)|HVv838uGUct}WGSk#>y z9DG=FVpDw?x?lCNqWgNLya;wfYAb(#MZCl36}}CzpboDRHTy}>H>{y#J!2}@f%VcS zCDyBHjPbk3pAZWFY1Txrw4uW9_asSRL&;Peyj~n!xJ3Yy3)1^YUh%_dKplAqLb92lm4$7vkYUS+_y9O=(NoEJc2}RnFm09@;x-}M626{FLXbl!7 zE9+r1X(Ww|tz4Mw3cTymY%CW6|3wE!-P;^+zJ2HKccF`dA?TJV6{vgH7EOX7Lcr-( zl>qQKX|v~1V)1xo)UR7mczgEKWNzXjehTdl^R-LY=HpnBYO}zFUQqV+XXUyRbbpy} zzkJJ-PN`SF=kLd1b0`I>#G)7F%qR=GKM;2!wzLi9aB{EV&X2O0Qk%aQBd^ptcleQBB#7>^IwX3~()_ zM0RC70=P1Uv}&&%>wY^oY1fk-K;3_2Q@TRVNYtIZk`z#%m^@D0deIClgZ_ecdcHF9 zfcHjI>r$T-zq>OsFwS+^2bm-(Nlg_Ts*d#HfldPFqp^f&P`PK(GsW-hE;Zzj%xO&` z)x$9GvsG}~F-(&x1HP@RsLy?o5rgLqOu_UfCNui^`%3T~aL9-6+-&uHqw{4#V0x_^ z2#lKD^$rLK_|75ydOJVUI&^WhJ1qTj+Hlbg-SEe=6|KojDP)D+mbX??H%^O&ZGJT89$h?liT}*;;J3J7@Yl z#ey9)O@v8Wu27Ar)!~9>$LO5-F~ZT~vxf9Ma)wo#3O8B%^4}>L6Q0mbh#`KDB4+i0hTwrOhX1QI{x{=v_e)#75w_cs z2RG;GPt@43FGLFbDL)L>4&I@ypu!~#TK<|F)Hc9dC`hc=Ix&V)YSC1-ypcAhSO2Y= z9N_^e^JN(fC!LkPB>b(G}3Pr2P5`N1uUQGFT^3eF*tIzI#OReUKQ@ z77;TIADZ_JH)H5OgIt7i#_&ps?~oo0A!CPRyWU&$x#I=Jzxf4+drdLi`6? zIfbgw+-;$I$X(^6-7*#$^$mDhu=>ic{L?%u$6p@}Z2#_obGKLh zhd1KEXy%$Xn<@K&_8!$ZOxI?2jVMbaDyu9%D|GC&25BI3sH zVUWBc&sZhiIt4)*{*@rF7vyt{wO-rhgI<4A{OI-`5+@rTa;~C?6XdZ)XuC6|c5DQb zIcju>vksSclvn|3+O7zjgfdP*GtQ_K1$nk^HPs|vzJ&2d95>V3(`vh4J}Qs>bf&cX zSI5KGz8A<-Y2otsmpwFd_sv4v5ax{6NZPKnrwYjn@%^Rq0w>Pc<|Co7)18`%Ioz>VX|Dt~6?!`K|Z)v?+uA$;~@ z^-xnR=^;p%-NNsiXkC`;PhGo9VI++^z@+L^V1Qra9ytSl8{2Oqj8nBmj{whZ&vIgn z1!KtKTXY5VWZS9{krQk8OL%(qbYc#tBpWhPw?d}-=^&?0Sl24MC)bw_Czhai z%Ly%dqi7nsrkosIZ!tjjkPijhM7`8gH1b1uv+1=I5w3Gv7oCmmv}tLSd>W6n7xUWU zJYqqVEbkv59?R{e?T=(vWn0wWx;d%k{w)%9U)I%tOSY|(}G5N?( zYcORZyH@0Psw**w8)0Zh%Y8fuYp)6M#wq4Zlwg@5{7vCTr)FWV2`dsudY}s~wdQyL zD=a9H&I4t?@u08PJgsw~-_!+Q!-=QoLX<`2cRKDKk=m1Bu!;J0gz-pw7I-OgVkJaG+7v=v{f%BYlTTtV@U| z=U;pgTD5JKgA4Cs$(=L~!;aUR1X-iyjP8$)Jaru3mvF7F_P9~LS=nhixmNb-xJG|S z0Xa)aW2RS+il&HJ_7s`FA9^%#O$Wv|tFtTD7uxA@3Ycw4nZ>}GRSD#o5dD{)?3Gwp z&r}Vi@k6t}BHC0<4Kf=hzx4E8cG94y0k~7~*2(r{sZj5tzo&uuuRgu4^I&GMTIz^B zc_$RAxk9R|h(~-pkcK0qMR`ap$7TNZ;(DT^UJo7D?2LY^YcEC3VzU2t$7ol7yt-pW zAx;425k@LP<*@cvE6Y&)EF)sQ-+5d4;?aP6>g&c$-gDBmeUpy{4Rx7+U-Q4Gx&H+A>Ih&;<5y88{r8G;Z;68zG`$sy zO8|WsG6d`HOIkRaqxo3A+5#3SIfPHCIS#(|x9Zd&swDc~jS4xMDf*?dOzxn*b~ce3 zGS+b|2ltZ4HVi4e-cP^7Mv-+@FYEdJ<4iy^^JMBHvP`#erb6FN$d)fb)1A?~(cbce zGJ6XghsHh!pij9T?}kuG@~HRA!8=4C4g5I&+Twn@H`a*K@??2Di393naX&32k}Gku zk{n=}jjfsG$9Vr7)rOykEtgKWN(6)UAMu8lx_F|lbxUV@ukM3vhra3;HJ(nQkgp7= zXQ}){(^YK-{YTz+QfirD)5${%^muv zKYt;C1Wy5CEEc|W<&v=ra}?Vzv{G5?&}i~rLk}hu94hl|o)v@h%_9~|Tm>jrj-Dj* z`qbH%$wB#Vo>%ikyXABYBc%Hg0*T!2dFiFUUVd_?yMe{D)aKMY=QTxgMs$X-WgXZ>TJ70my?DC)nTmjM#A( zZO;<{Olfma0zRLrc&GO7OlEi`3;VX)L(WLc-y!AJrx}4oFO$?@#}@?~Np@{Jd6ILR~DO zboz~uocW|o5tmR@ULObQV{@T=GB=Um-GOJCh@Jk`FoP1->Pi7rc5uc?}3$~^E ze~w}L{jkepFHlG224XOWOl+7NHdPf}bcB6Sb>FM0 zE6UN`cg$I)Z_hm~M{Ii#*QJWzTs^r;GslEYlD59^VYy$ue%;?Iz{~$s)fLI#>Svmf zW~*cC->L;Nk~Jv#Rn$BpSm|4x=yPDnj#dzpXUwTrupuKnh9R)8WX&IjaEqi6Tm}D5 zwn6#3yR+qy$KP?x1RWJ@8H6{D2pNSp7+OSMTQnc?g?S0Os0 z8h-0bAoecVX>T2-$#X@XWX%u5_id+&jx(ZL%M&Cjt{Fm_$?#5s7^lb<$enlJw;P)c zSvF4pERLobt%VA~^~QTJ7TyR;`qr{JqMQT7OB(cB%vdI(7&h1f1)L}^XJR*B+(4fD zxWkHAb6=*ftIb|HCWiWL)V``+zys6(X%j2`U%z|IyQ|;z<4QX|(R|ZeOrsY>2%U{_ zkdJeIua3&#p~I6#={q`%#iqR45#$6 zj#E9?K@`b#?_n+9kB*i=;bY0VY(Nq6HJ!#z*8wl1@g_hH`7Wu@*@+HaaBihS1;JN> zqA>PTM)4p)3ZK(mbtul2TJ>49qHAgUTJa7u+8QayK+7f*W0%d~P1SW+lt#MsuLQn~ za=AfC_W2+K8I3>r+W~K1gFD=O80dX<_2||@e^=o6SQ=R16frO$rKfxhWcq+A+ZQ$` zG^VnXxT4xVsR2MBIccpL5?RQh%mYH6%vWj3cIdmEBhEUNyNSdWS>0L2KV=$`%Rj=% zA0$;v%4auTM0@h6!cJaD{@d-rkq)8$4XsSo!JYY}K3AOpxoD+={0yS~C=4MOR_vHX zUbcx5*`xcuXLVHuc$elF|IHtXd!RulG>XTy&`4Uj61g4q@pJ(l!iYVh#I%)^ZVKfa z{4JuVBSHd+uca&}ehh>ju{yj@Zzcv>*(R>FvT4wJuZUpZPx70I;oT1Z<9830otzow zZF58J&(>l|Ix`Lw-j(KU{Oc(nvRV;kk$gb*bA<%6{yYSgF$?Lq)9+;ULS+iGKPaF$#X$niIv#r33cFNywTvX8a+MvJJ_$HOFSD{F#;4wWZ$)=nrpv z{W;DZOYqgPe0U+x)8Z!8jF~I0GViVH&e3dfA-&8mot8PkizP#=-dIt6MPZA$Oi^G| zf=3?)7m!MY^@mD(e53B;@|}pw&$UE!^E$%*Dhj>gU*aq5=>30vT|!s5?DjPs!RQD&_K3qMuG04JD||M-xrI*!Q#?M?tuG?=9s}u z9&vS^rw1@#6eT)P+V&46;OaMgv< zl=pdhs<;uYSGaT4l^+IY7~52faSb}7q;RenUNued!QN7{-+9=bV&nQIA}R8}7eaC7 z>n{KQ8pD5O$2uGcdQZht`h@exUKE3R)OLLZV?BDQs$?d@+H$*yJ!*JUL%Q2{PpmAP z4cYl=Kre<~3*YZ?z~nr}uktGj-WZxyymD`8)L3jAl9zcDx1^?U(#kVMeX)*cobD>VEkNzInDey@1rms%w}kFvT& zW}ka6nQpGfd6ddp(%Bh=xQVdC?u409bn_?Jbg)ALL*SsP=yF0rDximaCI%P2+XZespjpz0Dk4w{=lh{ z`T%z{s#th~uj)4TW#A);=&d{t6m{V`bS7mb=Mu16S>>qnuK zDmgCl_4$Hx{gP_FqVnr<&5o{R1>MabLo%&h9-~=JFpNQ@c z8@+_hnf8wEY^SMg3MU4RM{*FgO7EF$ed%PX7h}JVQEYu!&5)= zuY3u~+dr0=zQ@$k6+eEXZ#E0pa9OXO{~C&`{UDssCkUXgTgCa# z_y7lJbu4U)Vigfa5VgWiC9Az#Vneo{NaRbl2VYR^lNU{4QJqlBWtZoD(GxXSE{k~$ z7(R&}`{ee|PtE@FySqEi+SZ-b_^?-#H|%tilxW0Q$mAkQ+s;^XUN>15IOqFPcFt|C zrtY6izZ=Q^X?qg8(%PO?#Qo{A*(LpYtVR0qOYe4nq@BESC+%9=varmQC{`co{c?gitSdoc^wdG5!Fh zE$AhHfBI#BP|FbmGMPi#LiIIc8p_l4xU>0s?k$NzhVc(;zQ3E$6>!PW#>Dry)EY7^ zaiiXW83T1;gbW)#KR#$(0aYcZQSM$F-aSI?cceEQloF`;pp8S-T&7?CRY

)g6Hi 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 z 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 z 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

FOo#dDqLTXc;H8HI>{_?|+nNg@2irVQ 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 XjP~wLo`lpRw2zUVxo)+#W90t;Mlr;n literal 0 HcmV?d00001 diff --git a/public/images/keyless/setting-env-keys.png b/public/images/keyless/setting-env-keys.png deleted file mode 100644 index c123701c8fb74a9497ce041adc9f6d90ae120c59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35057 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 Date: Fri, 10 Jan 2025 00:23:05 +0800 Subject: [PATCH 18/82] Move the "SDK References" up to the top section, move the quick starts in to each sdk group, rename the overview to "Available Methods" --- docs/manifest.json | 3887 +++++++++++++++--------------- docs/quickstarts/setup-clerk.mdx | 78 +- 2 files changed, 1982 insertions(+), 1983 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 02a8a792a0..81d277a6dd 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -9,105 +9,8 @@ }, { "title": "Getting Started", - "collapse": true, - "icon": "checkmark-circle", - "items": [ - [ - { - "title": "Overview", - "href": "/docs/quickstarts/overview" - }, - { - "title": "Set up Clerk", - "href": "/docs/quickstarts/setup-clerk" - }, - { - "title": "Full Stack", - "items": [ - [ - { - "title": "Next.js", - "href": "/docs/quickstarts/nextjs", - "icon": "nextjs" - }, - { - "title": "React Router", - "tag": "(Beta)", - "href": "/docs/quickstarts/react-router", - "icon": "react-router" - }, - { - "title": "Remix", - "href": "/docs/quickstarts/remix", - "icon": "remix" - }, - { - "title": "Astro", - "href": "/docs/quickstarts/astro", - "icon": "astro" - }, - { - "title": "TanStack Start", - "tag": "(Beta)", - "href": "/docs/quickstarts/tanstack-start", - "icon": "tanstack" - }, - { - "title": "Nuxt", - "href": "/docs/quickstarts/nuxt", - "icon": "nuxt" - } - ] - ] - }, - { - "title": "Frontend", - "items": [ - [ - { - "title": "JavaScript", - "href": "/docs/quickstarts/javascript", - "icon": "javascript" - }, - { - "title": "React", - "href": "/docs/quickstarts/react", - "icon": "react" - }, - { - "title": "Expo", - "href": "/docs/quickstarts/expo" - }, - { - "title": "iOS", - "tag": "(Beta)", - "href": "/docs/quickstarts/ios" - }, - { - "title": "Chrome Extension", - "href": "/docs/quickstarts/chrome-extension" - }, - { "title": "Vue", "href": "/docs/quickstarts/vue", "icon": "vue" } - ] - ] - }, - { - "title": "Backend", - "items": [ - [ - { - "title": "Express", - "href": "/docs/quickstarts/express" - }, - { - "title": "Fastify", - "href": "/docs/quickstarts/fastify" - } - ] - ] - } - ] - ] + "href": "/docs/quickstarts/setup-clerk", + "icon": "checkmark-circle" }, { "title": "Guides", @@ -176,455 +79,433 @@ ] }, { - "title": "UI Components", + "title": "SDKs", "collapse": true, - "icon": "box", "items": [ [ { - "title": "Overview", - "href": "/docs/components/overview" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/clerk-provider" - }, - { - "title": "Authentication Components", + "title": "Next.js", + "collapse": true, + "icon": "nextjs", "items": [ [ { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/sign-in" + "title": "Quickstart", + "href": "/docs/quickstarts/nextjs" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/sign-up" + "title": "Available Methods", + "href": "/docs/references/nextjs/overview" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/google-one-tap" - } - ] - ] - }, - { - "title": "User Components", - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/user/user-button" + "title": "Guides", + "items": [ + [ + { + "title": "Read session and user data", + "href": "/docs/references/nextjs/read-session-data" + }, + { + "title": "Add custom sign up and sign in pages", + "href": "/docs/references/nextjs/custom-signup-signin-pages" + }, + { + "title": "Integrate Clerk into your app with tRPC", + "href": "/docs/references/nextjs/trpc" + }, + { + "title": "Next.js rendering modes and Clerk", + "href": "/docs/references/nextjs/rendering-modes" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/user/user-profile" - } - ] - ] - }, - { - "title": "Organization Components", - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/create-organization" + "title": "General references", + "items": [ + [ + { + "title": "`clerkMiddleware()`", + "wrap": false, + "href": "/docs/references/nextjs/clerk-middleware" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-profile" + "title": "App Router References", + "items": [ + [ + { + "title": "`auth()`", + "wrap": false, + "href": "/docs/references/nextjs/auth" + }, + { + "title": "`currentUser()`", + "wrap": false, + "href": "/docs/references/nextjs/current-user" + }, + { + "title": "Route Handlers", + "href": "/docs/references/nextjs/route-handlers" + }, + { + "title": "Server Actions", + "href": "/docs/references/nextjs/server-actions" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-switcher" + "title": "Pages Router References", + "items": [ + [ + { + "title": "`getAuth()`", + "wrap": false, + "href": "/docs/references/nextjs/get-auth" + }, + { + "title": "`buildClerkProps()`", + "wrap": false, + "href": "/docs/references/nextjs/build-clerk-props" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-list" - } - ] - ] - }, - { - "title": "Waitlist Component", - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/waitlist" + "title": "Demo Repositories", + "items": [ + [ + { + "title": "App Router Demo Repo", + "href": "https://github.com/clerk/clerk-nextjs-demo-app-router" + }, + { + "title": "Pages Router Demo Repo", + "href": "https://github.com/clerk/clerk-nextjs-demo-pages-router" + } + ] + ] } ] ] }, { - "title": "Control Components", + "title": "React", + "collapse": true, + "icon": "react", "items": [ [ { - "title": "``", - "wrap": false, - "href": "/docs/components/control/authenticate-with-callback" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/clerk-loaded" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/clerk-loading" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/protect" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/multi-session" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-signin" + "title": "Quickstart", + "href": "/docs/quickstarts/react" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-signup" + "title": "Available Methods", + "href": "/docs/references/react/overview" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-userprofile" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-organizationprofile" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-createorganization" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/signed-in" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/signed-out" + "title": "Client-side helpers", + "items": [ + [ + { + "title": "`useUser()`", + "wrap": false, + "href": "/docs/references/react/use-user" + }, + { + "title": "`useClerk()`", + "wrap": false, + "href": "/docs/references/react/use-clerk" + }, + { + "title": "`useAuth()`", + "wrap": false, + "href": "/docs/references/react/use-auth" + }, + { + "title": "`useSignIn()`", + "wrap": false, + "href": "/docs/references/react/use-sign-in" + }, + { + "title": "`useSignUp()`", + "wrap": false, + "href": "/docs/references/react/use-sign-up" + }, + { + "title": "`useSession()`", + "wrap": false, + "href": "/docs/references/react/use-session" + }, + { + "title": "`useSessionList()`", + "wrap": false, + "href": "/docs/references/react/use-session-list" + }, + { + "title": "`useOrganization()`", + "wrap": false, + "href": "/docs/references/react/use-organization" + }, + { + "title": "`useOrganizationList()`", + "wrap": false, + "href": "/docs/references/react/use-organization-list" + }, + { + "title": "`useReverification()`", + "tag": "(Beta)", + "wrap": false, + "href": "/docs/references/react/use-reverification" + } + ] + ] } ] ] }, { - "title": "Unstyled Components", + "title": "Chrome Extension", + "collapse": true, + "icon": "chrome", "items": [ [ { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-in-button" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-in-with-metamask" + "title": "Quickstart", + "href": "/docs/quickstarts/chrome-extension" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-up-button" + "title": "Available Methods", + "href": "/docs/references/chrome-extension/overview" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-out-button" + "title": "Guides", + "collapse": false, + "items": [ + [ + { + "title": "Add React Router", + "href": "/docs/references/chrome-extension/add-react-router" + }, + { + "title": "Sync auth status between your Chrome Extension and web app", + "href": "/docs/references/chrome-extension/sync-host" + }, + { + "title": "`createClerkClient()`", + "href": "/docs/references/chrome-extension/create-clerk-client" + }, + { + "title": "Configure a consistent CRX ID", + "href": "/docs/references/chrome-extension/configure-consistent-crx-id" + } + ] + ] } ] ] - } - ] - ] - } - ], - [ - { - "title": "Configuration", - "items": [ - [ + }, { - "title": "Sign-up & Sign-in", + "title": "Expo", "collapse": true, + "icon": "expo", "items": [ [ { - "title": "Overview", - "href": "/docs/authentication/overview" + "title": "Quickstart", + "href": "/docs/quickstarts/expo" }, { - "title": "Configuration", + "title": "Available Methods", + "href": "/docs/references/expo/overview" + }, + { + "title": "Hooks", "items": [ [ { - "title": "Sign-up and sign-in options", - "href": "/docs/authentication/configuration/sign-up-sign-in-options" + "title": "useLocalCredentials()", + "href": "/docs/references/expo/use-local-credentials" }, { - "title": "Session options", - "href": "/docs/authentication/configuration/session-options" - }, + "title": "useOAuth()", + "href": "/docs/references/expo/use-oauth" + } + ] + ] + }, + { + "title": "Guides", + "items": [ + [ { - "title": "Email & SMS templates", - "href": "/docs/authentication/configuration/email-sms-templates" + "title": "Read session and user data", + "href": "/docs/references/expo/read-session-user-data" }, { - "title": "Restrictions", - "href": "/docs/authentication/configuration/restrictions" + "title": "Use biometrics with local credentials", + "href": "/docs/references/expo/local-credentials" }, { - "title": "Legal compliance", - "href": "/docs/authentication/configuration/legal-compliance" + "title": "Offline support", + "href": "/docs/references/expo/offline-support" } ] ] }, { - "title": "Social Connections", + "title": "Web support", + "collapse": true, "items": [ [ { "title": "Overview", - "href": "/docs/authentication/social-connections/overview" - }, - { - "title": "Social connections (OAuth)", - "href": "/docs/authentication/social-connections/oauth" - }, - { - "title": "Account linking", - "href": "/docs/authentication/social-connections/account-linking" - }, - { - "title": "Custom provider", - "href": "/docs/authentication/social-connections/custom-provider" - }, - { - "title": "Google", - "href": "/docs/authentication/social-connections/google" - }, - { - "title": "Facebook", - "href": "/docs/authentication/social-connections/facebook" + "href": "/docs/references/expo/web-support/overview" }, { - "title": "Microsoft", - "href": "/docs/authentication/social-connections/microsoft" - }, + "title": "Add custom sign-up and sign-in pages", + "href": "/docs/references/expo/web-support/custom-signup-signin-pages" + } + ] + ] + } + ] + ] + }, + { + "title": "iOS", + "tag": "(Beta)", + "collapse": true, + "icon": "apple", + "items": [ + [ + { + "title": "Quickstart", + "href": "/docs/quickstarts/ios" + }, + { + "title": "Available Methods", + "href": "/docs/references/ios/overview" + }, + { + "title": "`getToken()`", + "href": "/docs/references/ios/get-token" + }, + { + "title": "Guides", + "items": [ + [ { - "title": "See all", - "collapse": true, - "items": [ - [ - { - "title": "Apple", - "href": "/docs/authentication/social-connections/apple" - }, - { - "title": "Atlassian", - "href": "/docs/authentication/social-connections/atlassian" - }, - { - "title": "Bitbucket", - "href": "/docs/authentication/social-connections/bitbucket" - }, - { - "title": "Box", - "href": "/docs/authentication/social-connections/box" - }, - { - "title": "Coinbase", - "href": "/docs/authentication/social-connections/coinbase" - }, - { - "title": "Discord", - "href": "/docs/authentication/social-connections/discord" - }, - { - "title": "Dropbox", - "href": "/docs/authentication/social-connections/dropbox" - }, - { - "title": "GitHub", - "href": "/docs/authentication/social-connections/github" - }, - { - "title": "GitLab", - "href": "/docs/authentication/social-connections/gitlab" - }, - { - "title": "HubSpot", - "href": "/docs/authentication/social-connections/hubspot" - }, - { - "title": "Hugging Face", - "href": "/docs/authentication/social-connections/huggingface" - }, - { - "title": "Line", - "href": "/docs/authentication/social-connections/line" - }, - { - "title": "Linear", - "href": "/docs/authentication/social-connections/linear" - }, - { - "title": "LinkedIn (Deprecated)", - "href": "/docs/authentication/social-connections/linkedin" - }, - { - "title": "LinkedIn", - "href": "/docs/authentication/social-connections/linkedin-oidc" - }, - { - "title": "Notion", - "href": "/docs/authentication/social-connections/notion" - }, - { - "title": "Slack", - "href": "/docs/authentication/social-connections/slack" - }, - { - "title": "Spotify", - "href": "/docs/authentication/social-connections/spotify" - }, - { - "title": "TikTok", - "href": "/docs/authentication/social-connections/tiktok" - }, - { - "title": "Twitter v1", - "href": "/docs/authentication/social-connections/twitter" - }, - { - "title": "X/Twitter v2", - "href": "/docs/authentication/social-connections/x-twitter" - }, - { - "title": "Xero", - "href": "/docs/authentication/social-connections/xero" - } - ] - ] + "title": "Sign in with Apple", + "href": "/docs/references/ios/sign-in-with-apple" } ] ] + } + ] + ] + }, + { + "title": "Node.js", + "tag": "(Deprecated)", + "collapse": true, + "icon": "nodejs", + "items": [ + [ + { + "title": "Quickstart & Available Methods", + "href": "/docs/references/nodejs/overview" }, { - "title": "Enterprise Connections", + "title": "Available methods", + "href": "/docs/references/nodejs/available-methods" + }, + { + "title": "Connect/Express Middleware", + "href": "/docs/backend-requests/handling/nodejs" + } + ] + ] + }, + { + "title": "Express", + "collapse": true, + "icon": "expressjs", + "items": [ + [ + { + "title": "Quickstart", + "href": "/docs/quickstarts/express" + }, + { + "title": "Available Methods", + "href": "/docs/references/express/overview" + } + ] + ] + }, + { + "title": "Fastify", + "collapse": true, + "icon": "fastify", + "items": [ + [ + { + "title": "Quickstart", + "href": "/docs/quickstarts/fastify" + } + ] + ] + }, + { + "title": "React Router", + "collapse": true, + "icon": "react-router", + "tag": "(Beta)", + "items": [ + [ + { + "title": "Quickstart", + "href": "/docs/quickstarts/react-router" + }, + { + "title": "Available Methods", + "href": "/docs/references/react-router/overview" + }, + { + "title": "Guides", "items": [ [ { - "title": "Overview", - "href": "/docs/authentication/enterprise-connections/overview" - }, - { - "title": "Authentication flows", - "href": "/docs/authentication/enterprise-connections/authentication-flows" - }, - { - "title": "Account linking", - "href": "/docs/authentication/enterprise-connections/account-linking" - }, - { - "title": "Just-in-Time account provisioning", - "href": "/docs/authentication/enterprise-connections/jit-provisioning" - }, - { - "title": "EASIE", - "items": [ - [ - { - "title": "Microsoft", - "href": "/docs/authentication/enterprise-connections/easie/microsoft" - }, - { - "title": "Google", - "href": "/docs/authentication/enterprise-connections/easie/google" - } - ] - ] + "title": "Read session and user data", + "href": "/docs/references/react-router/read-session-data" }, { - "title": "SAML", - "items": [ - [ - { - "title": "Azure", - "href": "/docs/authentication/enterprise-connections/saml/azure" - }, - { - "title": "Google", - "href": "/docs/authentication/enterprise-connections/saml/google" - }, - { - "title": "Okta", - "href": "/docs/authentication/enterprise-connections/saml/okta" - }, - { - "title": "Custom provider", - "href": "/docs/authentication/enterprise-connections/saml/custom-provider" - } - ] - ] + "title": "Add custom sign up and sign in pages", + "href": "/docs/references/react-router/custom-signup-signin-pages" }, { - "title": "OIDC", - "items": [ - [ - { - "title": "Custom provider", - "href": "/docs/authentication/enterprise-connections/oidc/custom-provider" - } - ] - ] + "title": "Library mode", + "href": "/docs/references/react-router/library-mode" } ] ] }, { - "title": "Web3", + "title": "General references", "items": [ [ { - "title": "Coinbase Wallet", - "href": "/docs/authentication/web3/coinbase-wallet" - }, - { - "title": "MetaMask", - "href": "/docs/authentication/web3/metamask" + "title": "`rootAuthLoader()`", + "wrap": false, + "href": "/docs/references/react-router/root-auth-loader" }, { - "title": "OKX Wallet", - "href": "/docs/authentication/web3/okx-wallet" + "title": "`getAuth()`", + "href": "/docs/references/react-router/get-auth" } ] ] @@ -633,139 +514,81 @@ ] }, { - "title": "Users", + "title": "Remix", "collapse": true, + "icon": "remix", "items": [ [ { - "title": "Overview", - "href": "/docs/users/overview" - }, - { - "title": "Metadata", - "href": "/docs/users/metadata" - }, - { - "title": "Invitations", - "href": "/docs/users/invitations" + "title": "Quickstart", + "href": "/docs/quickstarts/remix" }, { - "title": "User impersonation", - "href": "/docs/users/user-impersonation" + "title": "``", + "wrap": false, + "href": "/docs/references/remix/clerk-app" }, { - "title": "Create users", - "href": "/docs/users/creating-users" + "title": "SPA Mode", + "wrap": false, + "href": "/docs/references/remix/spa-mode" }, { - "title": "Delete users", - "href": "/docs/users/deleting-users" + "title": "Add custom sign up and sign in pages", + "wrap": true, + "href": "/docs/references/remix/custom-signup-signin-pages" }, { - "title": "Guides", - "items": [ - [ - { - "title": "Web3 authentication", - "href": "/docs/users/web3" - } - ] - ] + "title": "Read session and user data", + "wrap": true, + "href": "/docs/references/remix/read-session-data" } ] ] }, { - "title": "Organizations, Roles, and Permissions", + "title": "TanStack Start", "collapse": true, + "icon": "tanstack", + "tag": "(Beta)", "items": [ [ { - "title": "Overview", - "href": "/docs/organizations/overview" - }, - { - "title": "Roles and permissions", - "href": "/docs/organizations/roles-permissions" - }, - { - "title": "Verified domains", - "href": "/docs/organizations/verified-domains" + "title": "Quickstart", + "href": "/docs/quickstarts/tanstack-start" }, { - "title": "Manage SSO", - "href": "/docs/organizations/manage-sso" + "title": "Available Methods", + "href": "/docs/references/tanstack-start/overview" }, { - "title": "Guides", + "title": "General references", "items": [ [ { - "title": "Create roles and assign permissions", - "href": "/docs/organizations/create-roles-permissions" - }, - { - "title": "Verify the active user’s permissions", - "href": "/docs/organizations/verify-user-permissions" - }, - { - "title": "Reassign the default role", - "href": "/docs/organizations/default-role" - }, - { - "title": "Reassign the creator role", - "href": "/docs/organizations/creator-role" - }, - { - "title": "Organization workspaces", - "href": "/docs/organizations/organization-workspaces" + "title": "`getAuth()`", + "href": "/docs/references/tanstack-start/get-auth" }, { - "title": "Create organizations on behalf of users", - "href": "/docs/organizations/create-orgs-for-users" + "title": "`createClerkHandler()`", + "href": "/docs/references/tanstack-start/create-clerk-handler" } ] ] }, { - "title": "Building custom flows", + "title": "Guides", "items": [ [ { - "title": "Using metadata", - "href": "/docs/organizations/metadata" - }, - { - "title": "Create an organization", - "href": "/docs/organizations/creating-organizations" - }, - { - "title": "Update an organization", - "href": "/docs/organizations/updating-organizations" - }, - { - "title": "Invite users to an organization", - "href": "/docs/organizations/inviting-users" - }, - { - "title": "Accept organization invitations", - "href": "/docs/organizations/accept-organization-invitations" - }, - { - "title": "Manage member roles", - "href": "/docs/organizations/managing-roles" - }, - { - "title": "View a user's organization memberships", - "href": "/docs/organizations/viewing-memberships" - }, - { - "title": "Manage membership requests", - "href": "/docs/organizations/manage-membership-requests" + "title": "Add custom sign up and sign in pages", + "href": "/docs/references/tanstack-start/custom-signup-signin-pages", + "wrap": true }, { - "title": "Switch between organizations", - "href": "/docs/organizations/custom-organization-switcher" + "title": "Read session and user data", + "href": "/docs/references/tanstack-start/read-session-data", + "wrap": true } ] ] @@ -774,92 +597,184 @@ ] }, { - "title": "Backend Requests", + "title": "Go", "collapse": true, + "icon": "go", "items": [ [ { - "title": "Overview", - "href": "/docs/backend-requests/overview" + "title": "Quickstart & Available Methods", + "href": "/docs/references/go/overview" }, { - "title": "Making requests", + "title": "Verifying sessions", + "href": "/docs/references/go/verifying-sessions" + }, + { + "title": "Use Clerk Go for Backend API Operations", + "href": "/docs/references/go/other-examples" + }, + { + "title": "Go SDK repository", + "href": "https://github.com/clerk/clerk-sdk-go" + } + ] + ] + }, + { + "title": "Astro", + "collapse": true, + "icon": "astro", + "items": [ + [ + { + "title": "Quickstart", + "href": "/docs/quickstarts/astro" + }, + { + "title": "Available Methods", + "href": "/docs/references/astro/overview" + }, + { + "title": "UI Frameworks", "items": [ [ { - "title": "Same-Origin Requests", - "href": "/docs/backend-requests/making/same-origin" + "title": "Use Clerk with Astro and React", + "href": "/docs/references/astro/react" + } + ] + ] + }, + { + "title": "Guides", + "items": [ + [ + { + "title": "Migrating from community SDK", + "href": "/docs/references/astro/migrating-from-astro-community-sdk" }, { - "title": "Cross-Origin Requests", - "href": "/docs/backend-requests/making/cross-origin" + "title": "Read session and user data", + "wrap": false, + "href": "/docs/references/astro/read-session-data" }, { - "title": "Customize your session token", - "href": "/docs/backend-requests/making/custom-session-token" + "title": "Hybrid rendering", + "wrap": false, + "href": "/docs/references/astro/hybrid-rendering" + } + ] + ] + }, + { + "title": "General references", + "items": [ + [ + { + "title": "`clerkMiddleware()`", + "wrap": false, + "href": "/docs/references/astro/clerk-middleware" }, { - "title": "JWT templates", - "href": "/docs/backend-requests/making/jwt-templates" + "title": "Locals", + "wrap": false, + "href": "/docs/references/astro/locals" + }, + { + "title": "Endpoints", + "wrap": false, + "href": "/docs/references/astro/endpoints" } ] ] }, { - "title": "Handling requests", + "title": "Client-side helpers", "items": [ [ { - "title": "JS Backend SDKs", - "href": "/docs/backend-requests/handling/js-backend-sdks" + "title": "`$authStore`", + "wrap": false, + "href": "/docs/references/astro/auth-store" }, { - "title": "Go", - "href": "/docs/backend-requests/handling/go", - "icon": "go" + "title": "`$clerkStore`", + "wrap": false, + "href": "/docs/references/astro/clerk-store" }, { - "title": "Ruby / Rails", - "href": "/docs/backend-requests/handling/ruby-rails", - "icon": "ruby" + "title": "`$userStore`", + "wrap": false, + "href": "/docs/references/astro/user-store" }, { - "title": "Manual JWT Verification", - "href": "/docs/backend-requests/handling/manual-jwt" + "title": "`$signInStore`", + "wrap": false, + "href": "/docs/references/astro/sign-in-store" }, { - "title": "Node.js (Deprecated)", - "href": "/docs/backend-requests/handling/nodejs" + "title": "`$signUpStore`", + "wrap": false, + "href": "/docs/references/astro/sign-up-store" + }, + { + "title": "`$sessionStore`", + "wrap": false, + "href": "/docs/references/astro/session-store" + }, + { + "title": "`$sessionListStore`", + "wrap": false, + "href": "/docs/references/astro/session-list-store" + }, + { + "title": "`$organizationStore`", + "wrap": false, + "href": "/docs/references/astro/organization-store" } ] ] + } + ] + ] + }, + { + "title": "Nuxt", + "collapse": true, + "icon": "nuxt", + "items": [ + [ + { + "title": "Nuxt", + "href": "/docs/quickstarts/nuxt" }, + { "title": "Available Methods", "href": "/docs/references/nuxt/overview" }, { - "title": "Versioning", + "title": "Guides", "items": [ [ { - "title": "Overview", - "href": "/docs/backend-requests/versioning/overview" + "title": "Read session and user data", + "wrap": false, + "href": "/docs/references/nuxt/read-session-data" }, { - "title": "Available versions", - "href": "/docs/backend-requests/versioning/available-versions" + "title": "Protect pages", + "wrap": false, + "href": "/docs/references/nuxt/protect-pages" } ] ] }, { - "title": "Resources", + "title": "General references", "items": [ [ { - "title": "Session tokens", - "href": "/docs/backend-requests/resources/session-tokens" - }, - { - "title": "Rate limits", - "href": "/docs/backend-requests/resources/rate-limits" + "title": "`clerkMiddleware()`", + "wrap": false, + "href": "/docs/references/nuxt/clerk-middleware" } ] ] @@ -868,200 +783,362 @@ ] }, { - "title": "Webhooks", + "title": "Vue", "collapse": true, + "icon": "vue", "items": [ [ + { "title": "Quickstart", "href": "/docs/quickstarts/vue" }, + { "title": "Available Methods", "href": "/docs/references/vue/overview" }, { - "title": "Overview", - "href": "/docs/webhooks/overview" - }, - { - "title": "Sync Clerk data to your application with webhooks", - "href": "/docs/webhooks/sync-data" - }, - { - "title": "Handling webhooks with Inngest", - "href": "/docs/webhooks/inngest" - }, - { - "title": "Send webhooks to Loops", - "href": "/docs/webhooks/loops" + "title": "Guides", + "items": [ + [ + { + "title": "Migrating from community SDK", + "href": "/docs/references/vue/migrating-from-vue-community-sdk" + } + ] + ] }, { - "title": "Debug your webhooks", - "href": "/docs/webhooks/debug-your-webhooks" + "title": "Client-side helpers", + "items": [ + [ + { + "title": "`useUser()`", + "wrap": false, + "href": "/docs/references/vue/use-user" + }, + { + "title": "`useClerk()`", + "wrap": false, + "href": "/docs/references/vue/use-clerk" + }, + { + "title": "`useAuth()`", + "wrap": false, + "href": "/docs/references/vue/use-auth" + }, + { + "title": "`useSignIn()`", + "wrap": false, + "href": "/docs/references/vue/use-sign-in" + }, + { + "title": "`useSignUp`", + "wrap": false, + "href": "/docs/references/vue/use-sign-up" + }, + { + "title": "`useSession()`", + "wrap": false, + "href": "/docs/references/vue/use-session" + }, + { + "title": "`useSessionList()`", + "wrap": false, + "href": "/docs/references/vue/use-session-list" + }, + { + "title": "`useOrganization()`", + "wrap": false, + "href": "/docs/references/vue/use-organization" + } + ] + ] } ] ] - } - ] - ] - } - ], - [ - { - "title": "Customization", - "items": [ - [ + }, { - "title": "Account Portal", + "title": "Ruby / Rails", "collapse": true, + "icon": "ruby", "items": [ [ { - "title": "Overview", - "href": "/docs/customization/account-portal/overview" + "title": "Quickstart", + "href": "/docs/references/ruby/overview" }, { - "title": "Getting started", - "href": "/docs/customization/account-portal/getting-started" + "title": "Available Methods", + "href": "/docs/references/ruby/available-methods" }, { - "title": "Advanced Usage", + "title": "Rack/Rails integration", + "href": "/docs/references/ruby/rack-rails" + }, + { + "title": "Ruby SDK repository", + "href": "https://github.com/clerk/clerk-sdk-ruby" + } + ] + ] + }, + { + "title": "Python", + "icon": "python", + "href": "https://github.com/clerk/clerk-sdk-python/blob/main/README.md", + "target": "_blank" + }, + { + "title": "Community SDKs", + "collapse": true, + "items": [ + [ + { + "title": "Redwood", + "collapse": true, + "icon": "redwood", "items": [ [ { - "title": "Direct links", - "href": "/docs/customization/account-portal/direct-links" + "title": "Overview", + "href": "/docs/references/redwood/overview" }, { - "title": "Disable Account Portal", - "href": "/docs/customization/account-portal/disable-account-portal" + "title": "Redwood", + "href": "https://redwoodjs.com/docs/auth/clerk", + "icon": "redwood" } ] ] + }, + { + "title": "Svelte", + "href": "https://github.com/markjaquith/clerk-sveltekit", + "icon": "svelte" + }, + { + "title": "Vue", + "href": "https://vue-clerk.vercel.app", + "icon": "vue" + }, + { + "title": "Elysia", + "href": "https://github.com/wobsoriano/elysia-clerk", + "icon": "elysia" + }, + { + "title": "Rust", + "href": "https://github.com/cincinnati-ventures/clerk-rs", + "icon": "rust" + }, + { + "title": "Hono", + "href": "https://github.com/honojs/middleware/tree/main/packages/clerk-auth", + "icon": "hono" + }, + { + "title": "C#", + "href": "https://github.com/Hawxy/Clerk.Net", + "icon": "c-sharp" + }, + { + "title": "Koa", + "href": "https://github.com/dimkl/clerk-koa/blob/main/README.md", + "icon": "koa" + }, + { + "title": "Angular", + "href": "https://github.com/anagstef/ngx-clerk?tab=readme-ov-file#ngx-clerk", + "icon": "angular" + }, + { + "title": "SolidJS", + "href": "https://github.com/spirit-led-software/clerk-solidjs", + "icon": "solid" } ] ] + } + ] + ] + }, + { + "title": "UI Components", + "collapse": true, + "icon": "box", + "items": [ + [ + { + "title": "Overview", + "href": "/docs/components/overview" }, { - "title": "Appearance Prop", - "collapse": true, + "title": "``", + "wrap": false, + "href": "/docs/components/clerk-provider" + }, + { + "title": "Authentication Components", "items": [ [ { - "title": "Overview", - "href": "/docs/customization/overview" - }, - { - "title": "Layout", - "href": "/docs/customization/layout" + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/sign-in" }, { - "title": "Themes", - "href": "/docs/customization/themes" + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/sign-up" }, { - "title": "Variables", - "href": "/docs/customization/variables" + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/google-one-tap" } ] ] }, { - "title": "Localization", - "href": "/docs/customization/localization" + "title": "User Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/user/user-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/user/user-profile" + } + ] + ] }, { - "title": "Custom Pages", - "collapse": true, + "title": "Organization Components", "items": [ [ { - "title": "``", - "href": "/docs/customization/user-profile" + "title": "``", + "wrap": false, + "href": "/docs/components/organization/create-organization" }, { "title": "``", - "href": "/docs/customization/organization-profile" + "wrap": false, + "href": "/docs/components/organization/organization-profile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/organization-switcher" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/organization-list" } ] ] }, { - "title": "Custom Menu Items", - "collapse": true, + "title": "Waitlist Component", "items": [ [ { - "title": "``", + "title": "``", "wrap": false, - "href": "/docs/customization/user-button" + "href": "/docs/components/waitlist" } ] ] }, { - "title": "Elements", - "tag": "(Beta)", - "collapse": true, + "title": "Control Components", "items": [ [ { - "title": "Overview", - "href": "/docs/customization/elements/overview" - }, - { - "title": "Guides", - "items": [ - [ - { - "title": "Build a sign-in flow", - "href": "/docs/customization/elements/guides/sign-in" - }, - { - "title": "Build a sign-up flow", - "href": "/docs/customization/elements/guides/sign-up" - }, - { - "title": "Styling", - "href": "/docs/customization/elements/guides/styling" - } - ] - ] + "title": "``", + "wrap": false, + "href": "/docs/components/control/authenticate-with-callback" }, { - "title": "Examples", - "items": [ - [ - { - "title": "Sign-in", - "href": "/docs/customization/elements/examples/sign-in" - }, - { - "title": "Sign-up", - "href": "/docs/customization/elements/examples/sign-up" - }, - { - "title": "Primitives", - "href": "/docs/customization/elements/examples/primitives" - }, - { - "title": "shadcn/ui", - "href": "/docs/customization/elements/examples/shadcn-ui" - } - ] - ] + "title": "``", + "wrap": false, + "href": "/docs/components/control/clerk-loaded" }, { - "title": "Component Reference", - "items": [ - [ - { - "title": "Common", - "href": "/docs/customization/elements/reference/common" - }, - { - "title": "Sign-in", - "href": "/docs/customization/elements/reference/sign-in" - }, - { - "title": "Sign-up", - "href": "/docs/customization/elements/reference/sign-up" - } - ] - ] + "title": "``", + "wrap": false, + "href": "/docs/components/control/clerk-loading" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/protect" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/multi-session" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-signin" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-signup" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-userprofile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-organizationprofile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-createorganization" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/signed-in" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/signed-out" + } + ] + ] + }, + { + "title": "Unstyled Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-in-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-in-with-metamask" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-up-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-out-button" } ] ] @@ -1072,289 +1149,169 @@ ], [ { - "title": "Development", + "title": "Configuration", "items": [ [ { - "title": "Testing", + "title": "Sign-up & Sign-in", "collapse": true, "items": [ [ { "title": "Overview", - "href": "/docs/testing/overview" + "href": "/docs/authentication/overview" }, { - "title": "Test Emails and Phones", - "href": "/docs/testing/test-emails-and-phones" + "title": "Configuration", + "items": [ + [ + { + "title": "Sign-up and sign-in options", + "href": "/docs/authentication/configuration/sign-up-sign-in-options" + }, + { + "title": "Session options", + "href": "/docs/authentication/configuration/session-options" + }, + { + "title": "Email & SMS templates", + "href": "/docs/authentication/configuration/email-sms-templates" + }, + { + "title": "Restrictions", + "href": "/docs/authentication/configuration/restrictions" + }, + { + "title": "Legal compliance", + "href": "/docs/authentication/configuration/legal-compliance" + } + ] + ] }, { - "title": "Testing Frameworks", + "title": "Social Connections", "items": [ [ { - "title": "Playwright", + "title": "Overview", + "href": "/docs/authentication/social-connections/overview" + }, + { + "title": "Social connections (OAuth)", + "href": "/docs/authentication/social-connections/oauth" + }, + { + "title": "Account linking", + "href": "/docs/authentication/social-connections/account-linking" + }, + { + "title": "Custom provider", + "href": "/docs/authentication/social-connections/custom-provider" + }, + { + "title": "Google", + "href": "/docs/authentication/social-connections/google" + }, + { + "title": "Facebook", + "href": "/docs/authentication/social-connections/facebook" + }, + { + "title": "Microsoft", + "href": "/docs/authentication/social-connections/microsoft" + }, + { + "title": "See all", "collapse": true, "items": [ [ { - "title": "Overview", - "href": "/docs/testing/playwright/overview" + "title": "Apple", + "href": "/docs/authentication/social-connections/apple" }, { - "title": "Test helpers", - "href": "/docs/testing/playwright/test-helpers" + "title": "Atlassian", + "href": "/docs/authentication/social-connections/atlassian" }, { - "title": "Test authenticated flows", - "href": "/docs/testing/playwright/test-authenticated-flows" - } - ] - ] - }, - { - "title": "Cypress", - "collapse": true, - "items": [ - [ + "title": "Bitbucket", + "href": "/docs/authentication/social-connections/bitbucket" + }, { - "title": "Overview", - "href": "/docs/testing/cypress/overview" + "title": "Box", + "href": "/docs/authentication/social-connections/box" }, { - "title": "Custom commands", - "href": "/docs/testing/cypress/custom-commands" + "title": "Coinbase", + "href": "/docs/authentication/social-connections/coinbase" }, { - "title": "Test Account Portal", - "href": "/docs/testing/cypress/test-account-portal" - } - ] - ] - }, - { - "title": "Postman or Insomnia", - "href": "/docs/testing/postman-or-insomnia" - } - ] - ] - } - ] - ] - }, - { - "title": "Errors", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/errors/overview" - }, - { - "title": "Actor tokens", - "href": "/docs/errors/actor-tokens" - }, - { - "title": "Allowlist identifiers", - "href": "/docs/errors/allowlist-identifiers" - }, - { - "title": "Application", - "href": "/docs/errors/application" - }, - { - "title": "Authentication", - "href": "/docs/errors/authentication" - }, - { - "title": "Backup codes", - "href": "/docs/errors/backup-codes" - }, - { - "title": "Billing", - "href": "/docs/errors/billing" - }, - { - "title": "Billing accounts", - "href": "/docs/errors/billing-accounts" - }, - { - "title": "Blocklist identifiers", - "href": "/docs/errors/blocklist-identifiers" - }, - { - "title": "Clients", - "href": "/docs/errors/clients" - }, - { - "title": "Cookie", - "href": "/docs/errors/cookie" - }, - { - "title": "Deprecation", - "href": "/docs/errors/deprecation" - }, - { - "title": "Domains", - "href": "/docs/errors/domains" - }, - { - "title": "Entitlements", - "href": "/docs/errors/entitlements" - }, - { - "title": "Features", - "href": "/docs/errors/features" - }, - { - "title": "Forms", - "href": "/docs/errors/forms" - }, - { - "title": "Identifications", - "href": "/docs/errors/identifications" - }, - { - "title": "Passkeys", - "href": "/docs/errors/passkeys" - }, - { - "title": "Rate Limits", - "href": "/docs/errors/rate-limits" - }, - { - "title": "Sign-in", - "href": "/docs/errors/sign-in" - }, - { - "title": "Sign-up", - "href": "/docs/errors/sign-up" - }, - { - "title": "Sign-in-tokens", - "href": "/docs/errors/sign-in-tokens" - } - ] - ] - }, - { - "title": "Troubleshooting", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/troubleshooting/overview" - }, - { - "title": "Email Deliverability", - "href": "/docs/troubleshooting/email-deliverability" - }, - { - "title": "Script Loading", - "href": "/docs/troubleshooting/script-loading" - }, - { - "title": "Help & Support", - "items": [ - [ - { - "title": "Create a minimal reproduction", - "href": "/docs/troubleshooting/create-a-minimal-reproduction" - }, - { - "title": "Community Discord", - "href": "https://clerk.com/discord" - }, - { - "title": "Contact Support", - "href": "/support", - "target": "_blank" - } - ] - ] - } - ] - ] - }, - { - "title": "Upgrade Guides", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/upgrade-guides/overview" - }, - { - "title": "Long term support policy", - "href": "/docs/upgrade-guides/long-term-support" - }, - { - "title": "Clerk SDK versioning", - "href": "/docs/upgrade-guides/sdk-versioning" - }, - { - "title": "Upgrading to @clerk/nextjs v6", - "href": "/docs/upgrade-guides/nextjs/v6" - }, - { - "title": "Upgrading to Core 2", - "items": [ - [ - { - "title": "Overview", - "href": "/docs/upgrade-guides/core-2/overview" - }, - { - "title": "Component redesign", - "href": "/docs/upgrade-guides/core-2/component-redesign" - }, - { - "title": "SDK Guides", - "collapse": true, - "items": [ - [ + "title": "Discord", + "href": "/docs/authentication/social-connections/discord" + }, { - "title": "Next.js", - "href": "/docs/upgrade-guides/core-2/nextjs", - "icon": "nextjs" + "title": "Dropbox", + "href": "/docs/authentication/social-connections/dropbox" }, { - "title": "Remix", - "href": "/docs/upgrade-guides/core-2/remix", - "icon": "remix" + "title": "GitHub", + "href": "/docs/authentication/social-connections/github" }, { - "title": "Expo", - "href": "/docs/upgrade-guides/core-2/expo" + "title": "GitLab", + "href": "/docs/authentication/social-connections/gitlab" }, { - "title": "Fastify", - "href": "/docs/upgrade-guides/core-2/fastify" + "title": "HubSpot", + "href": "/docs/authentication/social-connections/hubspot" }, { - "title": "React", - "href": "/docs/upgrade-guides/core-2/react", - "icon": "react" + "title": "Hugging Face", + "href": "/docs/authentication/social-connections/huggingface" }, { - "title": "Node", - "href": "/docs/upgrade-guides/core-2/node" + "title": "Line", + "href": "/docs/authentication/social-connections/line" }, { - "title": "Backend", - "href": "/docs/upgrade-guides/core-2/backend" + "title": "Linear", + "href": "/docs/authentication/social-connections/linear" }, { - "title": "Chrome Extension", - "href": "/docs/upgrade-guides/core-2/chrome-extension" + "title": "LinkedIn (Deprecated)", + "href": "/docs/authentication/social-connections/linkedin" }, { - "title": "JavaScript", - "href": "/docs/upgrade-guides/core-2/javascript", - "icon": "javascript" + "title": "LinkedIn", + "href": "/docs/authentication/social-connections/linkedin-oidc" + }, + { + "title": "Notion", + "href": "/docs/authentication/social-connections/notion" + }, + { + "title": "Slack", + "href": "/docs/authentication/social-connections/slack" + }, + { + "title": "Spotify", + "href": "/docs/authentication/social-connections/spotify" + }, + { + "title": "TikTok", + "href": "/docs/authentication/social-connections/tiktok" + }, + { + "title": "Twitter v1", + "href": "/docs/authentication/social-connections/twitter" + }, + { + "title": "X/Twitter v2", + "href": "/docs/authentication/social-connections/x-twitter" + }, + { + "title": "Xero", + "href": "/docs/authentication/social-connections/xero" } ] ] @@ -1363,230 +1320,92 @@ ] }, { - "title": "Upgrading to Core 1", - "items": [ - [ - { - "title": "Overview", - "href": "/docs/upgrade-guides/upgrading-from-v2-to-v3" - } - ] - ] - }, - { - "title": "Upgrading from Node to Express SDK", + "title": "Enterprise Connections", "items": [ [ { "title": "Overview", - "href": "/docs/upgrade-guides/node-to-express" - } - ] - ] - }, - { - "title": "Dashboard", - "items": [ - [ - { - "title": "API Key Changes", - "href": "/docs/upgrade-guides/api-keys" - }, - { - "title": "URL-based session syncing", - "href": "/docs/upgrade-guides/url-based-session-syncing" - }, - { - "title": "Progressive Sign up", - "href": "/docs/upgrade-guides/progressive-sign-up" - } - ] - ] - } - ] - ] - }, - { - "title": "Deployments & Migrations", - "collapse": true, - "items": [ - [ - { - "title": "Instances / Environments", - "href": "/docs/deployments/environments" - }, - { - "title": "Clerk environment variables", - "href": "/docs/deployments/clerk-environment-variables" - }, - { - "title": "Deployment", - "items": [ - [ - { - "title": "Deploy to production", - "href": "/docs/deployments/overview" - }, - { - "title": "Deploy to Vercel", - "href": "/docs/deployments/deploy-to-vercel" - }, - { - "title": "Deploy behind a proxy", - "href": "/docs/deployments/deploy-behind-a-proxy" - }, - { - "title": "Set up a staging environment", - "href": "/docs/deployments/set-up-staging" - }, - { - "title": "Deploy a Chrome Extension to production", - "href": "/docs/deployments/deploy-chrome-extension" - }, - { - "title": "Deploy an Expo app to production", - "href": "/docs/deployments/deploy-expo" + "href": "/docs/authentication/enterprise-connections/overview" }, { - "title": "Deploy an Astro app to production", - "href": "/docs/deployments/deploy-astro" + "title": "Authentication flows", + "href": "/docs/authentication/enterprise-connections/authentication-flows" }, { - "title": "Set up a preview environment", - "href": "/docs/deployments/set-up-preview-environment" + "title": "Account linking", + "href": "/docs/authentication/enterprise-connections/account-linking" }, { - "title": "Changing domains", - "href": "/docs/deployments/changing-domains" - } - ] - ] - }, - { - "title": "Migrations", - "items": [ - [ - { - "title": "Migrate to Clerk", - "href": "/docs/deployments/migrate-overview" + "title": "Just-in-Time account provisioning", + "href": "/docs/authentication/enterprise-connections/jit-provisioning" }, { - "title": "Migrate from Firebase", - "href": "/docs/deployments/migrate-from-firebase" + "title": "EASIE", + "items": [ + [ + { + "title": "Microsoft", + "href": "/docs/authentication/enterprise-connections/easie/microsoft" + }, + { + "title": "Google", + "href": "/docs/authentication/enterprise-connections/easie/google" + } + ] + ] }, { - "title": "Migrate from Cognito", - "href": "/docs/deployments/migrate-from-cognito" + "title": "SAML", + "items": [ + [ + { + "title": "Azure", + "href": "/docs/authentication/enterprise-connections/saml/azure" + }, + { + "title": "Google", + "href": "/docs/authentication/enterprise-connections/saml/google" + }, + { + "title": "Okta", + "href": "/docs/authentication/enterprise-connections/saml/okta" + }, + { + "title": "Custom provider", + "href": "/docs/authentication/enterprise-connections/saml/custom-provider" + } + ] + ] }, { - "title": "Exporting user data", - "href": "/docs/deployments/exporting-users" - } - ] - ] - }, - { - "title": "Cookie Information", - "items": [ - [ - { - "title": "Clerk Cookie Information", - "href": "/docs/deployments/clerk-cookies" + "title": "OIDC", + "items": [ + [ + { + "title": "Custom provider", + "href": "/docs/authentication/enterprise-connections/oidc/custom-provider" + } + ] + ] } ] ] - } - ] - ] - } - ] - ] - } - ], - [ - { - "title": "Advanced", - "items": [ - [ - { - "title": "How Clerk works", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/how-clerk-works/overview" - }, - { - "title": "Cookies", - "href": "/docs/how-clerk-works/cookies" - }, - { - "title": "Tokens & signatures", - "href": "/docs/how-clerk-works/tokens-signatures" - } - ] - ] - }, - { - "title": "Integrations", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/integrations/overview" }, { - "title": "Databases", + "title": "Web3", "items": [ [ { - "title": "Convex", - "href": "/docs/integrations/databases/convex" - }, - { - "title": "Fauna", - "href": "/docs/integrations/databases/fauna" - }, - { - "title": "Firebase", - "href": "/docs/integrations/databases/firebase" - }, - { - "title": "Grafbase", - "href": "/docs/integrations/databases/grafbase" - }, - { - "title": "Hasura", - "href": "/docs/integrations/databases/hasura" - }, - { - "title": "InstantDB", - "href": "/docs/integrations/databases/instantdb" - }, - { - "title": "Nhost", - "href": "/docs/integrations/databases/nhost" + "title": "Coinbase Wallet", + "href": "/docs/authentication/web3/coinbase-wallet" }, { - "title": "Supabase", - "href": "/docs/integrations/databases/supabase" + "title": "MetaMask", + "href": "/docs/authentication/web3/metamask" }, - { - "title": "Neon", - "href": "/docs/integrations/databases/neon" - } - ] - ] - }, - { - "title": "Analytics", - "items": [ - [ - { - "title": "Google Analytics", - "href": "/docs/integrations/analytics/google-analytics" + { + "title": "OKX Wallet", + "href": "/docs/authentication/web3/okx-wallet" } ] ] @@ -1595,93 +1414,139 @@ ] }, { - "title": "Advanced Usage", + "title": "Users", "collapse": true, "items": [ [ { - "title": "Clerk as an OAuth2 Provider", - "href": "/docs/advanced-usage/clerk-idp" + "title": "Overview", + "href": "/docs/users/overview" }, { - "title": "Authentication across different domains", - "href": "/docs/advanced-usage/satellite-domains" + "title": "Metadata", + "href": "/docs/users/metadata" }, { - "title": "Proxying the Clerk Frontend API", - "href": "/docs/advanced-usage/using-proxies" + "title": "Invitations", + "href": "/docs/users/invitations" + }, + { + "title": "User impersonation", + "href": "/docs/users/user-impersonation" + }, + { + "title": "Create users", + "href": "/docs/users/creating-users" + }, + { + "title": "Delete users", + "href": "/docs/users/deleting-users" + }, + { + "title": "Guides", + "items": [ + [ + { + "title": "Web3 authentication", + "href": "/docs/users/web3" + } + ] + ] } ] ] }, { - "title": "Security & Privacy", + "title": "Organizations, Roles, and Permissions", "collapse": true, "items": [ [ { "title": "Overview", - "href": "/docs/security/overview" - }, - { - "title": "Vulnerability disclosure policy", - "href": "/docs/security/vulnerability-disclosure-policy" - }, - { - "title": "XSS leak protection", - "href": "/docs/security/xss-leak-protection" - }, - { - "title": "CSRF protection", - "href": "/docs/security/csrf-protection" + "href": "/docs/organizations/overview" }, { - "title": "CSP Headers", - "href": "/docs/security/clerk-csp" + "title": "Roles and permissions", + "href": "/docs/organizations/roles-permissions" }, { - "title": "Fixation protection", - "href": "/docs/security/fixation-protection" + "title": "Verified domains", + "href": "/docs/organizations/verified-domains" }, { - "title": "Password protection and rules", - "href": "/docs/security/password-protection" + "title": "Manage SSO", + "href": "/docs/organizations/manage-sso" }, { - "title": "Clerk Telemetry", - "href": "/docs/telemetry" + "title": "Guides", + "items": [ + [ + { + "title": "Create roles and assign permissions", + "href": "/docs/organizations/create-roles-permissions" + }, + { + "title": "Verify the active user’s permissions", + "href": "/docs/organizations/verify-user-permissions" + }, + { + "title": "Reassign the default role", + "href": "/docs/organizations/default-role" + }, + { + "title": "Reassign the creator role", + "href": "/docs/organizations/creator-role" + }, + { + "title": "Organization workspaces", + "href": "/docs/organizations/organization-workspaces" + }, + { + "title": "Create organizations on behalf of users", + "href": "/docs/organizations/create-orgs-for-users" + } + ] + ] }, { - "title": "Protect accounts from attacks", + "title": "Building custom flows", "items": [ [ { - "title": "Brute force attacks and locking user accounts", - "href": "/docs/security/user-lock-guide" + "title": "Using metadata", + "href": "/docs/organizations/metadata" }, { - "title": "Protect sign ups from bots", - "href": "/docs/security/bot-protection" + "title": "Create an organization", + "href": "/docs/organizations/creating-organizations" }, { - "title": "Customize max sign-in attempts and duration of of user lockout", - "href": "/docs/security/customize-user-lockout" + "title": "Update an organization", + "href": "/docs/organizations/updating-organizations" }, { - "title": "Unlock accounts from the Clerk Dashboard", - "href": "/docs/security/unlock-user-accounts" + "title": "Invite users to an organization", + "href": "/docs/organizations/inviting-users" }, { - "title": "Programmatically lock and unlock accounts", - "href": "/docs/security/programmatically-lock-user-accounts" + "title": "Accept organization invitations", + "href": "/docs/organizations/accept-organization-invitations" }, { - "title": "Protect email link sign-ins and sign-ups", - "href": "/docs/security/email-link-protection" + "title": "Manage member roles", + "href": "/docs/organizations/managing-roles" }, { - "title": "Unauthorized sign-in", - "href": "/docs/security/unauthorized-sign-in" + "title": "View a user's organization memberships", + "href": "/docs/organizations/viewing-memberships" + }, + { + "title": "Manage membership requests", + "href": "/docs/organizations/manage-membership-requests" + }, + { + "title": "Switch between organizations", + "href": "/docs/organizations/custom-organization-switcher" } ] ] @@ -1690,110 +1555,126 @@ ] }, { - "title": "Custom Flows", + "title": "Backend Requests", "collapse": true, "items": [ [ { "title": "Overview", - "href": "/docs/custom-flows/overview" - }, - { - "title": "Error handling", - "href": "/docs/custom-flows/error-handling" + "href": "/docs/backend-requests/overview" }, { - "title": "Authentication", + "title": "Making requests", "items": [ [ { - "title": "Email & password", - "href": "/docs/custom-flows/email-password" - }, - { - "title": "Email / SMS OTP", - "href": "/docs/custom-flows/email-sms-otp" - }, - { - "title": "Email links", - "href": "/docs/custom-flows/email-links" - }, - { - "title": "Email & password + MFA", - "href": "/docs/custom-flows/email-password-mfa" - }, - { - "title": "Passkeys", - "href": "/docs/custom-flows/passkeys" + "title": "Same-Origin Requests", + "href": "/docs/backend-requests/making/same-origin" }, { - "title": "Google One Tap", - "href": "/docs/custom-flows/google-one-tap" + "title": "Cross-Origin Requests", + "href": "/docs/backend-requests/making/cross-origin" }, { - "title": "OAuth connections", - "href": "/docs/custom-flows/oauth-connections" + "title": "Customize your session token", + "href": "/docs/backend-requests/making/custom-session-token" }, { - "title": "Enterprise connections", - "href": "/docs/custom-flows/enterprise-connections" - }, + "title": "JWT templates", + "href": "/docs/backend-requests/making/jwt-templates" + } + ] + ] + }, + { + "title": "Handling requests", + "items": [ + [ { - "title": "Sign out", - "href": "/docs/custom-flows/sign-out" + "title": "JS Backend SDKs", + "href": "/docs/backend-requests/handling/js-backend-sdks" }, { - "title": "Sign-up with application invitations", - "href": "/docs/custom-flows/invitations" + "title": "Go", + "href": "/docs/backend-requests/handling/go", + "icon": "go" }, { - "title": "Embedded email links", - "href": "/docs/custom-flows/embedded-email-links" + "title": "Ruby / Rails", + "href": "/docs/backend-requests/handling/ruby-rails", + "icon": "ruby" }, { - "title": "Multi-session applications", - "href": "/docs/custom-flows/multi-session-applications" + "title": "Manual JWT Verification", + "href": "/docs/backend-requests/handling/manual-jwt" }, { - "title": "Bot sign-up protection", - "href": "/docs/custom-flows/bot-sign-up-protection" + "title": "Node.js (Deprecated)", + "href": "/docs/backend-requests/handling/nodejs" } ] ] }, { - "title": "Account updates", + "title": "Versioning", "items": [ [ { - "title": "Forgot password", - "href": "/docs/custom-flows/forgot-password" - }, - { - "title": "User impersonation", - "href": "/docs/custom-flows/user-impersonation" - }, - { - "title": "Add email", - "href": "/docs/custom-flows/add-email" + "title": "Overview", + "href": "/docs/backend-requests/versioning/overview" }, { - "title": "Add phone", - "href": "/docs/custom-flows/add-phone" - }, + "title": "Available versions", + "href": "/docs/backend-requests/versioning/available-versions" + } + ] + ] + }, + { + "title": "Resources", + "items": [ + [ { - "title": "Manage SMS-based MFA", - "href": "/docs/custom-flows/manage-sms-based-mfa" + "title": "Session tokens", + "href": "/docs/backend-requests/resources/session-tokens" }, { - "title": "Manage TOTP-based MFA", - "href": "/docs/custom-flows/manage-totp-based-mfa" + "title": "Rate limits", + "href": "/docs/backend-requests/resources/rate-limits" } ] ] } ] ] + }, + { + "title": "Webhooks", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/webhooks/overview" + }, + { + "title": "Sync Clerk data to your application with webhooks", + "href": "/docs/webhooks/sync-data" + }, + { + "title": "Handling webhooks with Inngest", + "href": "/docs/webhooks/inngest" + }, + { + "title": "Send webhooks to Loops", + "href": "/docs/webhooks/loops" + }, + { + "title": "Debug your webhooks", + "href": "/docs/webhooks/debug-your-webhooks" + } + ] + ] } ] ] @@ -1801,178 +1682,240 @@ ], [ { - "title": "SDK References", + "title": "Customization", "items": [ [ { - "title": "Next.js", + "title": "Account Portal", "collapse": true, - "icon": "nextjs", "items": [ [ { "title": "Overview", - "href": "/docs/references/nextjs/overview" + "href": "/docs/customization/account-portal/overview" }, { - "title": "Guides", + "title": "Getting started", + "href": "/docs/customization/account-portal/getting-started" + }, + { + "title": "Advanced Usage", "items": [ [ { - "title": "Read session and user data", - "href": "/docs/references/nextjs/read-session-data" - }, - { - "title": "Add custom sign up and sign in pages", - "href": "/docs/references/nextjs/custom-signup-signin-pages" - }, - { - "title": "Integrate Clerk into your app with tRPC", - "href": "/docs/references/nextjs/trpc" + "title": "Direct links", + "href": "/docs/customization/account-portal/direct-links" }, { - "title": "Next.js rendering modes and Clerk", - "href": "/docs/references/nextjs/rendering-modes" + "title": "Disable Account Portal", + "href": "/docs/customization/account-portal/disable-account-portal" } ] ] + } + ] + ] + }, + { + "title": "Appearance Prop", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/customization/overview" }, { - "title": "General references", - "items": [ - [ - { - "title": "`clerkMiddleware()`", - "wrap": false, - "href": "/docs/references/nextjs/clerk-middleware" - } - ] - ] + "title": "Layout", + "href": "/docs/customization/layout" }, { - "title": "App Router References", + "title": "Themes", + "href": "/docs/customization/themes" + }, + { + "title": "Variables", + "href": "/docs/customization/variables" + } + ] + ] + }, + { + "title": "Localization", + "href": "/docs/customization/localization" + }, + { + "title": "Custom Pages", + "collapse": true, + "items": [ + [ + { + "title": "``", + "href": "/docs/customization/user-profile" + }, + { + "title": "``", + "href": "/docs/customization/organization-profile" + } + ] + ] + }, + { + "title": "Custom Menu Items", + "collapse": true, + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/customization/user-button" + } + ] + ] + }, + { + "title": "Elements", + "tag": "(Beta)", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/customization/elements/overview" + }, + { + "title": "Guides", "items": [ [ { - "title": "`auth()`", - "wrap": false, - "href": "/docs/references/nextjs/auth" - }, - { - "title": "`currentUser()`", - "wrap": false, - "href": "/docs/references/nextjs/current-user" + "title": "Build a sign-in flow", + "href": "/docs/customization/elements/guides/sign-in" }, { - "title": "Route Handlers", - "href": "/docs/references/nextjs/route-handlers" + "title": "Build a sign-up flow", + "href": "/docs/customization/elements/guides/sign-up" }, { - "title": "Server Actions", - "href": "/docs/references/nextjs/server-actions" + "title": "Styling", + "href": "/docs/customization/elements/guides/styling" } ] ] }, { - "title": "Pages Router References", + "title": "Examples", "items": [ [ { - "title": "`getAuth()`", - "wrap": false, - "href": "/docs/references/nextjs/get-auth" + "title": "Sign-in", + "href": "/docs/customization/elements/examples/sign-in" }, { - "title": "`buildClerkProps()`", - "wrap": false, - "href": "/docs/references/nextjs/build-clerk-props" + "title": "Sign-up", + "href": "/docs/customization/elements/examples/sign-up" + }, + { + "title": "Primitives", + "href": "/docs/customization/elements/examples/primitives" + }, + { + "title": "shadcn/ui", + "href": "/docs/customization/elements/examples/shadcn-ui" } ] ] }, { - "title": "Demo Repositories", + "title": "Component Reference", "items": [ [ { - "title": "App Router Demo Repo", - "href": "https://github.com/clerk/clerk-nextjs-demo-app-router" + "title": "Common", + "href": "/docs/customization/elements/reference/common" }, { - "title": "Pages Router Demo Repo", - "href": "https://github.com/clerk/clerk-nextjs-demo-pages-router" + "title": "Sign-in", + "href": "/docs/customization/elements/reference/sign-in" + }, + { + "title": "Sign-up", + "href": "/docs/customization/elements/reference/sign-up" } ] ] } ] ] - }, + } + ] + ] + } + ], + [ + { + "title": "Development", + "items": [ + [ { - "title": "React", + "title": "Testing", "collapse": true, - "icon": "react", "items": [ [ { "title": "Overview", - "href": "/docs/references/react/overview" + "href": "/docs/testing/overview" }, { - "title": "Client-side helpers", + "title": "Test Emails and Phones", + "href": "/docs/testing/test-emails-and-phones" + }, + { + "title": "Testing Frameworks", "items": [ [ { - "title": "`useUser()`", - "wrap": false, - "href": "/docs/references/react/use-user" - }, - { - "title": "`useClerk()`", - "wrap": false, - "href": "/docs/references/react/use-clerk" - }, - { - "title": "`useAuth()`", - "wrap": false, - "href": "/docs/references/react/use-auth" - }, - { - "title": "`useSignIn()`", - "wrap": false, - "href": "/docs/references/react/use-sign-in" - }, - { - "title": "`useSignUp()`", - "wrap": false, - "href": "/docs/references/react/use-sign-up" - }, - { - "title": "`useSession()`", - "wrap": false, - "href": "/docs/references/react/use-session" - }, - { - "title": "`useSessionList()`", - "wrap": false, - "href": "/docs/references/react/use-session-list" - }, - { - "title": "`useOrganization()`", - "wrap": false, - "href": "/docs/references/react/use-organization" + "title": "Playwright", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/testing/playwright/overview" + }, + { + "title": "Test helpers", + "href": "/docs/testing/playwright/test-helpers" + }, + { + "title": "Test authenticated flows", + "href": "/docs/testing/playwright/test-authenticated-flows" + } + ] + ] }, { - "title": "`useOrganizationList()`", - "wrap": false, - "href": "/docs/references/react/use-organization-list" + "title": "Cypress", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/testing/cypress/overview" + }, + { + "title": "Custom commands", + "href": "/docs/testing/cypress/custom-commands" + }, + { + "title": "Test Account Portal", + "href": "/docs/testing/cypress/test-account-portal" + } + ] + ] }, { - "title": "`useReverification()`", - "tag": "(Beta)", - "wrap": false, - "href": "/docs/references/react/use-reverification" + "title": "Postman or Insomnia", + "href": "/docs/testing/postman-or-insomnia" } ] ] @@ -1981,399 +1924,450 @@ ] }, { - "title": "JavaScript", + "title": "Errors", "collapse": true, - "icon": "javascript", "items": [ [ { "title": "Overview", - "href": "/docs/references/javascript/overview" + "href": "/docs/errors/overview" }, { - "title": "Clerk", - "collapse": true, - "items": [ - [ - { - "title": "Clerk class", - "href": "/docs/references/javascript/clerk/clerk" - }, - { - "title": "Organization methods", - "href": "/docs/references/javascript/clerk/organization-methods" - }, - { - "title": "Waitlist methods", - "href": "/docs/references/javascript/clerk/waitlist-methods" - }, - { - "title": "Redirect methods", - "href": "/docs/references/javascript/clerk/redirect-methods" - }, - { - "title": "BuildURLs", - "href": "/docs/references/javascript/clerk/build-urls" - }, - { - "title": "Handle navigation", - "href": "/docs/references/javascript/clerk/handle-navigation" - }, - { - "title": "Session methods", - "href": "/docs/references/javascript/clerk/session-methods" - } - ] - ] + "title": "Actor tokens", + "href": "/docs/errors/actor-tokens" }, { - "title": "User", - "collapse": true, - "items": [ - [ - { - "title": "User object", - "href": "/docs/references/javascript/user/user" - }, - { - "title": "TOTP methods", - "href": "/docs/references/javascript/user/totp" - }, - { - "title": "Password management methods", - "href": "/docs/references/javascript/user/password-management" - }, - { - "title": "Create metadata methods", - "href": "/docs/references/javascript/user/create-metadata" - } - ] - ] + "title": "Allowlist identifiers", + "href": "/docs/errors/allowlist-identifiers" }, { - "title": "Organization", - "collapse": true, - "items": [ - [ - { - "title": "Organization object", - "href": "/docs/references/javascript/organization/organization" - }, - { - "title": "Membership methods", - "href": "/docs/references/javascript/organization/members" - }, - { - "title": "Invitation methods", - "href": "/docs/references/javascript/organization/invitations" - }, - { - "title": "Domain methods", - "href": "/docs/references/javascript/organization/domains" - }, - { - "title": "Membership request methods", - "href": "/docs/references/javascript/organization/membership-request" - } - ] - ] + "title": "Application", + "href": "/docs/errors/application" }, { - "title": "Organization Invitation", - "href": "/docs/references/javascript/organization-invitation" + "title": "Authentication", + "href": "/docs/errors/authentication" }, { - "title": "Organization Membership", - "href": "/docs/references/javascript/organization-membership" + "title": "Backup codes", + "href": "/docs/errors/backup-codes" }, { - "title": "Organization Domain", - "href": "/docs/references/javascript/organization-domain" + "title": "Billing", + "href": "/docs/errors/billing" }, { - "title": "Organization Membership Request", - "href": "/docs/references/javascript/organization-membership-request" + "title": "Billing accounts", + "href": "/docs/errors/billing-accounts" }, { - "title": "Session", - "href": "/docs/references/javascript/session" + "title": "Blocklist identifiers", + "href": "/docs/errors/blocklist-identifiers" }, { - "title": "SessionWithActivities", - "href": "/docs/references/javascript/session-with-activities" + "title": "Clients", + "href": "/docs/errors/clients" }, { - "title": "Client", - "href": "/docs/references/javascript/client" + "title": "Cookie", + "href": "/docs/errors/cookie" }, { - "title": "ExternalAccount", - "href": "/docs/references/javascript/external-account" + "title": "Deprecation", + "href": "/docs/errors/deprecation" }, { - "title": "Email Address", - "href": "/docs/references/javascript/email-address" + "title": "Domains", + "href": "/docs/errors/domains" }, { - "title": "Phone Number", - "href": "/docs/references/javascript/phone-number" + "title": "Entitlements", + "href": "/docs/errors/entitlements" }, { - "title": "Sign In", - "collapse": true, + "title": "Features", + "href": "/docs/errors/features" + }, + { + "title": "Forms", + "href": "/docs/errors/forms" + }, + { + "title": "Identifications", + "href": "/docs/errors/identifications" + }, + { + "title": "Passkeys", + "href": "/docs/errors/passkeys" + }, + { + "title": "Rate Limits", + "href": "/docs/errors/rate-limits" + }, + { + "title": "Sign-in", + "href": "/docs/errors/sign-in" + }, + { + "title": "Sign-up", + "href": "/docs/errors/sign-up" + }, + { + "title": "Sign-in-tokens", + "href": "/docs/errors/sign-in-tokens" + } + ] + ] + }, + { + "title": "Troubleshooting", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/troubleshooting/overview" + }, + { + "title": "Email Deliverability", + "href": "/docs/troubleshooting/email-deliverability" + }, + { + "title": "Script Loading", + "href": "/docs/troubleshooting/script-loading" + }, + { + "title": "Help & Support", "items": [ [ { - "title": "Sign In", - "href": "/docs/references/javascript/sign-in/sign-in" - }, - { - "title": "First Factor", - "href": "/docs/references/javascript/sign-in/first-factor" + "title": "Create a minimal reproduction", + "href": "/docs/troubleshooting/create-a-minimal-reproduction" }, { - "title": "Second Factor", - "href": "/docs/references/javascript/sign-in/second-factor" + "title": "Community Discord", + "href": "https://clerk.com/discord" }, { - "title": "AuthenticateWith", - "href": "/docs/references/javascript/sign-in/authenticate-with" + "title": "Contact Support", + "href": "/support", + "target": "_blank" } ] ] + } + ] + ] + }, + { + "title": "Upgrade Guides", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/upgrade-guides/overview" + }, + { + "title": "Long term support policy", + "href": "/docs/upgrade-guides/long-term-support" + }, + { + "title": "Clerk SDK versioning", + "href": "/docs/upgrade-guides/sdk-versioning" + }, + { + "title": "Upgrading to @clerk/nextjs v6", + "href": "/docs/upgrade-guides/nextjs/v6" }, { - "title": "Sign Up", - "collapse": true, + "title": "Upgrading to Core 2", "items": [ [ { - "title": "Sign Up", - "href": "/docs/references/javascript/sign-up/sign-up" - }, - { - "title": "AuthenticateWith", - "href": "/docs/references/javascript/sign-up/authenticate-with" - }, - { - "title": "Verification", - "href": "/docs/references/javascript/sign-up/verification" - }, - { - "title": "Email Verification", - "href": "/docs/references/javascript/sign-up/email-verification" + "title": "Overview", + "href": "/docs/upgrade-guides/core-2/overview" }, { - "title": "Phone Verification", - "href": "/docs/references/javascript/sign-up/phone-verification" + "title": "Component redesign", + "href": "/docs/upgrade-guides/core-2/component-redesign" }, { - "title": "Web3 Verification", - "href": "/docs/references/javascript/sign-up/web3-verification" + "title": "SDK Guides", + "collapse": true, + "items": [ + [ + { + "title": "Next.js", + "href": "/docs/upgrade-guides/core-2/nextjs", + "icon": "nextjs" + }, + { + "title": "Remix", + "href": "/docs/upgrade-guides/core-2/remix", + "icon": "remix" + }, + { + "title": "Expo", + "href": "/docs/upgrade-guides/core-2/expo" + }, + { + "title": "Fastify", + "href": "/docs/upgrade-guides/core-2/fastify" + }, + { + "title": "React", + "href": "/docs/upgrade-guides/core-2/react", + "icon": "react" + }, + { + "title": "Node", + "href": "/docs/upgrade-guides/core-2/node" + }, + { + "title": "Backend", + "href": "/docs/upgrade-guides/core-2/backend" + }, + { + "title": "Chrome Extension", + "href": "/docs/upgrade-guides/core-2/chrome-extension" + }, + { + "title": "JavaScript", + "href": "/docs/upgrade-guides/core-2/javascript", + "icon": "javascript" + } + ] + ] } ] ] }, { - "title": "Web3 Wallet", - "collapse": true, + "title": "Upgrading to Core 1", "items": [ [ { - "title": "Web3 Wallet", - "href": "/docs/references/javascript/web3-wallet/web3-wallet" - }, - { - "title": "Verification", - "href": "/docs/references/javascript/web3-wallet/verification" + "title": "Overview", + "href": "/docs/upgrade-guides/upgrading-from-v2-to-v3" } ] ] }, { - "title": "Types", - "collapse": true, + "title": "Upgrading from Node to Express SDK", "items": [ [ { "title": "Overview", - "href": "/docs/references/javascript/types/overview" - }, - { - "title": "ClerkAPIError", - "href": "/docs/references/javascript/types/clerk-api-error" - }, - { - "title": "ClerkPaginatedResponse", - "href": "/docs/references/javascript/types/clerk-paginated-response" - }, + "href": "/docs/upgrade-guides/node-to-express" + } + ] + ] + }, + { + "title": "Dashboard", + "items": [ + [ { - "title": "CustomPage", - "href": "/docs/references/javascript/types/custom-page" + "title": "API Key Changes", + "href": "/docs/upgrade-guides/api-keys" }, { - "title": "EmailLinkError", - "href": "/docs/references/javascript/types/email-link-error" + "title": "URL-based session syncing", + "href": "/docs/upgrade-guides/url-based-session-syncing" }, { - "title": "DeletedObject", - "href": "/docs/references/javascript/types/deleted-object" - }, + "title": "Progressive Sign up", + "href": "/docs/upgrade-guides/progressive-sign-up" + } + ] + ] + } + ] + ] + }, + { + "title": "Deployments & Migrations", + "collapse": true, + "items": [ + [ + { + "title": "Instances / Environments", + "href": "/docs/deployments/environments" + }, + { + "title": "Clerk environment variables", + "href": "/docs/deployments/clerk-environment-variables" + }, + { + "title": "Deployment", + "items": [ + [ { - "title": "Metadata types", - "href": "/docs/references/javascript/types/metadata" + "title": "Deploy to production", + "href": "/docs/deployments/overview" }, { - "title": "OAuth types", - "href": "/docs/references/javascript/types/oauth" + "title": "Deploy to Vercel", + "href": "/docs/deployments/deploy-to-vercel" }, { - "title": "PasskeyResource", - "href": "/docs/references/javascript/types/passkey-resource" + "title": "Deploy behind a proxy", + "href": "/docs/deployments/deploy-behind-a-proxy" }, { - "title": "PublicUserData", - "href": "/docs/references/javascript/types/public-user-data" + "title": "Set up a staging environment", + "href": "/docs/deployments/set-up-staging" }, { - "title": "SessionStatus", - "href": "/docs/references/javascript/types/session-status" + "title": "Deploy a Chrome Extension to production", + "href": "/docs/deployments/deploy-chrome-extension" }, { - "title": "SessionVerification", - "href": "/docs/references/javascript/types/session-verification" + "title": "Deploy an Expo app to production", + "href": "/docs/deployments/deploy-expo" }, { - "title": "SignInFirstFactor", - "href": "/docs/references/javascript/types/sign-in-first-factor" + "title": "Deploy an Astro app to production", + "href": "/docs/deployments/deploy-astro" }, { - "title": "SignInSecondFactor", - "href": "/docs/references/javascript/types/sign-in-second-factor" + "title": "Set up a preview environment", + "href": "/docs/deployments/set-up-preview-environment" }, { - "title": "SignInRedirectOptions", - "href": "/docs/references/javascript/types/sign-in-redirect-options" - }, + "title": "Changing domains", + "href": "/docs/deployments/changing-domains" + } + ] + ] + }, + { + "title": "Migrations", + "items": [ + [ { - "title": "SignUpRedirectOptions", - "href": "/docs/references/javascript/types/sign-up-redirect-options" + "title": "Migrate to Clerk", + "href": "/docs/deployments/migrate-overview" }, { - "title": "SignInInitialValues", - "href": "/docs/references/javascript/types/sign-in-initial-values" + "title": "Migrate from Firebase", + "href": "/docs/deployments/migrate-from-firebase" }, { - "title": "SignUpInitialValues", - "href": "/docs/references/javascript/types/sign-up-initial-values" + "title": "Migrate from Cognito", + "href": "/docs/deployments/migrate-from-cognito" }, { - "title": "RedirectOptions", - "href": "/docs/references/javascript/types/redirect-options" - }, + "title": "Exporting user data", + "href": "/docs/deployments/exporting-users" + } + ] + ] + }, + { + "title": "Cookie Information", + "items": [ + [ { - "title": "Verification", - "href": "/docs/references/javascript/types/verification" + "title": "Clerk Cookie Information", + "href": "/docs/deployments/clerk-cookies" } ] ] } ] ] - }, + } + ] + ] + } + ], + [ + { + "title": "Advanced", + "items": [ + [ { - "title": "Chrome Extension", + "title": "How Clerk works", "collapse": true, - "icon": "chrome", "items": [ [ { "title": "Overview", - "href": "/docs/references/chrome-extension/overview" + "href": "/docs/how-clerk-works/overview" }, { - "title": "Guides", - "collapse": false, - "items": [ - [ - { - "title": "Add React Router", - "href": "/docs/references/chrome-extension/add-react-router" - }, - { - "title": "Sync auth status between your Chrome Extension and web app", - "href": "/docs/references/chrome-extension/sync-host" - }, - { - "title": "`createClerkClient()`", - "href": "/docs/references/chrome-extension/create-clerk-client" - }, - { - "title": "Configure a consistent CRX ID", - "href": "/docs/references/chrome-extension/configure-consistent-crx-id" - } - ] - ] + "title": "Cookies", + "href": "/docs/how-clerk-works/cookies" + }, + { + "title": "Tokens & signatures", + "href": "/docs/how-clerk-works/tokens-signatures" } ] ] }, { - "title": "Expo", + "title": "Integrations", "collapse": true, - "icon": "expo", "items": [ [ { "title": "Overview", - "href": "/docs/references/expo/overview" + "href": "/docs/integrations/overview" }, { - "title": "Hooks", + "title": "Databases", "items": [ [ { - "title": "useLocalCredentials()", - "href": "/docs/references/expo/use-local-credentials" + "title": "Convex", + "href": "/docs/integrations/databases/convex" }, { - "title": "useOAuth()", - "href": "/docs/references/expo/use-oauth" - } - ] - ] - }, - { - "title": "Guides", - "items": [ - [ + "title": "Fauna", + "href": "/docs/integrations/databases/fauna" + }, { - "title": "Read session and user data", - "href": "/docs/references/expo/read-session-user-data" + "title": "Firebase", + "href": "/docs/integrations/databases/firebase" }, { - "title": "Use biometrics with local credentials", - "href": "/docs/references/expo/local-credentials" + "title": "Grafbase", + "href": "/docs/integrations/databases/grafbase" }, { - "title": "Offline support", - "href": "/docs/references/expo/offline-support" + "title": "Hasura", + "href": "/docs/integrations/databases/hasura" + }, + { + "title": "InstantDB", + "href": "/docs/integrations/databases/instantdb" + }, + { + "title": "Nhost", + "href": "/docs/integrations/databases/nhost" + }, + { + "title": "Supabase", + "href": "/docs/integrations/databases/supabase" + }, + { + "title": "Neon", + "href": "/docs/integrations/databases/neon" } ] ] }, { - "title": "Web support", - "collapse": true, + "title": "Analytics", "items": [ [ { - "title": "Overview", - "href": "/docs/references/expo/web-support/overview" - }, - { - "title": "Add custom sign-up and sign-in pages", - "href": "/docs/references/expo/web-support/custom-signup-signin-pages" + "title": "Google Analytics", + "href": "/docs/integrations/analytics/google-analytics" } ] ] @@ -2382,110 +2376,93 @@ ] }, { - "title": "iOS", - "tag": "(Beta)", + "title": "Advanced Usage", "collapse": true, - "icon": "apple", "items": [ [ { - "title": "Overview", - "href": "/docs/references/ios/overview" + "title": "Clerk as an OAuth2 Provider", + "href": "/docs/advanced-usage/clerk-idp" }, { - "title": "`getToken()`", - "href": "/docs/references/ios/get-token" + "title": "Authentication across different domains", + "href": "/docs/advanced-usage/satellite-domains" }, { - "title": "Guides", - "items": [ - [ - { - "title": "Sign in with Apple", - "href": "/docs/references/ios/sign-in-with-apple" - } - ] - ] + "title": "Proxying the Clerk Frontend API", + "href": "/docs/advanced-usage/using-proxies" } ] ] }, { - "title": "Node.js", + "title": "Security & Privacy", "collapse": true, - "icon": "nodejs", "items": [ [ { "title": "Overview", - "href": "/docs/references/nodejs/overview" + "href": "/docs/security/overview" }, { - "title": "Available methods", - "href": "/docs/references/nodejs/available-methods" + "title": "Vulnerability disclosure policy", + "href": "/docs/security/vulnerability-disclosure-policy" }, { - "title": "Connect/Express Middleware", - "href": "/docs/backend-requests/handling/nodejs" - } - ] - ] - }, - { - "title": "Express", - "collapse": true, - "icon": "expressjs", - "items": [ - [ + "title": "XSS leak protection", + "href": "/docs/security/xss-leak-protection" + }, { - "title": "Overview", - "href": "/docs/references/express/overview" - } - ] - ] - }, - { - "title": "React Router", - "collapse": true, - "icon": "react-router", - "tag": "(Beta)", - "items": [ - [ + "title": "CSRF protection", + "href": "/docs/security/csrf-protection" + }, { - "title": "Overview", - "href": "/docs/references/react-router/overview" + "title": "CSP Headers", + "href": "/docs/security/clerk-csp" }, { - "title": "Guides", + "title": "Fixation protection", + "href": "/docs/security/fixation-protection" + }, + { + "title": "Password protection and rules", + "href": "/docs/security/password-protection" + }, + { + "title": "Clerk Telemetry", + "href": "/docs/telemetry" + }, + { + "title": "Protect accounts from attacks", "items": [ [ { - "title": "Read session and user data", - "href": "/docs/references/react-router/read-session-data" + "title": "Brute force attacks and locking user accounts", + "href": "/docs/security/user-lock-guide" }, { - "title": "Add custom sign up and sign in pages", - "href": "/docs/references/react-router/custom-signup-signin-pages" + "title": "Protect sign ups from bots", + "href": "/docs/security/bot-protection" }, { - "title": "Library mode", - "href": "/docs/references/react-router/library-mode" - } - ] - ] - }, - { - "title": "General references", - "items": [ - [ + "title": "Customize max sign-in attempts and duration of of user lockout", + "href": "/docs/security/customize-user-lockout" + }, { - "title": "`rootAuthLoader()`", - "wrap": false, - "href": "/docs/references/react-router/root-auth-loader" + "title": "Unlock accounts from the Clerk Dashboard", + "href": "/docs/security/unlock-user-accounts" }, { - "title": "`getAuth()`", - "href": "/docs/references/react-router/get-auth" + "title": "Programmatically lock and unlock accounts", + "href": "/docs/security/programmatically-lock-user-accounts" + }, + { + "title": "Protect email link sign-ins and sign-ups", + "href": "/docs/security/email-link-protection" + }, + { + "title": "Unauthorized sign-in", + "href": "/docs/security/unauthorized-sign-in" } ] ] @@ -2494,319 +2471,419 @@ ] }, { - "title": "Remix", + "title": "Custom Flows", "collapse": true, - "icon": "remix", "items": [ [ { - "title": "``", - "wrap": false, - "href": "/docs/references/remix/clerk-app" - }, - { - "title": "SPA Mode", - "wrap": false, - "href": "/docs/references/remix/spa-mode" - }, - { - "title": "Add custom sign up and sign in pages", - "wrap": true, - "href": "/docs/references/remix/custom-signup-signin-pages" + "title": "Overview", + "href": "/docs/custom-flows/overview" }, { - "title": "Read session and user data", - "wrap": true, - "href": "/docs/references/remix/read-session-data" - } - ] - ] - }, - { - "title": "TanStack Start", - "collapse": true, - "icon": "tanstack", - "tag": "(Beta)", - "items": [ - [ - { - "title": "Overview", - "href": "/docs/references/tanstack-start/overview" + "title": "Error handling", + "href": "/docs/custom-flows/error-handling" }, { - "title": "General references", + "title": "Authentication", "items": [ [ { - "title": "`getAuth()`", - "href": "/docs/references/tanstack-start/get-auth" + "title": "Email & password", + "href": "/docs/custom-flows/email-password" + }, + { + "title": "Email / SMS OTP", + "href": "/docs/custom-flows/email-sms-otp" + }, + { + "title": "Email links", + "href": "/docs/custom-flows/email-links" + }, + { + "title": "Email & password + MFA", + "href": "/docs/custom-flows/email-password-mfa" + }, + { + "title": "Passkeys", + "href": "/docs/custom-flows/passkeys" + }, + { + "title": "Google One Tap", + "href": "/docs/custom-flows/google-one-tap" + }, + { + "title": "OAuth connections", + "href": "/docs/custom-flows/oauth-connections" + }, + { + "title": "Enterprise connections", + "href": "/docs/custom-flows/enterprise-connections" + }, + { + "title": "Sign out", + "href": "/docs/custom-flows/sign-out" }, { - "title": "`createClerkHandler()`", - "href": "/docs/references/tanstack-start/create-clerk-handler" + "title": "Sign-up with application invitations", + "href": "/docs/custom-flows/invitations" + }, + { + "title": "Embedded email links", + "href": "/docs/custom-flows/embedded-email-links" + }, + { + "title": "Multi-session applications", + "href": "/docs/custom-flows/multi-session-applications" + }, + { + "title": "Bot sign-up protection", + "href": "/docs/custom-flows/bot-sign-up-protection" } ] ] }, { - "title": "Guides", + "title": "Account updates", "items": [ [ { - "title": "Add custom sign up and sign in pages", - "href": "/docs/references/tanstack-start/custom-signup-signin-pages", - "wrap": true + "title": "Forgot password", + "href": "/docs/custom-flows/forgot-password" }, { - "title": "Read session and user data", - "href": "/docs/references/tanstack-start/read-session-data", - "wrap": true + "title": "User impersonation", + "href": "/docs/custom-flows/user-impersonation" + }, + { + "title": "Add email", + "href": "/docs/custom-flows/add-email" + }, + { + "title": "Add phone", + "href": "/docs/custom-flows/add-phone" + }, + { + "title": "Manage SMS-based MFA", + "href": "/docs/custom-flows/manage-sms-based-mfa" + }, + { + "title": "Manage TOTP-based MFA", + "href": "/docs/custom-flows/manage-totp-based-mfa" } ] ] } ] ] - }, + } + ] + ] + } + ], + [ + { + "title": "SDK References", + "items": [ + [ { - "title": "Go", + "title": "JavaScript", "collapse": true, - "icon": "go", + "icon": "javascript", "items": [ [ { - "title": "Overview", - "href": "/docs/references/go/overview" - }, - { - "title": "Verifying sessions", - "href": "/docs/references/go/verifying-sessions" - }, - { - "title": "Use Clerk Go for Backend API Operations", - "href": "/docs/references/go/other-examples" + "title": "Quickstart", + "href": "/docs/quickstarts/javascript", + "icon": "javascript" }, - { - "title": "Go SDK repository", - "href": "https://github.com/clerk/clerk-sdk-go" - } - ] - ] - }, - { - "title": "Astro", - "collapse": true, - "icon": "astro", - "items": [ - [ { "title": "Overview", - "href": "/docs/references/astro/overview" + "href": "/docs/references/javascript/overview" }, { - "title": "UI Frameworks", + "title": "Clerk", + "collapse": true, "items": [ [ { - "title": "Use Clerk with Astro and React", - "href": "/docs/references/astro/react" - } - ] - ] - }, - { - "title": "Guides", - "items": [ - [ + "title": "Clerk class", + "href": "/docs/references/javascript/clerk/clerk" + }, { - "title": "Migrating from community SDK", - "href": "/docs/references/astro/migrating-from-astro-community-sdk" + "title": "Organization methods", + "href": "/docs/references/javascript/clerk/organization-methods" }, { - "title": "Read session and user data", - "wrap": false, - "href": "/docs/references/astro/read-session-data" + "title": "Waitlist methods", + "href": "/docs/references/javascript/clerk/waitlist-methods" }, { - "title": "Hybrid rendering", - "wrap": false, - "href": "/docs/references/astro/hybrid-rendering" + "title": "Redirect methods", + "href": "/docs/references/javascript/clerk/redirect-methods" + }, + { + "title": "BuildURLs", + "href": "/docs/references/javascript/clerk/build-urls" + }, + { + "title": "Handle navigation", + "href": "/docs/references/javascript/clerk/handle-navigation" + }, + { + "title": "Session methods", + "href": "/docs/references/javascript/clerk/session-methods" } ] ] }, { - "title": "General references", + "title": "User", + "collapse": true, "items": [ [ { - "title": "`clerkMiddleware()`", - "wrap": false, - "href": "/docs/references/astro/clerk-middleware" + "title": "User object", + "href": "/docs/references/javascript/user/user" }, { - "title": "Locals", - "wrap": false, - "href": "/docs/references/astro/locals" + "title": "TOTP methods", + "href": "/docs/references/javascript/user/totp" }, { - "title": "Endpoints", - "wrap": false, - "href": "/docs/references/astro/endpoints" + "title": "Password management methods", + "href": "/docs/references/javascript/user/password-management" + }, + { + "title": "Create metadata methods", + "href": "/docs/references/javascript/user/create-metadata" } ] ] }, { - "title": "Client-side helpers", + "title": "Organization", + "collapse": true, "items": [ [ { - "title": "`$authStore`", - "wrap": false, - "href": "/docs/references/astro/auth-store" - }, - { - "title": "`$clerkStore`", - "wrap": false, - "href": "/docs/references/astro/clerk-store" - }, - { - "title": "`$userStore`", - "wrap": false, - "href": "/docs/references/astro/user-store" - }, - { - "title": "`$signInStore`", - "wrap": false, - "href": "/docs/references/astro/sign-in-store" + "title": "Organization object", + "href": "/docs/references/javascript/organization/organization" }, { - "title": "`$signUpStore`", - "wrap": false, - "href": "/docs/references/astro/sign-up-store" + "title": "Membership methods", + "href": "/docs/references/javascript/organization/members" }, { - "title": "`$sessionStore`", - "wrap": false, - "href": "/docs/references/astro/session-store" + "title": "Invitation methods", + "href": "/docs/references/javascript/organization/invitations" }, { - "title": "`$sessionListStore`", - "wrap": false, - "href": "/docs/references/astro/session-list-store" + "title": "Domain methods", + "href": "/docs/references/javascript/organization/domains" }, { - "title": "`$organizationStore`", - "wrap": false, - "href": "/docs/references/astro/organization-store" + "title": "Membership request methods", + "href": "/docs/references/javascript/organization/membership-request" } ] ] - } - ] - ] - }, - { - "title": "Nuxt", - "collapse": true, - "icon": "nuxt", - "items": [ - [ - { "title": "Overview", "href": "/docs/references/nuxt/overview" }, + }, { - "title": "Guides", + "title": "Organization Invitation", + "href": "/docs/references/javascript/organization-invitation" + }, + { + "title": "Organization Membership", + "href": "/docs/references/javascript/organization-membership" + }, + { + "title": "Organization Domain", + "href": "/docs/references/javascript/organization-domain" + }, + { + "title": "Organization Membership Request", + "href": "/docs/references/javascript/organization-membership-request" + }, + { + "title": "Session", + "href": "/docs/references/javascript/session" + }, + { + "title": "SessionWithActivities", + "href": "/docs/references/javascript/session-with-activities" + }, + { + "title": "Client", + "href": "/docs/references/javascript/client" + }, + { + "title": "ExternalAccount", + "href": "/docs/references/javascript/external-account" + }, + { + "title": "Email Address", + "href": "/docs/references/javascript/email-address" + }, + { + "title": "Phone Number", + "href": "/docs/references/javascript/phone-number" + }, + { + "title": "Sign In", + "collapse": true, "items": [ [ { - "title": "Read session and user data", - "wrap": false, - "href": "/docs/references/nuxt/read-session-data" + "title": "Sign In", + "href": "/docs/references/javascript/sign-in/sign-in" + }, + { + "title": "First Factor", + "href": "/docs/references/javascript/sign-in/first-factor" + }, + { + "title": "Second Factor", + "href": "/docs/references/javascript/sign-in/second-factor" }, { - "title": "Protect pages", - "wrap": false, - "href": "/docs/references/nuxt/protect-pages" + "title": "AuthenticateWith", + "href": "/docs/references/javascript/sign-in/authenticate-with" } ] ] }, { - "title": "General references", + "title": "Sign Up", + "collapse": true, "items": [ [ { - "title": "`clerkMiddleware()`", - "wrap": false, - "href": "/docs/references/nuxt/clerk-middleware" + "title": "Sign Up", + "href": "/docs/references/javascript/sign-up/sign-up" + }, + { + "title": "AuthenticateWith", + "href": "/docs/references/javascript/sign-up/authenticate-with" + }, + { + "title": "Verification", + "href": "/docs/references/javascript/sign-up/verification" + }, + { + "title": "Email Verification", + "href": "/docs/references/javascript/sign-up/email-verification" + }, + { + "title": "Phone Verification", + "href": "/docs/references/javascript/sign-up/phone-verification" + }, + { + "title": "Web3 Verification", + "href": "/docs/references/javascript/sign-up/web3-verification" } ] ] - } - ] - ] - }, - { - "title": "Vue", - "collapse": true, - "icon": "vue", - "items": [ - [ - { "title": "Overview", "href": "/docs/references/vue/overview" }, + }, { - "title": "Guides", + "title": "Web3 Wallet", + "collapse": true, "items": [ [ { - "title": "Migrating from community SDK", - "href": "/docs/references/vue/migrating-from-vue-community-sdk" + "title": "Web3 Wallet", + "href": "/docs/references/javascript/web3-wallet/web3-wallet" + }, + { + "title": "Verification", + "href": "/docs/references/javascript/web3-wallet/verification" } ] ] }, { - "title": "Client-side helpers", + "title": "Types", + "collapse": true, "items": [ [ { - "title": "`useUser()`", - "wrap": false, - "href": "/docs/references/vue/use-user" + "title": "Overview", + "href": "/docs/references/javascript/types/overview" }, { - "title": "`useClerk()`", - "wrap": false, - "href": "/docs/references/vue/use-clerk" + "title": "ClerkAPIError", + "href": "/docs/references/javascript/types/clerk-api-error" }, { - "title": "`useAuth()`", - "wrap": false, - "href": "/docs/references/vue/use-auth" + "title": "ClerkPaginatedResponse", + "href": "/docs/references/javascript/types/clerk-paginated-response" }, { - "title": "`useSignIn()`", - "wrap": false, - "href": "/docs/references/vue/use-sign-in" + "title": "CustomPage", + "href": "/docs/references/javascript/types/custom-page" }, { - "title": "`useSignUp`", - "wrap": false, - "href": "/docs/references/vue/use-sign-up" + "title": "EmailLinkError", + "href": "/docs/references/javascript/types/email-link-error" }, { - "title": "`useSession()`", - "wrap": false, - "href": "/docs/references/vue/use-session" + "title": "DeletedObject", + "href": "/docs/references/javascript/types/deleted-object" }, { - "title": "`useSessionList()`", - "wrap": false, - "href": "/docs/references/vue/use-session-list" + "title": "Metadata types", + "href": "/docs/references/javascript/types/metadata" }, { - "title": "`useOrganization()`", - "wrap": false, - "href": "/docs/references/vue/use-organization" + "title": "OAuth types", + "href": "/docs/references/javascript/types/oauth" + }, + { + "title": "PasskeyResource", + "href": "/docs/references/javascript/types/passkey-resource" + }, + { + "title": "PublicUserData", + "href": "/docs/references/javascript/types/public-user-data" + }, + { + "title": "SessionStatus", + "href": "/docs/references/javascript/types/session-status" + }, + { + "title": "SessionVerification", + "href": "/docs/references/javascript/types/session-verification" + }, + { + "title": "SignInFirstFactor", + "href": "/docs/references/javascript/types/sign-in-first-factor" + }, + { + "title": "SignInSecondFactor", + "href": "/docs/references/javascript/types/sign-in-second-factor" + }, + { + "title": "SignInRedirectOptions", + "href": "/docs/references/javascript/types/sign-in-redirect-options" + }, + { + "title": "SignUpRedirectOptions", + "href": "/docs/references/javascript/types/sign-up-redirect-options" + }, + { + "title": "SignInInitialValues", + "href": "/docs/references/javascript/types/sign-in-initial-values" + }, + { + "title": "SignUpInitialValues", + "href": "/docs/references/javascript/types/sign-up-initial-values" + }, + { + "title": "RedirectOptions", + "href": "/docs/references/javascript/types/redirect-options" + }, + { + "title": "Verification", + "href": "/docs/references/javascript/types/verification" } ] ] @@ -2814,37 +2891,6 @@ ] ] }, - { - "title": "Ruby / Rails", - "collapse": true, - "icon": "ruby", - "items": [ - [ - { - "title": "Overview", - "href": "/docs/references/ruby/overview" - }, - { - "title": "Available Methods", - "href": "/docs/references/ruby/available-methods" - }, - { - "title": "Rack/Rails integration", - "href": "/docs/references/ruby/rack-rails" - }, - { - "title": "Ruby SDK repository", - "href": "https://github.com/clerk/clerk-sdk-ruby" - } - ] - ] - }, - { - "title": "Python", - "icon": "python", - "href": "https://github.com/clerk/clerk-sdk-python/blob/main/README.md", - "target": "_blank" - }, { "title": "JS Backend SDK", "collapse": true, @@ -3398,77 +3444,6 @@ } ] ] - }, - { - "title": "Community SDKs", - "collapse": true, - "items": [ - [ - { - "title": "Redwood", - "collapse": true, - "icon": "redwood", - "items": [ - [ - { - "title": "Overview", - "href": "/docs/references/redwood/overview" - }, - { - "title": "Redwood", - "href": "https://redwoodjs.com/docs/auth/clerk", - "icon": "redwood" - } - ] - ] - }, - { - "title": "Svelte", - "href": "https://github.com/markjaquith/clerk-sveltekit", - "icon": "svelte" - }, - { - "title": "Vue", - "href": "https://vue-clerk.vercel.app", - "icon": "vue" - }, - { - "title": "Elysia", - "href": "https://github.com/wobsoriano/elysia-clerk", - "icon": "elysia" - }, - { - "title": "Rust", - "href": "https://github.com/cincinnati-ventures/clerk-rs", - "icon": "rust" - }, - { - "title": "Hono", - "href": "https://github.com/honojs/middleware/tree/main/packages/clerk-auth", - "icon": "hono" - }, - { - "title": "C#", - "href": "https://github.com/Hawxy/Clerk.Net", - "icon": "c-sharp" - }, - { - "title": "Koa", - "href": "https://github.com/dimkl/clerk-koa/blob/main/README.md", - "icon": "koa" - }, - { - "title": "Angular", - "href": "https://github.com/anagstef/ngx-clerk?tab=readme-ov-file#ngx-clerk", - "icon": "angular" - }, - { - "title": "SolidJS", - "href": "https://github.com/spirit-led-software/clerk-solidjs", - "icon": "solid" - } - ] - ] } ] ] diff --git a/docs/quickstarts/setup-clerk.mdx b/docs/quickstarts/setup-clerk.mdx index 6e22ce4582..3631ed0597 100644 --- a/docs/quickstarts/setup-clerk.mdx +++ b/docs/quickstarts/setup-clerk.mdx @@ -30,44 +30,68 @@ Before you can start integrating Clerk into your application, you need to create Now that your application is created in the Clerk Dashboard, you can integrate it into your codebase. To integrate Clerk into your application, use one of our [quickstarts](/docs/quickstarts/overview): - - [Next.js](/docs/quickstarts/nextjs) - - Easily add secure, beautiful, and fast authentication to Next.js with Clerk. - - {} + - [Next.js](/docs/quickstarts/nextjs) + - Easily add secure, beautiful, and fast authentication to Next.js with Clerk. + - {} - --- + --- - - [React](/docs/quickstarts/react) - - Get started installing and initializing Clerk in a new React application. - - {} + - [React](/docs/quickstarts/react) + - Get started installing and initializing Clerk in a new React + Vite app. + - {} - --- + --- - - [JavaScript](/docs/quickstarts/javascript) - - Add authentication and user management to your JavaScript application. - - {} + - [Remix](/docs/quickstarts/remix) + - Easily add secure, edge- and SSR-friendly authentication to Remix with Clerk. + - {} - --- + --- - - [Remix](/docs/quickstarts/remix) - - Easily add secure, edge- and SSR-friendly authentication to Remix with Clerk. - - {} + - [RedwoodJS](/docs/references/redwood/overview) + - Grow your RedwoodJS application with Clerk user management and authentication. + - {} - --- + --- - - [RedwoodJS](/docs/references/redwood/overview) - - Grow your RedwoodJS application with Clerk user management and authentication. - - {} + - [React Native / Expo](/docs/quickstarts/expo) + - Use Clerk with Expo to authenticate users in your React Native application. + - {} - --- + --- - - [Expo / React Native](/docs/quickstarts/expo) - - Use Clerk with Expo to authenticate users in your React Native application. - - {} + - [Astro](/docs/quickstarts/astro) + - Easily add secure and SSR-friendly authentication to your Astro application with Clerk. + - {} - --- + --- - - [Fastify](/docs/quickstarts/fastify) - - Learn about installing and initializing Clerk in a new Fastify application. - - {} + - [iOS](/docs/quickstarts/ios) + - Use the Clerk iOS SDK to authenticate users in your native Apple applications. + - {} + + --- + + - [TanStack Start](/docs/quickstarts/tanstack-start) + - Easily add secure and SSR-friendly authentication to your TanStack Start application with Clerk. + - ![](data:image/webp;base64,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) + + --- + + - [React Router](/docs/quickstarts/react-router) + - Easily add secure, edge- and SSR-friendly authentication to React Router with Clerk. + - {} + + --- + + - [Nuxt](/docs/quickstarts/nuxt) + - Easily add secure, beautiful, and fast authentication to Nuxt with Clerk. + - {} + + --- + + - [Vue](/docs/quickstarts/vue) + - Get started installing and initializing Clerk in a new Vue + Vite app. + - {} From 3b017e6bf46b4b45286f9127cb38b36f06ba8aee Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Fri, 10 Jan 2025 03:26:14 +0800 Subject: [PATCH 19/82] Move a large portion of /docs/references to /docs/sdk --- docs/_partials/react-hooks.mdx | 18 +- docs/_partials/vue-nuxt/composables.mdx | 16 +- docs/_partials/vue-nuxt/use-auth.mdx | 2 +- docs/advanced-usage/satellite-domains.mdx | 6 +- docs/advanced-usage/using-proxies.mdx | 4 +- docs/authentication/overview.mdx | 2 +- .../social-connections/atlassian.mdx | 2 +- .../social-connections/bitbucket.mdx | 2 +- .../social-connections/dropbox.mdx | 2 +- .../social-connections/facebook.mdx | 2 +- .../social-connections/hubspot.mdx | 2 +- .../social-connections/line.mdx | 2 +- .../social-connections/linkedin.mdx | 2 +- .../social-connections/notion.mdx | 2 +- .../social-connections/oauth.mdx | 4 +- .../social-connections/twitch.mdx | 2 +- .../social-connections/twitter.mdx | 2 +- .../social-connections/xero.mdx | 2 +- .../handling/js-backend-sdks.mdx | 4 +- docs/backend-requests/making/cross-origin.mdx | 4 +- .../making/custom-session-token.mdx | 2 +- docs/backend-requests/making/same-origin.mdx | 2 +- docs/backend-requests/overview.mdx | 2 +- .../authentication/google-one-tap.mdx | 2 +- docs/components/authentication/sign-in.mdx | 4 +- docs/components/authentication/sign-up.mdx | 4 +- docs/components/clerk-provider.mdx | 4 +- .../organization/create-organization.mdx | 2 +- .../organization/organization-list.mdx | 2 +- .../organization/organization-profile.mdx | 2 +- .../organization/organization-switcher.mdx | 2 +- docs/components/unstyled/sign-out-button.mdx | 2 +- docs/components/user/user-button.mdx | 2 +- docs/components/user/user-profile.mdx | 2 +- docs/components/waitlist.mdx | 2 +- docs/custom-flows/add-email.mdx | 2 +- docs/custom-flows/add-phone.mdx | 2 +- docs/custom-flows/email-links.mdx | 4 +- docs/custom-flows/email-password-mfa.mdx | 4 +- docs/custom-flows/email-password.mdx | 6 +- docs/custom-flows/manage-totp-based-mfa.mdx | 2 +- docs/custom-flows/sign-out.mdx | 2 +- docs/custom-flows/user-impersonation.mdx | 2 +- .../account-portal/getting-started.mdx | 2 +- docs/customization/elements/overview.mdx | 2 +- docs/customization/localization.mdx | 2 +- docs/customization/overview.mdx | 2 +- docs/deployments/deploy-astro.mdx | 2 +- docs/deployments/deploy-chrome-extension.mdx | 6 +- docs/deployments/deploy-to-vercel.mdx | 2 +- docs/deployments/set-up-staging.mdx | 2 +- .../setup-clerk.mdx => getting-started.mdx} | 24 +- docs/guides/add-onboarding-flow.mdx | 2 +- docs/guides/architecture-scenarios.mdx | 4 +- docs/guides/authjs-migration.mdx | 10 +- docs/guides/basic-rbac.mdx | 2 +- docs/guides/custom-redirects.mdx | 2 +- docs/guides/force-mfa.mdx | 2 +- docs/guides/force-organizations.mdx | 8 +- docs/guides/reverification.mdx | 2 +- docs/guides/waitlist.mdx | 6 +- docs/how-clerk-works/overview.mdx | 2 +- docs/index.mdx | 28 +-- docs/integrations/databases/convex.mdx | 2 +- docs/integrations/databases/fauna.mdx | 2 +- docs/integrations/databases/firebase.mdx | 2 +- docs/integrations/databases/grafbase.mdx | 4 +- docs/integrations/databases/hasura.mdx | 2 +- docs/integrations/databases/neon.mdx | 8 +- docs/integrations/databases/nhost.mdx | 4 +- docs/integrations/databases/supabase.mdx | 4 +- docs/manifest.json | 229 +++++++++--------- docs/organizations/creating-organizations.mdx | 2 +- .../custom-organization-switcher.mdx | 2 +- docs/organizations/inviting-users.mdx | 2 +- docs/organizations/manage-invitations.mdx | 2 +- .../manage-membership-requests.mdx | 2 +- docs/organizations/managing-roles.mdx | 2 +- docs/organizations/org-slugs-in-urls.mdx | 6 +- docs/organizations/overview.mdx | 2 +- docs/organizations/updating-organizations.mdx | 2 +- .../organizations/verify-user-permissions.mdx | 4 +- docs/organizations/viewing-memberships.mdx | 2 +- .../overview.mdx => quickstarts.mdx} | 26 +- docs/references/backend/overview.mdx | 2 +- docs/references/backend/types/auth-object.mdx | 16 +- docs/references/javascript/clerk/clerk.mdx | 2 +- .../javascript/clerk/organization-methods.mdx | 2 +- .../javascript/clerk/waitlist-methods.mdx | 2 +- .../javascript/organization-invitation.mdx | 2 +- .../javascript/organization/domains.mdx | 2 +- .../javascript/organization/invitations.mdx | 2 +- .../organization/membership-request.mdx | 2 +- .../javascript/organization/organization.mdx | 2 +- docs/references/javascript/overview.mdx | 4 +- .../javascript/quickstart.mdx} | 0 .../javascript/user/create-metadata.mdx | 2 +- .../javascript/user/password-management.mdx | 2 +- docs/references/javascript/user/totp.mdx | 2 +- docs/references/overview.mdx | 18 +- docs/references/sdk/backend-only.mdx | 2 +- docs/references/sdk/conventions.mdx | 2 +- docs/{references => sdk}/astro/auth-store.mdx | 0 .../astro/clerk-middleware.mdx | 0 .../{references => sdk}/astro/clerk-store.mdx | 0 docs/{references => sdk}/astro/endpoints.mdx | 4 +- .../astro/hybrid-rendering.mdx | 4 +- docs/{references => sdk}/astro/locals.mdx | 8 +- .../overview.mdx => sdk/astro/methods.mdx} | 22 +- .../migrating-from-astro-community-sdk.mdx | 0 .../astro/organization-store.mdx | 0 .../astro.mdx => sdk/astro/quickstart.mdx} | 10 +- docs/{references => sdk}/astro/react.mdx | 4 +- .../astro/read-session-data.mdx | 6 +- .../astro/session-list-store.mdx | 0 .../astro/session-store.mdx | 0 .../astro/sign-in-store.mdx | 0 .../astro/sign-up-store.mdx | 0 docs/{references => sdk}/astro/user-store.mdx | 0 .../chrome-extension/add-react-router.mdx | 0 .../configure-consistent-crx-id.mdx | 2 +- .../chrome-extension/create-clerk-client.mdx | 4 +- .../chrome-extension/methods.mdx} | 10 +- .../chrome-extension/quickstart.mdx} | 10 +- .../chrome-extension/sync-host.mdx | 4 +- .../expo/local-credentials.mdx | 6 +- .../overview.mdx => sdk/expo/methods.mdx} | 8 +- .../expo/offline-support.mdx | 0 .../expo.mdx => sdk/expo/quickstart.mdx} | 10 +- .../expo/read-session-user-data.mdx | 4 +- .../expo/use-local-credentials.mdx | 2 +- docs/{references => sdk}/expo/use-oauth.mdx | 0 .../custom-signup-signin-pages.mdx | 2 +- .../expo/web-support/overview.mdx | 4 +- .../overview.mdx => sdk/express/methods.mdx} | 2 +- .../express/quickstart.mdx} | 4 +- .../fastify/quickstart.mdx} | 2 +- .../{references => sdk}/go/other-examples.mdx | 0 .../go/overview.mdx => sdk/go/quickstart.mdx} | 2 +- .../go/verifying-sessions.mdx | 0 docs/{references => sdk}/ios/get-token.mdx | 0 .../ios/overview.mdx => sdk/ios/methods.mdx} | 2 +- .../ios.mdx => sdk/ios/quickstart.mdx} | 0 .../ios/sign-in-with-apple.mdx | 0 docs/{references => sdk}/nextjs/auth.mdx | 6 +- .../nextjs/build-clerk-props.mdx | 0 .../nextjs/clerk-middleware.mdx | 4 +- .../nextjs/current-user.mdx | 0 .../nextjs/custom-signup-signin-pages.mdx | 6 +- docs/{references => sdk}/nextjs/get-auth.mdx | 2 +- .../overview.mdx => sdk/nextjs/methods.mdx} | 16 +- .../nextjs.mdx => sdk/nextjs/quickstart.mdx} | 12 +- .../nextjs/read-session-data.mdx | 14 +- .../nextjs/rendering-modes.mdx | 0 .../nextjs/route-handlers.mdx | 4 +- .../nextjs/server-actions.mdx | 4 +- docs/{references => sdk}/nextjs/trpc.mdx | 2 +- .../nodejs/methods.mdx} | 0 .../nodejs/quickstart.mdx} | 4 +- .../nuxt/clerk-middleware.mdx | 2 +- .../overview.mdx => sdk/nuxt/methods.mdx} | 10 +- .../nuxt/protect-pages.mdx | 0 .../nuxt.mdx => sdk/nuxt/quickstart.mdx} | 6 +- .../nuxt/read-session-data.mdx | 0 .../custom-signup-signin-pages.mdx | 2 +- .../react-router/get-auth.mdx | 0 .../react-router/library-mode.mdx | 4 +- .../react-router/methods.mdx} | 12 +- .../react-router/quickstart.mdx} | 4 +- .../react-router/read-session-data.mdx | 6 +- .../react-router/root-auth-loader.mdx | 0 .../overview.mdx => sdk/react/methods.mdx} | 12 +- .../react.mdx => sdk/react/quickstart.mdx} | 8 +- docs/{references => sdk}/react/use-auth.mdx | 2 +- docs/{references => sdk}/react/use-clerk.mdx | 0 .../react/use-organization-list.mdx | 0 .../react/use-organization.mdx | 0 .../react/use-reverification.mdx | 0 .../react/use-session-list.mdx | 0 .../{references => sdk}/react/use-session.mdx | 0 .../{references => sdk}/react/use-sign-in.mdx | 0 .../{references => sdk}/react/use-sign-up.mdx | 0 docs/{references => sdk}/react/use-user.mdx | 0 .../redwood/quickstart.mdx} | 0 docs/{references => sdk}/remix/clerk-app.mdx | 0 .../remix/custom-signup-signin-pages.mdx | 4 +- .../remix.mdx => sdk/remix/quickstart.mdx} | 8 +- .../remix/read-session-data.mdx | 6 +- docs/{references => sdk}/remix/spa-mode.mdx | 2 +- .../ruby/methods.mdx} | 0 .../overview.mdx => sdk/ruby/quickstart.mdx} | 2 +- docs/{references => sdk}/ruby/rack-rails.mdx | 0 .../tanstack-start/create-clerk-handler.mdx | 0 .../custom-signup-signin-pages.mdx | 4 +- .../tanstack-start/get-auth.mdx | 0 .../tanstack-start/methods.mdx} | 10 +- .../tanstack-start/quickstart.mdx} | 10 +- .../tanstack-start/read-session-data.mdx | 6 +- .../vue/overview.mdx => sdk/vue/methods.mdx} | 4 +- .../vue/migrating-from-vue-community-sdk.mdx | 0 .../vue.mdx => sdk/vue/quickstart.mdx} | 4 +- docs/{references => sdk}/vue/use-auth.mdx | 0 docs/{references => sdk}/vue/use-clerk.mdx | 0 .../vue/use-organization.mdx | 0 .../vue/use-session-list.mdx | 0 docs/{references => sdk}/vue/use-session.mdx | 0 docs/{references => sdk}/vue/use-sign-in.mdx | 0 docs/{references => sdk}/vue/use-sign-up.mdx | 0 docs/{references => sdk}/vue/use-user.mdx | 0 .../create-a-minimal-reproduction.mdx | 4 +- docs/troubleshooting/overview.mdx | 2 +- docs/upgrade-guides/core-2/nextjs.mdx | 20 +- docs/upgrade-guides/core-2/react.mdx | 14 +- docs/upgrade-guides/nextjs/v6.mdx | 2 +- docs/users/metadata.mdx | 4 +- docs/users/overview.mdx | 2 +- docs/users/user-impersonation.mdx | 4 +- docs/users/web3.mdx | 8 +- docs/webhooks/sync-data.mdx | 2 +- 219 files changed, 520 insertions(+), 511 deletions(-) rename docs/{quickstarts/setup-clerk.mdx => getting-started.mdx} (96%) rename docs/{quickstarts/overview.mdx => quickstarts.mdx} (96%) rename docs/{quickstarts/javascript.mdx => references/javascript/quickstart.mdx} (100%) rename docs/{references => sdk}/astro/auth-store.mdx (100%) rename docs/{references => sdk}/astro/clerk-middleware.mdx (100%) rename docs/{references => sdk}/astro/clerk-store.mdx (100%) rename docs/{references => sdk}/astro/endpoints.mdx (91%) rename docs/{references => sdk}/astro/hybrid-rendering.mdx (95%) rename docs/{references => sdk}/astro/locals.mdx (83%) rename docs/{references/astro/overview.mdx => sdk/astro/methods.mdx} (69%) rename docs/{references => sdk}/astro/migrating-from-astro-community-sdk.mdx (100%) rename docs/{references => sdk}/astro/organization-store.mdx (100%) rename docs/{quickstarts/astro.mdx => sdk/astro/quickstart.mdx} (88%) rename docs/{references => sdk}/astro/react.mdx (96%) rename docs/{references => sdk}/astro/read-session-data.mdx (77%) rename docs/{references => sdk}/astro/session-list-store.mdx (100%) rename docs/{references => sdk}/astro/session-store.mdx (100%) rename docs/{references => sdk}/astro/sign-in-store.mdx (100%) rename docs/{references => sdk}/astro/sign-up-store.mdx (100%) rename docs/{references => sdk}/astro/user-store.mdx (100%) rename docs/{references => sdk}/chrome-extension/add-react-router.mdx (100%) rename docs/{references => sdk}/chrome-extension/configure-consistent-crx-id.mdx (97%) rename docs/{references => sdk}/chrome-extension/create-clerk-client.mdx (96%) rename docs/{references/chrome-extension/overview.mdx => sdk/chrome-extension/methods.mdx} (86%) rename docs/{quickstarts/chrome-extension.mdx => sdk/chrome-extension/quickstart.mdx} (96%) rename docs/{references => sdk}/chrome-extension/sync-host.mdx (95%) rename docs/{references => sdk}/expo/local-credentials.mdx (96%) rename docs/{references/expo/overview.mdx => sdk/expo/methods.mdx} (81%) rename docs/{references => sdk}/expo/offline-support.mdx (100%) rename docs/{quickstarts/expo.mdx => sdk/expo/quickstart.mdx} (94%) rename docs/{references => sdk}/expo/read-session-user-data.mdx (76%) rename docs/{references => sdk}/expo/use-local-credentials.mdx (98%) rename docs/{references => sdk}/expo/use-oauth.mdx (100%) rename docs/{references => sdk}/expo/web-support/custom-signup-signin-pages.mdx (97%) rename docs/{references => sdk}/expo/web-support/overview.mdx (90%) rename docs/{references/express/overview.mdx => sdk/express/methods.mdx} (98%) rename docs/{quickstarts/express.mdx => sdk/express/quickstart.mdx} (96%) rename docs/{quickstarts/fastify.mdx => sdk/fastify/quickstart.mdx} (95%) rename docs/{references => sdk}/go/other-examples.mdx (100%) rename docs/{references/go/overview.mdx => sdk/go/quickstart.mdx} (96%) rename docs/{references => sdk}/go/verifying-sessions.mdx (100%) rename docs/{references => sdk}/ios/get-token.mdx (100%) rename docs/{references/ios/overview.mdx => sdk/ios/methods.mdx} (92%) rename docs/{quickstarts/ios.mdx => sdk/ios/quickstart.mdx} (100%) rename docs/{references => sdk}/ios/sign-in-with-apple.mdx (100%) rename docs/{references => sdk}/nextjs/auth.mdx (95%) rename docs/{references => sdk}/nextjs/build-clerk-props.mdx (100%) rename docs/{references => sdk}/nextjs/clerk-middleware.mdx (98%) rename docs/{references => sdk}/nextjs/current-user.mdx (100%) rename docs/{references => sdk}/nextjs/custom-signup-signin-pages.mdx (96%) rename docs/{references => sdk}/nextjs/get-auth.mdx (96%) rename docs/{references/nextjs/overview.mdx => sdk/nextjs/methods.mdx} (81%) rename docs/{quickstarts/nextjs.mdx => sdk/nextjs/quickstart.mdx} (92%) rename docs/{references => sdk}/nextjs/read-session-data.mdx (84%) rename docs/{references => sdk}/nextjs/rendering-modes.mdx (100%) rename docs/{references => sdk}/nextjs/route-handlers.mdx (93%) rename docs/{references => sdk}/nextjs/server-actions.mdx (93%) rename docs/{references => sdk}/nextjs/trpc.mdx (97%) rename docs/{references/nodejs/available-methods.mdx => sdk/nodejs/methods.mdx} (100%) rename docs/{references/nodejs/overview.mdx => sdk/nodejs/quickstart.mdx} (95%) rename docs/{references => sdk}/nuxt/clerk-middleware.mdx (99%) rename docs/{references/nuxt/overview.mdx => sdk/nuxt/methods.mdx} (76%) rename docs/{references => sdk}/nuxt/protect-pages.mdx (100%) rename docs/{quickstarts/nuxt.mdx => sdk/nuxt/quickstart.mdx} (93%) rename docs/{references => sdk}/nuxt/read-session-data.mdx (100%) rename docs/{references => sdk}/react-router/custom-signup-signin-pages.mdx (97%) rename docs/{references => sdk}/react-router/get-auth.mdx (100%) rename docs/{references => sdk}/react-router/library-mode.mdx (94%) rename docs/{references/react-router/overview.mdx => sdk/react-router/methods.mdx} (77%) rename docs/{quickstarts/react-router.mdx => sdk/react-router/quickstart.mdx} (95%) rename docs/{references => sdk}/react-router/read-session-data.mdx (67%) rename docs/{references => sdk}/react-router/root-auth-loader.mdx (100%) rename docs/{references/react/overview.mdx => sdk/react/methods.mdx} (75%) rename docs/{quickstarts/react.mdx => sdk/react/quickstart.mdx} (95%) rename docs/{references => sdk}/react/use-auth.mdx (88%) rename docs/{references => sdk}/react/use-clerk.mdx (100%) rename docs/{references => sdk}/react/use-organization-list.mdx (100%) rename docs/{references => sdk}/react/use-organization.mdx (100%) rename docs/{references => sdk}/react/use-reverification.mdx (100%) rename docs/{references => sdk}/react/use-session-list.mdx (100%) rename docs/{references => sdk}/react/use-session.mdx (100%) rename docs/{references => sdk}/react/use-sign-in.mdx (100%) rename docs/{references => sdk}/react/use-sign-up.mdx (100%) rename docs/{references => sdk}/react/use-user.mdx (100%) rename docs/{references/redwood/overview.mdx => sdk/redwood/quickstart.mdx} (100%) rename docs/{references => sdk}/remix/clerk-app.mdx (100%) rename docs/{references => sdk}/remix/custom-signup-signin-pages.mdx (96%) rename docs/{quickstarts/remix.mdx => sdk/remix/quickstart.mdx} (94%) rename docs/{references => sdk}/remix/read-session-data.mdx (79%) rename docs/{references => sdk}/remix/spa-mode.mdx (99%) rename docs/{references/ruby/available-methods.mdx => sdk/ruby/methods.mdx} (100%) rename docs/{references/ruby/overview.mdx => sdk/ruby/quickstart.mdx} (98%) rename docs/{references => sdk}/ruby/rack-rails.mdx (100%) rename docs/{references => sdk}/tanstack-start/create-clerk-handler.mdx (100%) rename docs/{references => sdk}/tanstack-start/custom-signup-signin-pages.mdx (95%) rename docs/{references => sdk}/tanstack-start/get-auth.mdx (100%) rename docs/{references/tanstack-start/overview.mdx => sdk/tanstack-start/methods.mdx} (68%) rename docs/{quickstarts/tanstack-start.mdx => sdk/tanstack-start/quickstart.mdx} (86%) rename docs/{references => sdk}/tanstack-start/read-session-data.mdx (70%) rename docs/{references/vue/overview.mdx => sdk/vue/methods.mdx} (85%) rename docs/{references => sdk}/vue/migrating-from-vue-community-sdk.mdx (100%) rename docs/{quickstarts/vue.mdx => sdk/vue/quickstart.mdx} (92%) rename docs/{references => sdk}/vue/use-auth.mdx (100%) rename docs/{references => sdk}/vue/use-clerk.mdx (100%) rename docs/{references => sdk}/vue/use-organization.mdx (100%) rename docs/{references => sdk}/vue/use-session-list.mdx (100%) rename docs/{references => sdk}/vue/use-session.mdx (100%) rename docs/{references => sdk}/vue/use-sign-in.mdx (100%) rename docs/{references => sdk}/vue/use-sign-up.mdx (100%) rename docs/{references => sdk}/vue/use-user.mdx (100%) diff --git a/docs/_partials/react-hooks.mdx b/docs/_partials/react-hooks.mdx index 594ffdf1e8..a84452f5eb 100644 --- a/docs/_partials/react-hooks.mdx +++ b/docs/_partials/react-hooks.mdx @@ -1,9 +1,9 @@ -- [`useUser()`](/docs/references/react/use-user){{ target: '_blank' }} -- [`useClerk()`](/docs/references/react/use-clerk){{ target: '_blank' }} -- [`useAuth()`](/docs/references/react/use-auth){{ target: '_blank' }} -- [`useSignIn()`](/docs/references/react/use-sign-in){{ target: '_blank' }} -- [`useSignUp()`](/docs/references/react/use-sign-up){{ target: '_blank' }} -- [`useSession()`](/docs/references/react/use-session){{ target: '_blank' }} -- [`useSessionList()`](/docs/references/react/use-session-list){{ target: '_blank' }} -- [`useOrganization()`](/docs/references/react/use-organization){{ target: '_blank' }} -- [`useOrganizationList()`](/docs/references/react/use-organization-list){{ target: '_blank' }} +- [`useUser()`](/docs/sdk/react/use-user){{ target: '_blank' }} +- [`useClerk()`](/docs/sdk/react/use-clerk){{ target: '_blank' }} +- [`useAuth()`](/docs/sdk/react/use-auth){{ target: '_blank' }} +- [`useSignIn()`](/docs/sdk/react/use-sign-in){{ target: '_blank' }} +- [`useSignUp()`](/docs/sdk/react/use-sign-up){{ target: '_blank' }} +- [`useSession()`](/docs/sdk/react/use-session){{ target: '_blank' }} +- [`useSessionList()`](/docs/sdk/react/use-session-list){{ target: '_blank' }} +- [`useOrganization()`](/docs/sdk/react/use-organization){{ target: '_blank' }} +- [`useOrganizationList()`](/docs/sdk/react/use-organization-list){{ target: '_blank' }} diff --git a/docs/_partials/vue-nuxt/composables.mdx b/docs/_partials/vue-nuxt/composables.mdx index 5b454d6c23..7ef0abff00 100644 --- a/docs/_partials/vue-nuxt/composables.mdx +++ b/docs/_partials/vue-nuxt/composables.mdx @@ -1,8 +1,8 @@ -- [`useUser()`](/docs/references/vue/use-user) -- [`useClerk()`](/docs/references/vue/use-clerk) -- [`useAuth()`](/docs/references/vue/use-auth) -- [`useSignIn()`](/docs/references/vue/use-sign-in) -- [`useSignUp()`](/docs/references/vue/use-sign-up) -- [`useSession()`](/docs/references/vue/use-session) -- [`useSessionList()`](/docs/references/vue/use-session-list) -- [`useOrganization()`](/docs/references/vue/use-organization) +- [`useUser()`](/docs/sdk/vue/use-user) +- [`useClerk()`](/docs/sdk/vue/use-clerk) +- [`useAuth()`](/docs/sdk/vue/use-auth) +- [`useSignIn()`](/docs/sdk/vue/use-sign-in) +- [`useSignUp()`](/docs/sdk/vue/use-sign-up) +- [`useSession()`](/docs/sdk/vue/use-session) +- [`useSessionList()`](/docs/sdk/vue/use-session-list) +- [`useOrganization()`](/docs/sdk/vue/use-organization) diff --git a/docs/_partials/vue-nuxt/use-auth.mdx b/docs/_partials/vue-nuxt/use-auth.mdx index 9201766300..71e5b4131f 100644 --- a/docs/_partials/vue-nuxt/use-auth.mdx +++ b/docs/_partials/vue-nuxt/use-auth.mdx @@ -1,4 +1,4 @@ -The `useAuth()` composable provides access to the current user's authentication state and methods to manage the active session. You can use this composable to protect [pages](/docs/references/nuxt/protect-pages). +The `useAuth()` composable provides access to the current user's authentication state and methods to manage the active session. You can use this composable to protect [pages](/docs/sdk/nuxt/protect-pages). In the following example, the `isLoaded` property checks if Clerk has finished initializing and the `userId` property checks if the user is signed in. diff --git a/docs/advanced-usage/satellite-domains.mdx b/docs/advanced-usage/satellite-domains.mdx index 5ffb193f48..98c179e90d 100644 --- a/docs/advanced-usage/satellite-domains.mdx +++ b/docs/advanced-usage/satellite-domains.mdx @@ -12,7 +12,7 @@ Clerk supports sharing sessions across different domains by adding one or many s Your "primary" domain is where the authentication state lives, and satellite domains are able to securely read that state from the primary domain, enabling a seamless authentication flow across domains. -Users must complete both the sign-in and sign-up flows on the primary domain by using the [``](/docs/components/authentication/sign-in) component or [`useSignIn()`](/docs/references/react/use-sign-in) hook for sign-in and [``](/docs/components/authentication/sign-up) component or [`useSignUp()`](/docs/references/react/use-sign-up) hook for sign-up. +Users must complete both the sign-in and sign-up flows on the primary domain by using the [``](/docs/components/authentication/sign-in) component or [`useSignIn()`](/docs/sdk/react/use-sign-in) hook for sign-in and [``](/docs/components/authentication/sign-up) component or [`useSignUp()`](/docs/sdk/react/use-sign-up) hook for sign-up. To access authentication state from a satellite domain, users will be transparently redirected to the primary domain. If users need to sign in, they must be redirected to a sign in flow hosted on the primary domain, then redirected back to the originating satellite domain. The same redirection process applies to sign-up flows. @@ -35,7 +35,7 @@ To access authentication state from a satellite domain, users will be transparen When building your sign-in flow, you must configure it to run within your primary application, e.g. on `/sign-in`. > [!NOTE] - > For more information about creating your application, see the [setup guide](/docs/quickstarts/setup-clerk). + > For more information about creating your application, see the [setup guide](/docs/getting-started). ### Add your first satellite domain @@ -322,7 +322,7 @@ To access authentication state from a satellite domain, users will be transparen - In a Remix application, you must set the properties in the [`ClerkApp`](/docs/references/remix/clerk-app) wrapper. + In a Remix application, you must set the properties in the [`ClerkApp`](/docs/sdk/remix/clerk-app) wrapper. - In the root file associated with your primary domain, you only need to configure the `signInUrl` prop: diff --git a/docs/advanced-usage/using-proxies.mdx b/docs/advanced-usage/using-proxies.mdx index 44af0b488b..a07f360d7e 100644 --- a/docs/advanced-usage/using-proxies.mdx +++ b/docs/advanced-usage/using-proxies.mdx @@ -20,7 +20,7 @@ When using a proxy, all requests to the Frontend API will be made through your d To get started, you need to create an application from the [Clerk Dashboard](https://dashboard.clerk.com/). Once you create an instance via the Clerk Dashboard, you will be prompted to choose a domain. For the purposes of this guide, the domain will be `app.dev`. > [!NOTE] - > For more information on creating a Clerk application, see the [setup guide](/docs/quickstarts/setup-clerk). + > For more information on creating a Clerk application, see the [setup guide](/docs/getting-started). ### Configure your proxy server @@ -239,7 +239,7 @@ When using a proxy, all requests to the Frontend API will be made through your d - To configure your proxy setup using properties in your Remix application, set the `proxyUrl` property on the [`ClerkApp`](/docs/references/remix/clerk-app) wrapper. + To configure your proxy setup using properties in your Remix application, set the `proxyUrl` property on the [`ClerkApp`](/docs/sdk/remix/clerk-app) wrapper. ```tsx {{ filename: 'root.tsx' }} export const loader = (args) => { diff --git a/docs/authentication/overview.mdx b/docs/authentication/overview.mdx index 751d726583..1a05f7ea86 100644 --- a/docs/authentication/overview.mdx +++ b/docs/authentication/overview.mdx @@ -9,4 +9,4 @@ Clerk supports multiple authentication strategies so that you can implement the Clerk's configuration settings affect how the users of your application can [sign up and sign in](/docs/authentication/configuration/sign-up-sign-in-options) and which properties are editable via their user profile. You can also manage [user sessions](/docs/authentication/configuration/session-options), [control who gets access](/docs/authentication/configuration/restrictions) to your application, and [customize the email & SMS messages](/docs/authentication/configuration/email-sms-templates) that are sent by Clerk during authentication flows. All of these settings can be found under the **User & Authentication** section in the [Clerk Dashboard](https://dashboard.clerk.com/). -For more information on how to set up your application, see the [setup guide](/docs/quickstarts/setup-clerk). +For more information on how to set up your application, see the [setup guide](/docs/getting-started). diff --git a/docs/authentication/social-connections/atlassian.mdx b/docs/authentication/social-connections/atlassian.mdx index c145d1b1ad..cb6eb4f4c4 100644 --- a/docs/authentication/social-connections/atlassian.mdx +++ b/docs/authentication/social-connections/atlassian.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). - You need to have a Atlassian developer account. To create one, [click here](https://developer.atlassian.com/). ## Configuring an Atlassian OAuth 2.0 Integration diff --git a/docs/authentication/social-connections/bitbucket.mdx b/docs/authentication/social-connections/bitbucket.mdx index 4f9425d4d6..b17822adea 100644 --- a/docs/authentication/social-connections/bitbucket.mdx +++ b/docs/authentication/social-connections/bitbucket.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Consumer Key and Co ## Before you start -- You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +- You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). - You need to have a Bitbucket account. To create one, [click here](https://bitbucket.org/account/signup). ## Configuring Bitbucket social connection diff --git a/docs/authentication/social-connections/dropbox.mdx b/docs/authentication/social-connections/dropbox.mdx index 415e5a6183..481e936ad9 100644 --- a/docs/authentication/social-connections/dropbox.mdx +++ b/docs/authentication/social-connections/dropbox.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). - You need to have a Dropbox account. To create one, [click here](https://www.dropbox.com/lp/developers). ## Configuring Dropbox social connection diff --git a/docs/authentication/social-connections/facebook.mdx b/docs/authentication/social-connections/facebook.mdx index e763e85bfb..0f0654778c 100644 --- a/docs/authentication/social-connections/facebook.mdx +++ b/docs/authentication/social-connections/facebook.mdx @@ -18,7 +18,7 @@ For production instances, you will need to create your own developer account wit ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). - You need to have a Facebook Developer account. To create one, consult the [Register as a Facebook developer](https://developers.facebook.com/docs/development/register) page. ## Configuring Facebook social connection diff --git a/docs/authentication/social-connections/hubspot.mdx b/docs/authentication/social-connections/hubspot.mdx index ac325a68e7..b14cd9a93c 100644 --- a/docs/authentication/social-connections/hubspot.mdx +++ b/docs/authentication/social-connections/hubspot.mdx @@ -18,7 +18,7 @@ For production instances, you will need to create your own developer account wit ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). - You need to have a HubSpot Developer account. To create one, [click here](https://app.hubspot.com/signup/developers/step/existing-user?_ga=2.145169076.1430980384.1628431607-741498900.1628431607). ## Configuring HubSpot social connection diff --git a/docs/authentication/social-connections/line.mdx b/docs/authentication/social-connections/line.mdx index 94231003fe..f7933c3ee0 100644 --- a/docs/authentication/social-connections/line.mdx +++ b/docs/authentication/social-connections/line.mdx @@ -21,7 +21,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). - You need to have a LINE developer account. To create one, [click here](https://developers.line.biz/en/). ## Configuring LINE social connection diff --git a/docs/authentication/social-connections/linkedin.mdx b/docs/authentication/social-connections/linkedin.mdx index 41645cba86..76ec0e7b3f 100644 --- a/docs/authentication/social-connections/linkedin.mdx +++ b/docs/authentication/social-connections/linkedin.mdx @@ -19,7 +19,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). - You need to have a LinkedIn account. To create one, [click here](https://developer.linkedin.com/). ## Configuring LinkedIn social connection diff --git a/docs/authentication/social-connections/notion.mdx b/docs/authentication/social-connections/notion.mdx index f9c3c15e3f..8b7e4e2033 100644 --- a/docs/authentication/social-connections/notion.mdx +++ b/docs/authentication/social-connections/notion.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). - You need to have a Notion developer account. To create one, [click here](https://developers.notion.com/). ## Configuring Notion social connection diff --git a/docs/authentication/social-connections/oauth.mdx b/docs/authentication/social-connections/oauth.mdx index daf2e7670a..49b8bdb3c6 100644 --- a/docs/authentication/social-connections/oauth.mdx +++ b/docs/authentication/social-connections/oauth.mdx @@ -12,8 +12,8 @@ The easiest way to add social connections to your Clerk app is by using [prebuil ## Before you start -- You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, check out the [setup guide](/docs/quickstarts/setup-clerk). -- You need to install the correct SDK for your application. For more information, see the [quickstart guides](/docs/quickstarts/overview). +- You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, check out the [setup guide](/docs/getting-started). +- You need to install the correct SDK for your application. For more information, see the [quickstart guides](/docs/quickstarts). ## Enable a social connection diff --git a/docs/authentication/social-connections/twitch.mdx b/docs/authentication/social-connections/twitch.mdx index c55d23cf14..142013d789 100644 --- a/docs/authentication/social-connections/twitch.mdx +++ b/docs/authentication/social-connections/twitch.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). - You need to have a Twitch account. To create one, [click here](https://www.twitch.tv/). ## Configuring Twitch social connection diff --git a/docs/authentication/social-connections/twitter.mdx b/docs/authentication/social-connections/twitter.mdx index 4ef9177dfe..535a98d5ac 100644 --- a/docs/authentication/social-connections/twitter.mdx +++ b/docs/authentication/social-connections/twitter.mdx @@ -19,7 +19,7 @@ Clerk does not currently support preconfigured shared OAuth credentials for Twit ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). - You need to have a Twitter Application set up so it can be used as a social connection. If you don't have a Twitter Application, click [here](https://developer.twitter.com/en/docs/apps/overview) for instructions on how to create one. If you already have one, go to your [Twitter app settings](https://developer.twitter.com/en/portal/projects-and-apps) and ensure that the _"Allow this app to be used to Sign in with Twitter?_” option is enabled. ## Configuring Twitter social connection diff --git a/docs/authentication/social-connections/xero.mdx b/docs/authentication/social-connections/xero.mdx index 1a4f3fd0e1..d19bfafb40 100644 --- a/docs/authentication/social-connections/xero.mdx +++ b/docs/authentication/social-connections/xero.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). - You need to have a Xero developer account. To create one, [click here](https://developer.xero.com/). ## Configuring Xero social connection diff --git a/docs/backend-requests/handling/js-backend-sdks.mdx b/docs/backend-requests/handling/js-backend-sdks.mdx index 4dee29e62b..7e35f65241 100644 --- a/docs/backend-requests/handling/js-backend-sdks.mdx +++ b/docs/backend-requests/handling/js-backend-sdks.mdx @@ -21,7 +21,7 @@ app.use(clerkMiddleware()) app.use(clerkMiddleware(options)) ``` -For more information on the Middleware functions and SDK features, see the [Express SDK](/docs/references/express/overview) page. +For more information on the Middleware functions and SDK features, see the [Express SDK](/docs/sdk/express/methods) page. ## Clerk Fastify SDK @@ -64,7 +64,7 @@ const start = async () => { start() ``` -For more information on the Clerk plugin and SDK features, see the [Fastify SDK](/docs/quickstarts/fastify) page. +For more information on the Clerk plugin and SDK features, see the [Fastify SDK](/docs/sdk/fastify/quickstart) page. ## Clerk Backend SDK diff --git a/docs/backend-requests/making/cross-origin.mdx b/docs/backend-requests/making/cross-origin.mdx index 3d834bc021..ce0f0dbf2b 100644 --- a/docs/backend-requests/making/cross-origin.mdx +++ b/docs/backend-requests/making/cross-origin.mdx @@ -7,7 +7,7 @@ If your client and server are on different origins (e.g. making an API call to a ## Using Fetch with React -In order to pass the session token using the browser Fetch API, it should be put inside a Bearer token in the Authorization header. To retrieve the session token, use the `getToken` method from the [`useAuth()`](/docs/references/react/use-auth) hook. Be mindful that `getToken` is an async function that returns a Promise which needs to be resolved. +In order to pass the session token using the browser Fetch API, it should be put inside a Bearer token in the Authorization header. To retrieve the session token, use the `getToken` method from the [`useAuth()`](/docs/sdk/react/use-auth) hook. Be mindful that `getToken` is an async function that returns a Promise which needs to be resolved. ```js import { useAuth } from '@clerk/nextjs' @@ -27,7 +27,7 @@ export default function useFetch() { ## `useSWR()` hook -If you are using React or Next.js and want to use SWR's [`useSWR()`](https://swr.vercel.app/) hook, you can create a custom hook by using the [`useAuth()`](/docs/references/react/use-auth) hook. `useAuth()` returns the asynchronous `getToken()` method that can be called to add the session token as a Bearer token in the Authorization header of requests. +If you are using React or Next.js and want to use SWR's [`useSWR()`](https://swr.vercel.app/) hook, you can create a custom hook by using the [`useAuth()`](/docs/sdk/react/use-auth) hook. `useAuth()` returns the asynchronous `getToken()` method that can be called to add the session token as a Bearer token in the Authorization header of requests. ```js import useSWR from 'swr' diff --git a/docs/backend-requests/making/custom-session-token.mdx b/docs/backend-requests/making/custom-session-token.mdx index 999b5283b0..b41d78f7e5 100644 --- a/docs/backend-requests/making/custom-session-token.mdx +++ b/docs/backend-requests/making/custom-session-token.mdx @@ -24,7 +24,7 @@ This guide will show you how to customize a session token to include additional ## Use the custom claims in your application - The [`Auth`](/docs/references/backend/types/auth-object) object includes a `sessionClaims` property that contains the custom claims you added to your session token. It's returned by the [`auth()`](/docs/references/nextjs/auth) and `getAuth()` helpers, and the `request` object in server contexts. + The [`Auth`](/docs/references/backend/types/auth-object) object includes a `sessionClaims` property that contains the custom claims you added to your session token. It's returned by the [`auth()`](/docs/sdk/nextjs/auth) and `getAuth()` helpers, and the `request` object in server contexts. The following example demonstrates how to access the `fullName` and `primaryEmail` claims that were added to the session token in the last step. This examples are written for Next.js, but they can be adapted to other frameworks by using the appropriate method for accessing the `Auth` object. diff --git a/docs/backend-requests/making/same-origin.mdx b/docs/backend-requests/making/same-origin.mdx index 1828554f37..143e763ab4 100644 --- a/docs/backend-requests/making/same-origin.mdx +++ b/docs/backend-requests/making/same-origin.mdx @@ -15,7 +15,7 @@ fetch('/api/foo').then((res) => res.json()) ## useSWR hook -If you are using React or Next.js and would like to use the [useSWR](https://swr.vercel.app/) hook, it’s as simple as supplying the API route with whichever fetcher function you are using. Because of the [automatic revalidation feature](https://swr.vercel.app/docs/revalidation) of SWR, you need to retrieve and set the session token in the Authorization header. Call the asynchronous `getToken` method from the [`useAuth()`](/docs/references/react/use-auth) hook and add it as a Bearer token. +If you are using React or Next.js and would like to use the [useSWR](https://swr.vercel.app/) hook, it’s as simple as supplying the API route with whichever fetcher function you are using. Because of the [automatic revalidation feature](https://swr.vercel.app/docs/revalidation) of SWR, you need to retrieve and set the session token in the Authorization header. Call the asynchronous `getToken` method from the [`useAuth()`](/docs/sdk/react/use-auth) hook and add it as a Bearer token. ```jsx diff --git a/docs/backend-requests/overview.mdx b/docs/backend-requests/overview.mdx index f083b3097c..f52cf4f365 100644 --- a/docs/backend-requests/overview.mdx +++ b/docs/backend-requests/overview.mdx @@ -31,7 +31,7 @@ For cross-origin requests, refer to our guide on [making cross-origin requests]( Clerk provides various middleware packages to set the session property for easy access. These packages can also require a session to be available on the current request. Choose the guide based on the language or framework you're using: -- [Next.js](/docs/references/nextjs/clerk-middleware) +- [Next.js](/docs/sdk/nextjs/clerk-middleware) - [Node.js / Express](/docs/backend-requests/handling/nodejs) - [Go](/docs/backend-requests/handling/go) - [Ruby on Rails / Rack](/docs/backend-requests/handling/ruby-rails) diff --git a/docs/components/authentication/google-one-tap.mdx b/docs/components/authentication/google-one-tap.mdx index c6f746f335..d913ee8728 100644 --- a/docs/components/authentication/google-one-tap.mdx +++ b/docs/components/authentication/google-one-tap.mdx @@ -98,7 +98,7 @@ The following example includes basic implementation of the `` co The methods in this section are available on instances of the [`Clerk`](/docs/references/javascript/clerk/clerk) class and are used to render and control the `` component. > [!NOTE] -> The examples in this section assume you have completed the [JavaScript quickstart](/docs/quickstarts/javascript) to set up the Clerk JS SDK in your project. +> The examples in this section assume you have completed the [JavaScript quickstart](/docs/references/javascript/quickstart) to set up the Clerk JS SDK in your project. ### `openGoogleOneTap()` diff --git a/docs/components/authentication/sign-in.mdx b/docs/components/authentication/sign-in.mdx index 23fd487615..e7a20ecfc2 100644 --- a/docs/components/authentication/sign-in.mdx +++ b/docs/components/authentication/sign-in.mdx @@ -106,7 +106,7 @@ The following example includes basic implementation of the `` componen The following example demonstrates how you can use the `` component on a public page. - If you would like to create a dedicated `/sign-in` page in your Next.js application, see the [dedicated guide](/docs/references/nextjs/custom-signup-signin-pages). + If you would like to create a dedicated `/sign-in` page in your Next.js application, see the [dedicated guide](/docs/sdk/nextjs/custom-signup-signin-pages). ```tsx {{ filename: 'app/page.tsx' }} import { SignIn, useUser } from '@clerk/nextjs' @@ -168,7 +168,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openSignIn()`](#open-sign-in) - [`closeSignIn()`](#close-sign-in) -The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. ### `mountSignIn()` diff --git a/docs/components/authentication/sign-up.mdx b/docs/components/authentication/sign-up.mdx index c4179ac72d..9b38fc4a12 100644 --- a/docs/components/authentication/sign-up.mdx +++ b/docs/components/authentication/sign-up.mdx @@ -99,7 +99,7 @@ The following example includes basic implementation of the `` componen The following example demonstrates how you can use the `` component on a public page. - If you would like to create a dedicated `/sign-up` page in your Next.js application, see the [dedicated guide](/docs/references/nextjs/custom-signup-signin-pages). + If you would like to create a dedicated `/sign-up` page in your Next.js application, see the [dedicated guide](/docs/sdk/nextjs/custom-signup-signin-pages). ```tsx {{ filename: 'app/page.tsx' }} import { SignUp, useUser } from '@clerk/nextjs' @@ -161,7 +161,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openSignUp()`](#open-sign-up) - [`closeSignUp()`](#close-sign-up) -The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. ### `mountSignUp()` diff --git a/docs/components/clerk-provider.mdx b/docs/components/clerk-provider.mdx index bcda26af27..55fff0af9b 100644 --- a/docs/components/clerk-provider.mdx +++ b/docs/components/clerk-provider.mdx @@ -230,7 +230,7 @@ The recommended approach is to wrap your entire app with `` at th - `syncHost` - `string` - **Chrome Extension only** To enable, pass the URL of the web application that the extension will sync the authentication state from. See the [dedicated guide](/docs/references/chrome-extension/sync-host) for more information. + **Chrome Extension only** To enable, pass the URL of the web application that the extension will sync the authentication state from. See the [dedicated guide](/docs/sdk/chrome-extension/sync-host) for more information. --- @@ -279,7 +279,7 @@ The recommended approach is to wrap your entire app with `` at th - `dynamic?` - `boolean` - (For Next.js only) Indicates whether or not Clerk should make dynamic auth data available based on the current request. Defaults to `false`. Opts the application into dynamic rendering when `true`. For more information, see [Next.js rendering modes and Clerk](/docs/references/nextjs/rendering-modes). + (For Next.js only) Indicates whether or not Clerk should make dynamic auth data available based on the current request. Defaults to `false`. Opts the application into dynamic rendering when `true`. For more information, see [Next.js rendering modes and Clerk](/docs/sdk/nextjs/rendering-modes). --- diff --git a/docs/components/organization/create-organization.mdx b/docs/components/organization/create-organization.mdx index 59fbc6e006..aa41168497 100644 --- a/docs/components/organization/create-organization.mdx +++ b/docs/components/organization/create-organization.mdx @@ -115,7 +115,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openCreateOrganization`](#open-create-organization) - [`closeCreateOrganization`](#close-create-organization) -The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. ### mountCreateOrganization() diff --git a/docs/components/organization/organization-list.mdx b/docs/components/organization/organization-list.mdx index e6488da233..ef219ab729 100644 --- a/docs/components/organization/organization-list.mdx +++ b/docs/components/organization/organization-list.mdx @@ -140,7 +140,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`mountOrganizationList()`](#mount-organization-list) - [`unmountOrganizationList()`](#unmount-organization-list) -The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. ## `mountOrganizationList()` diff --git a/docs/components/organization/organization-profile.mdx b/docs/components/organization/organization-profile.mdx index 87fc688e18..b596249549 100644 --- a/docs/components/organization/organization-profile.mdx +++ b/docs/components/organization/organization-profile.mdx @@ -112,7 +112,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openOrganizationProfile()`](#open-organization-profile) - [`closeOrganizationProfile()`](#close-organization-profile) -The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. ### mountOrganizationProfile() diff --git a/docs/components/organization/organization-switcher.mdx b/docs/components/organization/organization-switcher.mdx index 505ac2446e..c95df599aa 100644 --- a/docs/components/organization/organization-switcher.mdx +++ b/docs/components/organization/organization-switcher.mdx @@ -169,7 +169,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`mountOrganizationSwitcher()`](#mount-organization-switcher) - [`unmountOrganizationSwitcher()`](#unmount-organization-switcher) -The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. ## `mountOrganizationSwitcher()` diff --git a/docs/components/unstyled/sign-out-button.mdx b/docs/components/unstyled/sign-out-button.mdx index 0b19ea3483..a661f44ab2 100644 --- a/docs/components/unstyled/sign-out-button.mdx +++ b/docs/components/unstyled/sign-out-button.mdx @@ -171,7 +171,7 @@ Clicking the `` component signs the user out of all sessions. Thi You can sign out of a specific session by passing in a `sessionId` to the `signOutOptions` prop. This is useful for signing a single account out of a multi-session (multiple account) application. -In the following example, the `sessionId` is retrieved from the [`useAuth()`](/docs/references/react/use-auth) hook. If the user is not signed in, the `sessionId` will be `null`, and the user is shown the [``](/docs/components/unstyled/sign-in-button) component. If the user is signed in, the user is shown the `` component, which when clicked, signs the user out of that specific session. +In the following example, the `sessionId` is retrieved from the [`useAuth()`](/docs/sdk/react/use-auth) hook. If the user is not signed in, the `sessionId` will be `null`, and the user is shown the [``](/docs/components/unstyled/sign-in-button) component. If the user is signed in, the user is shown the `` component, which when clicked, signs the user out of that specific session. diff --git a/docs/components/user/user-button.mdx b/docs/components/user/user-button.mdx index 6771014ded..89beeae3c6 100644 --- a/docs/components/user/user-button.mdx +++ b/docs/components/user/user-button.mdx @@ -263,7 +263,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`mountUserButton()`](#mount-user-button) - [`unmountUserButton()`](#unmount-user-button) -The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. ### `mountUserButton()` diff --git a/docs/components/user/user-profile.mdx b/docs/components/user/user-profile.mdx index 82570040f2..8bc2735dde 100644 --- a/docs/components/user/user-profile.mdx +++ b/docs/components/user/user-profile.mdx @@ -118,7 +118,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openUserProfile()`](#open-user-profile) - [`closeUserProfile()`](#close-user-profile) -The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. ### `mountUserProfile()` diff --git a/docs/components/waitlist.mdx b/docs/components/waitlist.mdx index 55caa6d91a..30d75bd851 100644 --- a/docs/components/waitlist.mdx +++ b/docs/components/waitlist.mdx @@ -89,7 +89,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openWaitlist()`](#open-waitlist) - [`closeWaitlist()`](#close-waitlist) -The following examples assume that you followed the [quickstart](/docs/quickstarts/javascript) to add Clerk to your JavaScript app. +The following examples assume that you followed the [quickstart](/docs/references/javascript/quickstart) to add Clerk to your JavaScript app. ### mountWaitlist() diff --git a/docs/custom-flows/add-email.mdx b/docs/custom-flows/add-email.mdx index e1b3db453d..3d2740fdc6 100644 --- a/docs/custom-flows/add-email.mdx +++ b/docs/custom-flows/add-email.mdx @@ -11,7 +11,7 @@ Every user has a [`User`](/docs/references/javascript/user/user) object that rep The following example demonstrates how to build a custom user interface that allows users to add an email address to their account. The example: -1. Uses the [`useUser()`](/docs/references/react/use-user) hook to get the `User` object. +1. Uses the [`useUser()`](/docs/sdk/react/use-user) hook to get the `User` object. 1. Uses the [`User.createEmailAddress()`](/docs/references/javascript/user/create-metadata#create-email-address) method to add the email address to the user's account. A new [`EmailAddress`](/docs/references/javascript/email-address) object is created and stored in `User.emailAddresses`. 1. Uses the `prepareVerification()` method on the newly created `EmailAddress` object to send a verification code to the user. 1. Uses the `attemptVerification()` method on the same `EmailAddress` object with the verification code provided by the user to verify the email address. diff --git a/docs/custom-flows/add-phone.mdx b/docs/custom-flows/add-phone.mdx index 81ff9ffc38..397537e276 100644 --- a/docs/custom-flows/add-phone.mdx +++ b/docs/custom-flows/add-phone.mdx @@ -11,7 +11,7 @@ Every user has a [`User`](/docs/references/javascript/user/user) object that rep The following example demonstrates how to build a custom user interface that allows users to add a phone number to their account. The example: -1. Uses the [`useUser()`](/docs/references/react/use-user) hook to get the `User` object. +1. Uses the [`useUser()`](/docs/sdk/react/use-user) hook to get the `User` object. 1. Uses the [`User.createPhoneNumber()`](/docs/references/javascript/user/create-metadata#create-phone-number) method to add the phone number to the user's account. A new [`PhoneNumber`](/docs/references/javascript/phone-number) object is created and stored in `User.phoneNumbers`. 1. Uses the `prepareVerification()` method on the newly created `PhoneNumber` object to send a verification code to the user. 1. Uses the `attemptVerification()` method on the same `PhoneNumber` object with the verification code provided by the user to verify the phone number. diff --git a/docs/custom-flows/email-links.mdx b/docs/custom-flows/email-links.mdx index e57f654a0e..71c7f1da5d 100644 --- a/docs/custom-flows/email-links.mdx +++ b/docs/custom-flows/email-links.mdx @@ -37,8 +37,8 @@ We take care of the boring stuff, like efficient polling, secure session managem ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, check out the [setup guide](/docs/quickstarts/setup-clerk). -- You need to install the correct SDK for your application. For more information, see the [quickstart guides](/docs/quickstarts/overview). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, check out the [setup guide](/docs/getting-started). +- You need to install the correct SDK for your application. For more information, see the [quickstart guides](/docs/quickstarts). ## Set up email link authentication in Your Clerk application diff --git a/docs/custom-flows/email-password-mfa.mdx b/docs/custom-flows/email-password-mfa.mdx index 2296237854..40385f5511 100644 --- a/docs/custom-flows/email-password-mfa.mdx +++ b/docs/custom-flows/email-password-mfa.mdx @@ -309,7 +309,7 @@ This guide will walk you through how to build a custom email/password sign-in fl ### Build the flow 1. Create the `(auth)` route group. This groups your sign-up and sign-in pages. - 1. In the `(auth)` group, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/references/react/use-auth) hook is used to access the user's authentication state. If the user's already signed in, they'll be redirected to the home page. + 1. In the `(auth)` group, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/sdk/react/use-auth) hook is used to access the user's authentication state. If the user's already signed in, they'll be redirected to the home page. ```tsx {{ filename: 'app/(auth)/_layout.tsx' }} import { Redirect, Stack } from 'expo-router' @@ -326,7 +326,7 @@ This guide will walk you through how to build a custom email/password sign-in fl } ``` - In the `(auth)` group, create a `sign-in.tsx` file with the following code. The [`useSignIn()`](/docs/references/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using their email and password and will be prompted to verify their account with a code from their authenticator app or with a backup code. + In the `(auth)` group, create a `sign-in.tsx` file with the following code. The [`useSignIn()`](/docs/sdk/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using their email and password and will be prompted to verify their account with a code from their authenticator app or with a backup code. ```tsx {{ filename: 'app/(auth)/sign-in.tsx', collapsible: true }} import React from 'react' diff --git a/docs/custom-flows/email-password.mdx b/docs/custom-flows/email-password.mdx index d22ac988ff..34cef21685 100644 --- a/docs/custom-flows/email-password.mdx +++ b/docs/custom-flows/email-password.mdx @@ -258,7 +258,7 @@ This guide will walk you through how to build a custom email/password sign-up an 1. Create the `(auth)` route group. This groups your sign-up and sign-in pages. - 1. In the `(auth)` group, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/references/react/use-auth) hook is used to access the user's authentication state. If the user's already signed in, they'll be redirected to the home page. + 1. In the `(auth)` group, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/sdk/react/use-auth) hook is used to access the user's authentication state. If the user's already signed in, they'll be redirected to the home page. ```tsx {{ filename: 'app/(auth)/_layout.tsx' }} import { Redirect, Stack } from 'expo-router' @@ -275,7 +275,7 @@ This guide will walk you through how to build a custom email/password sign-up an } ``` - In the `(auth)` group, create a `sign-up.tsx` file with the following code. The [`useSignUp()`](/docs/references/react/use-sign-up) hook is used to create a sign-up flow. The user can sign up using their email and password and will receive an email verification code to confirm their email. + In the `(auth)` group, create a `sign-up.tsx` file with the following code. The [`useSignUp()`](/docs/sdk/react/use-sign-up) hook is used to create a sign-up flow. The user can sign up using their email and password and will receive an email verification code to confirm their email. ```tsx {{ filename: 'app/(auth)/sign-up.tsx', collapsible: true }} import * as React from 'react' @@ -638,7 +638,7 @@ This guide will walk you through how to build a custom email/password sign-up an - In the `(auth)` group, create a `sign-in.tsx` file with the following code. The [`useSignIn()`](/docs/references/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using email address and password, or navigate to the sign-up page. + In the `(auth)` group, create a `sign-in.tsx` file with the following code. The [`useSignIn()`](/docs/sdk/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using email address and password, or navigate to the sign-up page. ```tsx {{ filename: 'app/(auth)/sign-in.tsx', collapsible: true }} import { useSignIn } from '@clerk/clerk-expo' diff --git a/docs/custom-flows/manage-totp-based-mfa.mdx b/docs/custom-flows/manage-totp-based-mfa.mdx index 4bfd03c251..0837a63d74 100644 --- a/docs/custom-flows/manage-totp-based-mfa.mdx +++ b/docs/custom-flows/manage-totp-based-mfa.mdx @@ -341,7 +341,7 @@ One of the options that Clerk supports for MFA is **Authenticator applications ( 1. Create the `(dashboard)` route group. This groups your account page and the "Add TOTP MFA" page. - 1. Create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/references/react/use-auth) hook is used to check if the user is signed in. If the user isn't signed in, they'll be redirected to the sign-in page. + 1. Create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/sdk/react/use-auth) hook is used to check if the user is signed in. If the user isn't signed in, they'll be redirected to the sign-in page. ```tsx {{ filename: 'app/(dashboard)/_layout.tsx' }} import { Redirect, Stack } from 'expo-router' diff --git a/docs/custom-flows/sign-out.mdx b/docs/custom-flows/sign-out.mdx index 732a57ebf8..905cf72be7 100644 --- a/docs/custom-flows/sign-out.mdx +++ b/docs/custom-flows/sign-out.mdx @@ -14,7 +14,7 @@ The `signOut()` function signs a user out of all sessions in a [multi-session ap - The [`useClerk()`](/docs/references/react/use-clerk) hook is used to access the `signOut()` function, which is called when the user clicks the sign-out button. + The [`useClerk()`](/docs/sdk/react/use-clerk) hook is used to access the `signOut()` function, which is called when the user clicks the sign-out button. The Next.js [`useRouter()`](https://nextjs.org/docs/api-reference/next/router#userouter) hook is used to redirect the user to the home page after they sign out. diff --git a/docs/custom-flows/user-impersonation.mdx b/docs/custom-flows/user-impersonation.mdx index 2a159c172d..802fcc3ce7 100644 --- a/docs/custom-flows/user-impersonation.mdx +++ b/docs/custom-flows/user-impersonation.mdx @@ -196,7 +196,7 @@ This guide will walk you through how to build a custom flow that handles user im > It is **recommended** that you build impersonation into a dashboard that **only authorized users** can access. 1. Create the `dashboard/` directory. - 1. In the `dashboard/` directory, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/references/react/use-auth) hook is used to access the user's authentication state. If the user is already signed in, they'll be redirected to the home page. The [``](/docs/components/protect) component is used to ensure that only users with the `org:dashboard:access` permission can access it. You can modify the `permission` attribute to fit your use case. + 1. In the `dashboard/` directory, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/sdk/react/use-auth) hook is used to access the user's authentication state. If the user is already signed in, they'll be redirected to the home page. The [``](/docs/components/protect) component is used to ensure that only users with the `org:dashboard:access` permission can access it. You can modify the `permission` attribute to fit your use case. ```tsx {{ filename: 'app/dashboard/_layout.tsx' }} import { Redirect, Stack } from 'expo-router' diff --git a/docs/customization/account-portal/getting-started.mdx b/docs/customization/account-portal/getting-started.mdx index b695c7cb86..ae1674f9b4 100644 --- a/docs/customization/account-portal/getting-started.mdx +++ b/docs/customization/account-portal/getting-started.mdx @@ -3,7 +3,7 @@ title: Getting started with the Account Portal description: The Account Portal offers a comprehensive solution for managing user authentication and profile management in your web application and is the fastest way to add Clerk's authentication to your application with minimal code required. --- -To integrate the Account Portal into your application, simply follow one of the [quickstart guides](/docs/quickstarts/overview). Once your application is set up, all you have to do is run it. Clerk will automatically redirect your users to the Account Portal sign-up/sign-in pages. After successful authentication, users will be redirected back to your application with an active session. +To integrate the Account Portal into your application, simply follow one of the [quickstart guides](/docs/quickstarts). Once your application is set up, all you have to do is run it. Clerk will automatically redirect your users to the Account Portal sign-up/sign-in pages. After successful authentication, users will be redirected back to your application with an active session. You can also integrate the Account Portal into your application using prebuilt components. For example, the [``](/docs/components/unstyled/sign-up-button) and [``](/docs/components/unstyled/sign-in-button) components will redirect users to the Account Portal sign-up and sign-in pages if no props or [environment variables](/docs/deployments/clerk-environment-variables#sign-in-and-sign-up-redirects) are configured to override this behavior. diff --git a/docs/customization/elements/overview.mdx b/docs/customization/elements/overview.mdx index b571fe7ad4..bc775614c2 100644 --- a/docs/customization/elements/overview.mdx +++ b/docs/customization/elements/overview.mdx @@ -29,7 +29,7 @@ Clerk Elements can be integrated into your existing application and workflows. F ## Getting started -Clerk Elements currently only works with Next.js App Router and [Clerk Core 2](/changelog/2024-04-19){{ target: '_blank' }}. As it gets closer to a stable release, support for additional frameworks will be added. If your Next.js application is already using Clerk, make sure to [upgrade to Core 2](/docs/upgrade-guides/core-2/nextjs). If you're starting from scratch, follow the [Next.js quickstart](/docs/quickstarts/nextjs) before proceeding. +Clerk Elements currently only works with Next.js App Router and [Clerk Core 2](/changelog/2024-04-19){{ target: '_blank' }}. As it gets closer to a stable release, support for additional frameworks will be added. If your Next.js application is already using Clerk, make sure to [upgrade to Core 2](/docs/upgrade-guides/core-2/nextjs). If you're starting from scratch, follow the [Next.js quickstart](/docs/sdk/nextjs/quickstart) before proceeding. To get started, install the Clerk Elements package: diff --git a/docs/customization/localization.mdx b/docs/customization/localization.mdx index 3b51ede253..919ad74382 100644 --- a/docs/customization/localization.mdx +++ b/docs/customization/localization.mdx @@ -122,7 +122,7 @@ Once the `@clerk/localizations` package is installed, you can import the localiz - In the following example, the fr-FR locale is imported as `frFR`. The imported localization is then passed to the `localization` prop in the [`ClerkApp`](/docs/references/remix/clerk-app) options. + In the following example, the fr-FR locale is imported as `frFR`. The imported localization is then passed to the `localization` prop in the [`ClerkApp`](/docs/sdk/remix/clerk-app) options. ```tsx {{ filename: 'app/root.tsx', mark: [[6, 7], [39, 41]] }} import type { MetaFunction, LoaderFunction } from '@remix-run/node' diff --git a/docs/customization/overview.mdx b/docs/customization/overview.mdx index 8108ede792..ceeb7c0810 100644 --- a/docs/customization/overview.mdx +++ b/docs/customization/overview.mdx @@ -9,7 +9,7 @@ Customizing the appearance of Clerk components is a powerful way to make your ap The `appearance` prop can be applied to [``](/docs/components/clerk-provider) to share styles across every component, or individually to any of the Clerk components. -This applies to all of the React-based packages, like [Next.js](/docs/quickstarts/nextjs), as well as [the pure JavaScript ClerkJS package](/docs/references/javascript/overview). +This applies to all of the React-based packages, like [Next.js](/docs/sdk/nextjs/quickstart), as well as [the pure JavaScript ClerkJS package](/docs/references/javascript/overview). ## Properties diff --git a/docs/deployments/deploy-astro.mdx b/docs/deployments/deploy-astro.mdx index 227a204bb9..9ce3f8defb 100644 --- a/docs/deployments/deploy-astro.mdx +++ b/docs/deployments/deploy-astro.mdx @@ -4,7 +4,7 @@ description: Learn how to deploy an Astro app to production with Clerk. --- > [!WARNING] -> This guide assumes that you have already installed Clerk in your application locally and are ready to deploy. If you haven't installed Clerk yet, see [the quickstart guide](/docs/quickstarts/astro). +> This guide assumes that you have already installed Clerk in your application locally and are ready to deploy. If you haven't installed Clerk yet, see [the quickstart guide](/docs/sdk/astro/quickstart). This guide will walk you through the steps to deploy your Astro app to production. diff --git a/docs/deployments/deploy-chrome-extension.mdx b/docs/deployments/deploy-chrome-extension.mdx index 33ada0d783..e2d5f3593d 100644 --- a/docs/deployments/deploy-chrome-extension.mdx +++ b/docs/deployments/deploy-chrome-extension.mdx @@ -13,7 +13,7 @@ For Clerk production instances, there must be a domain associated with the insta ## Update your `.env.production` file - Add your Publishable and Frontend API keys for your Clerk production instance to your `.env.production` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. If you're using [the Sync Host feature](/docs/references/chrome-extension/sync-host), you also need to set the `PLASMO_PUBLIC_CLERK_SYNC_HOST` environment variable. The value is the domain your web app's production server runs on. For example, `https://clerk.com`. + Add your Publishable and Frontend API keys for your Clerk production instance to your `.env.production` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. If you're using [the Sync Host feature](/docs/sdk/chrome-extension/sync-host), you also need to set the `PLASMO_PUBLIC_CLERK_SYNC_HOST` environment variable. The value is the domain your web app's production server runs on. For example, `https://clerk.com`. @@ -21,7 +21,7 @@ For Clerk production instances, there must be a domain associated with the insta 1. In the navigation sidebar, select [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys). 1. In the **Quick Copy** section, select **Chrome Extension** and copy your Clerk Publishable and Frontend API keys. 1. Paste your keys into your `.env.production` file. - 1. If you are using [the Sync Host feature](/docs/references/chrome-extension/sync-host), you will also need to set the `PLASMO_PUBLIC_CLERK_SYNC_HOST` environment variable. The value should be the domain your web app's production server runs on. For example, `https://clerk.com`. + 1. If you are using [the Sync Host feature](/docs/sdk/chrome-extension/sync-host), you will also need to set the `PLASMO_PUBLIC_CLERK_SYNC_HOST` environment variable. The value should be the domain your web app's production server runs on. For example, `https://clerk.com`. The final result should resemble the following: @@ -37,7 +37,7 @@ PLASMO_PUBLIC_CLERK_SYNC_HOST=https://yourdomain.com `host_permissions` specifies which hosts, or websites, will have permission to sync auth state with your app. It accepts an array, allowing you to add more than one host. You must add your production domain to the `host_permissions` array. > [!WARNING] -> If you are using the Sync Host feature and followed [the configuration guide](/docs/references/chrome-extension/sync-host), then you have already completed this step (the `http://$PLASMO_PUBLIC_CLERK_SYNC_HOST/*` value points to your production domain.) +> If you are using the Sync Host feature and followed [the configuration guide](/docs/sdk/chrome-extension/sync-host), then you have already completed this step (the `http://$PLASMO_PUBLIC_CLERK_SYNC_HOST/*` value points to your production domain.) In the `package.json` file, in the `manifest` object, update the `host_permissions` array. Add your domain and ensure it is preceded with `https://`. For example, `https://clerk.com`. Only add the root domain and not any subdomains. Then, add `/*` to the end of the domain. diff --git a/docs/deployments/deploy-to-vercel.mdx b/docs/deployments/deploy-to-vercel.mdx index 305d72b903..0118b522bd 100644 --- a/docs/deployments/deploy-to-vercel.mdx +++ b/docs/deployments/deploy-to-vercel.mdx @@ -4,7 +4,7 @@ description: Learn how to deploy a Clerk app to Vercel. --- > [!WARNING] -> This guide assumes that you have already installed Clerk in your application locally and are ready to deploy. If you haven't installed Clerk yet, see the [setup guide](/docs/quickstarts/setup-clerk). +> This guide assumes that you have already installed Clerk in your application locally and are ready to deploy. If you haven't installed Clerk yet, see the [setup guide](/docs/getting-started). If you haven't set up your application in Vercel yet, [set up a new Vercel project](#set-up-a-new-vercel-project). diff --git a/docs/deployments/set-up-staging.mdx b/docs/deployments/set-up-staging.mdx index 2eafdbb04a..12351b3089 100644 --- a/docs/deployments/set-up-staging.mdx +++ b/docs/deployments/set-up-staging.mdx @@ -14,7 +14,7 @@ It is important to note that when you use a separate Clerk application for your The following steps will help you set up a new Clerk application with a staging-specific domain: 1. **Set up a subdomain** - This will be your staging domain. For example, if your domain is `my-site.com`, you could use `staging.my-site.com`. -1. **Create a new Clerk app** - Your staging environment will connect to this app instead of your main one. See [the Clerk quickstart guide](/docs/quickstarts/setup-clerk) to learn how to create a Clerk app. +1. **Create a new Clerk app** - Your staging environment will connect to this app instead of your main one. See [the Clerk quickstart guide](/docs/getting-started) to learn how to create a Clerk app. 1. **Deploy and configure your staging app's production instance** - Using production API keys will make your staging app more secure. Follow the [Deploy to production](/docs/deployments/overview) guide to do so. 1. **Contact Clerk support to upgrade your staging app for free** - If you are on a Pro, Enterprise, or Startup plan, Clerk will fully upgrade your staging app for free. diff --git a/docs/quickstarts/setup-clerk.mdx b/docs/getting-started.mdx similarity index 96% rename from docs/quickstarts/setup-clerk.mdx rename to docs/getting-started.mdx index 3631ed0597..2cff6ec291 100644 --- a/docs/quickstarts/setup-clerk.mdx +++ b/docs/getting-started.mdx @@ -27,70 +27,70 @@ Before you can start integrating Clerk into your application, you need to create ## Integrate Clerk into your application - Now that your application is created in the Clerk Dashboard, you can integrate it into your codebase. To integrate Clerk into your application, use one of our [quickstarts](/docs/quickstarts/overview): + Now that your application is created in the Clerk Dashboard, you can integrate it into your codebase. To integrate Clerk into your application, use one of our [quickstarts](/docs/quickstarts): - - [Next.js](/docs/quickstarts/nextjs) + - [Next.js](/docs/sdk/nextjs/quickstart) - Easily add secure, beautiful, and fast authentication to Next.js with Clerk. - {} --- - - [React](/docs/quickstarts/react) + - [React](/docs/sdk/react/quickstart) - Get started installing and initializing Clerk in a new React + Vite app. - {} --- - - [Remix](/docs/quickstarts/remix) + - [Remix](/docs/sdk/remix/quickstart) - Easily add secure, edge- and SSR-friendly authentication to Remix with Clerk. - {} --- - - [RedwoodJS](/docs/references/redwood/overview) + - [RedwoodJS](/docs/sdk/redwood/quickstart) - Grow your RedwoodJS application with Clerk user management and authentication. - {} --- - - [React Native / Expo](/docs/quickstarts/expo) + - [React Native / Expo](/docs/sdk/expo/quickstart) - Use Clerk with Expo to authenticate users in your React Native application. - {} --- - - [Astro](/docs/quickstarts/astro) + - [Astro](/docs/sdk/astro/quickstart) - Easily add secure and SSR-friendly authentication to your Astro application with Clerk. - {} --- - - [iOS](/docs/quickstarts/ios) + - [iOS](/docs/sdk/ios/quickstart) - Use the Clerk iOS SDK to authenticate users in your native Apple applications. - {} --- - - [TanStack Start](/docs/quickstarts/tanstack-start) + - [TanStack Start](/docs/sdk/tanstack-start/quickstart) - Easily add secure and SSR-friendly authentication to your TanStack Start application with Clerk. - ![](data:image/webp;base64,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) --- - - [React Router](/docs/quickstarts/react-router) + - [React Router](/docs/sdk/react-router/quickstart) - Easily add secure, edge- and SSR-friendly authentication to React Router with Clerk. - {} --- - - [Nuxt](/docs/quickstarts/nuxt) + - [Nuxt](/docs/sdk/nuxt/quickstart) - Easily add secure, beautiful, and fast authentication to Nuxt with Clerk. - {} --- - - [Vue](/docs/quickstarts/vue) + - [Vue](/docs/sdk/vue/quickstart) - Get started installing and initializing Clerk in a new Vue + Vite app. - {} diff --git a/docs/guides/add-onboarding-flow.mdx b/docs/guides/add-onboarding-flow.mdx index 62a9c15bb8..da21498a98 100644 --- a/docs/guides/add-onboarding-flow.mdx +++ b/docs/guides/add-onboarding-flow.mdx @@ -60,7 +60,7 @@ declare global { ## Configure your Middleware to read session data -[`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) allows you to configure access to your routes with fine grained control. It also allows you to retrieve claims directly from the session and redirect your user accordingly. +[`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) allows you to configure access to your routes with fine grained control. It also allows you to retrieve claims directly from the session and redirect your user accordingly. The following example demonstrates how to use `clerkMiddleware()` to redirect users based on their onboarding status. If the user is signed in and has not completed onboarding, they will be redirected to the onboarding page. diff --git a/docs/guides/architecture-scenarios.mdx b/docs/guides/architecture-scenarios.mdx index 68cb423248..95297f902b 100644 --- a/docs/guides/architecture-scenarios.mdx +++ b/docs/guides/architecture-scenarios.mdx @@ -55,8 +55,8 @@ B2B SaaS applications with the following characteristics are well-supported with Clerk offers a number of building blocks to help integrate organizations into your application: - The [`` component](/docs/components/organization/organization-switcher) provides a way for your users to select which organization is active. The [`useOrganizationList()` hook](/docs/organizations/custom-organization-switcher) can be used for more control. -- The [`useOrganization()` hook](/docs/references/react/use-organization) can be used to fetch the current, active organization. -- The [`` component](/docs/components/protect) enables you to limit who can view certain pages based on their role. Additionally, Clerk exposes a number of helper functions, such as [`auth()`](/docs/references/nextjs/auth), and hooks, such as [`useAuth()`](/docs/references/react/use-auth#how-to-use-the-use-auth-hook), to check the user's authorization throughout your app and API endpoints. +- The [`useOrganization()` hook](/docs/sdk/react/use-organization) can be used to fetch the current, active organization. +- The [`` component](/docs/components/protect) enables you to limit who can view certain pages based on their role. Additionally, Clerk exposes a number of helper functions, such as [`auth()`](/docs/sdk/nextjs/auth), and hooks, such as [`useAuth()`](/docs/references/react/use-auth#how-to-use-the-use-auth-hook), to check the user's authorization throughout your app and API endpoints. The organization's ID should be stored in your database alongside each resource so that it can be used to filter and query the resources that should be rendered or returned according to the active organization. diff --git a/docs/guides/authjs-migration.mdx b/docs/guides/authjs-migration.mdx index a038b20029..e3e809fcd2 100644 --- a/docs/guides/authjs-migration.mdx +++ b/docs/guides/authjs-migration.mdx @@ -38,7 +38,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. ## Install `@clerk/nextjs` - Clerk's Next.js SDK gives you access to prebuilt [components](/docs/components/overview), [hooks](/docs/references/nextjs/overview#client-side-helpers), and [helpers](/docs/references/nextjs/overview) for Next.js Server Components, Route Handlers and Middleware. Run the following command to install it: + Clerk's Next.js SDK gives you access to prebuilt [components](/docs/components/overview), [hooks](/docs/references/nextjs/overview#client-side-helpers), and [helpers](/docs/sdk/nextjs/methods) for Next.js Server Components, Route Handlers and Middleware. Run the following command to install it: ```bash {{ filename: 'terminal' }} @@ -114,8 +114,8 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. If Clerk's Account Portal pages aren't a good fit your app, you can build a custom sign-in and sign-up UI in one of two ways: - - use the [prebuilt components](/docs/references/nextjs/custom-signup-signin-pages), such as the [``](/docs/components/authentication/sign-in) and [``](/docs/components/authentication/sign-up) components - - build a [fully custom UI using the Clerk API](/docs/custom-flows/overview), leveraging Clerk's React hooks such as [`useSignIn()`](/docs/references/react/use-sign-in) and [`useSignUp()`](/docs/references/react/use-sign-up) + - use the [prebuilt components](/docs/sdk/nextjs/custom-signup-signin-pages), such as the [``](/docs/components/authentication/sign-in) and [``](/docs/components/authentication/sign-up) components + - build a [fully custom UI using the Clerk API](/docs/custom-flows/overview), leveraging Clerk's React hooks such as [`useSignIn()`](/docs/sdk/react/use-sign-in) and [`useSignUp()`](/docs/sdk/react/use-sign-up) ## Protect your app @@ -129,7 +129,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. Clerk's Middleware gives you fine-grained control over handling the authenticated state and will, by default, run for your entire application. - The example below is a basic configuration that does not protect any routes. All routes are public and you must opt-in to protection for routes. Read the [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) documentation to learn more about how you can configure your Middleware. + The example below is a basic configuration that does not protect any routes. All routes are public and you must opt-in to protection for routes. Read the [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) documentation to learn more about how you can configure your Middleware. ```tsx {{ filename: 'middleware.ts' }} import { clerkMiddleware } from '@clerk/nextjs' @@ -207,7 +207,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. Replace Auth.js's `useSession()` hook with Clerk's hooks. - The [`useAuth()`](/docs/references/react/use-auth) hook can be used to retrieve basic authentication information. The [`useUser()`](/docs/references/react/use-user) hook can be used to retrieve the full [`User`](/docs/references/javascript/user/user#user) object, which includes information about the user, such as their first name, emails, phone numbers, and more. + The [`useAuth()`](/docs/sdk/react/use-auth) hook can be used to retrieve basic authentication information. The [`useUser()`](/docs/sdk/react/use-user) hook can be used to retrieve the full [`User`](/docs/references/javascript/user/user#user) object, which includes information about the user, such as their first name, emails, phone numbers, and more. ```tsx {{ filename: 'app/page.tsx' }} 'use client' diff --git a/docs/guides/basic-rbac.mdx b/docs/guides/basic-rbac.mdx index 900193a9f5..f7df28a0e3 100644 --- a/docs/guides/basic-rbac.mdx +++ b/docs/guides/basic-rbac.mdx @@ -66,7 +66,7 @@ This guide assumes that you're using Next.js App Router, but the concepts can be Create a helper function to simplify checking roles. 1. In your application's root directory, create a `utils/` folder. - 1. Inside this directory, create a `roles.ts` file with the following code. The `checkRole()` helper uses the [`auth()`](/docs/references/nextjs/auth) helper to access the user's session claims. From the session claims, it accesses the `metadata` object to check the user's role. The `checkRole()` helper accepts a role of type `Roles`, which you created in the [Create a global TypeScript definition](#create-a-global-typescript-definition) step. It returns `true` if the user has that role or `false` if they do not. + 1. Inside this directory, create a `roles.ts` file with the following code. The `checkRole()` helper uses the [`auth()`](/docs/sdk/nextjs/auth) helper to access the user's session claims. From the session claims, it accesses the `metadata` object to check the user's role. The `checkRole()` helper accepts a role of type `Roles`, which you created in the [Create a global TypeScript definition](#create-a-global-typescript-definition) step. It returns `true` if the user has that role or `false` if they do not. ```ts {{ filename: 'utils/roles.ts' }} import { Roles } from '@/types/globals' diff --git a/docs/guides/custom-redirects.mdx b/docs/guides/custom-redirects.mdx index b1ba643c4e..f5a3b9f311 100644 --- a/docs/guides/custom-redirects.mdx +++ b/docs/guides/custom-redirects.mdx @@ -56,7 +56,7 @@ If you would like to override the `redirect_url` value and supply a custom redir ## Middleware -If you are using Next.js and want a more programmatically generated redirect option, you can use the [`auth.protect()`](/docs/references/nextjs/auth#protect) method in your [Clerk middleware](/docs/references/nextjs/clerk-middleware). +If you are using Next.js and want a more programmatically generated redirect option, you can use the [`auth.protect()`](/docs/references/nextjs/auth#protect) method in your [Clerk middleware](/docs/sdk/nextjs/clerk-middleware). ```tsx {{ filename: 'middleware.ts' }} import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server' diff --git a/docs/guides/force-mfa.mdx b/docs/guides/force-mfa.mdx index 7477247c77..ada3ed1fbc 100644 --- a/docs/guides/force-mfa.mdx +++ b/docs/guides/force-mfa.mdx @@ -108,7 +108,7 @@ By default, Clerk does not enforce [multi-factor authentication (MFA)](/docs/aut - By default, the Nuxt SDK automatically adds [the `clerkMiddleware()` helper](/docs/references/nuxt/clerk-middleware) to your Nuxt application. To manually configure the middleware, in your `nuxt.config.ts` file, under the `clerk` property, set `skipServerMiddleware: true`. + By default, the Nuxt SDK automatically adds [the `clerkMiddleware()` helper](/docs/sdk/nuxt/clerk-middleware) to your Nuxt application. To manually configure the middleware, in your `nuxt.config.ts` file, under the `clerk` property, set `skipServerMiddleware: true`. ```tsx {{ filename: 'nuxt.config.ts', mark: [[3, 5]] }} export default defineNuxtConfig({ diff --git a/docs/guides/force-organizations.mdx b/docs/guides/force-organizations.mdx index 1b319d88fa..cd28225482 100644 --- a/docs/guides/force-organizations.mdx +++ b/docs/guides/force-organizations.mdx @@ -76,7 +76,7 @@ This guide will be written for Next.js applications using App Router, but the sa - The [`auth()`](/docs/references/nextjs/auth) helper function can be used to get the `orgId` from the session _server-side_. If the `orgId` is `null`, then the user does not have an active organization. + The [`auth()`](/docs/sdk/nextjs/auth) helper function can be used to get the `orgId` from the session _server-side_. If the `orgId` is `null`, then the user does not have an active organization. ```tsx import { auth } from '@clerk/nextjs/server' @@ -91,7 +91,7 @@ This guide will be written for Next.js applications using App Router, but the sa - The [`useAuth()`](/docs/references/react/use-auth) hook can be used to get the `orgId` from the session _client-side_. If the `orgId` is `null`, then the user does not have an active organization. + The [`useAuth()`](/docs/sdk/react/use-auth) hook can be used to get the `orgId` from the session _client-side_. If the `orgId` is `null`, then the user does not have an active organization. ```tsx 'use client' @@ -109,7 +109,7 @@ This guide will be written for Next.js applications using App Router, but the sa ### Set an active organization - In the case of [prebuilt components](/docs/components/overview), an organization will _automatically_ be set as active each time the user creates an organization, accepts an invitation, or selects a membership from the organization switcher. In the case of custom flows, you will need to implement the logic for setting an organization as active. The [`useOrganizationList()`](/docs/references/react/use-organization-list) hook provides a `setActive` method to help you with this. + In the case of [prebuilt components](/docs/components/overview), an organization will _automatically_ be set as active each time the user creates an organization, accepts an invitation, or selects a membership from the organization switcher. In the case of custom flows, you will need to implement the logic for setting an organization as active. The [`useOrganizationList()`](/docs/sdk/react/use-organization-list) hook provides a `setActive` method to help you with this. In the following example, a custom organization switcher is created. It allows a user to select an organization from a list of their memberships. The `useOrganizationList()` hook is used to fetch a list of the user's memberships, and the `setActive` method is used to set the selected organization as active. @@ -229,7 +229,7 @@ This guide will be written for Next.js applications using App Router, but the sa ### Limit access using the `clerkMiddleware()` helper - Clerk's [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) helper can be used in both App Router and Pages Router applications to limit access to users with active organizations only. + Clerk's [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) helper can be used in both App Router and Pages Router applications to limit access to users with active organizations only. In the example below, the `clerkMiddleware()` helper is used to redirect signed in users to the organization selection page if they are not active in an organization. diff --git a/docs/guides/reverification.mdx b/docs/guides/reverification.mdx index ee5819b034..55a813c040 100644 --- a/docs/guides/reverification.mdx +++ b/docs/guides/reverification.mdx @@ -124,7 +124,7 @@ To handle reverification server-side, use the [`auth.has()`](/docs/references/ba After setting up reverification on the server-side, you must handle reverification on the client-side. -The following example demonstrates how to use the [`useReverification()`](/docs/references/react/use-reverification) hook to detect authorization errors and automatically display a modal that allows the user to verify their identity. Upon successful verification, the previously failed request is automatically retried. +The following example demonstrates how to use the [`useReverification()`](/docs/sdk/react/use-reverification) hook to detect authorization errors and automatically display a modal that allows the user to verify their identity. Upon successful verification, the previously failed request is automatically retried. diff --git a/docs/guides/waitlist.mdx b/docs/guides/waitlist.mdx index f4012afc5a..cc4e4a4222 100644 --- a/docs/guides/waitlist.mdx +++ b/docs/guides/waitlist.mdx @@ -8,7 +8,7 @@ In [**Waitlist** mode](/docs/authentication/configuration/restrictions#waitlist) ## Install `@clerk/nextjs` - Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + Clerk's [Next.js SDK](/docs/sdk/nextjs/methods) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -132,7 +132,7 @@ In [**Waitlist** mode](/docs/authentication/configuration/restrictions#waitlist) } ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/sdk/nextjs/clerk-middleware) to learn how to require authentication for specific routes. ### Add a sign-in page @@ -146,7 +146,7 @@ In [**Waitlist** mode](/docs/authentication/configuration/restrictions#waitlist) } ``` - Update your environment variables to point to your custom sign-in page. For more information on building custom sign-in and sign-up pages, see the [dedicated guide](/docs/references/nextjs/custom-signup-signin-pages). + Update your environment variables to point to your custom sign-in page. For more information on building custom sign-in and sign-up pages, see the [dedicated guide](/docs/sdk/nextjs/custom-signup-signin-pages). ```env {{ filename: '.env.local' }} NEXT_PUBLIC_CLERK_SIGN_IN_URL="/sign-in" diff --git a/docs/how-clerk-works/overview.mdx b/docs/how-clerk-works/overview.mdx index 7b54e02a7f..80f2a2b4cc 100644 --- a/docs/how-clerk-works/overview.mdx +++ b/docs/how-clerk-works/overview.mdx @@ -3,7 +3,7 @@ title: How Clerk works description: Learn how Clerk is architected and how it works under the hood. --- -This guide provides a deep dive into Clerk's architecture and internal workings. For developers who are simply looking to add authentication to their app, see the [quickstart guides](/docs/quickstarts/overview). +This guide provides a deep dive into Clerk's architecture and internal workings. For developers who are simply looking to add authentication to their app, see the [quickstart guides](/docs/quickstarts). ## The frontend API diff --git a/docs/index.mdx b/docs/index.mdx index 0645869ca2..7da7f54b6e 100644 --- a/docs/index.mdx +++ b/docs/index.mdx @@ -7,7 +7,7 @@ template: wide Find all the guides and resources you need to develop with Clerk. - - [Quickstarts & Tutorials](/docs/quickstarts/overview) + - [Quickstarts & Tutorials](/docs/quickstarts) - Explore our end-to-end tutorials and getting started guides for different application stacks using Clerk. - {} @@ -33,67 +33,67 @@ Find all the guides and resources you need to develop with Clerk. ## Explore by frontend framework - - [Next.js](/docs/quickstarts/nextjs) + - [Next.js](/docs/sdk/nextjs/quickstart) - Easily add secure, beautiful, and fast authentication to Next.js with Clerk. - {} --- - - [React](/docs/quickstarts/react) + - [React](/docs/sdk/react/quickstart) - Get started installing and initializing Clerk in a new React + Vite app. - {} --- - - [Remix](/docs/quickstarts/remix) + - [Remix](/docs/sdk/remix/quickstart) - Easily add secure, edge- and SSR-friendly authentication to Remix with Clerk. - {} --- - - [RedwoodJS](/docs/references/redwood/overview) + - [RedwoodJS](/docs/sdk/redwood/quickstart) - Grow your RedwoodJS application with Clerk user management and authentication. - {} --- - - [React Native / Expo](/docs/quickstarts/expo) + - [React Native / Expo](/docs/sdk/expo/quickstart) - Use Clerk with Expo to authenticate users in your React Native application. - {} --- - - [Astro](/docs/quickstarts/astro) + - [Astro](/docs/sdk/astro/quickstart) - Easily add secure and SSR-friendly authentication to your Astro application with Clerk. - {} --- - - [iOS (Beta)](/docs/quickstarts/ios) + - [iOS (Beta)](/docs/sdk/ios/quickstart) - Use the Clerk iOS SDK to authenticate users in your native Apple applications. - {} --- - - [TanStack Start (Beta)](/docs/quickstarts/tanstack-start) + - [TanStack Start (Beta)](/docs/sdk/tanstack-start/quickstart) - Easily add secure and SSR-friendly authentication to your TanStack Start application with Clerk. - ![](data:image/webp;base64,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) --- - - [React Router (Beta)](/docs/quickstarts/react-router) + - [React Router (Beta)](/docs/sdk/react-router/quickstart) - Easily add secure, edge- and SSR-friendly authentication to React Router with Clerk. - {} --- - - [Nuxt](/docs/quickstarts/nuxt) + - [Nuxt](/docs/sdk/nuxt/quickstart) - Easily add secure, beautiful, and fast authentication to Nuxt with Clerk. - {} --- - - [Vue](/docs/quickstarts/vue) + - [Vue](/docs/sdk/vue/quickstart) - Get started installing and initializing Clerk in a new Vue + Vite app. - {} @@ -101,13 +101,13 @@ Find all the guides and resources you need to develop with Clerk. ## Explore by backend framework - - [Node / Express](/docs/references/nodejs/overview) + - [Node / Express](/docs/sdk/nodejs/quickstart) - Quickly add authentication and user management to your Node.js application. - {} --- - - [Ruby on Rails](/docs/references/ruby/overview) + - [Ruby on Rails](/docs/sdk/ruby/quickstart) - Integrate user management and authentication into your Ruby application. - {} diff --git a/docs/integrations/databases/convex.mdx b/docs/integrations/databases/convex.mdx index bbce2b5bc4..3eea55d126 100644 --- a/docs/integrations/databases/convex.mdx +++ b/docs/integrations/databases/convex.mdx @@ -26,7 +26,7 @@ description: Learn how to integrate Clerk into your Convex application. Convex is the full-stack TypeScript development platform. With Convex you get to build a backend with a provided realtime database, file storage, text search, scheduling and more. Paired with Clerk's user authentication and management features, you can build a powerful application with minimal effort. -This tutorial assumes that you have already [set up a Clerk application](/docs/quickstarts/setup-clerk) and a [React + Convex application](https://docs.convex.dev/quickstart/react){{ target: '_blank' }}. This tutorial will also assume that you have not added Clerk to your application yet. +This tutorial assumes that you have already [set up a Clerk application](/docs/getting-started) and a [React + Convex application](https://docs.convex.dev/quickstart/react){{ target: '_blank' }}. This tutorial will also assume that you have not added Clerk to your application yet. ## Create a JWT template based on Convex diff --git a/docs/integrations/databases/fauna.mdx b/docs/integrations/databases/fauna.mdx index 0e01ef4f9f..06cf0be3f4 100644 --- a/docs/integrations/databases/fauna.mdx +++ b/docs/integrations/databases/fauna.mdx @@ -110,7 +110,7 @@ This guide will walk you through the steps to integrate Fauna with Clerk in your ## Authenticate Fauna queries in your Next.js app - You can now create Fauna JWTs in Clerk using the JWT template you created in the previous step. Generate the Fauna JWT by calling Clerk's [`useAuth().getToken`](/docs/references/react/use-auth) method, and use it to authenticate with Fauna as an end user, as shown in the following example: + You can now create Fauna JWTs in Clerk using the JWT template you created in the previous step. Generate the Fauna JWT by calling Clerk's [`useAuth().getToken`](/docs/sdk/react/use-auth) method, and use it to authenticate with Fauna as an end user, as shown in the following example: ```jsx {{ filename: 'app/page.tsx' }} 'use client' diff --git a/docs/integrations/databases/firebase.mdx b/docs/integrations/databases/firebase.mdx index 61219e5315..a0c8d1ef50 100644 --- a/docs/integrations/databases/firebase.mdx +++ b/docs/integrations/databases/firebase.mdx @@ -205,7 +205,7 @@ Integrating Firebase with Clerk gives you the benefits of using Firebase's featu --- - - [Create custom sign-up and sign-in pages in your Next.js app](/docs/references/nextjs/custom-signup-signin-pages) + - [Create custom sign-up and sign-in pages in your Next.js app](/docs/sdk/nextjs/custom-signup-signin-pages) - Learn how add custom sign-up and sign-in pages with Clerk components in your Next.js application. --- diff --git a/docs/integrations/databases/grafbase.mdx b/docs/integrations/databases/grafbase.mdx index 948b6f3bd1..cc4cb1267f 100644 --- a/docs/integrations/databases/grafbase.mdx +++ b/docs/integrations/databases/grafbase.mdx @@ -3,7 +3,7 @@ title: Integrate Grafbase with Clerk description: Learn how to integrate Clerk and Grafbase into your application --- -The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/getting-started). After your Clerk application has been created, navigate to the [**JWT templates**](https://dashboard.clerk.com/last-active?path=jwt-templates) page in the Clerk Dashboard. Click on the **New template** button to create a new template based on Grafbase. @@ -67,7 +67,7 @@ If needed, you can also use a shortcode to dynamically include the users current You must send OIDC (JWT) tokens using an `Authorization: Bearer TOKEN` header. Your token must include the group if using group-based authentication. -The [`useAuth()`](/docs/references/react/use-auth) hook os the easiest way to generate JWTs. Use `await getToken({ template: "..." })` and specify your grafbase template to retrieve a new JWT. +The [`useAuth()`](/docs/sdk/react/use-auth) hook os the easiest way to generate JWTs. Use `await getToken({ template: "..." })` and specify your grafbase template to retrieve a new JWT. ```tsx diff --git a/docs/integrations/databases/hasura.mdx b/docs/integrations/databases/hasura.mdx index 9dea99b5d3..843a35b979 100644 --- a/docs/integrations/databases/hasura.mdx +++ b/docs/integrations/databases/hasura.mdx @@ -3,7 +3,7 @@ title: Integrate Hasura with Clerk description: Learn how to integrate Clerk into your Hasura application. --- -The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/getting-started). After your Clerk application has been created, navigate to the [**JWT templates**](https://dashboard.clerk.com/last-active?path=jwt-templates) page in the Clerk Dashboard. Click on the **New template** button to create a new template based on Hasura. diff --git a/docs/integrations/databases/neon.mdx b/docs/integrations/databases/neon.mdx index d62eba71b1..2efa53179b 100644 --- a/docs/integrations/databases/neon.mdx +++ b/docs/integrations/databases/neon.mdx @@ -39,11 +39,11 @@ This tutorial demonstrates how to integrate Neon Postgres with Clerk in a Next.j ## Integrate the Next.js Clerk SDK - Follow the [Next.js quickstart](/docs/quickstarts/nextjs) to integrate the Clerk Next.js SDK into your application. + Follow the [Next.js quickstart](/docs/sdk/nextjs/quickstart) to integrate the Clerk Next.js SDK into your application. ## Protect your application routes - To ensure that only authenticated users can access your application, modify [`clerkMiddleware`](/docs/references/nextjs/clerk-middleware) to require authentication for every route. + To ensure that only authenticated users can access your application, modify [`clerkMiddleware`](/docs/sdk/nextjs/clerk-middleware) to require authentication for every route. ```typescript {{ filename: 'middleware.ts', mark: [[3, 5]] }} import { clerkMiddleware } from '@clerk/nextjs/server' @@ -141,7 +141,7 @@ This tutorial demonstrates how to integrate Neon Postgres with Clerk in a Next.j ## Create Server Actions to handle user interactions - To handle form submissions for adding and deleting user messages, create two Server Actions in `app/actions.ts`. Use Clerk's [`auth()` helper](/docs/references/nextjs/auth) to obtain the user ID, which will be used to interact with the database. + To handle form submissions for adding and deleting user messages, create two Server Actions in `app/actions.ts`. Use Clerk's [`auth()` helper](/docs/sdk/nextjs/auth) to obtain the user ID, which will be used to interact with the database. ```typescript {{ filename: 'app/actions.ts' }} 'use server' @@ -174,7 +174,7 @@ This tutorial demonstrates how to integrate Neon Postgres with Clerk in a Next.j In your `app/page.tsx` file, add the following code to create the UI for the home page. If a message exists, the user can view and delete it; otherwise, they can add a new message. - To retrieve the user's messages, use Clerk's [`auth()` helper](/docs/references/nextjs/auth) to obtain the user's ID. Then, use this ID to query the database for the user's messages. + To retrieve the user's messages, use Clerk's [`auth()` helper](/docs/sdk/nextjs/auth) to obtain the user's ID. Then, use this ID to query the database for the user's messages. To enable the user to delete or add a message, use the `deleteUserMessage()` and `createUserMessage()` actions created in the previous step. diff --git a/docs/integrations/databases/nhost.mdx b/docs/integrations/databases/nhost.mdx index 9ccf6c0d1a..9368abaf84 100644 --- a/docs/integrations/databases/nhost.mdx +++ b/docs/integrations/databases/nhost.mdx @@ -3,7 +3,7 @@ title: Integrate Nhost with Clerk description: Learn how to integrate Clerk into your Nhost project. --- -The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/quickstarts/setup-clerk). +The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/getting-started). After your Clerk application has been created, navigate to the [**JWT templates**](https://dashboard.clerk.com/last-active?path=jwt-templates) page in the Clerk Dashboard. Click on the **New template** button to create a new template based on Nhost. @@ -80,7 +80,7 @@ The last step of integrating Clerk as the modern web authentication solution for Even if you don’t have a database table set up yet, we can make use of the [built-in GraphQL introspection system](https://graphql.org/learn/introspection/) to validate that the authenticated requests are working properly. -Here is an example of using [Apollo Client](https://github.com/apollographql/apollo-client) in conjunction with the [`useAuth()`](/docs/references/react/use-auth) hook in a Next.js application to make a request to the Hasura GraphQL endpoint: +Here is an example of using [Apollo Client](https://github.com/apollographql/apollo-client) in conjunction with the [`useAuth()`](/docs/sdk/react/use-auth) hook in a Next.js application to make a request to the Hasura GraphQL endpoint: ```jsx import { ApolloProvider, ApolloClient, HttpLink, from, InMemoryCache } from '@apollo/client' diff --git a/docs/integrations/databases/supabase.mdx b/docs/integrations/databases/supabase.mdx index 5e07259eef..2eaa97ea5a 100644 --- a/docs/integrations/databases/supabase.mdx +++ b/docs/integrations/databases/supabase.mdx @@ -224,7 +224,7 @@ For interacting with the Supabase dashboard, you can either use the **Supabase i - The following example uses the [Next.js SDK](/docs/references/nextjs/overview) to access the [`useUser()`](/docs/references/react/use-user) and [`useSession()`](/docs/references/react/use-session) hooks, but you can adapt this code to work with any React-based Clerk SDK. + The following example uses the [Next.js SDK](/docs/sdk/nextjs/methods) to access the [`useUser()`](/docs/sdk/react/use-user) and [`useSession()`](/docs/sdk/react/use-session) hooks, but you can adapt this code to work with any React-based Clerk SDK. ```tsx {{ filename: 'app/page.tsx' }} 'use client' @@ -324,7 +324,7 @@ For interacting with the Supabase dashboard, you can either use the **Supabase i - The following example uses the [Next.js SDK](/docs/references/nextjs/overview) to demonstrate how to integrate Supabase with Clerk in a **server-side rendered** application. + The following example uses the [Next.js SDK](/docs/sdk/nextjs/methods) to demonstrate how to integrate Supabase with Clerk in a **server-side rendered** application. The `createClerkSupabaseClientSsr()` function is stored in a separate file so that it can be re-used in multiple places, such as within `page.tsx` or a Server Action file. This function uses the [`auth().getToken()`](/docs/references/nextjs/auth#use-auth-for-data-fetching) method to get the Clerk token and inject it into the request headers sent to Supabase. diff --git a/docs/manifest.json b/docs/manifest.json index 81d277a6dd..e16faf2d0c 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -9,7 +9,7 @@ }, { "title": "Getting Started", - "href": "/docs/quickstarts/setup-clerk", + "href": "/docs/getting-started", "icon": "checkmark-circle" }, { @@ -91,11 +91,11 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/nextjs" + "href": "/docs/sdk/nextjs/quickstart" }, { "title": "Available Methods", - "href": "/docs/references/nextjs/overview" + "href": "/docs/sdk/nextjs/methods" }, { "title": "Guides", @@ -103,19 +103,19 @@ [ { "title": "Read session and user data", - "href": "/docs/references/nextjs/read-session-data" + "href": "/docs/sdk/nextjs/read-session-data" }, { "title": "Add custom sign up and sign in pages", - "href": "/docs/references/nextjs/custom-signup-signin-pages" + "href": "/docs/sdk/nextjs/custom-signup-signin-pages" }, { "title": "Integrate Clerk into your app with tRPC", - "href": "/docs/references/nextjs/trpc" + "href": "/docs/sdk/nextjs/trpc" }, { "title": "Next.js rendering modes and Clerk", - "href": "/docs/references/nextjs/rendering-modes" + "href": "/docs/sdk/nextjs/rendering-modes" } ] ] @@ -127,7 +127,7 @@ { "title": "`clerkMiddleware()`", "wrap": false, - "href": "/docs/references/nextjs/clerk-middleware" + "href": "/docs/sdk/nextjs/clerk-middleware" } ] ] @@ -139,20 +139,20 @@ { "title": "`auth()`", "wrap": false, - "href": "/docs/references/nextjs/auth" + "href": "/docs/sdk/nextjs/auth" }, { "title": "`currentUser()`", "wrap": false, - "href": "/docs/references/nextjs/current-user" + "href": "/docs/sdk/nextjs/current-user" }, { "title": "Route Handlers", - "href": "/docs/references/nextjs/route-handlers" + "href": "/docs/sdk/nextjs/route-handlers" }, { "title": "Server Actions", - "href": "/docs/references/nextjs/server-actions" + "href": "/docs/sdk/nextjs/server-actions" } ] ] @@ -164,12 +164,12 @@ { "title": "`getAuth()`", "wrap": false, - "href": "/docs/references/nextjs/get-auth" + "href": "/docs/sdk/nextjs/get-auth" }, { "title": "`buildClerkProps()`", "wrap": false, - "href": "/docs/references/nextjs/build-clerk-props" + "href": "/docs/sdk/nextjs/build-clerk-props" } ] ] @@ -200,11 +200,11 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/react" + "href": "/docs/sdk/react/quickstart" }, { "title": "Available Methods", - "href": "/docs/references/react/overview" + "href": "/docs/sdk/react/methods" }, { "title": "Client-side helpers", @@ -213,53 +213,53 @@ { "title": "`useUser()`", "wrap": false, - "href": "/docs/references/react/use-user" + "href": "/docs/sdk/react/use-user" }, { "title": "`useClerk()`", "wrap": false, - "href": "/docs/references/react/use-clerk" + "href": "/docs/sdk/react/use-clerk" }, { "title": "`useAuth()`", "wrap": false, - "href": "/docs/references/react/use-auth" + "href": "/docs/sdk/react/use-auth" }, { "title": "`useSignIn()`", "wrap": false, - "href": "/docs/references/react/use-sign-in" + "href": "/docs/sdk/react/use-sign-in" }, { "title": "`useSignUp()`", "wrap": false, - "href": "/docs/references/react/use-sign-up" + "href": "/docs/sdk/react/use-sign-up" }, { "title": "`useSession()`", "wrap": false, - "href": "/docs/references/react/use-session" + "href": "/docs/sdk/react/use-session" }, { "title": "`useSessionList()`", "wrap": false, - "href": "/docs/references/react/use-session-list" + "href": "/docs/sdk/react/use-session-list" }, { "title": "`useOrganization()`", "wrap": false, - "href": "/docs/references/react/use-organization" + "href": "/docs/sdk/react/use-organization" }, { "title": "`useOrganizationList()`", "wrap": false, - "href": "/docs/references/react/use-organization-list" + "href": "/docs/sdk/react/use-organization-list" }, { "title": "`useReverification()`", "tag": "(Beta)", "wrap": false, - "href": "/docs/references/react/use-reverification" + "href": "/docs/sdk/react/use-reverification" } ] ] @@ -275,11 +275,11 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/chrome-extension" + "href": "/docs/sdk/chrome-extension/quickstart" }, { "title": "Available Methods", - "href": "/docs/references/chrome-extension/overview" + "href": "/docs/sdk/chrome-extension/methods" }, { "title": "Guides", @@ -288,19 +288,19 @@ [ { "title": "Add React Router", - "href": "/docs/references/chrome-extension/add-react-router" + "href": "/docs/sdk/chrome-extension/add-react-router" }, { "title": "Sync auth status between your Chrome Extension and web app", - "href": "/docs/references/chrome-extension/sync-host" + "href": "/docs/sdk/chrome-extension/sync-host" }, { "title": "`createClerkClient()`", - "href": "/docs/references/chrome-extension/create-clerk-client" + "href": "/docs/sdk/chrome-extension/create-clerk-client" }, { "title": "Configure a consistent CRX ID", - "href": "/docs/references/chrome-extension/configure-consistent-crx-id" + "href": "/docs/sdk/chrome-extension/configure-consistent-crx-id" } ] ] @@ -316,11 +316,11 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/expo" + "href": "/docs/sdk/expo/quickstart" }, { "title": "Available Methods", - "href": "/docs/references/expo/overview" + "href": "/docs/sdk/expo/methods" }, { "title": "Hooks", @@ -328,11 +328,11 @@ [ { "title": "useLocalCredentials()", - "href": "/docs/references/expo/use-local-credentials" + "href": "/docs/sdk/expo/use-local-credentials" }, { "title": "useOAuth()", - "href": "/docs/references/expo/use-oauth" + "href": "/docs/sdk/expo/use-oauth" } ] ] @@ -343,15 +343,15 @@ [ { "title": "Read session and user data", - "href": "/docs/references/expo/read-session-user-data" + "href": "/docs/sdk/expo/read-session-user-data" }, { "title": "Use biometrics with local credentials", - "href": "/docs/references/expo/local-credentials" + "href": "/docs/sdk/expo/local-credentials" }, { "title": "Offline support", - "href": "/docs/references/expo/offline-support" + "href": "/docs/sdk/expo/offline-support" } ] ] @@ -363,11 +363,11 @@ [ { "title": "Overview", - "href": "/docs/references/expo/web-support/overview" + "href": "/docs/sdk/expo/web-support/overview" }, { "title": "Add custom sign-up and sign-in pages", - "href": "/docs/references/expo/web-support/custom-signup-signin-pages" + "href": "/docs/sdk/expo/web-support/custom-signup-signin-pages" } ] ] @@ -384,15 +384,15 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/ios" + "href": "/docs/sdk/ios/quickstart" }, { "title": "Available Methods", - "href": "/docs/references/ios/overview" + "href": "/docs/sdk/ios/methods" }, { "title": "`getToken()`", - "href": "/docs/references/ios/get-token" + "href": "/docs/sdk/ios/get-token" }, { "title": "Guides", @@ -400,7 +400,7 @@ [ { "title": "Sign in with Apple", - "href": "/docs/references/ios/sign-in-with-apple" + "href": "/docs/sdk/ios/sign-in-with-apple" } ] ] @@ -417,11 +417,11 @@ [ { "title": "Quickstart & Available Methods", - "href": "/docs/references/nodejs/overview" + "href": "/docs/sdk/nodejs/quickstart" }, { "title": "Available methods", - "href": "/docs/references/nodejs/available-methods" + "href": "/docs/sdk/nodejs/methods" }, { "title": "Connect/Express Middleware", @@ -438,11 +438,11 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/express" + "href": "/docs/sdk/express/quickstart" }, { "title": "Available Methods", - "href": "/docs/references/express/overview" + "href": "/docs/sdk/express/methods" } ] ] @@ -455,7 +455,7 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/fastify" + "href": "/docs/sdk/fastify/quickstart" } ] ] @@ -469,11 +469,11 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/react-router" + "href": "/docs/sdk/react-router/quickstart" }, { "title": "Available Methods", - "href": "/docs/references/react-router/overview" + "href": "/docs/sdk/react-router/methods" }, { "title": "Guides", @@ -481,15 +481,15 @@ [ { "title": "Read session and user data", - "href": "/docs/references/react-router/read-session-data" + "href": "/docs/sdk/react-router/read-session-data" }, { "title": "Add custom sign up and sign in pages", - "href": "/docs/references/react-router/custom-signup-signin-pages" + "href": "/docs/sdk/react-router/custom-signup-signin-pages" }, { "title": "Library mode", - "href": "/docs/references/react-router/library-mode" + "href": "/docs/sdk/react-router/library-mode" } ] ] @@ -501,11 +501,11 @@ { "title": "`rootAuthLoader()`", "wrap": false, - "href": "/docs/references/react-router/root-auth-loader" + "href": "/docs/sdk/react-router/root-auth-loader" }, { "title": "`getAuth()`", - "href": "/docs/references/react-router/get-auth" + "href": "/docs/sdk/react-router/get-auth" } ] ] @@ -521,27 +521,27 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/remix" + "href": "/docs/sdk/remix/quickstart" }, { "title": "``", "wrap": false, - "href": "/docs/references/remix/clerk-app" + "href": "/docs/sdk/remix/clerk-app" }, { "title": "SPA Mode", "wrap": false, - "href": "/docs/references/remix/spa-mode" + "href": "/docs/sdk/remix/spa-mode" }, { "title": "Add custom sign up and sign in pages", "wrap": true, - "href": "/docs/references/remix/custom-signup-signin-pages" + "href": "/docs/sdk/remix/custom-signup-signin-pages" }, { "title": "Read session and user data", "wrap": true, - "href": "/docs/references/remix/read-session-data" + "href": "/docs/sdk/remix/read-session-data" } ] ] @@ -555,11 +555,11 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/tanstack-start" + "href": "/docs/sdk/tanstack-start/quickstart" }, { "title": "Available Methods", - "href": "/docs/references/tanstack-start/overview" + "href": "/docs/sdk/tanstack-start/methods" }, { "title": "General references", @@ -567,11 +567,11 @@ [ { "title": "`getAuth()`", - "href": "/docs/references/tanstack-start/get-auth" + "href": "/docs/sdk/tanstack-start/get-auth" }, { "title": "`createClerkHandler()`", - "href": "/docs/references/tanstack-start/create-clerk-handler" + "href": "/docs/sdk/tanstack-start/create-clerk-handler" } ] ] @@ -582,12 +582,12 @@ [ { "title": "Add custom sign up and sign in pages", - "href": "/docs/references/tanstack-start/custom-signup-signin-pages", + "href": "/docs/sdk/tanstack-start/custom-signup-signin-pages", "wrap": true }, { "title": "Read session and user data", - "href": "/docs/references/tanstack-start/read-session-data", + "href": "/docs/sdk/tanstack-start/read-session-data", "wrap": true } ] @@ -604,15 +604,15 @@ [ { "title": "Quickstart & Available Methods", - "href": "/docs/references/go/overview" + "href": "/docs/sdk/go/quickstart" }, { "title": "Verifying sessions", - "href": "/docs/references/go/verifying-sessions" + "href": "/docs/sdk/go/verifying-sessions" }, { "title": "Use Clerk Go for Backend API Operations", - "href": "/docs/references/go/other-examples" + "href": "/docs/sdk/go/other-examples" }, { "title": "Go SDK repository", @@ -629,11 +629,11 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/astro" + "href": "/docs/sdk/astro/quickstart" }, { "title": "Available Methods", - "href": "/docs/references/astro/overview" + "href": "/docs/sdk/astro/methods" }, { "title": "UI Frameworks", @@ -641,7 +641,7 @@ [ { "title": "Use Clerk with Astro and React", - "href": "/docs/references/astro/react" + "href": "/docs/sdk/astro/react" } ] ] @@ -652,17 +652,17 @@ [ { "title": "Migrating from community SDK", - "href": "/docs/references/astro/migrating-from-astro-community-sdk" + "href": "/docs/sdk/astro/migrating-from-astro-community-sdk" }, { "title": "Read session and user data", "wrap": false, - "href": "/docs/references/astro/read-session-data" + "href": "/docs/sdk/astro/read-session-data" }, { "title": "Hybrid rendering", "wrap": false, - "href": "/docs/references/astro/hybrid-rendering" + "href": "/docs/sdk/astro/hybrid-rendering" } ] ] @@ -674,17 +674,17 @@ { "title": "`clerkMiddleware()`", "wrap": false, - "href": "/docs/references/astro/clerk-middleware" + "href": "/docs/sdk/astro/clerk-middleware" }, { "title": "Locals", "wrap": false, - "href": "/docs/references/astro/locals" + "href": "/docs/sdk/astro/locals" }, { "title": "Endpoints", "wrap": false, - "href": "/docs/references/astro/endpoints" + "href": "/docs/sdk/astro/endpoints" } ] ] @@ -696,42 +696,42 @@ { "title": "`$authStore`", "wrap": false, - "href": "/docs/references/astro/auth-store" + "href": "/docs/sdk/astro/auth-store" }, { "title": "`$clerkStore`", "wrap": false, - "href": "/docs/references/astro/clerk-store" + "href": "/docs/sdk/astro/clerk-store" }, { "title": "`$userStore`", "wrap": false, - "href": "/docs/references/astro/user-store" + "href": "/docs/sdk/astro/user-store" }, { "title": "`$signInStore`", "wrap": false, - "href": "/docs/references/astro/sign-in-store" + "href": "/docs/sdk/astro/sign-in-store" }, { "title": "`$signUpStore`", "wrap": false, - "href": "/docs/references/astro/sign-up-store" + "href": "/docs/sdk/astro/sign-up-store" }, { "title": "`$sessionStore`", "wrap": false, - "href": "/docs/references/astro/session-store" + "href": "/docs/sdk/astro/session-store" }, { "title": "`$sessionListStore`", "wrap": false, - "href": "/docs/references/astro/session-list-store" + "href": "/docs/sdk/astro/session-list-store" }, { "title": "`$organizationStore`", "wrap": false, - "href": "/docs/references/astro/organization-store" + "href": "/docs/sdk/astro/organization-store" } ] ] @@ -747,9 +747,12 @@ [ { "title": "Nuxt", - "href": "/docs/quickstarts/nuxt" + "href": "/docs/sdk/nuxt/quickstart" + }, + { + "title": "Available Methods", + "href": "/docs/sdk/nuxt/methods" }, - { "title": "Available Methods", "href": "/docs/references/nuxt/overview" }, { "title": "Guides", "items": [ @@ -757,12 +760,12 @@ { "title": "Read session and user data", "wrap": false, - "href": "/docs/references/nuxt/read-session-data" + "href": "/docs/sdk/nuxt/read-session-data" }, { "title": "Protect pages", "wrap": false, - "href": "/docs/references/nuxt/protect-pages" + "href": "/docs/sdk/nuxt/protect-pages" } ] ] @@ -774,7 +777,7 @@ { "title": "`clerkMiddleware()`", "wrap": false, - "href": "/docs/references/nuxt/clerk-middleware" + "href": "/docs/sdk/nuxt/clerk-middleware" } ] ] @@ -788,15 +791,21 @@ "icon": "vue", "items": [ [ - { "title": "Quickstart", "href": "/docs/quickstarts/vue" }, - { "title": "Available Methods", "href": "/docs/references/vue/overview" }, + { + "title": "Quickstart", + "href": "/docs/sdk/vue/quickstart" + }, + { + "title": "Available Methods", + "href": "/docs/sdk/vue/methods" + }, { "title": "Guides", "items": [ [ { "title": "Migrating from community SDK", - "href": "/docs/references/vue/migrating-from-vue-community-sdk" + "href": "/docs/sdk/vue/migrating-from-vue-community-sdk" } ] ] @@ -808,42 +817,42 @@ { "title": "`useUser()`", "wrap": false, - "href": "/docs/references/vue/use-user" + "href": "/docs/sdk/vue/use-user" }, { "title": "`useClerk()`", "wrap": false, - "href": "/docs/references/vue/use-clerk" + "href": "/docs/sdk/vue/use-clerk" }, { "title": "`useAuth()`", "wrap": false, - "href": "/docs/references/vue/use-auth" + "href": "/docs/sdk/vue/use-auth" }, { "title": "`useSignIn()`", "wrap": false, - "href": "/docs/references/vue/use-sign-in" + "href": "/docs/sdk/vue/use-sign-in" }, { "title": "`useSignUp`", "wrap": false, - "href": "/docs/references/vue/use-sign-up" + "href": "/docs/sdk/vue/use-sign-up" }, { "title": "`useSession()`", "wrap": false, - "href": "/docs/references/vue/use-session" + "href": "/docs/sdk/vue/use-session" }, { "title": "`useSessionList()`", "wrap": false, - "href": "/docs/references/vue/use-session-list" + "href": "/docs/sdk/vue/use-session-list" }, { "title": "`useOrganization()`", "wrap": false, - "href": "/docs/references/vue/use-organization" + "href": "/docs/sdk/vue/use-organization" } ] ] @@ -859,15 +868,15 @@ [ { "title": "Quickstart", - "href": "/docs/references/ruby/overview" + "href": "/docs/sdk/ruby/quickstart" }, { "title": "Available Methods", - "href": "/docs/references/ruby/available-methods" + "href": "/docs/sdk/ruby/methods" }, { "title": "Rack/Rails integration", - "href": "/docs/references/ruby/rack-rails" + "href": "/docs/sdk/ruby/rack-rails" }, { "title": "Ruby SDK repository", @@ -895,7 +904,7 @@ [ { "title": "Overview", - "href": "/docs/references/redwood/overview" + "href": "/docs/sdk/redwood/quickstart" }, { "title": "Redwood", @@ -2593,7 +2602,7 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/javascript", + "href": "/docs/references/javascript/quickstart", "icon": "javascript" }, { @@ -3483,4 +3492,4 @@ } ] ] -} +} \ No newline at end of file diff --git a/docs/organizations/creating-organizations.mdx b/docs/organizations/creating-organizations.mdx index c8c9dc4410..535659a031 100644 --- a/docs/organizations/creating-organizations.mdx +++ b/docs/organizations/creating-organizations.mdx @@ -11,7 +11,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for - The following example uses the [`useOrganizationList()`](/docs/references/react/use-organization-list) hook to get the `createOrganization()` method. This method is used to create a new organization with the provided name. + The following example uses the [`useOrganizationList()`](/docs/sdk/react/use-organization-list) hook to get the `createOrganization()` method. This method is used to create a new organization with the provided name. This example is written for Next.js App Router but can be adapted for any React meta framework, such as Remix. diff --git a/docs/organizations/custom-organization-switcher.mdx b/docs/organizations/custom-organization-switcher.mdx index d641103997..18d36f1f74 100644 --- a/docs/organizations/custom-organization-switcher.mdx +++ b/docs/organizations/custom-organization-switcher.mdx @@ -11,7 +11,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for The following example: - - Uses the [`useOrganizationList()`](/docs/references/react/use-organization-list) hook to get `memberships`, which is a list of the current user's organization memberships. `memberships` returns `data`, which is an array of [`OrganizationMembership`](/docs/references/javascript/organization-membership) objects. + - Uses the [`useOrganizationList()`](/docs/sdk/react/use-organization-list) hook to get `memberships`, which is a list of the current user's organization memberships. `memberships` returns `data`, which is an array of [`OrganizationMembership`](/docs/references/javascript/organization-membership) objects. - Maps over the `data` array to display the user's organization memberships in a list. - Provides a button that calls `setActive()` to set the selected organization as the active organization. - Provides a button to load more organizations if there are more available. The `data` array is paginated and will only return the first 10 results, so the `fetchNext()` method is used to load more organizations if they are available. diff --git a/docs/organizations/inviting-users.mdx b/docs/organizations/inviting-users.mdx index 9b1f6c1bb2..68d7a39a6c 100644 --- a/docs/organizations/inviting-users.mdx +++ b/docs/organizations/inviting-users.mdx @@ -20,7 +20,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for To invite a user: - 1. Use the [`useOrganization()`](/docs/references/react/use-organization) hook to get `organization`, which is the active organization. + 1. Use the [`useOrganization()`](/docs/sdk/react/use-organization) hook to get `organization`, which is the active organization. 1. Use `organization` to call the [`inviteMember()`](/docs/references/javascript/organization/invitations#invite-member) method, with the recipient's email address and desired role passed as arguments. To revoke an invitation: diff --git a/docs/organizations/manage-invitations.mdx b/docs/organizations/manage-invitations.mdx index bdd352eba4..a760f50d32 100644 --- a/docs/organizations/manage-invitations.mdx +++ b/docs/organizations/manage-invitations.mdx @@ -9,7 +9,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for - The following example uses the [`useOrganizationList()`](/docs/references/react/use-organization) hook to get `userInvitations`, which is a list of the user's organization invitations. + The following example uses the [`useOrganizationList()`](/docs/sdk/react/use-organization) hook to get `userInvitations`, which is a list of the user's organization invitations. `userInvitations` is an object with `data` that contains an array of [`UserOrganizationInvitation`](/docs/references/javascript/types/user-organization-invitation) objects. diff --git a/docs/organizations/manage-membership-requests.mdx b/docs/organizations/manage-membership-requests.mdx index 75dc7ad6d6..2084705268 100644 --- a/docs/organizations/manage-membership-requests.mdx +++ b/docs/organizations/manage-membership-requests.mdx @@ -9,7 +9,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for - The following example uses the [`useOrganization()`](/docs/references/react/use-organization) hook to get `membershipRequests`, which is a list of the active organization's membership requests. + The following example uses the [`useOrganization()`](/docs/sdk/react/use-organization) hook to get `membershipRequests`, which is a list of the active organization's membership requests. `membershipRequests` is an object with `data` that contains an array of [`OrganizationMembershipRequest`](/docs/references/javascript/organization-membership-request) objects. diff --git a/docs/organizations/managing-roles.mdx b/docs/organizations/managing-roles.mdx index 7dff5b5523..8cc42ee9e8 100644 --- a/docs/organizations/managing-roles.mdx +++ b/docs/organizations/managing-roles.mdx @@ -11,7 +11,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for - The following example uses the [`useOrganization()`](/docs/references/react/use-organization) hook to get `memberships`, which is a list of the active organization's memberships. + The following example uses the [`useOrganization()`](/docs/sdk/react/use-organization) hook to get `memberships`, which is a list of the active organization's memberships. `memberships` is an object with `data` that contains an array of [`OrganizationMembership`](/docs/references/javascript/organization-membership) objects. diff --git a/docs/organizations/org-slugs-in-urls.mdx b/docs/organizations/org-slugs-in-urls.mdx index fefae307f5..1283b3dc21 100644 --- a/docs/organizations/org-slugs-in-urls.mdx +++ b/docs/organizations/org-slugs-in-urls.mdx @@ -136,7 +136,7 @@ This guide shows you how to add organization slugs to your app's URLs, configure > [!TIP] > If your app doesn't use `clerkMiddleware()`, or you prefer to manually set the active organization, use the [`setActive()`](/docs/references/javascript/clerk/session-methods) method to control the active organization on the client-side. See [this guide](/docs/guides/force-organizations#set-an-active-organization-based-on-the-url) to learn how to manually activate a specific organization based on the URL. - With [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware), you can use the [`organizationSyncOptions`](/docs/references/nextjs/clerk-middleware#organization-sync-options) property to declare URL patterns that determine whether a specific organization or user's personal account should be activated. + With [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware), you can use the [`organizationSyncOptions`](/docs/references/nextjs/clerk-middleware#organization-sync-options) property to declare URL patterns that determine whether a specific organization or user's personal account should be activated. If the middleware detects one of these patterns in the URL and finds that a different organization is active in the session, it'll attempt to set the specified organization as the active one. @@ -227,7 +227,7 @@ This guide shows you how to add organization slugs to your app's URLs, configure - To get organization information on the server-side, access the [`Auth`](/docs/references/backend/types/auth-object) object. In Next.js apps, this object is returned by [`auth()`](/docs/references/nextjs/auth). In other frameworks, use the [`getAuth()`](/docs/references/nextjs/get-auth) helper to get the `Auth` object. + To get organization information on the server-side, access the [`Auth`](/docs/references/backend/types/auth-object) object. In Next.js apps, this object is returned by [`auth()`](/docs/sdk/nextjs/auth). In other frameworks, use the [`getAuth()`](/docs/sdk/nextjs/get-auth) helper to get the `Auth` object. To access additional organization information like the organization name, you'll need to [customize the Clerk session token](/docs/backend-requests/making/custom-session-token) to include these details: @@ -274,7 +274,7 @@ This guide shows you how to add organization slugs to your app's URLs, configure - To get organization information on the client-side, use the [`useOrganization()`](/docs/references/react/use-organization) hook to access the [`organization`](/docs/references/javascript/organization/organization) object. + To get organization information on the client-side, use the [`useOrganization()`](/docs/sdk/react/use-organization) hook to access the [`organization`](/docs/references/javascript/organization/organization) object. ```tsx {{ filename: 'app/orgs/[slug]/page.tsx', mark: [24] }} 'use client' diff --git a/docs/organizations/overview.mdx b/docs/organizations/overview.mdx index b750105d26..2960a7beb0 100644 --- a/docs/organizations/overview.mdx +++ b/docs/organizations/overview.mdx @@ -74,7 +74,7 @@ By default, when a user initially signs in to a Clerk-powered application, they The easiest way to allow users to set an organization as active is to use the [``](/docs/components/organization/organization-switcher) component. -You can also use the `setActive()` method, which is available on the [`Clerk`](/docs/references/javascript/clerk/session-methods#set-active) object and is returned by the [`useOrganizationList()`](/docs/references/react/use-organization-list) hook. +You can also use the `setActive()` method, which is available on the [`Clerk`](/docs/references/javascript/clerk/session-methods#set-active) object and is returned by the [`useOrganizationList()`](/docs/sdk/react/use-organization-list) hook. If you would like to hide personal workspaces and require users to always have an organization set as active, see the [Force organizations](/docs/guides/force-organizations) guide. diff --git a/docs/organizations/updating-organizations.mdx b/docs/organizations/updating-organizations.mdx index 6fd3ddf347..d87ed740e2 100644 --- a/docs/organizations/updating-organizations.mdx +++ b/docs/organizations/updating-organizations.mdx @@ -13,7 +13,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for The following example: - 1. Uses the [`useOrganization()`](/docs/references/react/use-organization) hook to fetch the active `organization`. + 1. Uses the [`useOrganization()`](/docs/sdk/react/use-organization) hook to fetch the active `organization`. 1. Uses `organization` to call the [`update()`](/docs/references/javascript/organization/organization#update) method with the desired name to update the organization. This example is written for Next.js App Router but can be adapted for any React meta framework, such as Remix. diff --git a/docs/organizations/verify-user-permissions.mdx b/docs/organizations/verify-user-permissions.mdx index 58241c1453..60a34a6c81 100644 --- a/docs/organizations/verify-user-permissions.mdx +++ b/docs/organizations/verify-user-permissions.mdx @@ -176,7 +176,7 @@ The following examples work for both SSR and CSR. The example: - - uses the `userId` returned from [`auth()`](/docs/references/nextjs/auth) to check if the user is signed in. If the user is not **authenticated**, the Route Handler will return a `401` error. + - uses the `userId` returned from [`auth()`](/docs/sdk/nextjs/auth) to check if the user is signed in. If the user is not **authenticated**, the Route Handler will return a `401` error. - uses `has()` to check if the user has the correct permission. If the user is not **authorized**, `has()` will return false, causing the Route Handler to return a `403` error. ```tsx {{ filename: 'app/api/get-teams/route.tsx' }} @@ -229,7 +229,7 @@ The following examples work for both SSR and CSR. - Use the [`getAuth()`](/docs/references/nextjs/get-auth) helper to access the `has()` helper in a Next.js Pages Router application. + Use the [`getAuth()`](/docs/sdk/nextjs/get-auth) helper to access the `has()` helper in a Next.js Pages Router application. The following example: diff --git a/docs/organizations/viewing-memberships.mdx b/docs/organizations/viewing-memberships.mdx index 63ad061baa..ee43702a65 100644 --- a/docs/organizations/viewing-memberships.mdx +++ b/docs/organizations/viewing-memberships.mdx @@ -11,7 +11,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for The following example: - 1. Uses the [`useOrganizationList()`](/docs/references/react/use-organization-list) hook to get `memberships`, which is a list of the current user's organization memberships. + 1. Uses the [`useOrganizationList()`](/docs/sdk/react/use-organization-list) hook to get `memberships`, which is a list of the current user's organization memberships. `memberships` returns `data`, which is an array of [`OrganizationMembership`](/docs/references/javascript/organization-membership) objects. 1. Maps over the `data` array to display the user's organization memberships in a table. diff --git a/docs/quickstarts/overview.mdx b/docs/quickstarts.mdx similarity index 96% rename from docs/quickstarts/overview.mdx rename to docs/quickstarts.mdx index ae8326fb50..ec785aa618 100644 --- a/docs/quickstarts/overview.mdx +++ b/docs/quickstarts.mdx @@ -6,37 +6,37 @@ description: See the getting started guides and tutorials. ## Full Stack - - [Next.js](/docs/quickstarts/nextjs) + - [Next.js](/docs/sdk/nextjs/quickstart) - Easily add secure, beautiful, and fast authentication to your Next.js application with Clerk. - {} --- - - [Remix](/docs/quickstarts/remix) + - [Remix](/docs/sdk/remix/quickstart) - Easily add secure, edge- and SSR-friendly authentication to your Remix application with Clerk. - {} --- - - [RedwoodJS](/docs/references/redwood/overview) + - [RedwoodJS](/docs/sdk/redwood/quickstart) - Grow your RedwoodJS application with Clerk user management and authentication. - {} --- - - [Astro](/docs/quickstarts/astro) + - [Astro](/docs/sdk/astro/quickstart) - Easily add secure and SSR-friendly authentication to your Astro application with Clerk. - {} --- - - [TanStack Start (Beta)](/docs/quickstarts/tanstack-start) + - [TanStack Start (Beta)](/docs/sdk/tanstack-start/quickstart) - Easily add secure and SSR-friendly authentication to your TanStack Start application with Clerk. - ![](data:image/webp;base64,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) --- - - [Nuxt](/docs/quickstarts/nuxt) + - [Nuxt](/docs/sdk/nuxt/quickstart) - Easily add secure, beautiful, and fast authentication to Nuxt with Clerk. - {} @@ -44,37 +44,37 @@ description: See the getting started guides and tutorials. ## Frontend - - [JavaScript](/docs/quickstarts/javascript) + - [JavaScript](/docs/references/javascript/quickstart) - Easily add secure, beautiful, and fast authentication to your JavaScript application with Clerk. - {} --- - - [React](/docs/quickstarts/react) + - [React](/docs/sdk/react/quickstart) - Easily add secure, beautiful, and fast authentication to your React application with Clerk. - {} --- - - [Expo](/docs/quickstarts/expo) + - [Expo](/docs/sdk/expo/quickstart) - Use Clerk with Expo to authenticate users in your React Native application. - {} --- - - [iOS (Beta)](/docs/quickstarts/ios) + - [iOS (Beta)](/docs/sdk/ios/quickstart) - Use the Clerk iOS SDK to authenticate users in your native Apple applications. - {} --- - - [Chrome Extension](/docs/quickstarts/chrome-extension) + - [Chrome Extension](/docs/sdk/chrome-extension/quickstart) - Use the Chome Extension SDK to authenticate users in your Chrome extension. - {} --- - - [Vue](/docs/quickstarts/vue) + - [Vue](/docs/sdk/vue/quickstart) - Easily add secure, beautiful, and fast authentication to your Vue application with Clerk. - {} @@ -82,7 +82,7 @@ description: See the getting started guides and tutorials. ## Backend - - [Fastify](/docs/quickstarts/fastify) + - [Fastify](/docs/sdk/fastify/quickstart) - Easily add secure, beautiful, and fast authentication to your Fastify application with Clerk. - {} diff --git a/docs/references/backend/overview.mdx b/docs/references/backend/overview.mdx index e186be41e6..2bb0b94d6c 100644 --- a/docs/references/backend/overview.mdx +++ b/docs/references/backend/overview.mdx @@ -375,7 +375,7 @@ To access the [properties](/docs/references/backend/types/auth-object#auth-objec - The following example uses the Next.js [`auth()`](/docs/references/nextjs/auth){{ target: '_blank' }} helper to access the `userId`. + The following example uses the Next.js [`auth()`](/docs/sdk/nextjs/auth){{ target: '_blank' }} helper to access the `userId`. ```ts import { auth, clerkClient } from '@clerk/nextjs/server' diff --git a/docs/references/backend/types/auth-object.mdx b/docs/references/backend/types/auth-object.mdx index 022f5a818e..fda40753de 100644 --- a/docs/references/backend/types/auth-object.mdx +++ b/docs/references/backend/types/auth-object.mdx @@ -11,13 +11,13 @@ The `Auth` object is available on the `request` object in server contexts. Some | Framework | How to access the `Auth` object | | - | - | -| Next.js App Router | [`auth()`](/docs/references/nextjs/auth) | -| Next.js Pages Router | [`getAuth()`](/docs/references/nextjs/get-auth) | +| Next.js App Router | [`auth()`](/docs/sdk/nextjs/auth) | +| Next.js Pages Router | [`getAuth()`](/docs/sdk/nextjs/get-auth) | | Astro | [`locals.auth()`](/docs/references/astro/locals#locals-auth) | -| Express | [`req.auth`](/docs/references/express/overview) | -| React Router | [`getAuth()`](/docs/references/react-router/get-auth) | +| Express | [`req.auth`](/docs/sdk/express/methods) | +| React Router | [`getAuth()`](/docs/sdk/react-router/get-auth) | | Remix | [`getAuth()`](/docs/references/remix/read-session-data#get-auth) | -| Tanstack Start | [`getAuth()`](/docs/references/tanstack-start/get-auth) | +| Tanstack Start | [`getAuth()`](/docs/sdk/tanstack-start/get-auth) | | Other | `request.auth` | ## Properties @@ -262,8 +262,8 @@ The `Auth` object is not available in the frontend. To use the `getToken()` meth To use the `getToken()` method in the backend: - - In App Router applications, use the [`auth()`](/docs/references/nextjs/auth) helper. - - In Pages Router applications, use the [`getAuth()`](/docs/references/nextjs/get-auth) helper. + - In App Router applications, use the [`auth()`](/docs/sdk/nextjs/auth) helper. + - In Pages Router applications, use the [`getAuth()`](/docs/sdk/nextjs/get-auth) helper. ```js {{ filename: 'app/api/get-token-example/route.ts' }} @@ -323,7 +323,7 @@ The `Auth` object is not available in the frontend. To use the `getToken()` meth - To use the `getToken()` method in the backend, you can access it using the [`getAuth()`](/docs/references/nextjs/get-auth) function. + To use the `getToken()` method in the backend, you can access it using the [`getAuth()`](/docs/sdk/nextjs/get-auth) function. ```ts {{ filename: 'app/routes/get-token.ts' }} import { getAuth } from '@clerk/remix/ssr.server' diff --git a/docs/references/javascript/clerk/clerk.mdx b/docs/references/javascript/clerk/clerk.mdx index a576657395..22ce58d341 100644 --- a/docs/references/javascript/clerk/clerk.mdx +++ b/docs/references/javascript/clerk/clerk.mdx @@ -334,7 +334,7 @@ Only one of the two properties are allowed to be set at a time. Initializes the `Clerk` object and loads all necessary environment configuration and instance settings from the [Frontend API](/docs/reference/frontend-api){{ target: '_blank' }}. -You must call this method before using the `Clerk` object in your code. Refer to the [quickstart guide](/docs/quickstarts/javascript) for more information. +You must call this method before using the `Clerk` object in your code. Refer to the [quickstart guide](/docs/references/javascript/quickstart) for more information. ```typescript function load(options?: ClerkOptions): Promise diff --git a/docs/references/javascript/clerk/organization-methods.mdx b/docs/references/javascript/clerk/organization-methods.mdx index 396c41dcb6..08971df778 100644 --- a/docs/references/javascript/clerk/organization-methods.mdx +++ b/docs/references/javascript/clerk/organization-methods.mdx @@ -7,7 +7,7 @@ These methods on the [`Clerk`](/docs/references/javascript/clerk/clerk) class al The following examples assume: -- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) ## `getOrganization()` diff --git a/docs/references/javascript/clerk/waitlist-methods.mdx b/docs/references/javascript/clerk/waitlist-methods.mdx index 8e6c47e302..c173dfdd1b 100644 --- a/docs/references/javascript/clerk/waitlist-methods.mdx +++ b/docs/references/javascript/clerk/waitlist-methods.mdx @@ -7,7 +7,7 @@ These methods on the [`Clerk`](/docs/references/javascript/clerk/clerk) class al The following example assumes: -- You followed the [quickstart](/docs/quickstarts/javascript) to add Clerk to your JavaScript app. +- You followed the [quickstart](/docs/references/javascript/quickstart) to add Clerk to your JavaScript app. - You set your sign-up mode to [**Waitlist**](docs/authentication/configuration/restrictions#waitlist). ## `joinWaitlist()` diff --git a/docs/references/javascript/organization-invitation.mdx b/docs/references/javascript/organization-invitation.mdx index 9fe22c0ade..01205119bb 100644 --- a/docs/references/javascript/organization-invitation.mdx +++ b/docs/references/javascript/organization-invitation.mdx @@ -83,7 +83,7 @@ The following example demonstrates how to revoke an organization invitation. It It assumes: -- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) ```js {{ filename: 'main.js', mark: [22, 23] }} diff --git a/docs/references/javascript/organization/domains.mdx b/docs/references/javascript/organization/domains.mdx index 14e3d21c88..6e3e529119 100644 --- a/docs/references/javascript/organization/domains.mdx +++ b/docs/references/javascript/organization/domains.mdx @@ -7,7 +7,7 @@ These methods on the [`Organization`](/docs/references/javascript/organization/o The following examples assume: -- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) - you have [enabled **Verified domains** for your organization](/docs/organizations/verified-domains) diff --git a/docs/references/javascript/organization/invitations.mdx b/docs/references/javascript/organization/invitations.mdx index 09e1f11898..03dbd663eb 100644 --- a/docs/references/javascript/organization/invitations.mdx +++ b/docs/references/javascript/organization/invitations.mdx @@ -7,7 +7,7 @@ These methods on the [`Organization`](/docs/references/javascript/organization/o The following examples assume: -- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) ## `getInvitations()` diff --git a/docs/references/javascript/organization/membership-request.mdx b/docs/references/javascript/organization/membership-request.mdx index ae3c474c4d..2c91ad8f9f 100644 --- a/docs/references/javascript/organization/membership-request.mdx +++ b/docs/references/javascript/organization/membership-request.mdx @@ -7,7 +7,7 @@ These methods on the [`Organization`](/docs/references/javascript/organization/o The following examples assume: -- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) - you have [enabled **Verified domains** and **Automatic suggestion** for your organization](/docs/organizations/verified-domains) diff --git a/docs/references/javascript/organization/organization.mdx b/docs/references/javascript/organization/organization.mdx index 24b8b112aa..6cd4f908dc 100644 --- a/docs/references/javascript/organization/organization.mdx +++ b/docs/references/javascript/organization/organization.mdx @@ -7,7 +7,7 @@ The `Organization` object holds information about an organization, as well as me The following examples assume: -- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) ## Properties diff --git a/docs/references/javascript/overview.mdx b/docs/references/javascript/overview.mdx index 289ee7529c..5d9ab4f5da 100644 --- a/docs/references/javascript/overview.mdx +++ b/docs/references/javascript/overview.mdx @@ -5,11 +5,11 @@ description: Clerk's JavaScript SDK is a foundational library for building user ClerkJS is our foundational JavaScript library for building user management and authentication. It enables you to register, sign in, verify and manage users for your application using highly customizable flows. -While we typically recommend using one of our framework SDK's, such as [Clerk React](/docs/quickstarts/react) or [Clerk Next.js](/docs/quickstarts/nextjs), having the ability to use the underlying ClerkJS package provides more freedom to use Clerk how you best see fit. +While we typically recommend using one of our framework SDK's, such as [Clerk React](/docs/sdk/react/quickstart) or [Clerk Next.js](/docs/sdk/nextjs/quickstart), having the ability to use the underlying ClerkJS package provides more freedom to use Clerk how you best see fit. ## Installation -Follow the instructions in the [ClerkJS quickstart](/docs/quickstarts/javascript) to add ClerkJS to your project. +Follow the instructions in the [ClerkJS quickstart](/docs/references/javascript/quickstart) to add ClerkJS to your project. ## Usage diff --git a/docs/quickstarts/javascript.mdx b/docs/references/javascript/quickstart.mdx similarity index 100% rename from docs/quickstarts/javascript.mdx rename to docs/references/javascript/quickstart.mdx diff --git a/docs/references/javascript/user/create-metadata.mdx b/docs/references/javascript/user/create-metadata.mdx index 8080f26df5..c4173cccdb 100644 --- a/docs/references/javascript/user/create-metadata.mdx +++ b/docs/references/javascript/user/create-metadata.mdx @@ -5,7 +5,7 @@ description: Explore methods on the User object that help you create data for th These methods on the [`User`](/docs/references/javascript/user/user) object help you create data for the user, such as `createEmailAddress()` and `createPhoneNumber()`. -The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. ## `createEmailAddress()` diff --git a/docs/references/javascript/user/password-management.mdx b/docs/references/javascript/user/password-management.mdx index 1e911c499f..9864e099ba 100644 --- a/docs/references/javascript/user/password-management.mdx +++ b/docs/references/javascript/user/password-management.mdx @@ -5,7 +5,7 @@ description: Explore methods on the User object that help you manage a user's pa These methods on the [`User`](/docs/references/javascript/user/user) object help you manage a user's password. -The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. ## `updatePassword()` diff --git a/docs/references/javascript/user/totp.mdx b/docs/references/javascript/user/totp.mdx index 15346bae17..2052dee594 100644 --- a/docs/references/javascript/user/totp.mdx +++ b/docs/references/javascript/user/totp.mdx @@ -146,7 +146,7 @@ The following example demonstrates how to use the TOTP methods to create and ver The following example assumes: -- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application - you have [enabled **authenticator application** and **backup codes** as multi-factor strategies in the Clerk Dashboard](/docs/authentication/configuration/sign-up-sign-in-options#authentication-strategies) diff --git a/docs/references/overview.mdx b/docs/references/overview.mdx index be1073a7e6..ff8f0dfe92 100644 --- a/docs/references/overview.mdx +++ b/docs/references/overview.mdx @@ -6,13 +6,13 @@ description: Learn about the Clerk and community SDK's available for integrating ## Build with Clerk SDKs - - [Next.js](/docs/references/nextjs/overview) + - [Next.js](/docs/sdk/nextjs/methods) - Clerk's Next.js SDK has prebuilt components, React hooks, and helpers to make user authentication easier. - {} --- - - [React](/docs/quickstarts/react) + - [React](/docs/sdk/react/quickstart) - Clerk React is the recommended way to integrate Clerk into your React application. - {} @@ -24,43 +24,43 @@ description: Learn about the Clerk and community SDK's available for integrating --- - - [Node.js](/docs/references/nodejs/overview) + - [Node.js](/docs/sdk/nodejs/quickstart) - Clerk Node SDK is the recommend way to integrate Clerk into your Node / Express application. - {} --- - - [React Native / Expo](/docs/quickstarts/expo) + - [React Native / Expo](/docs/sdk/expo/quickstart) - Clerk Expo is the recommended way to integrate Clerk into your React Native application. - {} --- - - [Remix](/docs/references/remix/clerk-app) + - [Remix](/docs/sdk/remix/clerk-app) - Clerk's Remix SDK has prebuilt components, React hooks, and helpers to make user authentication easier. - {} --- - - [Astro](/docs/references/astro/overview) + - [Astro](/docs/sdk/astro/methods) - Easily add secure and SSR-friendly authentication to your Astro application with Clerk. - {} --- - - [TanStack Start (Beta)](/docs/quickstarts/tanstack-start) + - [TanStack Start (Beta)](/docs/sdk/tanstack-start/quickstart) - Easily add secure and SSR-friendly authentication to your TanStack Start application with Clerk. - ![](data:image/webp;base64,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) --- - - [Go](/docs/references/go/overview) + - [Go](/docs/sdk/go/quickstart) - Clerk Go SDK is a wrapper around our Backend API written in Golang. - {} --- - - [Ruby](/docs/references/ruby/overview) + - [Ruby](/docs/sdk/ruby/quickstart) - Clerk Ruby is the recommended way to integrate Clerk into your Ruby application. - {} diff --git a/docs/references/sdk/backend-only.mdx b/docs/references/sdk/backend-only.mdx index e8c13906bf..b94d33d4d1 100644 --- a/docs/references/sdk/backend-only.mdx +++ b/docs/references/sdk/backend-only.mdx @@ -116,7 +116,7 @@ You can manually create a wrapper library around the [BAPI OpenAPI](https://cler ``` > [!TIP] - > See the Next.js [`getAuth()`](/docs/references/nextjs/get-auth) reference to see how it's implemented. + > See the Next.js [`getAuth()`](/docs/sdk/nextjs/get-auth) reference to see how it's implemented. ### Create a `requireAuth` helper diff --git a/docs/references/sdk/conventions.mdx b/docs/references/sdk/conventions.mdx index 2a63295009..e4819f4e62 100644 --- a/docs/references/sdk/conventions.mdx +++ b/docs/references/sdk/conventions.mdx @@ -96,7 +96,7 @@ When only defining a [main entry point](https://nodejs.org/api/packages.html#mai Use [subpath exports](https://nodejs.org/api/packages.html#subpath-exports) to provide API boundaries, enable more efficient code-splitting, and split code between client & server. -Here's how the [`@clerk/astro`](/docs/references/astro/overview) package is using subpath exports: +Here's how the [`@clerk/astro`](/docs/sdk/astro/methods) package is using subpath exports: - `@clerk/astro/react` - Import Clerk's prebuilt React components - `@clerk/astro/client` - Access to useful stores like `$authStore` diff --git a/docs/references/astro/auth-store.mdx b/docs/sdk/astro/auth-store.mdx similarity index 100% rename from docs/references/astro/auth-store.mdx rename to docs/sdk/astro/auth-store.mdx diff --git a/docs/references/astro/clerk-middleware.mdx b/docs/sdk/astro/clerk-middleware.mdx similarity index 100% rename from docs/references/astro/clerk-middleware.mdx rename to docs/sdk/astro/clerk-middleware.mdx diff --git a/docs/references/astro/clerk-store.mdx b/docs/sdk/astro/clerk-store.mdx similarity index 100% rename from docs/references/astro/clerk-store.mdx rename to docs/sdk/astro/clerk-store.mdx diff --git a/docs/references/astro/endpoints.mdx b/docs/sdk/astro/endpoints.mdx similarity index 91% rename from docs/references/astro/endpoints.mdx rename to docs/sdk/astro/endpoints.mdx index d3946b608b..7aae507428 100644 --- a/docs/references/astro/endpoints.mdx +++ b/docs/sdk/astro/endpoints.mdx @@ -7,7 +7,7 @@ Clerk provides helpers that allow you to protect your [Astro endpoints](https:// ## Protect your endpoints -If you aren't protecting your endpoints using [`clerkMiddleware()`](/docs/references/astro/clerk-middleware), you can use the [`auth()` local](/docs/references/astro/locals) and check for the `userId` value, as shown in the following example: +If you aren't protecting your endpoints using [`clerkMiddleware()`](/docs/sdk/astro/clerk-middleware), you can use the [`auth()` local](/docs/sdk/astro/locals) and check for the `userId` value, as shown in the following example: ```ts {{ filename: 'src/pages/api/route.ts' }} export async function GET({ locals }) { @@ -27,7 +27,7 @@ export async function GET({ locals }) { Clerk provides integrations with a number of popular databases. -To retrieve a token from a JWT template and fetch data from an external source, use the [`getToken()`](/docs/references/backend/types/auth-object#get-token){{ target: '_blank' }} method from the [`auth()` local](/docs/references/astro/locals), as shown in the following example: +To retrieve a token from a JWT template and fetch data from an external source, use the [`getToken()`](/docs/references/backend/types/auth-object#get-token){{ target: '_blank' }} method from the [`auth()` local](/docs/sdk/astro/locals), as shown in the following example: ```ts {{ filename: 'src/pages/api/route.ts' }} export async function GET({ locals }) { diff --git a/docs/references/astro/hybrid-rendering.mdx b/docs/sdk/astro/hybrid-rendering.mdx similarity index 95% rename from docs/references/astro/hybrid-rendering.mdx rename to docs/sdk/astro/hybrid-rendering.mdx index 4565d705ae..fe969ac10a 100644 --- a/docs/references/astro/hybrid-rendering.mdx +++ b/docs/sdk/astro/hybrid-rendering.mdx @@ -7,7 +7,7 @@ Astro's on-demand rendering output modes (`server` and `hybrid`) allow you to pr ## Server output mode -In `server` output mode, pages and control components are server-rendered by default, but you can opt-in to pre-rendering specific pages by adding `export const prerender = true` to the page. When you opt-in to pre-rendering a page, you must add `isStatic={true}` to any control components used on that page. This specifies that the component should use the client-side version, which relies on [client nanostores](/docs/references/astro/auth-store). +In `server` output mode, pages and control components are server-rendered by default, but you can opt-in to pre-rendering specific pages by adding `export const prerender = true` to the page. When you opt-in to pre-rendering a page, you must add `isStatic={true}` to any control components used on that page. This specifies that the component should use the client-side version, which relies on [client nanostores](/docs/sdk/astro/auth-store). The following example shows how to opt-in to pre-rendering a page and specify that the control components used on that page should use the client-side version. @@ -21,7 +21,7 @@ export const prerender = true ## Hybrid output mode -In `hybrid` output mode, pages and control components are pre-rendered by default, but you can opt-out of pre-rendering for specific pages by adding `export const prerender = false`. When you opt-out of pre-rendering a page, you must add the `isStatic={false}` prop to any control components used on that page. This specifies that the component should use the server-side version which relies on the [locals](/docs/references/astro/locals) injected by the middleware. +In `hybrid` output mode, pages and control components are pre-rendered by default, but you can opt-out of pre-rendering for specific pages by adding `export const prerender = false`. When you opt-out of pre-rendering a page, you must add the `isStatic={false}` prop to any control components used on that page. This specifies that the component should use the server-side version which relies on the [locals](/docs/sdk/astro/locals) injected by the middleware. The following example shows how to opt-out of pre-rendering a page and specify that the control components used on that page should use the server-side version. diff --git a/docs/references/astro/locals.mdx b/docs/sdk/astro/locals.mdx similarity index 83% rename from docs/references/astro/locals.mdx rename to docs/sdk/astro/locals.mdx index bca9ab05d2..4bdb10c049 100644 --- a/docs/references/astro/locals.mdx +++ b/docs/sdk/astro/locals.mdx @@ -3,13 +3,13 @@ title: Locals description: Learn how to authenticate your Astro application with Clerk using locals. --- -Through Astro [`locals`](https://docs.astro.build/en/guides/middleware/#storing-data-in-contextlocals), Clerk's [`Auth`](/docs/references/backend/types/auth-object){{ target: '_blank' }} and current [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} objects can be accessed between middlewares and pages. These locals are injected when you install the provided [middleware](/docs/references/astro/clerk-middleware). +Through Astro [`locals`](https://docs.astro.build/en/guides/middleware/#storing-data-in-contextlocals), Clerk's [`Auth`](/docs/references/backend/types/auth-object){{ target: '_blank' }} and current [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} objects can be accessed between middlewares and pages. These locals are injected when you install the provided [middleware](/docs/sdk/astro/clerk-middleware). -The following guide provides examples of using the [`auth()`](/docs/references/nextjs/auth){{ target: '_blank' }} local to validate an authenticated user and the [`currentUser()`](/docs/references/nextjs/current-user){{ target: '_blank' }} local to access the [`Backend API User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object for the authenticated user. +The following guide provides examples of using the [`auth()`](/docs/sdk/nextjs/auth){{ target: '_blank' }} local to validate an authenticated user and the [`currentUser()`](/docs/sdk/nextjs/current-user){{ target: '_blank' }} local to access the [`Backend API User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object for the authenticated user. ## `locals.auth()` -You can use the `auth()` local to protect your pages and forms. It will return the current user's ID if they are signed in, or `null` if they are not. For more information on `auth()`, see the [reference](/docs/references/nextjs/auth){{ target: '_blank' }}. +You can use the `auth()` local to protect your pages and forms. It will return the current user's ID if they are signed in, or `null` if they are not. For more information on `auth()`, see the [reference](/docs/sdk/nextjs/auth){{ target: '_blank' }}. ```astro {{ filename: 'src/pages/protected.astro' }} @@ -52,7 +52,7 @@ Under the hood, this local: - uses the `GET /v1/users/me` endpoint. - counts towards the [Backend API Request Rate Limit](/docs/backend-requests/resources/rate-limits#rate-limits). -For more information on `currentUser()`, see the [reference](/docs/references/nextjs/current-user){{ target: '_blank' }}. +For more information on `currentUser()`, see the [reference](/docs/sdk/nextjs/current-user){{ target: '_blank' }}. ```astro {{ filename: 'src/pages/form.astro' }} --- diff --git a/docs/references/astro/overview.mdx b/docs/sdk/astro/methods.mdx similarity index 69% rename from docs/references/astro/overview.mdx rename to docs/sdk/astro/methods.mdx index dbe0b11d70..3bbfbb9f5d 100644 --- a/docs/references/astro/overview.mdx +++ b/docs/sdk/astro/methods.mdx @@ -7,21 +7,21 @@ The Clerk Astro SDK is the recommended method for integrating Clerk into your As ## Guides -- [Read session and user data](/docs/references/astro/read-session-data) -- [Migrate from the Astro community SDK to the official Clerk SDK](/docs/references/astro/migrating-from-astro-community-sdk) +- [Read session and user data](/docs/sdk/astro/read-session-data) +- [Migrate from the Astro community SDK to the official Clerk SDK](/docs/sdk/astro/migrating-from-astro-community-sdk) ## Client-side helpers The Astro SDK provides [stores](https://github.com/nanostores/nanostores) that give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and helper methods for authentication flows. -- [`$authStore`](/docs/references/astro/auth-store) -- [`$clerkStore`](/docs/references/astro/clerk-store) -- [`$userStore`](/docs/references/astro/user-store) -- [`$signInStore`](/docs/references/astro/sign-in-store) -- [`$signUpStore`](/docs/references/astro/sign-up-store) -- [`$sessionStore`](/docs/references/astro/session-store) -- [`$sessionListStore`](/docs/references/astro/session-list-store) -- [`$organizationStore`](/docs/references/astro/organization-store) +- [`$authStore`](/docs/sdk/astro/auth-store) +- [`$clerkStore`](/docs/sdk/astro/clerk-store) +- [`$userStore`](/docs/sdk/astro/user-store) +- [`$signInStore`](/docs/sdk/astro/sign-in-store) +- [`$signUpStore`](/docs/sdk/astro/sign-up-store) +- [`$sessionStore`](/docs/sdk/astro/session-store) +- [`$sessionListStore`](/docs/sdk/astro/session-list-store) +- [`$organizationStore`](/docs/sdk/astro/organization-store) ## Server-side helpers @@ -40,4 +40,4 @@ The Astro SDK provides access to Clerk's authentication data through Astro's [`l ### `clerkMiddleware()` -The `clerkMiddleware()` helper integrates Clerk authentication and authorization into your Astro application through middleware. You can learn more [here](/docs/references/astro/clerk-middleware). +The `clerkMiddleware()` helper integrates Clerk authentication and authorization into your Astro application through middleware. You can learn more [here](/docs/sdk/astro/clerk-middleware). diff --git a/docs/references/astro/migrating-from-astro-community-sdk.mdx b/docs/sdk/astro/migrating-from-astro-community-sdk.mdx similarity index 100% rename from docs/references/astro/migrating-from-astro-community-sdk.mdx rename to docs/sdk/astro/migrating-from-astro-community-sdk.mdx diff --git a/docs/references/astro/organization-store.mdx b/docs/sdk/astro/organization-store.mdx similarity index 100% rename from docs/references/astro/organization-store.mdx rename to docs/sdk/astro/organization-store.mdx diff --git a/docs/quickstarts/astro.mdx b/docs/sdk/astro/quickstart.mdx similarity index 88% rename from docs/quickstarts/astro.mdx rename to docs/sdk/astro/quickstart.mdx index c6ed6adbaf..8945ac5198 100644 --- a/docs/quickstarts/astro.mdx +++ b/docs/sdk/astro/quickstart.mdx @@ -33,7 +33,7 @@ description: Add authentication and user management to your Astro app with Clerk ## Install `@clerk/astro` - Clerk's [Astro SDK](/docs/references/astro/overview) provides a set of components, hooks, and stores that make it easy to build authentication and user management features in your Astro app. + Clerk's [Astro SDK](/docs/sdk/astro/methods) provides a set of components, hooks, and stores that make it easy to build authentication and user management features in your Astro app. Run the following command to install the SDK: @@ -92,7 +92,7 @@ description: Add authentication and user management to your Astro app with Clerk ## Add `clerkMiddleware()` to your app - [`clerkMiddleware()`](/docs/references/astro/clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + [`clerkMiddleware()`](/docs/sdk/astro/clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: 1. Create a `middleware.ts` file. - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. @@ -103,7 +103,7 @@ description: Add authentication and user management to your Astro app with Clerk export const onRequest = clerkMiddleware() ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/astro/clerk-middleware) to learn how to require authentication for specific routes. + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/sdk/astro/clerk-middleware) to learn how to require authentication for specific routes. ## Add Clerk components to your app @@ -183,12 +183,12 @@ description: Add authentication and user management to your Astro app with Clerk ## Next steps - - [Protect routes using Clerk Middleware](/docs/references/astro/clerk-middleware) + - [Protect routes using Clerk Middleware](/docs/sdk/astro/clerk-middleware) - Learn how to protect specific routes from unauthenticated users. --- - - [Read session and user data](/docs/references/astro/read-session-data) + - [Read session and user data](/docs/sdk/astro/read-session-data) - Learn how to use Clerk's stores and helpers to access the active session and user data in your Astro app. --- diff --git a/docs/references/astro/react.mdx b/docs/sdk/astro/react.mdx similarity index 96% rename from docs/references/astro/react.mdx rename to docs/sdk/astro/react.mdx index eb54d976b5..985d73eea0 100644 --- a/docs/references/astro/react.mdx +++ b/docs/sdk/astro/react.mdx @@ -5,7 +5,7 @@ description: Learn how to user Clerk inside an Astro app with React Astro provides an [integration](https://docs.astro.build/en/guides/integrations-guide/react/) that enables server-side rendering and client-side hydration for your React components. This guide demonstrates how to use Clerk with Astro and React. -If you have not set up your Astro application to work with Clerk, see the [quickstart guide](/docs/quickstarts/astro). +If you have not set up your Astro application to work with Clerk, see the [quickstart guide](/docs/sdk/astro/quickstart). ## Install `@astrojs/react` @@ -122,7 +122,7 @@ If you have not set up your Astro application to work with Clerk, see the [quick ## Next steps - - [Read user and session data](/docs/references/astro/read-session-data) + - [Read user and session data](/docs/sdk/astro/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Astro application. --- diff --git a/docs/references/astro/read-session-data.mdx b/docs/sdk/astro/read-session-data.mdx similarity index 77% rename from docs/references/astro/read-session-data.mdx rename to docs/sdk/astro/read-session-data.mdx index ad53789e23..25c06fd19c 100644 --- a/docs/references/astro/read-session-data.mdx +++ b/docs/sdk/astro/read-session-data.mdx @@ -7,7 +7,7 @@ Clerk provides helpers that you can use to access the active session and user da ## Server-side -The following example uses the [`auth()`](/docs/references/nextjs/auth){{ target: '_blank' }} local to validate an authenticated user and the [`currentUser()`](/docs/references/nextjs/current-user){{ target: '_blank' }} local to access the [`Backend API User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object for the authenticated user. +The following example uses the [`auth()`](/docs/sdk/nextjs/auth){{ target: '_blank' }} local to validate an authenticated user and the [`currentUser()`](/docs/sdk/nextjs/current-user){{ target: '_blank' }} local to access the [`Backend API User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object for the authenticated user. ```astro {{ filename: 'src/pages/me.astro' }} @@ -41,7 +41,7 @@ Clerk Astro provides a set of useful [stores](/docs/references/astro/overview#cl ### `$authStore` -The following example demonstrates how to use the [`$authStore`](/docs/references/astro/auth-store) to access auth information for the active user, such as the `userId` and `sessionId`. +The following example demonstrates how to use the [`$authStore`](/docs/sdk/astro/auth-store) to access auth information for the active user, such as the `userId` and `sessionId`. ```tsx {{ filename: 'components/example.tsx' }} import { useStore } from '@nanostores/react' @@ -65,7 +65,7 @@ export default function Example() { ### `$userStore` -The following example demonstrates how to use the [`$userStore`](/docs/references/astro/user-store) store to access information about the active user, such as their `firstName`. +The following example demonstrates how to use the [`$userStore`](/docs/sdk/astro/user-store) store to access information about the active user, such as their `firstName`. ```tsx {{ filename: 'components/example.tsx' }} import { useStore } from '@nanostores/react' diff --git a/docs/references/astro/session-list-store.mdx b/docs/sdk/astro/session-list-store.mdx similarity index 100% rename from docs/references/astro/session-list-store.mdx rename to docs/sdk/astro/session-list-store.mdx diff --git a/docs/references/astro/session-store.mdx b/docs/sdk/astro/session-store.mdx similarity index 100% rename from docs/references/astro/session-store.mdx rename to docs/sdk/astro/session-store.mdx diff --git a/docs/references/astro/sign-in-store.mdx b/docs/sdk/astro/sign-in-store.mdx similarity index 100% rename from docs/references/astro/sign-in-store.mdx rename to docs/sdk/astro/sign-in-store.mdx diff --git a/docs/references/astro/sign-up-store.mdx b/docs/sdk/astro/sign-up-store.mdx similarity index 100% rename from docs/references/astro/sign-up-store.mdx rename to docs/sdk/astro/sign-up-store.mdx diff --git a/docs/references/astro/user-store.mdx b/docs/sdk/astro/user-store.mdx similarity index 100% rename from docs/references/astro/user-store.mdx rename to docs/sdk/astro/user-store.mdx diff --git a/docs/references/chrome-extension/add-react-router.mdx b/docs/sdk/chrome-extension/add-react-router.mdx similarity index 100% rename from docs/references/chrome-extension/add-react-router.mdx rename to docs/sdk/chrome-extension/add-react-router.mdx diff --git a/docs/references/chrome-extension/configure-consistent-crx-id.mdx b/docs/sdk/chrome-extension/configure-consistent-crx-id.mdx similarity index 97% rename from docs/references/chrome-extension/configure-consistent-crx-id.mdx rename to docs/sdk/chrome-extension/configure-consistent-crx-id.mdx index 85726b780a..20002c3403 100644 --- a/docs/references/chrome-extension/configure-consistent-crx-id.mdx +++ b/docs/sdk/chrome-extension/configure-consistent-crx-id.mdx @@ -11,7 +11,7 @@ There are two ways to configure a consistent CRX ID: 1. [For an extension uploaded to the Chrome Developer Dashboard](#for-an-extension-uploaded-to-the-chrome-developer-dashboard). > [!WARNING] -> If you followed the [Chrome Extension Quickstart](/docs/quickstarts/chrome-extension), you have already completed this configuration. +> If you followed the [Chrome Extension Quickstart](/docs/sdk/chrome-extension/quickstart), you have already completed this configuration. ## For a new extension diff --git a/docs/references/chrome-extension/create-clerk-client.mdx b/docs/sdk/chrome-extension/create-clerk-client.mdx similarity index 96% rename from docs/references/chrome-extension/create-clerk-client.mdx rename to docs/sdk/chrome-extension/create-clerk-client.mdx index ca86fbd77d..7e4403c7b1 100644 --- a/docs/references/chrome-extension/create-clerk-client.mdx +++ b/docs/sdk/chrome-extension/create-clerk-client.mdx @@ -16,7 +16,7 @@ The following example: - The new tab has a button on it that, when clicked, triggers the background service worker. > [!WARNING] -> The following example assumes that you have followed the [Chrome Extension Quickstart](/docs/quickstarts/chrome-extension) and then the [Add React Router](/docs/references/chrome-extension/add-react-router) guide, but you can apply these concepts to your own application. +> The following example assumes that you have followed the [Chrome Extension Quickstart](/docs/sdk/chrome-extension/quickstart) and then the [Add React Router](/docs/sdk/chrome-extension/add-react-router) guide, but you can apply these concepts to your own application. ### Create your background service worker @@ -170,5 +170,5 @@ The `createClerkClient()` function accepts an optional object. The following opt - `syncHost?` - `string` - The host to sync the session with. For more information, see [the dedicated guide](/docs/references/chrome-extension/sync-host). + The host to sync the session with. For more information, see [the dedicated guide](/docs/sdk/chrome-extension/sync-host). diff --git a/docs/references/chrome-extension/overview.mdx b/docs/sdk/chrome-extension/methods.mdx similarity index 86% rename from docs/references/chrome-extension/overview.mdx rename to docs/sdk/chrome-extension/methods.mdx index 908495d62c..acfb78795d 100644 --- a/docs/references/chrome-extension/overview.mdx +++ b/docs/sdk/chrome-extension/methods.mdx @@ -11,7 +11,7 @@ When creating your Clerk application in the Clerk Dashboard, your authentication - **Popup** - Opens as a popup. This is the default behavior. - **Side Panel** - Opens in a side panel -- **Sync Host** - Deployed alongside a web app that uses [Sync Host](/docs/references/chrome-extension/sync-host). +- **Sync Host** - Deployed alongside a web app that uses [Sync Host](/docs/sdk/chrome-extension/sync-host). See the following table to determine the authentication options available for each configuration. @@ -33,17 +33,17 @@ See the following table to determine the authentication options available for ea ## Sync auth status between your Chrome Extension and web app -Clerk allows you to sync the authentication state from your web app to your Chrome Extension using the Sync Host feature. When a user authenticates in your web app, they will also be authenticated in your Chrome Extension. See [the dedicated guide](/docs/references/chrome-extension/sync-host) for more information. +Clerk allows you to sync the authentication state from your web app to your Chrome Extension using the Sync Host feature. When a user authenticates in your web app, they will also be authenticated in your Chrome Extension. See [the dedicated guide](/docs/sdk/chrome-extension/sync-host) for more information. ## `createClerkClient()` It's recommended to use `createClerkClient()` for Chrome Extension's that need to interact with Clerk in a content script. -The `createClerkClient()` helper initializes a new Clerk instance on demand and refreshes the session token if there is a valid, signed-in user. It can be used in a [content script](https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts) or a [background service worker](https://developer.chrome.com/docs/extensions/develop/concepts/service-workers/basics) to access a user's information or session token. [Learn more about `createClerkClient()`](/docs/references/chrome-extension/create-clerk-client). +The `createClerkClient()` helper initializes a new Clerk instance on demand and refreshes the session token if there is a valid, signed-in user. It can be used in a [content script](https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts) or a [background service worker](https://developer.chrome.com/docs/extensions/develop/concepts/service-workers/basics) to access a user's information or session token. [Learn more about `createClerkClient()`](/docs/sdk/chrome-extension/create-clerk-client). ## Add React Router -[Learn how to add React Router to your Chrome Extension](/docs/references/chrome-extension/add-react-router) to enable routing in your application. +[Learn how to add React Router to your Chrome Extension](/docs/sdk/chrome-extension/add-react-router) to enable routing in your application. ## Deploy your extension to production @@ -51,7 +51,7 @@ See [the Chrome Extension deployment guide](/docs/deployments/deploy-chrome-exte ## Configure a consistent CRX ID -A Chrome Extension can be identified by its unique CRX ID, similar to how a website can be identified by its domain. The CRX ID rotates by default, which can cause errors with the Clerk integration. [Learn how to configure a consistent CRX ID](/docs/references/chrome-extension/configure-consistent-crx-id) so that your extension will have a stable, unchanging key. +A Chrome Extension can be identified by its unique CRX ID, similar to how a website can be identified by its domain. The CRX ID rotates by default, which can cause errors with the Clerk integration. [Learn how to configure a consistent CRX ID](/docs/sdk/chrome-extension/configure-consistent-crx-id) so that your extension will have a stable, unchanging key. ## Frequently asked questions (FAQ) diff --git a/docs/quickstarts/chrome-extension.mdx b/docs/sdk/chrome-extension/quickstart.mdx similarity index 96% rename from docs/quickstarts/chrome-extension.mdx rename to docs/sdk/chrome-extension/quickstart.mdx index bcbf211ec9..cc3b95826f 100644 --- a/docs/quickstarts/chrome-extension.mdx +++ b/docs/sdk/chrome-extension/quickstart.mdx @@ -57,7 +57,7 @@ description: Add authentication and user management to your Chrome Extension wit ## Install `@clerk/chrome-extension` - Clerk's [Chrome Extension SDK](/docs/references/chrome-extension/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + Clerk's [Chrome Extension SDK](/docs/sdk/chrome-extension/methods) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. Add the SDK to your project: @@ -282,22 +282,22 @@ description: Add authentication and user management to your Chrome Extension wit > [!WARNING] > After signing up or signing in, your popup may appear to crash. Closing and reopening the popup should restart the extension and you should be signed in. > - > Your extension does not yet have anything to handle routing, and by default, the Clerk components attempt to redirect the user. See [the guide on adding React Router to your Chrome Extension](/docs/references/chrome-extension/add-react-router) to add routing to your extension. + > Your extension does not yet have anything to handle routing, and by default, the Clerk components attempt to redirect the user. See [the guide on adding React Router to your Chrome Extension](/docs/sdk/chrome-extension/add-react-router) to add routing to your extension. ## Next steps - - [Add React Router](/docs/references/chrome-extension/add-react-router) + - [Add React Router](/docs/sdk/chrome-extension/add-react-router) - Learn how to add React Router to your Chrome Extension. --- - - [Sync your Chrome Extension with your web app](/docs/references/chrome-extension/sync-host) + - [Sync your Chrome Extension with your web app](/docs/sdk/chrome-extension/sync-host) - Learn how to configure your Chrome Extension to sync user authentication with your web application. --- - - [createClerkClient()](/docs/references/chrome-extension/create-clerk-client) + - [createClerkClient()](/docs/sdk/chrome-extension/create-clerk-client) - For Chrome Extension's configured as popups, learn how to use Clerk's `createClerkClient()` function in a background service worker to ensure that the user's session is always fresh. diff --git a/docs/references/chrome-extension/sync-host.mdx b/docs/sdk/chrome-extension/sync-host.mdx similarity index 95% rename from docs/references/chrome-extension/sync-host.mdx rename to docs/sdk/chrome-extension/sync-host.mdx index 592ccce0fe..159497b388 100644 --- a/docs/references/chrome-extension/sync-host.mdx +++ b/docs/sdk/chrome-extension/sync-host.mdx @@ -9,7 +9,7 @@ Clerk allows you to sync the authentication state from your web app to your Chro > Our Chrome Extension SDK currently does not fully support Sync Host on side panels. Currently, if a user authenticates in your web app, they need to close and reopen the side panel to update their auth status. > [!WARNING] -> This guide assumes assumes that you have followed the [Chrome Extension Quickstart](/docs/quickstarts/chrome-extension) and then the [Add React Router](/docs/references/chrome-extension/add-react-router) guide. +> This guide assumes assumes that you have followed the [Chrome Extension Quickstart](/docs/sdk/chrome-extension/quickstart) and then the [Add React Router](/docs/sdk/chrome-extension/add-react-router) guide. ## Add `PLASMO_PUBLIC_CLERK_SYNC_HOST` to your environment variables @@ -141,7 +141,7 @@ Clerk allows you to sync the authentication state from your web app to your Chro To allow your Chrome Extension to sync with your web app, you must add the extension's ID to your web app's `allowed_origins`. > [!NOTE] - > If you have not [configured a consistent key](/docs/references/chrome-extension/configure-consistent-crx-id), you will have to repeat this step every time your extension's ID changes. + > If you have not [configured a consistent key](/docs/sdk/chrome-extension/configure-consistent-crx-id), you will have to repeat this step every time your extension's ID changes. 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page. 1. Copy your Secret Key. It should start with `sk_test_` or `sk_live_` for your development and production instances, respectively. diff --git a/docs/references/expo/local-credentials.mdx b/docs/sdk/expo/local-credentials.mdx similarity index 96% rename from docs/references/expo/local-credentials.mdx rename to docs/sdk/expo/local-credentials.mdx index 7c3b8f43ff..fd1c24d897 100644 --- a/docs/references/expo/local-credentials.mdx +++ b/docs/sdk/expo/local-credentials.mdx @@ -3,7 +3,7 @@ title: Allow returning users to sign in with biometrics in Expo description: Learn how to use the useLocalCredentials hook in your Expo app with Clerk. --- -Clerk's [`useLocalCredentials()`](/docs/references/expo/use-local-credentials) hook enables you to store a user's password credentials on their device and subsequently use biometrics for sign-in. +Clerk's [`useLocalCredentials()`](/docs/sdk/expo/use-local-credentials) hook enables you to store a user's password credentials on their device and subsequently use biometrics for sign-in. This guide shows you how to use the `useLocalCredentials()` hook to enhance your user experience by allowing users to sign in using biometrics when they re-sign in to your Expo app. @@ -198,7 +198,7 @@ This guide shows you how to use the `useLocalCredentials()` hook to enhance your Use the following guides to learn more about Clerk components, how to build custom flows for your native apps, and how to use Clerk's client-side helpers. - - [Expo SDK](/docs/quickstarts/expo) + - [Expo SDK](/docs/sdk/expo/quickstart) - Use Clerk with Expo to authenticate users in your React Native application. --- @@ -208,6 +208,6 @@ Use the following guides to learn more about Clerk components, how to build cust --- - - [Client-side helpers](/docs/references/react/use-user) + - [Client-side helpers](/docs/sdk/react/use-user) - Clerk's client-side helpers enable you to access user data and perform actions on the client-side. diff --git a/docs/references/expo/overview.mdx b/docs/sdk/expo/methods.mdx similarity index 81% rename from docs/references/expo/overview.mdx rename to docs/sdk/expo/methods.mdx index 126bcd9d51..fef4e4a239 100644 --- a/docs/references/expo/overview.mdx +++ b/docs/sdk/expo/methods.mdx @@ -5,7 +5,7 @@ description: Learn how to integrate Clerk into your Expo application using the C The Clerk Expo SDK is the recommended method for integrating Clerk into your Expo application. -See [the quickstart](/docs/quickstarts/expo) to get started. +See [the quickstart](/docs/sdk/expo/quickstart) to get started. ## Available resources @@ -15,9 +15,9 @@ The Expo SDK gives you access to the following resources: The following hooks are available for both **native** and **web** apps: -- All React hooks are available. See [the React docs](/docs/references/react/overview){{ target: '_blank' }} for more information. -- [`useOAuth()`](/docs/references/expo/use-oauth) -- [`useLocalCredentials()`](/docs/references/expo/use-local-credentials) +- All React hooks are available. See [the React docs](/docs/sdk/react/methods){{ target: '_blank' }} for more information. +- [`useOAuth()`](/docs/sdk/expo/use-oauth) +- [`useLocalCredentials()`](/docs/sdk/expo/use-local-credentials) ### Clerk components diff --git a/docs/references/expo/offline-support.mdx b/docs/sdk/expo/offline-support.mdx similarity index 100% rename from docs/references/expo/offline-support.mdx rename to docs/sdk/expo/offline-support.mdx diff --git a/docs/quickstarts/expo.mdx b/docs/sdk/expo/quickstart.mdx similarity index 94% rename from docs/quickstarts/expo.mdx rename to docs/sdk/expo/quickstart.mdx index 7a130303cd..4c2e9f5190 100644 --- a/docs/quickstarts/expo.mdx +++ b/docs/sdk/expo/quickstart.mdx @@ -35,7 +35,7 @@ description: Add authentication and user management to your Expo app with Clerk. ## Install `@clerk/clerk-expo` - Clerk's [Expo SDK](/docs/references/expo/overview) gives you access to prebuilt components, hooks, and helpers to make user authentication easier. + Clerk's [Expo SDK](/docs/sdk/expo/methods) gives you access to prebuilt components, hooks, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -220,7 +220,7 @@ description: Add authentication and user management to your Expo app with Clerk. 1. Create an `(auth)` [route group](https://docs.expo.dev/router/layouts/#groups). This will group your sign-up and sign-in pages. 1. In the `(auth)` group, create a `_layout.tsx` file. - 1. Paste the following code. The [`useAuth()`](/docs/references/react/use-auth) hook is used to access the user's authentication state. If the user is already signed in, they will be redirected to the home page. + 1. Paste the following code. The [`useAuth()`](/docs/sdk/react/use-auth) hook is used to access the user's authentication state. If the user is already signed in, they will be redirected to the home page. ```tsx filename="app/(auth)/_layout.tsx" import { Redirect, Stack } from 'expo-router' @@ -240,7 +240,7 @@ description: Add authentication and user management to your Expo app with Clerk. ### Sign-up page 1. In the `(auth)` group, create a `sign-up.tsx` file. - 1. Paste the following code. The [`useSignUp()`](/docs/references/react/use-sign-up) hook is used to create a sign-up flow. The user can sign up using their email and password and will receive an email verification code to confirm their email. + 1. Paste the following code. The [`useSignUp()`](/docs/sdk/react/use-sign-up) hook is used to create a sign-up flow. The user can sign up using their email and password and will receive an email verification code to confirm their email. ```tsx {{ filename: 'app/(auth)/sign-up.tsx', collapsible: true }} import * as React from 'react' @@ -348,7 +348,7 @@ description: Add authentication and user management to your Expo app with Clerk. ### Sign-in page 1. In the `(auth)` group, create a `sign-in.tsx` file. - 1. Paste the following code. The [`useSignIn()`](/docs/references/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using email address and password, or navigate to the sign-up page. + 1. Paste the following code. The [`useSignIn()`](/docs/sdk/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using email address and password, or navigate to the sign-up page. ```tsx {{ filename: 'app/(auth)/sign-in.tsx', collapsible: true }} import { useSignIn } from '@clerk/clerk-expo' @@ -508,7 +508,7 @@ See the [`expo-updates`](https://docs.expo.dev/versions/latest/sdk/updates) libr --- - - [Read session and user data](/docs/references/expo/read-session-user-data) + - [Read session and user data](/docs/sdk/expo/read-session-user-data) - Learn how to read session and user data with Expo. --- diff --git a/docs/references/expo/read-session-user-data.mdx b/docs/sdk/expo/read-session-user-data.mdx similarity index 76% rename from docs/references/expo/read-session-user-data.mdx rename to docs/sdk/expo/read-session-user-data.mdx index 77925a7e3b..2694d2212a 100644 --- a/docs/references/expo/read-session-user-data.mdx +++ b/docs/sdk/expo/read-session-user-data.mdx @@ -7,7 +7,7 @@ This guide demonstrates how to access active session and user data in your Expo ## Session data example -The [`useAuth()`](/docs/references/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. +The [`useAuth()`](/docs/sdk/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The following example demonstrates how to use `useAuth()` to get and display session and user data: @@ -32,7 +32,7 @@ export default function UseAuthExample() { ## User data example -The [`useUser()`](/docs/references/react/use-user){{ target: '_blank' }} hook enables you to access the current user's data and provides helper methods to manage the current active session. +The [`useUser()`](/docs/sdk/react/use-user){{ target: '_blank' }} hook enables you to access the current user's data and provides helper methods to manage the current active session. The following example demonstrates how to use `useUser()` to check if the user is signed in and display their first name: diff --git a/docs/references/expo/use-local-credentials.mdx b/docs/sdk/expo/use-local-credentials.mdx similarity index 98% rename from docs/references/expo/use-local-credentials.mdx rename to docs/sdk/expo/use-local-credentials.mdx index f08349cd38..c847a62433 100644 --- a/docs/references/expo/use-local-credentials.mdx +++ b/docs/sdk/expo/use-local-credentials.mdx @@ -72,4 +72,4 @@ The `useLocalCredentials()` hook enables you to store a user's password credenti ## How to use the `useLocalCredentials()` hook -To learn how to use the `useLocalCredentials()` hook, see the [reference doc](/docs/references/expo/local-credentials). +To learn how to use the `useLocalCredentials()` hook, see the [reference doc](/docs/sdk/expo/local-credentials). diff --git a/docs/references/expo/use-oauth.mdx b/docs/sdk/expo/use-oauth.mdx similarity index 100% rename from docs/references/expo/use-oauth.mdx rename to docs/sdk/expo/use-oauth.mdx diff --git a/docs/references/expo/web-support/custom-signup-signin-pages.mdx b/docs/sdk/expo/web-support/custom-signup-signin-pages.mdx similarity index 97% rename from docs/references/expo/web-support/custom-signup-signin-pages.mdx rename to docs/sdk/expo/web-support/custom-signup-signin-pages.mdx index e0d47a0dd1..24528fb17c 100644 --- a/docs/references/expo/web-support/custom-signup-signin-pages.mdx +++ b/docs/sdk/expo/web-support/custom-signup-signin-pages.mdx @@ -73,6 +73,6 @@ Use the following guides to learn more about Clerk components, how to build cust --- - - [Client-side helpers](/docs/references/react/use-user) + - [Client-side helpers](/docs/sdk/react/use-user) - Learn more about our client-side helpers and how to use them. diff --git a/docs/references/expo/web-support/overview.mdx b/docs/sdk/expo/web-support/overview.mdx similarity index 90% rename from docs/references/expo/web-support/overview.mdx rename to docs/sdk/expo/web-support/overview.mdx index 134b50e659..2555b82ea9 100644 --- a/docs/references/expo/web-support/overview.mdx +++ b/docs/sdk/expo/web-support/overview.mdx @@ -7,7 +7,7 @@ Expo provides a way to [develop web applications](https://docs.expo.dev/workflow ## Create a new project with web support -If you're starting from scratch, you can follow the [Expo quickstart](/docs/quickstarts/expo), which showcases how to create a sign-in and sign-up page with the same code for all platforms Expo supports. +If you're starting from scratch, you can follow the [Expo quickstart](/docs/sdk/expo/quickstart), which showcases how to create a sign-in and sign-up page with the same code for all platforms Expo supports. ## Add web support to an existing project @@ -36,6 +36,6 @@ Use the following guides to learn more about Clerk components, how to build cust --- - - [Client-side helpers](/docs/references/react/use-user) + - [Client-side helpers](/docs/sdk/react/use-user) - Learn more about our client-side helpers and how to use them. diff --git a/docs/references/express/overview.mdx b/docs/sdk/express/methods.mdx similarity index 98% rename from docs/references/express/overview.mdx rename to docs/sdk/express/methods.mdx index f937285b40..f5a677e121 100644 --- a/docs/references/express/overview.mdx +++ b/docs/sdk/express/methods.mdx @@ -5,7 +5,7 @@ description: Learn how to integrate Clerk into your Express application using th The Clerk Express SDK is the recommended method for integrating Clerk into your Express application. -See the [quickstart](/docs/quickstarts/express) to get started. +See the [quickstart](/docs/sdk/express/quickstart) to get started. {/* TODO: Remove callout when Node SDK is removed from docs */} diff --git a/docs/quickstarts/express.mdx b/docs/sdk/express/quickstart.mdx similarity index 96% rename from docs/quickstarts/express.mdx rename to docs/sdk/express/quickstart.mdx index f5dc8d6491..81170b0c3f 100644 --- a/docs/quickstarts/express.mdx +++ b/docs/sdk/express/quickstart.mdx @@ -35,7 +35,7 @@ Learn how to integrate Clerk into your Express backend for secure user authentic ## Install `@clerk/express` - Clerk's [Express SDK](/docs/references/express/overview) ships with a variety of helpers for the backend to make user authentication easier. + Clerk's [Express SDK](/docs/sdk/express/methods) ships with a variety of helpers for the backend to make user authentication easier. To get started using Clerk with Express, add the SDK to your project: @@ -149,7 +149,7 @@ Learn how to integrate Clerk into your Express backend for secure user authentic --- - - [Express SDK reference](/docs/references/express/overview) + - [Express SDK reference](/docs/sdk/express/methods) - Learn more about additional Express SDK methods. --- diff --git a/docs/quickstarts/fastify.mdx b/docs/sdk/fastify/quickstart.mdx similarity index 95% rename from docs/quickstarts/fastify.mdx rename to docs/sdk/fastify/quickstart.mdx index 9e146a2029..03d9c8160f 100644 --- a/docs/quickstarts/fastify.mdx +++ b/docs/sdk/fastify/quickstart.mdx @@ -110,7 +110,7 @@ Learn how to integrate Clerk into your Fastify backend for secure user authentic ## Use `getAuth()` to access the auth state and protect routes - The following example uses [`getAuth()`](/docs/references/nextjs/get-auth){{ target: '_blank' }} to retrieve the `userId`, which is used to protect the route and is passed to [`clerkClient.users.getUser()`](/docs/references/backend/user/get-user){{ target: '_blank' }} to retrieve the current user's `User` object. + The following example uses [`getAuth()`](/docs/sdk/nextjs/get-auth){{ target: '_blank' }} to retrieve the `userId`, which is used to protect the route and is passed to [`clerkClient.users.getUser()`](/docs/references/backend/user/get-user){{ target: '_blank' }} to retrieve the current user's `User` object. ```ts {{ filename: 'index.ts' }} import 'dotenv/config' diff --git a/docs/references/go/other-examples.mdx b/docs/sdk/go/other-examples.mdx similarity index 100% rename from docs/references/go/other-examples.mdx rename to docs/sdk/go/other-examples.mdx diff --git a/docs/references/go/overview.mdx b/docs/sdk/go/quickstart.mdx similarity index 96% rename from docs/references/go/overview.mdx rename to docs/sdk/go/quickstart.mdx index 5c4322405b..56b3dc3146 100644 --- a/docs/references/go/overview.mdx +++ b/docs/sdk/go/quickstart.mdx @@ -117,4 +117,4 @@ for _, resource := range list.$Resource$s { } ``` -For more usage details, see the [examples](/docs/references/go/other-examples) or the library's [README file](https://github.com/clerk/clerk-sdk-go/tree/v2). +For more usage details, see the [examples](/docs/sdk/go/other-examples) or the library's [README file](https://github.com/clerk/clerk-sdk-go/tree/v2). diff --git a/docs/references/go/verifying-sessions.mdx b/docs/sdk/go/verifying-sessions.mdx similarity index 100% rename from docs/references/go/verifying-sessions.mdx rename to docs/sdk/go/verifying-sessions.mdx diff --git a/docs/references/ios/get-token.mdx b/docs/sdk/ios/get-token.mdx similarity index 100% rename from docs/references/ios/get-token.mdx rename to docs/sdk/ios/get-token.mdx diff --git a/docs/references/ios/overview.mdx b/docs/sdk/ios/methods.mdx similarity index 92% rename from docs/references/ios/overview.mdx rename to docs/sdk/ios/methods.mdx index 8370e1a2a2..1e05b991d2 100644 --- a/docs/references/ios/overview.mdx +++ b/docs/sdk/ios/methods.mdx @@ -8,7 +8,7 @@ description: Learn how to integrate Clerk into your iOS application using the Cl The Clerk iOS SDK is the recommended method for integrating Clerk into your iOS application. -See [the quickstart](/docs/quickstarts/ios) to get started. +See [the quickstart](/docs/sdk/ios/quickstart) to get started. ## SDK Reference diff --git a/docs/quickstarts/ios.mdx b/docs/sdk/ios/quickstart.mdx similarity index 100% rename from docs/quickstarts/ios.mdx rename to docs/sdk/ios/quickstart.mdx diff --git a/docs/references/ios/sign-in-with-apple.mdx b/docs/sdk/ios/sign-in-with-apple.mdx similarity index 100% rename from docs/references/ios/sign-in-with-apple.mdx rename to docs/sdk/ios/sign-in-with-apple.mdx diff --git a/docs/references/nextjs/auth.mdx b/docs/sdk/nextjs/auth.mdx similarity index 95% rename from docs/references/nextjs/auth.mdx rename to docs/sdk/nextjs/auth.mdx index 000e1468f8..2955e28486 100644 --- a/docs/references/nextjs/auth.mdx +++ b/docs/sdk/nextjs/auth.mdx @@ -7,7 +7,7 @@ The `auth()` helper returns the [`Auth`](/docs/references/backend/types/auth-obj - Only available for App Router. - Only works on the server-side, such as in Server Components, Route Handlers, and Server Actions. -- Requires [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) to be configured. +- Requires [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) to be configured. ## `auth.protect()` @@ -86,7 +86,7 @@ The `auth()` helper returns the `redirectToSignIn()` method, which you can use t ### Example -The following example shows how to use `redirectToSignIn()` to redirect the user to the sign-in page if they are not authenticated. It's also common to use `redirectToSignIn()` in `clerkMiddleware()` to protect entire routes; see [the `clerkMiddleware()` docs](/docs/references/nextjs/clerk-middleware) for more information. +The following example shows how to use `redirectToSignIn()` to redirect the user to the sign-in page if they are not authenticated. It's also common to use `redirectToSignIn()` in `clerkMiddleware()` to protect entire routes; see [the `clerkMiddleware()` docs](/docs/sdk/nextjs/clerk-middleware) for more information. ```tsx {{ filename: 'app/page.tsx' }} import { auth } from '@clerk/nextjs/server' @@ -118,7 +118,7 @@ export default async function Page() { ## Use `auth()` in API routes -See detailed examples in the [dedicated guide](/docs/references/nextjs/read-session-data). +See detailed examples in the [dedicated guide](/docs/sdk/nextjs/read-session-data). ## Use `auth()` to check roles and permissions diff --git a/docs/references/nextjs/build-clerk-props.mdx b/docs/sdk/nextjs/build-clerk-props.mdx similarity index 100% rename from docs/references/nextjs/build-clerk-props.mdx rename to docs/sdk/nextjs/build-clerk-props.mdx diff --git a/docs/references/nextjs/clerk-middleware.mdx b/docs/sdk/nextjs/clerk-middleware.mdx similarity index 98% rename from docs/references/nextjs/clerk-middleware.mdx rename to docs/sdk/nextjs/clerk-middleware.mdx index 7dcdf3152c..816b8f96a7 100644 --- a/docs/references/nextjs/clerk-middleware.mdx +++ b/docs/sdk/nextjs/clerk-middleware.mdx @@ -341,7 +341,7 @@ The `clerkMiddleware()` function accepts an optional object. The following optio - `organizationSyncOptions?` - [OrganizationSyncOptions](#organization-sync-options) | undefined - Used to activate a specific [organization](/docs/organizations/overview) or [personal account](/docs/organizations/organization-workspaces#organization-workspaces-in-the-clerk-dashboard:~:text=Personal%20account) based on URL path parameters. If there's a mismatch between the active organization in the session (e.g., as reported by [`auth()`](/docs/references/nextjs/auth)) and the organization indicated by the URL, the middleware will attempt to activate the organization specified in the URL. + Used to activate a specific [organization](/docs/organizations/overview) or [personal account](/docs/organizations/organization-workspaces#organization-workspaces-in-the-clerk-dashboard:~:text=Personal%20account) based on URL path parameters. If there's a mismatch between the active organization in the session (e.g., as reported by [`auth()`](/docs/sdk/nextjs/auth)) and the organization indicated by the URL, the middleware will attempt to activate the organization specified in the URL. --- @@ -400,7 +400,7 @@ export default clerkMiddleware( > [!NOTE] > Dynamic keys are not accessible on the client-side. -The following options, known as "Dynamic Keys," are shared to the Next.js application server through `clerkMiddleware`, enabling access by server-side helpers like [`auth()`](/docs/references/nextjs/auth): +The following options, known as "Dynamic Keys," are shared to the Next.js application server through `clerkMiddleware`, enabling access by server-side helpers like [`auth()`](/docs/sdk/nextjs/auth): - `signUpUrl` - `signInUrl` diff --git a/docs/references/nextjs/current-user.mdx b/docs/sdk/nextjs/current-user.mdx similarity index 100% rename from docs/references/nextjs/current-user.mdx rename to docs/sdk/nextjs/current-user.mdx diff --git a/docs/references/nextjs/custom-signup-signin-pages.mdx b/docs/sdk/nextjs/custom-signup-signin-pages.mdx similarity index 96% rename from docs/references/nextjs/custom-signup-signin-pages.mdx rename to docs/sdk/nextjs/custom-signup-signin-pages.mdx index 6b971df480..4bf04b985b 100644 --- a/docs/references/nextjs/custom-signup-signin-pages.mdx +++ b/docs/sdk/nextjs/custom-signup-signin-pages.mdx @@ -11,7 +11,7 @@ If the prebuilt components don't meet your specific needs or if you require more > Watch the video version of this guide on the Clerk YouTube channel → [YouTube (4 minutes)](https://youtu.be/fsuHLafTYyg). > [!NOTE] -> Just getting started with Clerk and Next.js? See the [quickstart tutorial](/docs/quickstarts/nextjs)! +> Just getting started with Clerk and Next.js? See the [quickstart tutorial](/docs/sdk/nextjs/quickstart)! ## Build a sign-up page @@ -102,7 +102,7 @@ If the prebuilt components don't meet your specific needs or if you require more ## Next steps - - [Read user and session data](/docs/references/nextjs/read-session-data) + - [Read user and session data](/docs/sdk/nextjs/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js application. --- @@ -112,7 +112,7 @@ If the prebuilt components don't meet your specific needs or if you require more --- - - [Next.js SDK Reference](/docs/references/nextjs/overview) + - [Next.js SDK Reference](/docs/sdk/nextjs/methods) - Learn more about additional Next.js methods. --- diff --git a/docs/references/nextjs/get-auth.mdx b/docs/sdk/nextjs/get-auth.mdx similarity index 96% rename from docs/references/nextjs/get-auth.mdx rename to docs/sdk/nextjs/get-auth.mdx index 1b96d951ca..8ba2b5791a 100644 --- a/docs/references/nextjs/get-auth.mdx +++ b/docs/sdk/nextjs/get-auth.mdx @@ -6,7 +6,7 @@ description: The getAuth() helper retrieves authentication state from the reques The `getAuth()` helper retrieves authentication state from the request object. > [!NOTE] -> If you are using App Router, use the [`auth()` helper](/docs/references/nextjs/auth) instead. +> If you are using App Router, use the [`auth()` helper](/docs/sdk/nextjs/auth) instead. ## Parameters diff --git a/docs/references/nextjs/overview.mdx b/docs/sdk/nextjs/methods.mdx similarity index 81% rename from docs/references/nextjs/overview.mdx rename to docs/sdk/nextjs/methods.mdx index 2e1913309c..463f426390 100644 --- a/docs/references/nextjs/overview.mdx +++ b/docs/sdk/nextjs/methods.mdx @@ -7,7 +7,7 @@ The Clerk Next.js SDK is the recommended method for integrating Clerk into your ## Client-side helpers -Because the Next.js SDK is built on top of the Clerk React SDK, you can use the hooks that the React SDK provides. These hooks give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/references/react/overview). +Because the Next.js SDK is built on top of the Clerk React SDK, you can use the hooks that the React SDK provides. These hooks give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/sdk/react/methods). @@ -17,17 +17,17 @@ Because the Next.js SDK is built on top of the Clerk React SDK, you can use the Clerk provides first-class support for the [Next.js App Router](https://nextjs.org/docs/app). The following references show how to integrate Clerk features into apps using the latest App Router and React Server Components features. -- [`auth()`](/docs/references/nextjs/auth) -- [`currentUser()`](/docs/references/nextjs/current-user) -- [Route Handlers](/docs/references/nextjs/route-handlers) -- [Server Actions](/docs/references/nextjs/server-actions) +- [`auth()`](/docs/sdk/nextjs/auth) +- [`currentUser()`](/docs/sdk/nextjs/current-user) +- [Route Handlers](/docs/sdk/nextjs/route-handlers) +- [Server Actions](/docs/sdk/nextjs/server-actions) ### Pages router Clerk continues to provide drop-in support for the Next.js Pages Router. In addition to the main Clerk integration, the following references are available for apps using Pages Router. -- [`getAuth()`](/docs/references/nextjs/get-auth) -- [`buildClerkProps()`](/docs/references/nextjs/build-clerk-props) +- [`getAuth()`](/docs/sdk/nextjs/get-auth) +- [`buildClerkProps()`](/docs/sdk/nextjs/build-clerk-props) ## `Auth` object @@ -35,7 +35,7 @@ Both `auth()` (App Router) and `getAuth()` (Pages Router) return an `Auth` objec ## `clerkMiddleware()` -The `clerkMiddleware()` helper integrates Clerk authentication into your Next.js application through middleware. It allows you to integrate authorization into both the client and server of your application. You can learn more [here](/docs/references/nextjs/clerk-middleware). +The `clerkMiddleware()` helper integrates Clerk authentication into your Next.js application through middleware. It allows you to integrate authorization into both the client and server of your application. You can learn more [here](/docs/sdk/nextjs/clerk-middleware). ## Demo repositories diff --git a/docs/quickstarts/nextjs.mdx b/docs/sdk/nextjs/quickstart.mdx similarity index 92% rename from docs/quickstarts/nextjs.mdx rename to docs/sdk/nextjs/quickstart.mdx index 1c6e51bce7..13e1b00958 100644 --- a/docs/quickstarts/nextjs.mdx +++ b/docs/sdk/nextjs/quickstart.mdx @@ -27,7 +27,7 @@ description: Add authentication and user management to your Next.js app with Cle ## Install `@clerk/nextjs` - Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + Clerk's [Next.js SDK](/docs/sdk/nextjs/methods) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -93,7 +93,7 @@ description: Add authentication and user management to your Next.js app with Cle ], } ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/sdk/nextjs/clerk-middleware) to learn how to require authentication for specific routes. ## Add `` and Clerk components to your app @@ -181,17 +181,17 @@ description: Add authentication and user management to your Next.js app with Cle ## Next steps - - [Protect routes using Clerk Middleware](/docs/references/nextjs/clerk-middleware) + - [Protect routes using Clerk Middleware](/docs/sdk/nextjs/clerk-middleware) - Learn how to protect specific routes from unauthenticated users. --- - - [Create custom sign-up and sign-in pages](/docs/references/nextjs/custom-signup-signin-pages) + - [Create custom sign-up and sign-in pages](/docs/sdk/nextjs/custom-signup-signin-pages) - Learn how add custom sign-up and sign-in pages with Clerk components. --- - - [Read user and session data](/docs/references/nextjs/read-session-data) + - [Read user and session data](/docs/sdk/nextjs/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. --- @@ -201,7 +201,7 @@ description: Add authentication and user management to your Next.js app with Cle --- - - [Next.js SDK Reference](/docs/references/nextjs/overview) + - [Next.js SDK Reference](/docs/sdk/nextjs/methods) - Learn more about additional Next.js methods. --- diff --git a/docs/references/nextjs/read-session-data.mdx b/docs/sdk/nextjs/read-session-data.mdx similarity index 84% rename from docs/references/nextjs/read-session-data.mdx rename to docs/sdk/nextjs/read-session-data.mdx index 8fceb5fe56..fbe61ad2dd 100644 --- a/docs/references/nextjs/read-session-data.mdx +++ b/docs/sdk/nextjs/read-session-data.mdx @@ -9,7 +9,7 @@ Clerk provides a set of [hooks and helpers](/docs/references/nextjs/overview#cli ### App Router -[`auth()`](/docs/references/nextjs/auth) and [`currentUser()`](/docs/references/nextjs/current-user) are App Router-specific helpers that you can use inside of your Route Handlers, Middleware, Server Components, and Server Actions. +[`auth()`](/docs/sdk/nextjs/auth) and [`currentUser()`](/docs/sdk/nextjs/current-user) are App Router-specific helpers that you can use inside of your Route Handlers, Middleware, Server Components, and Server Actions. The `auth()` helper will return the [`Auth`](/docs/references/backend/types/auth-object) object of the currently active user. Now that request data is available in the global scope through Next.js's `headers()` and `cookies()` methods, passing the request object to Clerk is no longer required. @@ -43,7 +43,7 @@ Under the hood, `currentUser()` uses the [`clerkClient`](/docs/references/backen - A Route Handler can use the [`auth()`](/docs/references/nextjs/auth) helper to return information about the user or their authentication state, or to control access to some or all of the Route Handler. The `auth()` helper does require [Middleware](/docs/references/nextjs/clerk-middleware). + A Route Handler can use the [`auth()`](/docs/sdk/nextjs/auth) helper to return information about the user or their authentication state, or to control access to some or all of the Route Handler. The `auth()` helper does require [Middleware](/docs/sdk/nextjs/clerk-middleware). ```tsx {{ filename: 'app/api/user/route.tsx' }} import { NextResponse } from 'next/server' @@ -66,7 +66,7 @@ Under the hood, `currentUser()` uses the [`clerkClient`](/docs/references/backen - A Route Handler can use the [`auth()`](/docs/references/nextjs/auth) helper to return information about the user or their authentication state, or to control access to some or all of the Route Handler. The `auth()` helper does require [Middleware](/docs/references/nextjs/clerk-middleware). + A Route Handler can use the [`auth()`](/docs/sdk/nextjs/auth) helper to return information about the user or their authentication state, or to control access to some or all of the Route Handler. The `auth()` helper does require [Middleware](/docs/sdk/nextjs/clerk-middleware). In this example, the `auth()` helper is used to validate an authenticated user and the `currentUser()` helper is used to access the `Backend User` object for the authenticated user. @@ -97,7 +97,7 @@ Under the hood, `currentUser()` uses the [`clerkClient`](/docs/references/backen - For Next.js applications using the Pages Router, you can retrieve information about the user and their authentication state, or control access to some or all of your API routes by using the [`getAuth()`](/docs/references/nextjs/get-auth) helper. The `getAuth()` helper does require [Middleware](/docs/references/nextjs/clerk-middleware). + For Next.js applications using the Pages Router, you can retrieve information about the user and their authentication state, or control access to some or all of your API routes by using the [`getAuth()`](/docs/sdk/nextjs/get-auth) helper. The `getAuth()` helper does require [Middleware](/docs/sdk/nextjs/clerk-middleware). ```tsx {{ filename: 'pages/api/auth.ts' }} import type { NextApiRequest, NextApiResponse } from 'next' @@ -118,7 +118,7 @@ Under the hood, `currentUser()` uses the [`clerkClient`](/docs/references/backen - For Next.js applications using the Pages Router, you can retrieve information about the user and their authentication state, or control access to some or all of your API routes by using the `getAuth()` helper. The `getAuth()` helper does require [Middleware](/docs/references/nextjs/clerk-middleware). + For Next.js applications using the Pages Router, you can retrieve information about the user and their authentication state, or control access to some or all of your API routes by using the `getAuth()` helper. The `getAuth()` helper does require [Middleware](/docs/sdk/nextjs/clerk-middleware). In some cases, you may need the full `User` object. For example, if you want to access the user's email address address or name, you can use the [`clerkClient`](/docs/references/backend/overview) helper to get the full `User` object. @@ -190,7 +190,7 @@ Under the hood, `currentUser()` uses the [`clerkClient`](/docs/references/backen ### `useAuth` -The [`useAuth`](/docs/references/react/use-auth) hook is a convenient way to access the current auth state. This hook provides the minimal information needed for data-loading and helper methods to manage the current active session. +The [`useAuth`](/docs/sdk/react/use-auth) hook is a convenient way to access the current auth state. This hook provides the minimal information needed for data-loading and helper methods to manage the current active session. ```tsx {{ filename: 'example.tsx' }} 'use client' @@ -214,7 +214,7 @@ export default function Example() { ### `useUser` -The [`useUser`](/docs/references/react/use-user) hook is a convenient way to access the current user data where you need it. This hook provides the user data and helper methods to manage the current active session. +The [`useUser`](/docs/sdk/react/use-user) hook is a convenient way to access the current user data where you need it. This hook provides the user data and helper methods to manage the current active session. ```tsx {{ filename: 'example.tsx' }} 'use client' diff --git a/docs/references/nextjs/rendering-modes.mdx b/docs/sdk/nextjs/rendering-modes.mdx similarity index 100% rename from docs/references/nextjs/rendering-modes.mdx rename to docs/sdk/nextjs/rendering-modes.mdx diff --git a/docs/references/nextjs/route-handlers.mdx b/docs/sdk/nextjs/route-handlers.mdx similarity index 93% rename from docs/references/nextjs/route-handlers.mdx rename to docs/sdk/nextjs/route-handlers.mdx index fea9f74abc..e48bd1eb16 100644 --- a/docs/references/nextjs/route-handlers.mdx +++ b/docs/sdk/nextjs/route-handlers.mdx @@ -7,7 +7,7 @@ Clerk provides helpers that allow you to protect your Route Handlers, fetch the ## Protect your Route Handlers -If you aren't protecting your Route Handler using [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware), you can protect your Route Handler in two ways: +If you aren't protecting your Route Handler using [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware), you can protect your Route Handler in two ways: - Use [`auth.protect()`](/docs/references/nextjs/auth#protect) if you want Clerk to return a `404` error when there is no signed in user. - Use [`auth().userId`](/docs/references/nextjs/auth#retrieving-user-id) if you want to customize the behavior or error message. @@ -71,7 +71,7 @@ export async function GET() { ## Retrieve the current user -In some cases, you might need the current user in your Route Handler. Clerk provides an asynchronous helper called [`currentUser()`](/docs/references/nextjs/current-user) to retrieve the current [`Backend User`](/docs/references/backend/types/backend-user) object. +In some cases, you might need the current user in your Route Handler. Clerk provides an asynchronous helper called [`currentUser()`](/docs/sdk/nextjs/current-user) to retrieve the current [`Backend User`](/docs/references/backend/types/backend-user) object. ```ts {{ filename: 'app/api/route.ts' }} import { NextResponse } from 'next/server' diff --git a/docs/references/nextjs/server-actions.mdx b/docs/sdk/nextjs/server-actions.mdx similarity index 93% rename from docs/references/nextjs/server-actions.mdx rename to docs/sdk/nextjs/server-actions.mdx index 8278292bc5..c914b65963 100644 --- a/docs/references/nextjs/server-actions.mdx +++ b/docs/sdk/nextjs/server-actions.mdx @@ -11,7 +11,7 @@ The following guide provides examples for using Server Actions in Server Compone ### Protect your Server Actions -You can use the [`auth()`](/docs/references/nextjs/auth) helper to protect your server actions. This helper will return the current user's ID if they are signed in, or `null` if they are not. +You can use the [`auth()`](/docs/sdk/nextjs/auth) helper to protect your server actions. This helper will return the current user's ID if they are signed in, or `null` if they are not. ```tsx {{ filename: 'actions.ts' }} import { auth } from '@clerk/nextjs/server' @@ -40,7 +40,7 @@ export default function AddToCart() { ### Accessing the current user -Current user data is important for data enrichment. You can use the [`currentUser()`](/docs/references/nextjs/current-user) helper to fetch the current user's data in your server actions. +Current user data is important for data enrichment. You can use the [`currentUser()`](/docs/sdk/nextjs/current-user) helper to fetch the current user's data in your server actions. ```tsx {{ filename: 'app/page.tsx' }} import { currentUser } from '@clerk/nextjs/server' diff --git a/docs/references/nextjs/trpc.mdx b/docs/sdk/nextjs/trpc.mdx similarity index 97% rename from docs/references/nextjs/trpc.mdx rename to docs/sdk/nextjs/trpc.mdx index af24bae573..96b34bfb03 100644 --- a/docs/references/nextjs/trpc.mdx +++ b/docs/sdk/nextjs/trpc.mdx @@ -31,7 +31,7 @@ description: Learn how to integrate Clerk into your Next.js Pages Router applica Clerk's [`Auth`](/docs/references/backend/types/auth-object) object includes important authentication information like the current user's session ID, user ID, and organization ID. It also contains methods to check for the current user's permissions and to retrieve their session token. - To add Clerk's authentication context (`Auth` object) to your tRPC server, create a context file that will be used to create the context for every tRPC query sent to the server. This context file will use the [`getAuth()`](/docs/references/nextjs/get-auth) helper from Clerk to access the user's `Auth` object. + To add Clerk's authentication context (`Auth` object) to your tRPC server, create a context file that will be used to create the context for every tRPC query sent to the server. This context file will use the [`getAuth()`](/docs/sdk/nextjs/get-auth) helper from Clerk to access the user's `Auth` object. ```ts {{ filename: 'src/server/context.ts' }} import * as trpc from '@trpc/server' diff --git a/docs/references/nodejs/available-methods.mdx b/docs/sdk/nodejs/methods.mdx similarity index 100% rename from docs/references/nodejs/available-methods.mdx rename to docs/sdk/nodejs/methods.mdx diff --git a/docs/references/nodejs/overview.mdx b/docs/sdk/nodejs/quickstart.mdx similarity index 95% rename from docs/references/nodejs/overview.mdx rename to docs/sdk/nodejs/quickstart.mdx index 2b21bfe02e..4ab8234237 100644 --- a/docs/references/nodejs/overview.mdx +++ b/docs/sdk/nodejs/quickstart.mdx @@ -11,7 +11,7 @@ description: Learn how to integrate Node.js into your Clerk application. ### Create a Clerk application - You need to create a Clerk application in the Clerk Dashboard before you can set up Clerk Node.js. For more information, see the [setup guide](/docs/quickstarts/setup-clerk). + You need to create a Clerk application in the Clerk Dashboard before you can set up Clerk Node.js. For more information, see the [setup guide](/docs/getting-started). ### Install `@clerk/clerk-sdk-node` @@ -45,7 +45,7 @@ description: Learn how to integrate Node.js into your Clerk application. ## Available methods -All resource operations are mounted as sub-APIs on the `clerkClient` object. To access the resource operations, [you must first instantiate a `clerkClient` instance](/docs/references/nodejs/available-methods). +All resource operations are mounted as sub-APIs on the `clerkClient` object. To access the resource operations, [you must first instantiate a `clerkClient` instance](/docs/sdk/nodejs/methods). ## Multi-session applications diff --git a/docs/references/nuxt/clerk-middleware.mdx b/docs/sdk/nuxt/clerk-middleware.mdx similarity index 99% rename from docs/references/nuxt/clerk-middleware.mdx rename to docs/sdk/nuxt/clerk-middleware.mdx index e3bfb8f5a0..44c76890ea 100644 --- a/docs/references/nuxt/clerk-middleware.mdx +++ b/docs/sdk/nuxt/clerk-middleware.mdx @@ -6,7 +6,7 @@ description: The clerkMiddleware() helper allows you to protect your Nuxt applic The `clerkMiddleware()` helper allows you to protect your Nuxt application **on the server-side**. It can be used to validate a user's authentication status or authorization status. > [!NOTE] -> To learn how to protect pages, see the [dedicated guide](/docs/references/nuxt/protect-pages). +> To learn how to protect pages, see the [dedicated guide](/docs/sdk/nuxt/protect-pages). ## Configure `clerkMiddleware()` diff --git a/docs/references/nuxt/overview.mdx b/docs/sdk/nuxt/methods.mdx similarity index 76% rename from docs/references/nuxt/overview.mdx rename to docs/sdk/nuxt/methods.mdx index 34f56daac9..2964f4ffbe 100644 --- a/docs/references/nuxt/overview.mdx +++ b/docs/sdk/nuxt/methods.mdx @@ -3,16 +3,16 @@ title: Clerk Nuxt SDK description: Learn how to integrate Clerk into your Nuxt application using the Clerk Nuxt SDK. --- -The Nuxt SDK is built on top of the [Vue SDK](/docs/references/vue/overview), and is the recommended method for integrating Clerk into your Nuxt application. +The Nuxt SDK is built on top of the [Vue SDK](/docs/sdk/vue/methods), and is the recommended method for integrating Clerk into your Nuxt application. ## Guides -- [Read session and user data](/docs/references/nuxt/read-session-data) -- [Protect pages](/docs/references/nuxt/protect-pages) +- [Read session and user data](/docs/sdk/nuxt/read-session-data) +- [Protect pages](/docs/sdk/nuxt/protect-pages) ## Client-side helpers -Because the Nuxt SDK is built on top of the Clerk Vue SDK, you can use the composables that the Vue SDK provides. These composables give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [Vue SDK reference](/docs/references/vue/overview). +Because the Nuxt SDK is built on top of the Clerk Vue SDK, you can use the composables that the Vue SDK provides. These composables give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [Vue SDK reference](/docs/sdk/vue/methods). @@ -22,7 +22,7 @@ The `Auth` object is available at `event.context.auth` in your [event handlers]( ## `clerkMiddleware()` -The `clerkMiddleware()` helper integrates Clerk authentication and authorization into your Nuxt application through middleware. [Learn more](/docs/references/nuxt/clerk-middleware). +The `clerkMiddleware()` helper integrates Clerk authentication and authorization into your Nuxt application through middleware. [Learn more](/docs/sdk/nuxt/clerk-middleware). ## `clerkClient()` diff --git a/docs/references/nuxt/protect-pages.mdx b/docs/sdk/nuxt/protect-pages.mdx similarity index 100% rename from docs/references/nuxt/protect-pages.mdx rename to docs/sdk/nuxt/protect-pages.mdx diff --git a/docs/quickstarts/nuxt.mdx b/docs/sdk/nuxt/quickstart.mdx similarity index 93% rename from docs/quickstarts/nuxt.mdx rename to docs/sdk/nuxt/quickstart.mdx index 452360020f..d398083f15 100644 --- a/docs/quickstarts/nuxt.mdx +++ b/docs/sdk/nuxt/quickstart.mdx @@ -35,7 +35,7 @@ description: Add authentication and user management to your Nuxt app with Clerk. ## Install `@clerk/nuxt` - Clerk's [Nuxt SDK](/docs/references/nuxt/overview) gives you access to prebuilt components, Vue composables, and helpers to make user authentication easier. + Clerk's [Nuxt SDK](/docs/sdk/nuxt/methods) gives you access to prebuilt components, Vue composables, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -142,12 +142,12 @@ description: Add authentication and user management to your Nuxt app with Clerk. Learn more about Clerk components, how to customize them, and how to use Clerk's client-side helpers using the following guides. - - [Protect API routes using `clerkMiddleware()`](/docs/references/nuxt/clerk-middleware) + - [Protect API routes using `clerkMiddleware()`](/docs/sdk/nuxt/clerk-middleware) - Learn how to protect specific API routes from unauthenticated users. --- - - [Read session and user data](/docs/references/nuxt/read-session-data) + - [Read session and user data](/docs/sdk/nuxt/read-session-data) - Learn how to use Clerk's composables and helpers to access the active session and user data in your Nuxt app. --- diff --git a/docs/references/nuxt/read-session-data.mdx b/docs/sdk/nuxt/read-session-data.mdx similarity index 100% rename from docs/references/nuxt/read-session-data.mdx rename to docs/sdk/nuxt/read-session-data.mdx diff --git a/docs/references/react-router/custom-signup-signin-pages.mdx b/docs/sdk/react-router/custom-signup-signin-pages.mdx similarity index 97% rename from docs/references/react-router/custom-signup-signin-pages.mdx rename to docs/sdk/react-router/custom-signup-signin-pages.mdx index 5a445e7093..c6d419a53d 100644 --- a/docs/references/react-router/custom-signup-signin-pages.mdx +++ b/docs/sdk/react-router/custom-signup-signin-pages.mdx @@ -3,7 +3,7 @@ title: Build your own sign-up and sign-in pages for your React Router app with C description: Learn how to add custom sign-up and sign-in pages to your React Router app with Clerk's prebuilt components. --- -This guide shows you how to use the [``](/docs/components/authentication/sign-in) and [``](/docs/components/authentication/sign-up) components with the [React Router Splat route](https://reactrouter.com/start/framework/routing#splats) to build custom sign-up and sign-in pages for your React Router app. See the [quickstart tutorial](/docs/quickstarts/react-router) for a step-by-step guide. +This guide shows you how to use the [``](/docs/components/authentication/sign-in) and [``](/docs/components/authentication/sign-up) components with the [React Router Splat route](https://reactrouter.com/start/framework/routing#splats) to build custom sign-up and sign-in pages for your React Router app. See the [quickstart tutorial](/docs/sdk/react-router/quickstart) for a step-by-step guide. If the prebuilt components don't meet your specific needs or if you require more control over the logic, you can rebuild the existing Clerk flows using the Clerk API. For more information, see the [custom flow guides](/docs/custom-flows/overview). diff --git a/docs/references/react-router/get-auth.mdx b/docs/sdk/react-router/get-auth.mdx similarity index 100% rename from docs/references/react-router/get-auth.mdx rename to docs/sdk/react-router/get-auth.mdx diff --git a/docs/references/react-router/library-mode.mdx b/docs/sdk/react-router/library-mode.mdx similarity index 94% rename from docs/references/react-router/library-mode.mdx rename to docs/sdk/react-router/library-mode.mdx index 4d04824993..3baafa1577 100644 --- a/docs/references/react-router/library-mode.mdx +++ b/docs/sdk/react-router/library-mode.mdx @@ -27,12 +27,12 @@ description: Learn how to use Clerk with React Router in library mode to add aut - Protect your pages -React Router can be used as a framework or as a standalone library. This guide explains how to add React Router authentication to an existing React application using library mode. To use React Router as a framework instead, see the [React Router quickstart](/docs/quickstarts/react-router). +React Router can be used as a framework or as a standalone library. This guide explains how to add React Router authentication to an existing React application using library mode. To use React Router as a framework instead, see the [React Router quickstart](/docs/sdk/react-router/quickstart). ## Install `@clerk/react-router` - Clerk's [React Router SDK](/docs/references/react-router/overview) provides prebuilt components, hooks, and stores to make it easy to integrate authentication and user management in your React Router app. + Clerk's [React Router SDK](/docs/sdk/react-router/methods) provides prebuilt components, hooks, and stores to make it easy to integrate authentication and user management in your React Router app. Run the following command to install the SDK: diff --git a/docs/references/react-router/overview.mdx b/docs/sdk/react-router/methods.mdx similarity index 77% rename from docs/references/react-router/overview.mdx rename to docs/sdk/react-router/methods.mdx index f2172fd371..430f31563f 100644 --- a/docs/references/react-router/overview.mdx +++ b/docs/sdk/react-router/methods.mdx @@ -6,11 +6,11 @@ description: Learn how to integrate Clerk into your React Router application usi > [!WARNING] > Due to an active [issue with React Router](https://github.com/remix-run/react-router/issues/12475), Clerk and React Router currently requires using Node.js 22.11 or lower. -The Clerk React Router SDK is built on top of the [React SDK](/docs/references/react/overview) and is the recommended method for integrating Clerk into your React Router application. +The Clerk React Router SDK is built on top of the [React SDK](/docs/sdk/react/methods) and is the recommended method for integrating Clerk into your React Router application. ## Client-side helpers -The React Router SDK provides access to all of Clerk React's hooks which give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/references/react/overview). +The React Router SDK provides access to all of Clerk React's hooks which give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/sdk/react/methods). @@ -18,8 +18,8 @@ The React Router SDK provides access to all of Clerk React's hooks which give yo The following references show how to integrate Clerk features into applications using React Router server functions and API routes. -- [`getAuth()`](/docs/references/react-router/get-auth) -- [`rootAuthLoader()`](/docs/references/react-router/root-auth-loader) +- [`getAuth()`](/docs/sdk/react-router/get-auth) +- [`rootAuthLoader()`](/docs/sdk/react-router/root-auth-loader) ### `Auth` object @@ -29,5 +29,5 @@ The `getAuth()` method returns an `Auth` object. This JavaScript object contains React Router can be integrated with Clerk in two ways: -- As a framework (recommended): Configure your app using [Clerk's React Router SDK](/docs/quickstarts/react-router) -- As a library: Manually integrate React Router into your React + Vite app using [library mode](/docs/references/react-router/library-mode) +- As a framework (recommended): Configure your app using [Clerk's React Router SDK](/docs/sdk/react-router/quickstart) +- As a library: Manually integrate React Router into your React + Vite app using [library mode](/docs/sdk/react-router/library-mode) diff --git a/docs/quickstarts/react-router.mdx b/docs/sdk/react-router/quickstart.mdx similarity index 95% rename from docs/quickstarts/react-router.mdx rename to docs/sdk/react-router/quickstart.mdx index 7536264e2e..12e3e08b34 100644 --- a/docs/quickstarts/react-router.mdx +++ b/docs/sdk/react-router/quickstart.mdx @@ -31,7 +31,7 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat - Add `` and Clerk components -Clerk's [React Router SDK](/docs/references/react-router/overview) provides prebuilt components, hooks, and stores to make it easy to integrate authentication and user management in your React Router app. This guide assumes that you're using [React Router v7 or later](https://api.reactrouter.com/v7). +Clerk's [React Router SDK](/docs/sdk/react-router/methods) provides prebuilt components, hooks, and stores to make it easy to integrate authentication and user management in your React Router app. This guide assumes that you're using [React Router v7 or later](https://api.reactrouter.com/v7). > [!WARNING] > Due to an active [issue with React Router](https://github.com/remix-run/react-router/issues/12475), Clerk and React Router currently requires using Node.js 22.11 or lower. @@ -80,7 +80,7 @@ Clerk's [React Router SDK](/docs/references/react-router/overview) provides preb The following code shows how to add this function to your `root.tsx` file. If you're using [Clerk's React Router quickstart](https://github.com/clerk/clerk-react-router-quickstart) or the [React Router template](https://reactrouter.com/start/framework/installation), most of this code will already be present. - To load additional data or configure options, see the [`rootAuthLoader()`](/docs/references/react-router/root-auth-loader) reference. + To load additional data or configure options, see the [`rootAuthLoader()`](/docs/sdk/react-router/root-auth-loader) reference. ```tsx {{ filename: 'app/root.tsx', mark: [1, [6, 8]], collapsible: true }} import { rootAuthLoader } from '@clerk/react-router/ssr.server' diff --git a/docs/references/react-router/read-session-data.mdx b/docs/sdk/react-router/read-session-data.mdx similarity index 67% rename from docs/references/react-router/read-session-data.mdx rename to docs/sdk/react-router/read-session-data.mdx index 23398a1e38..844605502a 100644 --- a/docs/references/react-router/read-session-data.mdx +++ b/docs/sdk/react-router/read-session-data.mdx @@ -7,7 +7,7 @@ Clerk provides a set of [hooks and helpers](/docs/references/react-router/overvi ## Server-side -To access active session and user data on the server-side, use the `getAuth()` helper. See the [reference documentation](/docs/references/react-router/get-auth) for more information, including code examples. +To access active session and user data on the server-side, use the `getAuth()` helper. See the [reference documentation](/docs/sdk/react-router/get-auth) for more information, including code examples. ## Client-side @@ -15,7 +15,7 @@ To access active session and user data on the client-side, use Clerk's `useAuth( ### `useAuth()` -The [`useAuth()`](/docs/references/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes, as shown in the following example: +The [`useAuth()`](/docs/sdk/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes, as shown in the following example: ```tsx {{ filename: 'app/routes/use-auth.tsx' }} import { useAuth } from '@clerk/react-router' @@ -35,7 +35,7 @@ export default function UseAuthPage() { ### `useUser()` -The [`useUser()`](/docs/references/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. +The [`useUser()`](/docs/sdk/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. ```tsx {{ filename: 'app/routes/use-user.tsx' }} import { useUser } from '@clerk/react-router' diff --git a/docs/references/react-router/root-auth-loader.mdx b/docs/sdk/react-router/root-auth-loader.mdx similarity index 100% rename from docs/references/react-router/root-auth-loader.mdx rename to docs/sdk/react-router/root-auth-loader.mdx diff --git a/docs/references/react/overview.mdx b/docs/sdk/react/methods.mdx similarity index 75% rename from docs/references/react/overview.mdx rename to docs/sdk/react/methods.mdx index c35327c780..8f55dc3231 100644 --- a/docs/references/react/overview.mdx +++ b/docs/sdk/react/methods.mdx @@ -22,12 +22,12 @@ Clerk offers framework-specific SDKs that are customized to provide the better d | Framework | Package | Docs | | - | - | - | -| Next.js | `@clerk/nextjs` | [Next.js SDK](/docs/references/nextjs/overview) | -| React Router | `@clerk/clerk-react-router` | [React Router SDK](/docs/references/react-router/overview) | -| Remix | `@clerk/remix` | [Remix SDK](/docs/references/remix/clerk-app) | -| Astro | `@clerk/astro` | [Astro SDK](/docs/references/astro/overview) | -| Tanstack Start | `@clerk/tanstack-start` | [Tanstack Start SDK](/docs/references/tanstack-start/overview) | +| Next.js | `@clerk/nextjs` | [Next.js SDK](/docs/sdk/nextjs/methods) | +| React Router | `@clerk/clerk-react-router` | [React Router SDK](/docs/sdk/react-router/methods) | +| Remix | `@clerk/remix` | [Remix SDK](/docs/sdk/remix/clerk-app) | +| Astro | `@clerk/astro` | [Astro SDK](/docs/sdk/astro/methods) | +| Tanstack Start | `@clerk/tanstack-start` | [Tanstack Start SDK](/docs/sdk/tanstack-start/methods) | ## Set up Clerk React -Before you can add Clerk to your React application, you must create a Clerk app in the Clerk Dashboard. To get started, follow the [setup guide](/docs/quickstarts/setup-clerk). Then, follow the [quickstart guide](/docs/quickstarts/react) to set up the React SDK in your app. +Before you can add Clerk to your React application, you must create a Clerk app in the Clerk Dashboard. To get started, follow the [setup guide](/docs/getting-started). Then, follow the [quickstart guide](/docs/sdk/react/quickstart) to set up the React SDK in your app. diff --git a/docs/quickstarts/react.mdx b/docs/sdk/react/quickstart.mdx similarity index 95% rename from docs/quickstarts/react.mdx rename to docs/sdk/react/quickstart.mdx index c904071c13..6364d89df8 100644 --- a/docs/quickstarts/react.mdx +++ b/docs/sdk/react/quickstart.mdx @@ -57,7 +57,7 @@ description: Add authentication and user management to your React app with Clerk ## Install `@clerk/clerk-react` - Clerk's [React SDK](/docs/references/react/overview) gives you access to prebuilt components, hooks, and helpers to make user authentication easier. + Clerk's [React SDK](/docs/sdk/react/methods) gives you access to prebuilt components, hooks, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -197,8 +197,8 @@ description: Add authentication and user management to your React app with Clerk React Router can be integrated with Clerk in two ways: -- As a framework: Use Clerk's built-in [React Router integration](/docs/quickstarts/react-router) -- As a library: Manually integrate React Router into your Clerk application using [library mode](/docs/references/react-router/library-mode) +- As a framework: Use Clerk's built-in [React Router integration](/docs/sdk/react-router/quickstart) +- As a library: Manually integrate React Router into your Clerk application using [library mode](/docs/sdk/react-router/library-mode) ## More resources @@ -215,6 +215,6 @@ Learn more about Clerk components, how to customize them, and how to use Clerk's --- - - [Client-side helpers (hooks)](/docs/references/react/use-user) + - [Client-side helpers (hooks)](/docs/sdk/react/use-user) - Learn more about Clerk's client-side helpers and how to use them. diff --git a/docs/references/react/use-auth.mdx b/docs/sdk/react/use-auth.mdx similarity index 88% rename from docs/references/react/use-auth.mdx rename to docs/sdk/react/use-auth.mdx index f63c648a5f..e8cc203c23 100644 --- a/docs/references/react/use-auth.mdx +++ b/docs/sdk/react/use-auth.mdx @@ -78,7 +78,7 @@ The `useAuth()` hook provides access to the current user's authentication state ## How to use the `useAuth()` hook > [!NOTE] -> For Next.js applications, it's recommended to use the [`auth()`](/docs/references/nextjs/auth) helper instead of `useAuth()`. Since `auth()` must be used in Server Components, you'll need to pass auth data to Client Components as needed. If you prefer `useAuth()`, you must pass the `dynamic` prop to ``, but be aware this switches the app to dynamic rendering. Learn more [here](/docs/references/nextjs/rendering-modes). +> For Next.js applications, it's recommended to use the [`auth()`](/docs/sdk/nextjs/auth) helper instead of `useAuth()`. Since `auth()` must be used in Server Components, you'll need to pass auth data to Client Components as needed. If you prefer `useAuth()`, you must pass the `dynamic` prop to ``, but be aware this switches the app to dynamic rendering. Learn more [here](/docs/sdk/nextjs/rendering-modes). The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource. diff --git a/docs/references/react/use-clerk.mdx b/docs/sdk/react/use-clerk.mdx similarity index 100% rename from docs/references/react/use-clerk.mdx rename to docs/sdk/react/use-clerk.mdx diff --git a/docs/references/react/use-organization-list.mdx b/docs/sdk/react/use-organization-list.mdx similarity index 100% rename from docs/references/react/use-organization-list.mdx rename to docs/sdk/react/use-organization-list.mdx diff --git a/docs/references/react/use-organization.mdx b/docs/sdk/react/use-organization.mdx similarity index 100% rename from docs/references/react/use-organization.mdx rename to docs/sdk/react/use-organization.mdx diff --git a/docs/references/react/use-reverification.mdx b/docs/sdk/react/use-reverification.mdx similarity index 100% rename from docs/references/react/use-reverification.mdx rename to docs/sdk/react/use-reverification.mdx diff --git a/docs/references/react/use-session-list.mdx b/docs/sdk/react/use-session-list.mdx similarity index 100% rename from docs/references/react/use-session-list.mdx rename to docs/sdk/react/use-session-list.mdx diff --git a/docs/references/react/use-session.mdx b/docs/sdk/react/use-session.mdx similarity index 100% rename from docs/references/react/use-session.mdx rename to docs/sdk/react/use-session.mdx diff --git a/docs/references/react/use-sign-in.mdx b/docs/sdk/react/use-sign-in.mdx similarity index 100% rename from docs/references/react/use-sign-in.mdx rename to docs/sdk/react/use-sign-in.mdx diff --git a/docs/references/react/use-sign-up.mdx b/docs/sdk/react/use-sign-up.mdx similarity index 100% rename from docs/references/react/use-sign-up.mdx rename to docs/sdk/react/use-sign-up.mdx diff --git a/docs/references/react/use-user.mdx b/docs/sdk/react/use-user.mdx similarity index 100% rename from docs/references/react/use-user.mdx rename to docs/sdk/react/use-user.mdx diff --git a/docs/references/redwood/overview.mdx b/docs/sdk/redwood/quickstart.mdx similarity index 100% rename from docs/references/redwood/overview.mdx rename to docs/sdk/redwood/quickstart.mdx diff --git a/docs/references/remix/clerk-app.mdx b/docs/sdk/remix/clerk-app.mdx similarity index 100% rename from docs/references/remix/clerk-app.mdx rename to docs/sdk/remix/clerk-app.mdx diff --git a/docs/references/remix/custom-signup-signin-pages.mdx b/docs/sdk/remix/custom-signup-signin-pages.mdx similarity index 96% rename from docs/references/remix/custom-signup-signin-pages.mdx rename to docs/sdk/remix/custom-signup-signin-pages.mdx index 3157c9702e..adb5e1e8f3 100644 --- a/docs/references/remix/custom-signup-signin-pages.mdx +++ b/docs/sdk/remix/custom-signup-signin-pages.mdx @@ -10,7 +10,7 @@ If Clerk's prebuilt components don't meet your specific needs or if you require The functionality of the components are controlled by the instance settings you specify in the [Clerk Dashboard](https://dashboard.clerk.com). > [!NOTE] -> Just getting started with Clerk and Remix? See the [quickstart tutorial](/docs/quickstarts/remix)! +> Just getting started with Clerk and Remix? See the [quickstart tutorial](/docs/sdk/remix/quickstart)! ## Build your sign-up page @@ -102,6 +102,6 @@ The functionality of the components are controlled by the instance settings you ## Next steps - - [Read user and session data](/docs/references/remix/read-session-data) + - [Read user and session data](/docs/sdk/remix/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Remix application. diff --git a/docs/quickstarts/remix.mdx b/docs/sdk/remix/quickstart.mdx similarity index 94% rename from docs/quickstarts/remix.mdx rename to docs/sdk/remix/quickstart.mdx index 7b7909a905..4b29a716af 100644 --- a/docs/quickstarts/remix.mdx +++ b/docs/sdk/remix/quickstart.mdx @@ -35,7 +35,7 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat Learn how to use Clerk to quickly and easily add secure authentication and user management to your Remix app. This guide assumes that you are using Remix v2 or later. > [!NOTE] -> If you are using Remix SPA mode, follow the [Remix SPA mode guide](/docs/references/remix/spa-mode). +> If you are using Remix SPA mode, follow the [Remix SPA mode guide](/docs/sdk/remix/spa-mode). ## Install `@clerk/remix` @@ -230,7 +230,7 @@ Learn how to use Clerk to quickly and easily add secure authentication and user ### Server-side - To protect your routes, use the [`getAuth()`](/docs/references/nextjs/get-auth) function in your loader. This function retrieves the authentication state from the request object, returning an `Auth` object that includes the `userId`, allowing you to determine if the user is authenticated. + To protect your routes, use the [`getAuth()`](/docs/sdk/nextjs/get-auth) function in your loader. This function retrieves the authentication state from the request object, returning an `Auth` object that includes the `userId`, allowing you to determine if the user is authenticated. ```tsx {{ filename: 'routes/_index.tsx' }} import { UserButton } from '@clerk/remix' @@ -280,12 +280,12 @@ Learn how to use Clerk to quickly and easily add secure authentication and user ## Next steps - - [Create custom sign-up and sign-in pages](/docs/references/remix/custom-signup-signin-pages) + - [Create custom sign-up and sign-in pages](/docs/sdk/remix/custom-signup-signin-pages) - Learn how add custom sign-up and sign-in pages with Clerk components. --- - - [Read user and session data](/docs/references/remix/read-session-data) + - [Read user and session data](/docs/sdk/remix/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Remix app. --- diff --git a/docs/references/remix/read-session-data.mdx b/docs/sdk/remix/read-session-data.mdx similarity index 79% rename from docs/references/remix/read-session-data.mdx rename to docs/sdk/remix/read-session-data.mdx index a65cf9403a..43fd0533fd 100644 --- a/docs/references/remix/read-session-data.mdx +++ b/docs/sdk/remix/read-session-data.mdx @@ -9,7 +9,7 @@ Clerk provides a set of [hooks and helpers](/docs/references/nextjs/overview#cli ### `getAuth()` -The [`getAuth()`](/docs/references/nextjs/get-auth){{ target: '_blank' }} helper allows you to access the [`Auth` object](/docs/references/backend/types/auth-object){{ target: '_blank' }}, which includes the current user's `userId`. You can use the `userId` to protect your routes or get the user's data. +The [`getAuth()`](/docs/sdk/nextjs/get-auth){{ target: '_blank' }} helper allows you to access the [`Auth` object](/docs/references/backend/types/auth-object){{ target: '_blank' }}, which includes the current user's `userId`. You can use the `userId` to protect your routes or get the user's data. In the following example, the `userId` is passed to the Backend SDK's [`getUser()`](/docs/references/backend/user/get-user){{ target: '_blank' }} method to get the user's full `User` object. For information on how to use the Backend SDK, see the [Backend SDK documentation](/docs/references/backend/overview){{ target: '_blank' }}. @@ -71,7 +71,7 @@ In the following example, the `userId` is passed to the Backend SDK's [`getUser( ### `useAuth()` -The [`useAuth()`](/docs/references/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes. +The [`useAuth()`](/docs/sdk/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes. ```tsx {{ filename: 'routes/example.tsx' }} import { useAuth } from '@clerk/remix' @@ -94,7 +94,7 @@ export default function Example() { ### `useUser()` -The [`useUser()`](/docs/references/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. +The [`useUser()`](/docs/sdk/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. ```tsx {{ filename: 'routes/example.tsx' }} import { useUser } from '@clerk/remix' diff --git a/docs/references/remix/spa-mode.mdx b/docs/sdk/remix/spa-mode.mdx similarity index 99% rename from docs/references/remix/spa-mode.mdx rename to docs/sdk/remix/spa-mode.mdx index c0c6de3a04..4757b6f462 100644 --- a/docs/references/remix/spa-mode.mdx +++ b/docs/sdk/remix/spa-mode.mdx @@ -22,7 +22,7 @@ description: Clerk supports Remix SPA mode out-of-the-box. > [!NOTE] > This guide explains how to use Clerk with [Remix in SPA mode](https://remix.run/docs/en/main/guides/spa-mode). -> If you are using Remix with SSR, follow the [Remix quickstart](/docs/quickstarts/remix). +> If you are using Remix with SSR, follow the [Remix quickstart](/docs/sdk/remix/quickstart). ## Install `@clerk/remix` diff --git a/docs/references/ruby/available-methods.mdx b/docs/sdk/ruby/methods.mdx similarity index 100% rename from docs/references/ruby/available-methods.mdx rename to docs/sdk/ruby/methods.mdx diff --git a/docs/references/ruby/overview.mdx b/docs/sdk/ruby/quickstart.mdx similarity index 98% rename from docs/references/ruby/overview.mdx rename to docs/sdk/ruby/quickstart.mdx index fb9b3491f7..8f757fe5c5 100644 --- a/docs/references/ruby/overview.mdx +++ b/docs/sdk/ruby/quickstart.mdx @@ -6,7 +6,7 @@ description: Learn how to integrate Ruby into your Clerk application. ## Create a Clerk application - You need to create a Clerk application in the Clerk Dashboard before you can set up Clerk Ruby. For more information, see the [setup guide](/docs/quickstarts/setup-clerk). + You need to create a Clerk application in the Clerk Dashboard before you can set up Clerk Ruby. For more information, see the [setup guide](/docs/getting-started). ## Install Ruby diff --git a/docs/references/ruby/rack-rails.mdx b/docs/sdk/ruby/rack-rails.mdx similarity index 100% rename from docs/references/ruby/rack-rails.mdx rename to docs/sdk/ruby/rack-rails.mdx diff --git a/docs/references/tanstack-start/create-clerk-handler.mdx b/docs/sdk/tanstack-start/create-clerk-handler.mdx similarity index 100% rename from docs/references/tanstack-start/create-clerk-handler.mdx rename to docs/sdk/tanstack-start/create-clerk-handler.mdx diff --git a/docs/references/tanstack-start/custom-signup-signin-pages.mdx b/docs/sdk/tanstack-start/custom-signup-signin-pages.mdx similarity index 95% rename from docs/references/tanstack-start/custom-signup-signin-pages.mdx rename to docs/sdk/tanstack-start/custom-signup-signin-pages.mdx index 3abd5ac433..d67fbcf549 100644 --- a/docs/references/tanstack-start/custom-signup-signin-pages.mdx +++ b/docs/sdk/tanstack-start/custom-signup-signin-pages.mdx @@ -8,7 +8,7 @@ This guide shows you how to use the [``](/docs/components/authenticati If Clerk's prebuilt components don't meet your specific needs or if you require more control over the logic, you can rebuild the existing Clerk flows using the Clerk API. For more information, see the [custom flow guides](/docs/custom-flows/overview). > [!NOTE] -> Just getting started with Clerk and TanStack Start? See the [quickstart tutorial](/docs/quickstarts/tanstack-start)! +> Just getting started with Clerk and TanStack Start? See the [quickstart tutorial](/docs/sdk/tanstack-start/quickstart)! ## Build a sign-up page @@ -80,6 +80,6 @@ If Clerk's prebuilt components don't meet your specific needs or if you require ## Next steps - - [Read user and session data](/docs/references/tanstack-start/read-session-data) + - [Read user and session data](/docs/sdk/tanstack-start/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your TanStack Start application. diff --git a/docs/references/tanstack-start/get-auth.mdx b/docs/sdk/tanstack-start/get-auth.mdx similarity index 100% rename from docs/references/tanstack-start/get-auth.mdx rename to docs/sdk/tanstack-start/get-auth.mdx diff --git a/docs/references/tanstack-start/overview.mdx b/docs/sdk/tanstack-start/methods.mdx similarity index 68% rename from docs/references/tanstack-start/overview.mdx rename to docs/sdk/tanstack-start/methods.mdx index f112908324..73bfdba127 100644 --- a/docs/references/tanstack-start/overview.mdx +++ b/docs/sdk/tanstack-start/methods.mdx @@ -3,16 +3,16 @@ title: Clerk TanStack Start SDK description: Learn how to integrate Clerk into your TanStack Start application using the Clerk TanStack Start SDK. --- -The Clerk TanStack Start SDK is built on top of the [React SDK](/docs/references/react/overview) and is the recommended method for integrating Clerk into your TanStack Start application. +The Clerk TanStack Start SDK is built on top of the [React SDK](/docs/sdk/react/methods) and is the recommended method for integrating Clerk into your TanStack Start application. ## Guides -- [Read session and user data](/docs/references/tanstack-start/read-session-data) -- [Add custom sign up and sign in pages](/docs/references/tanstack-start/custom-signup-signin-pages) +- [Read session and user data](/docs/sdk/tanstack-start/read-session-data) +- [Add custom sign up and sign in pages](/docs/sdk/tanstack-start/custom-signup-signin-pages) ## Client-side helpers -The TanStack Start SDK is a wrapper around Clerk React, so you can use the hooks that Clerk React provides. These hooks give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object, and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/references/react/overview). +The TanStack Start SDK is a wrapper around Clerk React, so you can use the hooks that Clerk React provides. These hooks give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object, and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/sdk/react/methods). @@ -20,7 +20,7 @@ The TanStack Start SDK is a wrapper around Clerk React, so you can use the hooks The following references show how to integrate Clerk features into applications using TanStack Start server functions and API routes. -- [`getAuth()`](/docs/references/tanstack-start/get-auth) +- [`getAuth()`](/docs/sdk/tanstack-start/get-auth) ### `Auth` object diff --git a/docs/quickstarts/tanstack-start.mdx b/docs/sdk/tanstack-start/quickstart.mdx similarity index 86% rename from docs/quickstarts/tanstack-start.mdx rename to docs/sdk/tanstack-start/quickstart.mdx index 0490284dca..864638bb09 100644 --- a/docs/quickstarts/tanstack-start.mdx +++ b/docs/sdk/tanstack-start/quickstart.mdx @@ -33,7 +33,7 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat ## Install `@clerk/tanstack-start` - Clerk's [TanStack Start SDK](/docs/references/tanstack-start/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + Clerk's [TanStack Start SDK](/docs/sdk/tanstack-start/methods) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -74,7 +74,7 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat TanStack's [`createStartHandler()`](https://tanstack.com/router/latest/docs/framework/react/start/getting-started#the-server-entry-point) creates a server-side handler that determines which routes and loaders need to be executed when the user hits a given route. - Clerk's [`createClerkHandler()`](/docs/references/tanstack-start/create-clerk-handler) configures Clerk to handle authentication state for TanStack routes, allowing you to easily access user session information within your app. + Clerk's [`createClerkHandler()`](/docs/sdk/tanstack-start/create-clerk-handler) configures Clerk to handle authentication state for TanStack routes, allowing you to easily access user session information within your app. Update your app's SSR entrypoint by wrapping `createStartHandler()` in `createClerkHandler()`, as shown in the following example: @@ -179,7 +179,7 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat ### Server-side - To protect your routes, create a [server function](https://tanstack.com/router/latest/docs/framework/react/start/server-functions) that checks the user's authentication state via the [`getAuth()`](/docs/references/tanstack-start/get-auth) method. If the user is not authenticated, they are redirected to a sign-in page. If authenticated, the user's `userId` is passed to the route, allowing access to the `` component, which welcomes the user and displays their `userId`. The [`beforeLoad()`](https://tanstack.com/router/latest/docs/framework/react/api/router/RouteOptionsType#beforeload-method) method ensures authentication is checked before loading the page, and the [`loader()`](https://tanstack.com/router/latest/docs/framework/react/api/router/RouteOptionsType#loader-method) method returns the user data for use in the component. + To protect your routes, create a [server function](https://tanstack.com/router/latest/docs/framework/react/start/server-functions) that checks the user's authentication state via the [`getAuth()`](/docs/sdk/tanstack-start/get-auth) method. If the user is not authenticated, they are redirected to a sign-in page. If authenticated, the user's `userId` is passed to the route, allowing access to the `` component, which welcomes the user and displays their `userId`. The [`beforeLoad()`](https://tanstack.com/router/latest/docs/framework/react/api/router/RouteOptionsType#beforeload-method) method ensures authentication is checked before loading the page, and the [`loader()`](https://tanstack.com/router/latest/docs/framework/react/api/router/RouteOptionsType#loader-method) method returns the user data for use in the component. > [!TIP] > Ensure that your app has the [TanStack Start API entry handler](https://tanstack.com/router/latest/docs/framework/react/start/api-routes#setting-up-the-entry-handler) configured in order for your API routes to work. @@ -243,12 +243,12 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat ## Next steps - - [Create custom sign-up and sign-in pages](/docs/references/tanstack-start/custom-signup-signin-pages) + - [Create custom sign-up and sign-in pages](/docs/sdk/tanstack-start/custom-signup-signin-pages) - Learn how add custom sign-up and sign-in pages with Clerk components. --- - - [Read user and session data](/docs/references/tanstack-start/read-session-data) + - [Read user and session data](/docs/sdk/tanstack-start/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your TanStack Start app. --- diff --git a/docs/references/tanstack-start/read-session-data.mdx b/docs/sdk/tanstack-start/read-session-data.mdx similarity index 70% rename from docs/references/tanstack-start/read-session-data.mdx rename to docs/sdk/tanstack-start/read-session-data.mdx index 689fd176ea..655e154cff 100644 --- a/docs/references/tanstack-start/read-session-data.mdx +++ b/docs/sdk/tanstack-start/read-session-data.mdx @@ -7,7 +7,7 @@ Clerk provides a set of [hooks and helpers](/docs/references/tanstack-start/over ## Server-side -To access active session and user data on the server-side, use the `getAuth()` helper. See the [reference documentation](/docs/references/tanstack-start/get-auth) for more information, including code examples. +To access active session and user data on the server-side, use the `getAuth()` helper. See the [reference documentation](/docs/sdk/tanstack-start/get-auth) for more information, including code examples. ## Client-side @@ -15,7 +15,7 @@ To access active session and user data on the client-side, use Clerk's `useAuth( ### `useAuth()` -The [`useAuth()`](/docs/references/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes, as shown in the following example: +The [`useAuth()`](/docs/sdk/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes, as shown in the following example: ```tsx {{ filename: 'routes/example.tsx' }} import { useAuth } from '@clerk/tanstack-start' @@ -43,7 +43,7 @@ function Example() { ### `useUser()` -The [`useUser()`](/docs/references/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. +The [`useUser()`](/docs/sdk/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. ```tsx {{ filename: 'routes/example.tsx' }} import { useUser } from '@clerk/tanstack-start' diff --git a/docs/references/vue/overview.mdx b/docs/sdk/vue/methods.mdx similarity index 85% rename from docs/references/vue/overview.mdx rename to docs/sdk/vue/methods.mdx index 4f6ff740aa..54eebb3788 100644 --- a/docs/references/vue/overview.mdx +++ b/docs/sdk/vue/methods.mdx @@ -20,8 +20,8 @@ Clerk offers framework-specific SDKs that are customized to provide the better d | Framework | Package | Docs | | - | - | - | -| Nuxt | `@clerk/nuxt` | [Nuxt SDK](/docs/references/nuxt/overview) | +| Nuxt | `@clerk/nuxt` | [Nuxt SDK](/docs/sdk/nuxt/methods) | ## Set up Clerk Vue -Before you can add Clerk to your Vue application, you must create a Clerk app in the Clerk Dashboard. To get started, follow the [setup guide](/docs/quickstarts/setup-clerk). Then, follow the [quickstart guide](/docs/quickstarts/vue) to set up the Vue SDK in your app. +Before you can add Clerk to your Vue application, you must create a Clerk app in the Clerk Dashboard. To get started, follow the [setup guide](/docs/getting-started). Then, follow the [quickstart guide](/docs/sdk/vue/quickstart) to set up the Vue SDK in your app. diff --git a/docs/references/vue/migrating-from-vue-community-sdk.mdx b/docs/sdk/vue/migrating-from-vue-community-sdk.mdx similarity index 100% rename from docs/references/vue/migrating-from-vue-community-sdk.mdx rename to docs/sdk/vue/migrating-from-vue-community-sdk.mdx diff --git a/docs/quickstarts/vue.mdx b/docs/sdk/vue/quickstart.mdx similarity index 92% rename from docs/quickstarts/vue.mdx rename to docs/sdk/vue/quickstart.mdx index f80dbe23cb..fc7521fc51 100644 --- a/docs/quickstarts/vue.mdx +++ b/docs/sdk/vue/quickstart.mdx @@ -27,7 +27,7 @@ description: Add authentication and user management to your Vue app with Clerk. - Create a header with Clerk components -Clerk's [Vue SDK](/docs/references/vue/overview) provides prebuilt components and composables to make it easy to integrate authentication and user management in your Vue app. This guide assumes that you're using [Vue 3](https://vuejs.org/) with [TypeScript](https://www.typescriptlang.org/). +Clerk's [Vue SDK](/docs/sdk/vue/methods) provides prebuilt components and composables to make it easy to integrate authentication and user management in your Vue app. This guide assumes that you're using [Vue 3](https://vuejs.org/) with [TypeScript](https://www.typescriptlang.org/). ### Create a Vue app using Vite @@ -59,7 +59,7 @@ Clerk's [Vue SDK](/docs/references/vue/overview) provides prebuilt components an ### Install `@clerk/vue` - Clerk's [Vue SDK](/docs/references/vue/overview) gives you access to prebuilt components, composables, and helpers to make user authentication easier. + Clerk's [Vue SDK](/docs/sdk/vue/methods) gives you access to prebuilt components, composables, and helpers to make user authentication easier. Run the following command to install the SDK: diff --git a/docs/references/vue/use-auth.mdx b/docs/sdk/vue/use-auth.mdx similarity index 100% rename from docs/references/vue/use-auth.mdx rename to docs/sdk/vue/use-auth.mdx diff --git a/docs/references/vue/use-clerk.mdx b/docs/sdk/vue/use-clerk.mdx similarity index 100% rename from docs/references/vue/use-clerk.mdx rename to docs/sdk/vue/use-clerk.mdx diff --git a/docs/references/vue/use-organization.mdx b/docs/sdk/vue/use-organization.mdx similarity index 100% rename from docs/references/vue/use-organization.mdx rename to docs/sdk/vue/use-organization.mdx diff --git a/docs/references/vue/use-session-list.mdx b/docs/sdk/vue/use-session-list.mdx similarity index 100% rename from docs/references/vue/use-session-list.mdx rename to docs/sdk/vue/use-session-list.mdx diff --git a/docs/references/vue/use-session.mdx b/docs/sdk/vue/use-session.mdx similarity index 100% rename from docs/references/vue/use-session.mdx rename to docs/sdk/vue/use-session.mdx diff --git a/docs/references/vue/use-sign-in.mdx b/docs/sdk/vue/use-sign-in.mdx similarity index 100% rename from docs/references/vue/use-sign-in.mdx rename to docs/sdk/vue/use-sign-in.mdx diff --git a/docs/references/vue/use-sign-up.mdx b/docs/sdk/vue/use-sign-up.mdx similarity index 100% rename from docs/references/vue/use-sign-up.mdx rename to docs/sdk/vue/use-sign-up.mdx diff --git a/docs/references/vue/use-user.mdx b/docs/sdk/vue/use-user.mdx similarity index 100% rename from docs/references/vue/use-user.mdx rename to docs/sdk/vue/use-user.mdx diff --git a/docs/troubleshooting/create-a-minimal-reproduction.mdx b/docs/troubleshooting/create-a-minimal-reproduction.mdx index 7018ee20f3..afc6e8bad9 100644 --- a/docs/troubleshooting/create-a-minimal-reproduction.mdx +++ b/docs/troubleshooting/create-a-minimal-reproduction.mdx @@ -38,11 +38,11 @@ The best way to create a minimal reproduction is to start fresh, with a minimal ### Create a Clerk application - Create a new Clerk application through the Clerk Dashboard. You can follow the [setup guide](/docs/quickstarts/setup-clerk) to help you get started. + Create a new Clerk application through the Clerk Dashboard. You can follow the [setup guide](/docs/getting-started) to help you get started. ### Set the environment variables - Set the environment variables in your Clerk application. You can find instructions on how to do so in the appropriate [quickstart guide](/docs/quickstarts/overview). + Set the environment variables in your Clerk application. You can find instructions on how to do so in the appropriate [quickstart guide](/docs/quickstarts). ### Run the app diff --git a/docs/troubleshooting/overview.mdx b/docs/troubleshooting/overview.mdx index 291ed6b8db..e12de87f6b 100644 --- a/docs/troubleshooting/overview.mdx +++ b/docs/troubleshooting/overview.mdx @@ -7,7 +7,7 @@ We hope that our documentation is thorough and transparent enough that you won't Refer to the [Backend API](/docs/reference/backend-api){{ target: '_blank' }} and [Frontend API](/docs/reference/frontend-api){{ target: '_blank' }} reference docs for questions about object structures, requests, and responses. -Are you looking for a place to get started? See the [quickstarts](/docs/quickstarts/overview). +Are you looking for a place to get started? See the [quickstarts](/docs/quickstarts). ## Discord community diff --git a/docs/upgrade-guides/core-2/nextjs.mdx b/docs/upgrade-guides/core-2/nextjs.mdx index f666a62f43..ce8ea8d6b9 100644 --- a/docs/upgrade-guides/core-2/nextjs.mdx +++ b/docs/upgrade-guides/core-2/nextjs.mdx @@ -96,7 +96,7 @@ The new version ships with improved design and UX across all of Clerk's [UI comp ### New Middleware architecture -User and customer feedback about `authMiddleware()` has been clear in that Middleware logic was a often friction point. As such, in v5 you will find a completely new Middleware helper called [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) that should alleviate the issues folks had with `authMiddleware()`. +User and customer feedback about `authMiddleware()` has been clear in that Middleware logic was a often friction point. As such, in v5 you will find a completely new Middleware helper called [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) that should alleviate the issues folks had with `authMiddleware()`. The primary change from the previous `authMiddleware()` is that `clerkMiddleware()` does not protect any routes by default, instead requiring the developer to add routes they would like to be protected by auth. This is a substantial contrast to the previous `authMiddleware()`, which protected all routes by default, requiring the developer to add exceptions. The API was also substantially simplified, and it has become easier to combine with other Middleware helpers smoothly as well. @@ -132,7 +132,7 @@ A couple things to note here: - With `clerkMiddleware`, you're defining the routes you want **to be protected**, rather than the routes you don't want to be protected. - The `auth.protect()` helper is used extensively here. See its [reference doc](/docs/references/nextjs/auth#protect) for more info. -See the [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) docs for more information and detailed usage examples. +See the [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) docs for more information and detailed usage examples. #### Migrating to `clerkMiddleware()` @@ -158,7 +158,7 @@ export const config = { } ``` -Of course, in most cases you'll have a more complicated setup than this. You can find some examples below for how to migrate a few common use cases. Be sure to review the [`clerkMiddleware()` documentation](/docs/references/nextjs/clerk-middleware) if your specific use case is not mentioned. +Of course, in most cases you'll have a more complicated setup than this. You can find some examples below for how to migrate a few common use cases. Be sure to review the [`clerkMiddleware()` documentation](/docs/sdk/nextjs/clerk-middleware) if your specific use case is not mentioned. If you are using the `@clerk/nextjs/app-beta` import anywhere, it should use `@clerk/nextjs` instead. The `app-beta` import has been removed as our App Router support is stable. - Make this change carefully as some behavior may have changed between our beta and stable releases. You can refer to [our documentation](/docs/quickstarts/nextjs) and/or [approuter example](https://github.com/clerk/clerk-nextjs-app-quickstart) for up-to-date usage. + Make this change carefully as some behavior may have changed between our beta and stable releases. You can refer to [our documentation](/docs/sdk/nextjs/quickstart) and/or [approuter example](https://github.com/clerk/clerk-nextjs-app-quickstart) for up-to-date usage. The `@clerk/nextjs` import will work with both App Router and Pages Router. @@ -1111,7 +1111,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithSession` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `WithSession` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js export const WithSession = ({ children }) => { @@ -1124,7 +1124,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithClerk` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `WithClerk` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js export const WithClerk = ({ children }) => { @@ -1137,7 +1137,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithUser` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `WithUser` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js export const WithUser = ({ children }) => { @@ -1150,7 +1150,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withClerk` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `withClerk` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js function withClerk(Component, displayName) { @@ -1171,7 +1171,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withSession` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `withSession` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js function withSession(Component, displayName) { @@ -1192,7 +1192,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withUser` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `withUser` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js function withUser(Component, displayName) { diff --git a/docs/upgrade-guides/core-2/react.mdx b/docs/upgrade-guides/core-2/react.mdx index 7ae6d2ed9d..e360df5cea 100644 --- a/docs/upgrade-guides/core-2/react.mdx +++ b/docs/upgrade-guides/core-2/react.mdx @@ -607,7 +607,7 @@ As part of this major version, a number of previously deprecated props, argument - Any place where `useOrganizations` is used should be switched to [`useOrganizationList`](/docs/references/react/use-organization-list) or [`useOrganization`](/docs/references/react/use-organization) instead. The return signature has also changed, so take note of this when making the upgrade. + Any place where `useOrganizations` is used should be switched to [`useOrganizationList`](/docs/sdk/react/use-organization-list) or [`useOrganization`](/docs/sdk/react/use-organization) instead. The return signature has also changed, so take note of this when making the upgrade. ```js {{ prettier: false }} // before: useOrganizations return values @@ -640,7 +640,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithSession` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `WithSession` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js export const WithSession = ({ children }) => { @@ -653,7 +653,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithClerk` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `WithClerk` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js export const WithClerk = ({ children }) => { @@ -666,7 +666,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithUser` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `WithUser` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js export const WithUser = ({ children }) => { @@ -679,7 +679,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withClerk` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `withClerk` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js function withClerk(Component, displayName) { @@ -700,7 +700,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withSession` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `withSession` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js function withSession(Component, displayName) { @@ -721,7 +721,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withUser` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: + The `withUser` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: ```js function withUser(Component, displayName) { diff --git a/docs/upgrade-guides/nextjs/v6.mdx b/docs/upgrade-guides/nextjs/v6.mdx index 5ce8ade59f..498bb9af95 100644 --- a/docs/upgrade-guides/nextjs/v6.mdx +++ b/docs/upgrade-guides/nextjs/v6.mdx @@ -110,7 +110,7 @@ export default function RootLayout({ children }) { } ``` -Note that this isn't recommended, and in most cases you should use `auth()` to access auth data at request time instead. For more information, see the guide on [Next.js rendering modes and Clerk](/docs/references/nextjs/rendering-modes). +Note that this isn't recommended, and in most cases you should use `auth()` to access auth data at request time instead. For more information, see the guide on [Next.js rendering modes and Clerk](/docs/sdk/nextjs/rendering-modes). ## Removed deprecated APIs diff --git a/docs/users/metadata.mdx b/docs/users/metadata.mdx index 211bce1488..63f02e4573 100644 --- a/docs/users/metadata.mdx +++ b/docs/users/metadata.mdx @@ -279,7 +279,7 @@ Public metadata is accessible by both the frontend and the backend, but can only There are multiple ways to retrieve public metadata. -On the frontend, it's available on the [`User`](/docs/references/javascript/user/user) object which can be accessed using the [`useUser()`](/docs/references/react/use-user) hook. +On the frontend, it's available on the [`User`](/docs/references/javascript/user/user) object which can be accessed using the [`useUser()`](/docs/sdk/react/use-user) hook. On the backend, it's available on the [Backend `User`](/docs/references/backend/types/backend-user) object which can be accessed using the JavaScript Backend SDK's [`getUser()`](/docs/references/backend/user/get-user) method. It can also be attached to a session token, and the `sessionClaims` of the session token can be retrieved on the [`Auth`](/docs/references/backend/types/auth-object) object. If you need to retrieve public metadata frequently in the backend, the best option is to attach it to the session token and retrieve it from the session token. See the [guide on customizing your session token](/docs/backend-requests/making/custom-session-token). @@ -510,6 +510,6 @@ The following examples demonstrate how to update `unsafeMetadata` using [the Bac There are multiple ways to retrieve unsafe metadata. -On the frontend, it is available on the [`User`](/docs/references/javascript/user/user) object, which you can access by using the [`useUser()`](/docs/references/react/use-user) hook. +On the frontend, it is available on the [`User`](/docs/references/javascript/user/user) object, which you can access by using the [`useUser()`](/docs/sdk/react/use-user) hook. On the backend, it's available on the [Backend `User`](/docs/references/backend/types/backend-user) object which can be accessed using the JavaScript Backend SDK's [`getUser()`](/docs/references/backend/user/get-user) method. It can also be attached to a session token, and the `sessionClaims` of the session token can be retrieved on the [`Auth`](/docs/references/backend/types/auth-object) object. If you need to retrieve unsafe metadata frequently in the backend, the best option is to attach it to the session token and retrieve it from the session token. See the [guide on customizing your session token](/docs/backend-requests/making/custom-session-token). diff --git a/docs/users/overview.mdx b/docs/users/overview.mdx index c1302f5653..4b84ac4940 100644 --- a/docs/users/overview.mdx +++ b/docs/users/overview.mdx @@ -21,7 +21,7 @@ For more information on the `User` object, such as helper methods for retrieving Clerk provides the prebuilt components [``](/docs/components/user/user-button) and [``](/docs/components/user/user-profile) in order to help your users manage their profile data. -If you are using React, the [React SDK](/docs/references/react/use-user) provides hooks to help manage user authentication and profile data. +If you are using React, the [React SDK](/docs/sdk/react/use-user) provides hooks to help manage user authentication and profile data. If the prebuilt components don't meet your specific needs or if you require more control over the logic, you can use React hooks and JavaScript methods to [rebuild existing Clerk flows](/docs/custom-flows/overview). diff --git a/docs/users/user-impersonation.mdx b/docs/users/user-impersonation.mdx index c41c9e76ea..fafbcb4405 100644 --- a/docs/users/user-impersonation.mdx +++ b/docs/users/user-impersonation.mdx @@ -79,7 +79,7 @@ To detect impersonated sessions in the frontend, the `actor` object contains the - You can use the [`useAuth()`](/docs/references/react/use-auth) hook to get access to the authentication context, which includes the `actor` object. + You can use the [`useAuth()`](/docs/sdk/react/use-auth) hook to get access to the authentication context, which includes the `actor` object. ```jsx import { useAuth } from '@clerk/nextjs/server' @@ -127,7 +127,7 @@ To detect impersonated sessions in the frontend, the `actor` object contains the - The Next.js [`auth()`](/docs/references/nextjs/auth) helper provides the `actor` object in the authentication context. + The Next.js [`auth()`](/docs/sdk/nextjs/auth) helper provides the `actor` object in the authentication context. ```jsx import { auth } from '@clerk/nextjs/server' diff --git a/docs/users/web3.mdx b/docs/users/web3.mdx index a823fee5ae..60055819f4 100644 --- a/docs/users/web3.mdx +++ b/docs/users/web3.mdx @@ -7,13 +7,13 @@ Learn how to use Clerk to quickly and easily add secure authentication and user ## Before you start -You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/) and configure the application to use **Sign in with Metamask**, **Sign in with Coinbase Wallet** or **Sign in with OKX Wallet**. For more information on how to set up a Clerk application, see the [setup guide](/docs/quickstarts/setup-clerk). To enable Metamask, Coinbase Wallet, or OKX Wallet authentication, see the [dedicated guide](/docs/authentication/configuration/sign-up-sign-in-options#web3-authentication). +You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/) and configure the application to use **Sign in with Metamask**, **Sign in with Coinbase Wallet** or **Sign in with OKX Wallet**. For more information on how to set up a Clerk application, see the [setup guide](/docs/getting-started). To enable Metamask, Coinbase Wallet, or OKX Wallet authentication, see the [dedicated guide](/docs/authentication/configuration/sign-up-sign-in-options#web3-authentication). Ensure that you've installed the [Metamask](https://metamask.io/download/), [Coinbase Wallet](https://www.coinbase.com/wallet/downloads), or [OKX Wallet](https://www.okx.com/help/section/faq-web3-wallet) plugins for a seamless sign-in experience. ## Creating a new Next.js app -Once you have a Clerk application set up in the dashboard, it's time to create a Next.js application. Clerk provides a detailed guide on how to [create a new Next.js app with Clerk](/docs/quickstarts/nextjs). +Once you have a Clerk application set up in the dashboard, it's time to create a Next.js application. Clerk provides a detailed guide on how to [create a new Next.js app with Clerk](/docs/sdk/nextjs/quickstart). ## Accessing the Web3 address from the frontend @@ -21,7 +21,7 @@ At this point, your Next.js application should be integrated with Clerk and conf After signing in with your Web3 provider, you'll be presented with the Next.js default start screen. Let's modify the start screen to display a user's primary Web3 address on the page. -In this example, the [`User`](/docs/references/javascript/user/user) object for the current user can be accessed through the [`useUser()`](/docs/references/react/use-user) hook. The user's primary Web3 address can then be retrieved from the `User` object. +In this example, the [`User`](/docs/references/javascript/user/user) object for the current user can be accessed through the [`useUser()`](/docs/sdk/react/use-user) hook. The user's primary Web3 address can then be retrieved from the `User` object. ```jsx {{ filename: 'pages/index.js' }} import { SignIn, SignOutButton, UserButton, useUser } from '@clerk/nextjs' @@ -114,6 +114,6 @@ Now that you have Web3 authentication in a new Next.js application, and you know --- - - [Next.js SDK Reference](/docs/references/nextjs/overview) + - [Next.js SDK Reference](/docs/sdk/nextjs/methods) - Learn more about additional Next.js methods. diff --git a/docs/webhooks/sync-data.mdx b/docs/webhooks/sync-data.mdx index a7024f6bf3..4b5c059c2f 100644 --- a/docs/webhooks/sync-data.mdx +++ b/docs/webhooks/sync-data.mdx @@ -74,7 +74,7 @@ These steps apply to any Clerk event. To make the setup process easier, it's rec ## Set the webhook route as public in your Middleware - Incoming webhook events don't contain auth information. They come from an external source and aren't signed in or out, so the route must be public to allow access. If you're using `clerkMiddleware()`, ensure that the `/api/webhooks(.*)` route is set as public. For information on configuring routes, see the [`clerkMiddleware()` guide](/docs/references/nextjs/clerk-middleware). + Incoming webhook events don't contain auth information. They come from an external source and aren't signed in or out, so the route must be public to allow access. If you're using `clerkMiddleware()`, ensure that the `/api/webhooks(.*)` route is set as public. For information on configuring routes, see the [`clerkMiddleware()` guide](/docs/sdk/nextjs/clerk-middleware). ## Install `svix` From 5503d6975d742c46be783858b8ad5052ced21992 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Fri, 10 Jan 2025 03:44:30 +0800 Subject: [PATCH 20/82] fix up broken links due to mov script missing links with hashes in them --- docs/advanced-usage/satellite-domains.mdx | 2 +- .../enterprise-connections/overview.mdx | 2 +- docs/components/clerk-provider.mdx | 2 +- docs/deployments/clerk-environment-variables.mdx | 2 +- docs/guides/architecture-scenarios.mdx | 2 +- docs/guides/authjs-migration.mdx | 6 +++--- docs/guides/custom-redirects.mdx | 2 +- docs/guides/waitlist.mdx | 2 +- docs/integrations/databases/supabase.mdx | 2 +- docs/organizations/org-slugs-in-urls.mdx | 2 +- docs/organizations/verify-user-permissions.mdx | 14 +++++++------- docs/references/backend/types/auth-object.mdx | 6 +++--- docs/sdk/astro/clerk-middleware.mdx | 4 ++-- docs/sdk/astro/endpoints.mdx | 2 +- docs/sdk/astro/methods.mdx | 4 ++-- .../astro/migrating-from-astro-community-sdk.mdx | 2 +- docs/sdk/astro/react.mdx | 4 ++-- docs/sdk/astro/read-session-data.mdx | 2 +- docs/sdk/chrome-extension/quickstart.mdx | 2 +- docs/sdk/chrome-extension/sync-host.mdx | 2 +- docs/sdk/expo/quickstart.mdx | 2 +- docs/sdk/express/methods.mdx | 6 +++--- docs/sdk/express/quickstart.mdx | 8 ++++---- docs/sdk/fastify/quickstart.mdx | 2 +- docs/sdk/nextjs/auth.mdx | 2 +- docs/sdk/nextjs/clerk-middleware.mdx | 6 +++--- docs/sdk/nextjs/custom-signup-signin-pages.mdx | 8 ++++---- docs/sdk/nextjs/quickstart.mdx | 4 ++-- docs/sdk/nextjs/read-session-data.mdx | 2 +- docs/sdk/nextjs/route-handlers.mdx | 4 ++-- docs/sdk/nuxt/clerk-middleware.mdx | 4 ++-- docs/sdk/nuxt/methods.mdx | 2 +- docs/sdk/nuxt/protect-pages.mdx | 2 +- docs/sdk/nuxt/quickstart.mdx | 2 +- docs/sdk/nuxt/read-session-data.mdx | 4 ++-- docs/sdk/react-router/read-session-data.mdx | 2 +- docs/sdk/remix/read-session-data.mdx | 2 +- docs/sdk/remix/spa-mode.mdx | 2 +- docs/sdk/tanstack-start/read-session-data.mdx | 2 +- docs/troubleshooting/script-loading.mdx | 2 +- docs/upgrade-guides/core-2/nextjs.mdx | 2 +- docs/upgrade-guides/core-2/react.mdx | 2 +- docs/upgrade-guides/node-to-express.mdx | 2 +- docs/upgrade-guides/upgrading-from-v2-to-v3.mdx | 2 +- docs/users/web3.mdx | 2 +- 45 files changed, 72 insertions(+), 72 deletions(-) diff --git a/docs/advanced-usage/satellite-domains.mdx b/docs/advanced-usage/satellite-domains.mdx index 98c179e90d..96e74af2ad 100644 --- a/docs/advanced-usage/satellite-domains.mdx +++ b/docs/advanced-usage/satellite-domains.mdx @@ -162,7 +162,7 @@ To access authentication state from a satellite domain, users will be transparen - In a Next.js application, you must set the properties in the [``](/docs/components/clerk-provider) component _and_ in your [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware). + In a Next.js application, you must set the properties in the [``](/docs/components/clerk-provider) component _and_ in your [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware#clerk-middleware). - In the Next project associated with your primary domain, only the `signInUrl` prop needs to be configured as shown in the following example: diff --git a/docs/authentication/enterprise-connections/overview.mdx b/docs/authentication/enterprise-connections/overview.mdx index db77f71d6a..c793435935 100644 --- a/docs/authentication/enterprise-connections/overview.mdx +++ b/docs/authentication/enterprise-connections/overview.mdx @@ -43,7 +43,7 @@ Clerk prevents users linked to deprovisioned accounts in the OpenID provider fro Within 10 minutes of a user being removed from the OpenID provider (e.g. [suspendeded](https://support.google.com/a/answer/33312?hl=en) or [deleted](https://support.google.com/a/answer/33314?hl=en) via Google Workspace, or [deleted](https://learn.microsoft.com/en-us/entra/fundamentals/how-to-create-delete-users#delete-a-user) via Microsoft Entra), Clerk will recognize that the user has been deprovisioned and will revoke that user's existing sessions. -It is ultimately the app's responsibility to handle this unauthenticated state and display something appropriate to the user. For example, Next.js apps using [`auth.protect()`](/docs/references/nextjs/auth#auth-protect) will automatically redirect the user to the sign-in page. +It is ultimately the app's responsibility to handle this unauthenticated state and display something appropriate to the user. For example, Next.js apps using [`auth.protect()`](/docs/sdk/nextjs/auth#auth-protect) will automatically redirect the user to the sign-in page. ### SAML vs. EASIE diff --git a/docs/components/clerk-provider.mdx b/docs/components/clerk-provider.mdx index 55fff0af9b..b0df834700 100644 --- a/docs/components/clerk-provider.mdx +++ b/docs/components/clerk-provider.mdx @@ -68,7 +68,7 @@ The recommended approach is to wrap your entire app with `` at th {/* TODO: Make dedicated docs pages for these meta-frameworks */} > [!NOTE] -> Other meta-frameworks, like [Remix](/docs/quickstarts/remix#configure-clerk-app), have wrappers around `` to make their integrations tighter. +> Other meta-frameworks, like [Remix](/docs/sdk/remix/quickstart#configure-clerk-app), have wrappers around `` to make their integrations tighter. ## Properties diff --git a/docs/deployments/clerk-environment-variables.mdx b/docs/deployments/clerk-environment-variables.mdx index 99cac33ded..f9b33df171 100644 --- a/docs/deployments/clerk-environment-variables.mdx +++ b/docs/deployments/clerk-environment-variables.mdx @@ -91,7 +91,7 @@ The following environment variables enable you to configure API and SDK behavior | `NEXT_PUBLIC_CLERK_API_VERSION` | Sets the version of the Clerk API to use. Defaults to `"v1"` | | `NEXT_PUBLIC_CLERK_FAPI` | Sets the URL to your Clerk app's Frontend API. | | `NEXT_PUBLIC_CLERK_PROXY_URL` | Sets the URL for your proxy. | - | `CLERK_ENCRYPTION_KEY` | Sets the encryption key to securely propagate `clerkMiddleware` dynamic keys during request time. A 128-bit, pseudorandom value should be used. See [Dynamic keys](/docs/references/nextjs/clerk-middleware#dynamic-keys) to learn more. | + | `CLERK_ENCRYPTION_KEY` | Sets the encryption key to securely propagate `clerkMiddleware` dynamic keys during request time. A 128-bit, pseudorandom value should be used. See [Dynamic keys](/docs/sdk/nextjs/clerk-middleware#dynamic-keys) to learn more. | | `CLERK_JWT_KEY` | Sets the JWT verification key that Clerk will use to provide networkless JWT session token verification. Refer to [Manual JWT verification](/docs/backend-requests/handling/manual-jwt). | diff --git a/docs/guides/architecture-scenarios.mdx b/docs/guides/architecture-scenarios.mdx index 95297f902b..1b6bb5b9e1 100644 --- a/docs/guides/architecture-scenarios.mdx +++ b/docs/guides/architecture-scenarios.mdx @@ -56,7 +56,7 @@ Clerk offers a number of building blocks to help integrate organizations into yo - The [`` component](/docs/components/organization/organization-switcher) provides a way for your users to select which organization is active. The [`useOrganizationList()` hook](/docs/organizations/custom-organization-switcher) can be used for more control. - The [`useOrganization()` hook](/docs/sdk/react/use-organization) can be used to fetch the current, active organization. -- The [`` component](/docs/components/protect) enables you to limit who can view certain pages based on their role. Additionally, Clerk exposes a number of helper functions, such as [`auth()`](/docs/sdk/nextjs/auth), and hooks, such as [`useAuth()`](/docs/references/react/use-auth#how-to-use-the-use-auth-hook), to check the user's authorization throughout your app and API endpoints. +- The [`` component](/docs/components/protect) enables you to limit who can view certain pages based on their role. Additionally, Clerk exposes a number of helper functions, such as [`auth()`](/docs/sdk/nextjs/auth), and hooks, such as [`useAuth()`](/docs/sdk/react/use-auth#how-to-use-the-use-auth-hook), to check the user's authorization throughout your app and API endpoints. The organization's ID should be stored in your database alongside each resource so that it can be used to filter and query the resources that should be rendered or returned according to the active organization. diff --git a/docs/guides/authjs-migration.mdx b/docs/guides/authjs-migration.mdx index e3e809fcd2..c73c7d5af9 100644 --- a/docs/guides/authjs-migration.mdx +++ b/docs/guides/authjs-migration.mdx @@ -38,7 +38,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. ## Install `@clerk/nextjs` - Clerk's Next.js SDK gives you access to prebuilt [components](/docs/components/overview), [hooks](/docs/references/nextjs/overview#client-side-helpers), and [helpers](/docs/sdk/nextjs/methods) for Next.js Server Components, Route Handlers and Middleware. Run the following command to install it: + Clerk's Next.js SDK gives you access to prebuilt [components](/docs/components/overview), [hooks](/docs/sdk/nextjs/methods#client-side-helpers), and [helpers](/docs/sdk/nextjs/methods) for Next.js Server Components, Route Handlers and Middleware. Run the following command to install it: ```bash {{ filename: 'terminal' }} @@ -176,7 +176,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. - You can replace Auth.js's `setServerSession()` with Clerk's [`auth()`](/docs/references/nextjs/auth#auth) helper in order to read your user data. + You can replace Auth.js's `setServerSession()` with Clerk's [`auth()`](/docs/sdk/nextjs/auth#auth) helper in order to read your user data. ```tsx {{ filename: 'app/page.tsx' }} import { auth, currentUser } from '@clerk/nextjs/server' @@ -191,7 +191,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. - You can replace Auth.js's `setServerSession()` with Clerk's [`getAuth()`](/docs/references/nextjs/get-auth#get-auth) helper in order to read your user data. + You can replace Auth.js's `setServerSession()` with Clerk's [`getAuth()`](/docs/sdk/nextjs/get-auth#get-auth) helper in order to read your user data. ```tsx {{ filename: 'pages/index.tsx' }} export async function getServerSideProps(context) { diff --git a/docs/guides/custom-redirects.mdx b/docs/guides/custom-redirects.mdx index f5a3b9f311..e6e69205a9 100644 --- a/docs/guides/custom-redirects.mdx +++ b/docs/guides/custom-redirects.mdx @@ -56,7 +56,7 @@ If you would like to override the `redirect_url` value and supply a custom redir ## Middleware -If you are using Next.js and want a more programmatically generated redirect option, you can use the [`auth.protect()`](/docs/references/nextjs/auth#protect) method in your [Clerk middleware](/docs/sdk/nextjs/clerk-middleware). +If you are using Next.js and want a more programmatically generated redirect option, you can use the [`auth.protect()`](/docs/sdk/nextjs/auth#protect) method in your [Clerk middleware](/docs/sdk/nextjs/clerk-middleware). ```tsx {{ filename: 'middleware.ts' }} import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server' diff --git a/docs/guides/waitlist.mdx b/docs/guides/waitlist.mdx index cc4e4a4222..95cb30bfec 100644 --- a/docs/guides/waitlist.mdx +++ b/docs/guides/waitlist.mdx @@ -108,7 +108,7 @@ In [**Waitlist** mode](/docs/authentication/configuration/restrictions#waitlist) ### Add `clerkMiddleware()` to your app - [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: 1. Create a `middleware.ts` file. diff --git a/docs/integrations/databases/supabase.mdx b/docs/integrations/databases/supabase.mdx index 2eaa97ea5a..0e22020ac4 100644 --- a/docs/integrations/databases/supabase.mdx +++ b/docs/integrations/databases/supabase.mdx @@ -326,7 +326,7 @@ For interacting with the Supabase dashboard, you can either use the **Supabase i The following example uses the [Next.js SDK](/docs/sdk/nextjs/methods) to demonstrate how to integrate Supabase with Clerk in a **server-side rendered** application. - The `createClerkSupabaseClientSsr()` function is stored in a separate file so that it can be re-used in multiple places, such as within `page.tsx` or a Server Action file. This function uses the [`auth().getToken()`](/docs/references/nextjs/auth#use-auth-for-data-fetching) method to get the Clerk token and inject it into the request headers sent to Supabase. + The `createClerkSupabaseClientSsr()` function is stored in a separate file so that it can be re-used in multiple places, such as within `page.tsx` or a Server Action file. This function uses the [`auth().getToken()`](/docs/sdk/nextjs/auth#use-auth-for-data-fetching) method to get the Clerk token and inject it into the request headers sent to Supabase. ```ts {{ filename: 'src/app/ssr/client.ts' }} import { auth } from '@clerk/nextjs/server' diff --git a/docs/organizations/org-slugs-in-urls.mdx b/docs/organizations/org-slugs-in-urls.mdx index 1283b3dc21..4ecf2ee932 100644 --- a/docs/organizations/org-slugs-in-urls.mdx +++ b/docs/organizations/org-slugs-in-urls.mdx @@ -136,7 +136,7 @@ This guide shows you how to add organization slugs to your app's URLs, configure > [!TIP] > If your app doesn't use `clerkMiddleware()`, or you prefer to manually set the active organization, use the [`setActive()`](/docs/references/javascript/clerk/session-methods) method to control the active organization on the client-side. See [this guide](/docs/guides/force-organizations#set-an-active-organization-based-on-the-url) to learn how to manually activate a specific organization based on the URL. - With [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware), you can use the [`organizationSyncOptions`](/docs/references/nextjs/clerk-middleware#organization-sync-options) property to declare URL patterns that determine whether a specific organization or user's personal account should be activated. + With [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware), you can use the [`organizationSyncOptions`](/docs/sdk/nextjs/clerk-middleware#organization-sync-options) property to declare URL patterns that determine whether a specific organization or user's personal account should be activated. If the middleware detects one of these patterns in the URL and finds that a different organization is active in the session, it'll attempt to set the specified organization as the active one. diff --git a/docs/organizations/verify-user-permissions.mdx b/docs/organizations/verify-user-permissions.mdx index 60a34a6c81..f8a5060aaa 100644 --- a/docs/organizations/verify-user-permissions.mdx +++ b/docs/organizations/verify-user-permissions.mdx @@ -12,7 +12,7 @@ Clerk enables two broad approaches to role and permissions-based authorization: 1. If you would like to immediately prevent unauthorized users from accessing content, you can: - Use the [``](/docs/components/protect) component to prevent content from rendering if the active user is unauthorized. - - Call [`auth.protect()`](/docs/references/nextjs/auth#protect) to throw a `404` error if the active user is unauthorized. + - Call [`auth.protect()`](/docs/sdk/nextjs/auth#protect) to throw a `404` error if the active user is unauthorized. 1. If you would like more control over the response when a user is unauthorized, you can: - Call the [`has()`](/docs/references/backend/types/auth-object#has) helper, which returns `false` if the active user lacks the role or permissions you're checking for. You can _choose_ how your app responds instead of immediately preventing content from rendering or throwing an error. @@ -113,9 +113,9 @@ The following examples work for both SSR and CSR. > [!WARNING] - > [`auth.protect()`](/docs/references/nextjs/auth#protect) is only available for App Router, and only works on the server-side. + > [`auth.protect()`](/docs/sdk/nextjs/auth#protect) is only available for App Router, and only works on the server-side. - The following example uses [`auth.protect()`](/docs/references/nextjs/auth#protect) to protect a RSC from unauthenticated and unauthorized access. + The following example uses [`auth.protect()`](/docs/sdk/nextjs/auth#protect) to protect a RSC from unauthenticated and unauthorized access. - If the user is not authenticated, `auth.protect()` will redirect the user to the sign-in route. - If the user is authenticated but is not authorized (as in, does not have the `org:team_settings:read` permission), `auth.protect()` will throw a `404` error. @@ -206,9 +206,9 @@ The following examples work for both SSR and CSR. > [!WARNING] - > [`auth.protect()`](/docs/references/nextjs/auth#protect) is only available for App Router, and only works on the server-side. + > [`auth.protect()`](/docs/sdk/nextjs/auth#protect) is only available for App Router, and only works on the server-side. - The following example uses [`auth.protect()`](/docs/references/nextjs/auth#protect) to protect a Next.js Route Handler from unauthenticated and unauthorized access. + The following example uses [`auth.protect()`](/docs/sdk/nextjs/auth#protect) to protect a Next.js Route Handler from unauthenticated and unauthorized access. - If the user is not authenticated nor authorized (as in, does not have the `org:team_settings:manage` permission), `auth.protect()` will throw a `404` error. - If the user is both authenticated and authorized, `auth.protect()` will return the user's `userId`. @@ -339,9 +339,9 @@ You can pass a `role` the same way you can pass a `permission` in all the exampl > [!WARNING] - > [`auth.protect()`](/docs/references/nextjs/auth#protect) is only available for App Router, and only works on the server-side. + > [`auth.protect()`](/docs/sdk/nextjs/auth#protect) is only available for App Router, and only works on the server-side. - The following example uses [`auth.protect()`](/docs/references/nextjs/auth#protect) to protect a RSC from unauthenticated and unauthorized access. + The following example uses [`auth.protect()`](/docs/sdk/nextjs/auth#protect) to protect a RSC from unauthenticated and unauthorized access. - If the user is not authenticated, `auth.protect()` will redirect the user to the sign-in route. - If the user is authenticated but is not authorized (as in, does not have the `org:admin` or `org:billing_manager` role), `auth.protect()` will throw a `404` error. diff --git a/docs/references/backend/types/auth-object.mdx b/docs/references/backend/types/auth-object.mdx index fda40753de..22f153a930 100644 --- a/docs/references/backend/types/auth-object.mdx +++ b/docs/references/backend/types/auth-object.mdx @@ -13,10 +13,10 @@ The `Auth` object is available on the `request` object in server contexts. Some | - | - | | Next.js App Router | [`auth()`](/docs/sdk/nextjs/auth) | | Next.js Pages Router | [`getAuth()`](/docs/sdk/nextjs/get-auth) | -| Astro | [`locals.auth()`](/docs/references/astro/locals#locals-auth) | +| Astro | [`locals.auth()`](/docs/sdk/astro/locals#locals-auth) | | Express | [`req.auth`](/docs/sdk/express/methods) | | React Router | [`getAuth()`](/docs/sdk/react-router/get-auth) | -| Remix | [`getAuth()`](/docs/references/remix/read-session-data#get-auth) | +| Remix | [`getAuth()`](/docs/sdk/remix/read-session-data#get-auth) | | Tanstack Start | [`getAuth()`](/docs/sdk/tanstack-start/get-auth) | | Other | `request.auth` | @@ -253,7 +253,7 @@ type ServerGetTokenOptions = { The `Auth` object is not available in the frontend. To use the `getToken()` method in the frontend: -- For React-based applications, you can use the `useAuth()` hook. See the [reference documentation](/docs/references/react/use-auth#how-to-use-the-use-auth-hook) for example usage. +- For React-based applications, you can use the `useAuth()` hook. See the [reference documentation](/docs/sdk/react/use-auth#how-to-use-the-use-auth-hook) for example usage. - For JavaScript applications, see the [reference documentation](/docs/references/javascript/session#get-token) for example usage. #### Use `getToken()` in the backend diff --git a/docs/sdk/astro/clerk-middleware.mdx b/docs/sdk/astro/clerk-middleware.mdx index e5d17f2e5b..25d37f0989 100644 --- a/docs/sdk/astro/clerk-middleware.mdx +++ b/docs/sdk/astro/clerk-middleware.mdx @@ -36,7 +36,7 @@ You can protect routes by checking either or both of the following: ### Protect routes based on user authentication status -To protect routes based on user authentication status, use [`auth().userId`](/docs/references/nextjs/auth#retrieving-user-id){{ target: '_blank' }} to check if the `userId` is present. If it is not, the user is not authenticated, and you can redirect them to the sign-in page. +To protect routes based on user authentication status, use [`auth().userId`](/docs/sdk/nextjs/auth#retrieving-user-id){{ target: '_blank' }} to check if the `userId` is present. If it is not, the user is not authenticated, and you can redirect them to the sign-in page. ```tsx {{ filename: 'src/middleware.ts' }} import { clerkMiddleware, createRouteMatcher } from '@clerk/astro/server' @@ -97,4 +97,4 @@ export const onRequest = clerkMiddleware((auth, context) => { ## `clerkMiddleware()` options -The `clerkMiddleware()` function accepts an optional object. See the full list of options available [here](/docs/references/nextjs/clerk-middleware#clerk-middleware-options.){{ target: '_blank' }} +The `clerkMiddleware()` function accepts an optional object. See the full list of options available [here](/docs/sdk/nextjs/clerk-middleware#clerk-middleware-options.){{ target: '_blank' }} diff --git a/docs/sdk/astro/endpoints.mdx b/docs/sdk/astro/endpoints.mdx index 7aae507428..24c7b37749 100644 --- a/docs/sdk/astro/endpoints.mdx +++ b/docs/sdk/astro/endpoints.mdx @@ -48,7 +48,7 @@ export async function GET({ locals }) { ## Retrieve the current user -In some cases, you might need the current user in your endpoint. Use the asynchronous [`currentUser()` local](/docs/references/astro/locals#accessing-the-current-user) to retrieve the current [`Backend User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object, as shown in the following example: +In some cases, you might need the current user in your endpoint. Use the asynchronous [`currentUser()` local](/docs/sdk/astro/locals#accessing-the-current-user) to retrieve the current [`Backend User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object, as shown in the following example: ```ts {{ filename: 'src/pages/api/route.ts' }} export async function GET({ locals }) { diff --git a/docs/sdk/astro/methods.mdx b/docs/sdk/astro/methods.mdx index 3bbfbb9f5d..a0e160f2ef 100644 --- a/docs/sdk/astro/methods.mdx +++ b/docs/sdk/astro/methods.mdx @@ -31,8 +31,8 @@ The following references show how to integrate Clerk features into your Astro ap The Astro SDK provides access to Clerk's authentication data through Astro's [`locals`](https://docs.astro.build/en/guides/middleware/#storing-data-in-contextlocals) object. The following references show how to access authentication data in server-side code: -- [Auth](/docs/references/astro/locals#auth) -- [CurrentUser](/docs/references/astro/locals#currentuser) +- [Auth](/docs/sdk/astro/locals#auth) +- [CurrentUser](/docs/sdk/astro/locals#currentuser) #### `Auth` object diff --git a/docs/sdk/astro/migrating-from-astro-community-sdk.mdx b/docs/sdk/astro/migrating-from-astro-community-sdk.mdx index b7c022e476..e4de487c71 100644 --- a/docs/sdk/astro/migrating-from-astro-community-sdk.mdx +++ b/docs/sdk/astro/migrating-from-astro-community-sdk.mdx @@ -86,7 +86,7 @@ import { SignInButton } from '@clerk/astro/components' ### Stores -Submodule `/stores` was replaced with `/client`. The following changes are required to import the [stores](/docs/references/astro/overview#client-side-helpers): +Submodule `/stores` was replaced with `/client`. The following changes are required to import the [stores](/docs/sdk/astro/methods#client-side-helpers): ```js {{ del: [1, 4, 5], ins: [2, 6, 7] }} import { $clerk } from 'astro-clerk-auth/stores' diff --git a/docs/sdk/astro/react.mdx b/docs/sdk/astro/react.mdx index 985d73eea0..5abe2e782b 100644 --- a/docs/sdk/astro/react.mdx +++ b/docs/sdk/astro/react.mdx @@ -105,7 +105,7 @@ If you have not set up your Astro application to work with Clerk, see the [quick ## Use stores in your React components - Clerk Astro provides a set of useful [stores](/docs/references/astro/overview#client-side-helpers) that give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk){{ target: '_blank' }} object, and helper methods for signing in and signing up. + Clerk Astro provides a set of useful [stores](/docs/sdk/astro/methods#client-side-helpers) that give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk){{ target: '_blank' }} object, and helper methods for signing in and signing up. The following example demonstrates how to use a Clerk Astro store. @@ -127,6 +127,6 @@ If you have not set up your Astro application to work with Clerk, see the [quick --- - - [Client-side helpers](/docs/references/astro/overview#client-side-helpers) + - [Client-side helpers](/docs/sdk/astro/methods#client-side-helpers) - Learn more about Astro client-side helpers and how to use them. diff --git a/docs/sdk/astro/read-session-data.mdx b/docs/sdk/astro/read-session-data.mdx index 25c06fd19c..7ba56e9181 100644 --- a/docs/sdk/astro/read-session-data.mdx +++ b/docs/sdk/astro/read-session-data.mdx @@ -37,7 +37,7 @@ The following example uses the [`auth()`](/docs/sdk/nextjs/auth){{ target: '_bla ## Client-side -Clerk Astro provides a set of useful [stores](/docs/references/astro/overview#client-side-helpers) that give you access to many important objects, such as the `Clerk`, `User`, and `Session` object. +Clerk Astro provides a set of useful [stores](/docs/sdk/astro/methods#client-side-helpers) that give you access to many important objects, such as the `Clerk`, `User`, and `Session` object. ### `$authStore` diff --git a/docs/sdk/chrome-extension/quickstart.mdx b/docs/sdk/chrome-extension/quickstart.mdx index cc3b95826f..2938c82b34 100644 --- a/docs/sdk/chrome-extension/quickstart.mdx +++ b/docs/sdk/chrome-extension/quickstart.mdx @@ -29,7 +29,7 @@ description: Add authentication and user management to your Chrome Extension wit ## Configure your authentication options - When creating your Clerk application in the Clerk Dashboard, your authentication options will depend on how you configure your Chrome Extension. Chrome Extensions can be used as a popup, a side panel, or in conjunction with a web app. Popups and side panels have limited authentication options. [Learn more about what options are available.](/docs/references/chrome-extension/overview#authenication-options) + When creating your Clerk application in the Clerk Dashboard, your authentication options will depend on how you configure your Chrome Extension. Chrome Extensions can be used as a popup, a side panel, or in conjunction with a web app. Popups and side panels have limited authentication options. [Learn more about what options are available.](/docs/sdk/chrome-extension/methods#authenication-options) This guide will use a popup. diff --git a/docs/sdk/chrome-extension/sync-host.mdx b/docs/sdk/chrome-extension/sync-host.mdx index 159497b388..c41f9ec6c6 100644 --- a/docs/sdk/chrome-extension/sync-host.mdx +++ b/docs/sdk/chrome-extension/sync-host.mdx @@ -93,7 +93,7 @@ Clerk allows you to sync the authentication state from your web app to your Chro ### Hide unsupported authentication methods - When using the Sync Host feature, authentication methods that you want to use in your web app [may not be fully supported in the Chrome Extension environment](/docs/references/chrome-extension/overview#authentication-options). To hide unsupported methods in your Chrome Extension, you can use the [`appearance`](https://clerk.com/docs/customization/overview) prop with your extension's `` and `` components as demonstrated in the following examples. + When using the Sync Host feature, authentication methods that you want to use in your web app [may not be fully supported in the Chrome Extension environment](/docs/sdk/chrome-extension/methods#authentication-options). To hide unsupported methods in your Chrome Extension, you can use the [`appearance`](https://clerk.com/docs/customization/overview) prop with your extension's `` and `` components as demonstrated in the following examples. ", ""]}> ```tsx {{ filename: 'src/popup/pages/sign-up.tsx', mark: [[3, 7]] }} diff --git a/docs/sdk/expo/quickstart.mdx b/docs/sdk/expo/quickstart.mdx index 4c2e9f5190..7c4fb958bd 100644 --- a/docs/sdk/expo/quickstart.mdx +++ b/docs/sdk/expo/quickstart.mdx @@ -208,7 +208,7 @@ description: Add authentication and user management to your Expo app with Clerk. ``` > [!TIP] - > When you sign a user out with [`signOut()`](/docs/references/react/use-auth#use-auth-returns), Clerk will remove the user's session JWT from the token cache. + > When you sign a user out with [`signOut()`](/docs/sdk/react/use-auth#use-auth-returns), Clerk will remove the user's session JWT from the token cache. ## Add sign-up and sign-in pages diff --git a/docs/sdk/express/methods.mdx b/docs/sdk/express/methods.mdx index f5a677e121..361e981aa7 100644 --- a/docs/sdk/express/methods.mdx +++ b/docs/sdk/express/methods.mdx @@ -32,7 +32,7 @@ app.use(clerkMiddleware(options)) #### Options -The `clerkMiddleware()` function accepts [these options](https://clerk.com/docs/references/nextjs/clerk-middleware#clerk-middleware-options) plus the following: +The `clerkMiddleware()` function accepts [these options](https://clerk.com/docs/sdk/nextjs/clerk-middleware#clerk-middleware-options) plus the following: - `clerkClient` @@ -79,11 +79,11 @@ app.get('/protected', requireAuth({ signInUrl: '/sign-in' }), (req, res) => { }) ``` -This middleware accepts the same [options](/docs/references/express/overview#options) as `clerkMiddleware()`. +This middleware accepts the same [options](/docs/sdk/express/methods#options) as `clerkMiddleware()`. ### `getAuth()` -The `getAuth()` helper retrieves authentication state from the request object. See the [Next.js reference documentation](https://clerk.com/docs/references/nextjs/get-auth) for more information on how to use the returned `auth` object. +The `getAuth()` helper retrieves authentication state from the request object. See the [Next.js reference documentation](https://clerk.com/docs/sdk/nextjs/get-auth) for more information on how to use the returned `auth` object. The following example uses `requireAuth()` to protect the route based on _authentication_ status, and then uses `getAuth()` to protect the route based on _authorization_ status. diff --git a/docs/sdk/express/quickstart.mdx b/docs/sdk/express/quickstart.mdx index 81170b0c3f..b43e5a4d02 100644 --- a/docs/sdk/express/quickstart.mdx +++ b/docs/sdk/express/quickstart.mdx @@ -90,7 +90,7 @@ Learn how to integrate Clerk into your Express backend for secure user authentic ## Add `clerkMiddleware()` to your application - The [`clerkMiddleware()`](/docs/references/express/overview#clerk-middleware) function checks the request's cookies and headers for a session JWT and, if found, attaches the [`Auth`](/docs/references/backend/types/auth-object#auth-object){{ target: '_blank' }} object to the `request` object under the `auth` key. + The [`clerkMiddleware()`](/docs/sdk/express/methods#clerk-middleware) function checks the request's cookies and headers for a session JWT and, if found, attaches the [`Auth`](/docs/references/backend/types/auth-object#auth-object){{ target: '_blank' }} object to the `request` object under the `auth` key. ```ts {{ filename: 'index.ts', mark: [3, 7] }} import 'dotenv/config' @@ -108,7 +108,7 @@ Learn how to integrate Clerk into your Express backend for secure user authentic ## Protect your routes using `requireAuth()` - To protect your routes, use the [`requireAuth()`](/docs/references/express/overview#require-auth) middleware. This middleware functions similarly to `clerkMiddleware()`, but also protects your routes by redirecting unauthenticated users to the sign-in page. + To protect your routes, use the [`requireAuth()`](/docs/sdk/express/methods#require-auth) middleware. This middleware functions similarly to `clerkMiddleware()`, but also protects your routes by redirecting unauthenticated users to the sign-in page. In the following example, `requireAuth()` is used to protect the `/protected` route. If the user is not authenticated, they are redirected to the '/sign-in' route. If the user is authenticated, the `req.auth` object is used to get the `userId`, which is passed to [`clerkClient.users.getUser()`](/docs/references/backend/user/get-user){{ target: '_blank' }} to fetch the current user's `User` object. @@ -139,12 +139,12 @@ Learn how to integrate Clerk into your Express backend for secure user authentic ## Next steps - - [Use middleware to protect routes](/docs/references/express/overview#require-auth) + - [Use middleware to protect routes](/docs/sdk/express/methods#require-auth) - Learn how to protect specific routes from unauthenticated users. --- - - [Protect routes based on authorization status](/docs/references/express/overview#get-auth) + - [Protect routes based on authorization status](/docs/sdk/express/methods#get-auth) - Learn how to protect a route based on both authentication and authorization status. --- diff --git a/docs/sdk/fastify/quickstart.mdx b/docs/sdk/fastify/quickstart.mdx index 03d9c8160f..db20d007f7 100644 --- a/docs/sdk/fastify/quickstart.mdx +++ b/docs/sdk/fastify/quickstart.mdx @@ -82,7 +82,7 @@ Learn how to integrate Clerk into your Fastify backend for secure user authentic The `clerkPlugin` is a Fastify plugin provided by Clerk to integrate authentication into your Fastify application. To ensure that Clerk's authentication and user management features are applied across your Fastify application, configure the `clerkPlugin` to handle all routes or limit it to specific ones. - The following example registers the plugin for all routes. To register the plugin for specific routes only, refer to the [**Using Clerk for specific pages only**](/docs/quickstarts/fastify#using-clerk-for-specific-routes-only) section. + The following example registers the plugin for all routes. To register the plugin for specific routes only, refer to the [**Using Clerk for specific pages only**](/docs/sdk/fastify/quickstart#using-clerk-for-specific-routes-only) section. > [!IMPORTANT] > The `dotenv/config` module must be imported before any Clerk modules. This order is important because Clerk instances are created during the import process and rely on environment variables, such as API keys, to be initialized correctly. For more information, refer to the [Fastify docs](https://fastify.dev/docs/latest/Guides/Getting-Started/#loading-order-of-your-plugins). diff --git a/docs/sdk/nextjs/auth.mdx b/docs/sdk/nextjs/auth.mdx index 2955e28486..7e58382923 100644 --- a/docs/sdk/nextjs/auth.mdx +++ b/docs/sdk/nextjs/auth.mdx @@ -82,7 +82,7 @@ The `auth()` helper returns the `redirectToSignIn()` method, which you can use t > [!NOTE] -> `auth()` on the server-side can only access redirect URLs defined via [environment variables](/docs/deployments/clerk-environment-variables#sign-in-and-sign-up-redirects) or [`clerkMiddleware` dynamic keys](/docs/references/nextjs/clerk-middleware#dynamic-keys). +> `auth()` on the server-side can only access redirect URLs defined via [environment variables](/docs/deployments/clerk-environment-variables#sign-in-and-sign-up-redirects) or [`clerkMiddleware` dynamic keys](/docs/sdk/nextjs/clerk-middleware#dynamic-keys). ### Example diff --git a/docs/sdk/nextjs/clerk-middleware.mdx b/docs/sdk/nextjs/clerk-middleware.mdx index 816b8f96a7..7d9ab852d8 100644 --- a/docs/sdk/nextjs/clerk-middleware.mdx +++ b/docs/sdk/nextjs/clerk-middleware.mdx @@ -54,8 +54,8 @@ You can protect routes based on a user's authentication status by checking if th There are two methods that you can use: -- Use [`auth.protect()`](/docs/references/nextjs/auth#protect) if you want to redirect unauthenticated users to the sign-in route automatically. -- Use [`auth().userId`](/docs/references/nextjs/auth#retrieving-user-id) if you want more control over what your app does based on user authentication status. +- Use [`auth.protect()`](/docs/sdk/nextjs/auth#protect) if you want to redirect unauthenticated users to the sign-in route automatically. +- Use [`auth().userId`](/docs/sdk/nextjs/auth#retrieving-user-id) if you want more control over what your app does based on user authentication status. ```tsx {{ filename: 'middleware.ts' }} @@ -109,7 +109,7 @@ You can protect routes based on a user's authorization status by checking if the There are two methods that you can use: -- Use [`auth.protect()`](/docs/references/nextjs/auth#protect) if you want Clerk to return a `404` if the user does not have the role or permission. +- Use [`auth.protect()`](/docs/sdk/nextjs/auth#protect) if you want Clerk to return a `404` if the user does not have the role or permission. - Use [`auth().has()`](/docs/references/backend/types/auth-object#has) if you want more control over what your app does based on the authorization status. diff --git a/docs/sdk/nextjs/custom-signup-signin-pages.mdx b/docs/sdk/nextjs/custom-signup-signin-pages.mdx index 4bf04b985b..a4f8d017ff 100644 --- a/docs/sdk/nextjs/custom-signup-signin-pages.mdx +++ b/docs/sdk/nextjs/custom-signup-signin-pages.mdx @@ -40,13 +40,13 @@ If the prebuilt components don't meet your specific needs or if you require more ## Make the sign-up and sign-in routes public - By default, `clerkMiddleware()` makes all routes public. **This step is specifically for applications that have configured `clerkMiddleware()` to make [all routes protected](/docs/references/nextjs/clerk-middleware#protect-all-routes).** If you have not configured `clerkMiddleware()` to protect all routes, you can skip this step. + By default, `clerkMiddleware()` makes all routes public. **This step is specifically for applications that have configured `clerkMiddleware()` to make [all routes protected](/docs/sdk/nextjs/clerk-middleware#protect-all-routes).** If you have not configured `clerkMiddleware()` to protect all routes, you can skip this step. To make the sign-up and sign-in routes public: - Navigate to your `middleware.ts` file. - - Create a new [route matcher](/docs/references/nextjs/clerk-middleware#create-route-matcher) that matches the sign-up and sign-in routes, or you can add them to an existing route matcher that is making routes public. - - Create a check to see if the user's current route is a public route. If it is not a public route, use [`auth.protect()`](/docs/references/nextjs/auth#protect) to protect the route. + - Create a new [route matcher](/docs/sdk/nextjs/clerk-middleware#create-route-matcher) that matches the sign-up and sign-in routes, or you can add them to an existing route matcher that is making routes public. + - Create a check to see if the user's current route is a public route. If it is not a public route, use [`auth.protect()`](/docs/sdk/nextjs/auth#protect) to protect the route. ```tsx {{ filename: 'middleware.ts' }} import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server' @@ -107,7 +107,7 @@ If the prebuilt components don't meet your specific needs or if you require more --- - - [Client-side helpers](/docs/references/nextjs/overview#client-side-helpers) + - [Client-side helpers](/docs/sdk/nextjs/methods#client-side-helpers) - Learn more about Next.js client-side helpers and how to use them. --- diff --git a/docs/sdk/nextjs/quickstart.mdx b/docs/sdk/nextjs/quickstart.mdx index 13e1b00958..cf6ce13863 100644 --- a/docs/sdk/nextjs/quickstart.mdx +++ b/docs/sdk/nextjs/quickstart.mdx @@ -72,7 +72,7 @@ description: Add authentication and user management to your Next.js app with Cle ## Add `clerkMiddleware()` to your app - [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: 1. Create a `middleware.ts` file. - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. @@ -196,7 +196,7 @@ description: Add authentication and user management to your Next.js app with Cle --- - - [Client-side helpers](/docs/references/nextjs/overview#client-side-helpers) + - [Client-side helpers](/docs/sdk/nextjs/methods#client-side-helpers) - Learn more about Next.js client-side helpers and how to use them. --- diff --git a/docs/sdk/nextjs/read-session-data.mdx b/docs/sdk/nextjs/read-session-data.mdx index fbe61ad2dd..ae9f4439fb 100644 --- a/docs/sdk/nextjs/read-session-data.mdx +++ b/docs/sdk/nextjs/read-session-data.mdx @@ -3,7 +3,7 @@ title: Read session and user data in your Next.js app with Clerk description: Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js application. --- -Clerk provides a set of [hooks and helpers](/docs/references/nextjs/overview#client-side-helpers) that you can use to access the active session and user data in your Next.js application. Here are examples of how to use these helpers in both the client and server-side to get you started. +Clerk provides a set of [hooks and helpers](/docs/sdk/nextjs/methods#client-side-helpers) that you can use to access the active session and user data in your Next.js application. Here are examples of how to use these helpers in both the client and server-side to get you started. ## Server-side diff --git a/docs/sdk/nextjs/route-handlers.mdx b/docs/sdk/nextjs/route-handlers.mdx index e48bd1eb16..3592066e3d 100644 --- a/docs/sdk/nextjs/route-handlers.mdx +++ b/docs/sdk/nextjs/route-handlers.mdx @@ -9,8 +9,8 @@ Clerk provides helpers that allow you to protect your Route Handlers, fetch the If you aren't protecting your Route Handler using [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware), you can protect your Route Handler in two ways: -- Use [`auth.protect()`](/docs/references/nextjs/auth#protect) if you want Clerk to return a `404` error when there is no signed in user. -- Use [`auth().userId`](/docs/references/nextjs/auth#retrieving-user-id) if you want to customize the behavior or error message. +- Use [`auth.protect()`](/docs/sdk/nextjs/auth#protect) if you want Clerk to return a `404` error when there is no signed in user. +- Use [`auth().userId`](/docs/sdk/nextjs/auth#retrieving-user-id) if you want to customize the behavior or error message. ```tsx {{ filename: 'app/api/route.ts' }} diff --git a/docs/sdk/nuxt/clerk-middleware.mdx b/docs/sdk/nuxt/clerk-middleware.mdx index 44c76890ea..e5deb0062d 100644 --- a/docs/sdk/nuxt/clerk-middleware.mdx +++ b/docs/sdk/nuxt/clerk-middleware.mdx @@ -40,7 +40,7 @@ You can protect routes using either or both of the following: ### Authentication-based protection -To protect routes based on user authentication status, you can check if the user is signed in by checking the `userId` on the [`auth`](/docs/references/nuxt/overview#auth-object) object. +To protect routes based on user authentication status, you can check if the user is signed in by checking the `userId` on the [`auth`](/docs/sdk/nuxt/methods#auth-object) object. In the following example, the `clerkMiddleware()` helper checks if the user is signed in and accessing a protected route. If they aren't signed in, an error is thrown using Nuxt's [`createError()`](https://nuxt.com/docs/api/utils/create-error) utility. @@ -62,7 +62,7 @@ export default clerkMiddleware((event) => { ### Authorization-based protection -To protect routes based on user authorization status, you can use the `has()` helper to check if the user has the required [organization roles or custom permissions](/docs/organizations/roles-permissions). It is available on the [`auth`](/docs/references/nuxt/overview#auth-object) object. +To protect routes based on user authorization status, you can use the `has()` helper to check if the user has the required [organization roles or custom permissions](/docs/organizations/roles-permissions). It is available on the [`auth`](/docs/sdk/nuxt/methods#auth-object) object. #### Protecting routes using custom permissions diff --git a/docs/sdk/nuxt/methods.mdx b/docs/sdk/nuxt/methods.mdx index 2964f4ffbe..9bbe364995 100644 --- a/docs/sdk/nuxt/methods.mdx +++ b/docs/sdk/nuxt/methods.mdx @@ -26,4 +26,4 @@ The `clerkMiddleware()` helper integrates Clerk authentication and authorization ## `clerkClient()` -The `clerkClient()` helper returns an instance of the [JavaScript Backend SDK](/docs/references/backend/overview). [Learn more](/docs/references/nuxt/read-session-data#clerk-client). +The `clerkClient()` helper returns an instance of the [JavaScript Backend SDK](/docs/references/backend/overview). [Learn more](/docs/sdk/nuxt/read-session-data#clerk-client). diff --git a/docs/sdk/nuxt/protect-pages.mdx b/docs/sdk/nuxt/protect-pages.mdx index 2fd167e218..ef6ebea2c0 100644 --- a/docs/sdk/nuxt/protect-pages.mdx +++ b/docs/sdk/nuxt/protect-pages.mdx @@ -9,7 +9,7 @@ There are two ways to protect pages in your Nuxt application: - [Use `defineNuxtRouteMiddleware()`](#use-define-nuxt-route-middleware) > [!NOTE] -> To learn how to protect API routes, see the [dedicated guide](/docs/references/nuxt/clerk-middleware#protect-api-routes). +> To learn how to protect API routes, see the [dedicated guide](/docs/sdk/nuxt/clerk-middleware#protect-api-routes). ## Use `useAuth()` diff --git a/docs/sdk/nuxt/quickstart.mdx b/docs/sdk/nuxt/quickstart.mdx index d398083f15..8331901607 100644 --- a/docs/sdk/nuxt/quickstart.mdx +++ b/docs/sdk/nuxt/quickstart.mdx @@ -152,7 +152,7 @@ Learn more about Clerk components, how to customize them, and how to use Clerk's --- - - [Client-side helpers](/docs/references/nuxt/overview#client-side-helpers) + - [Client-side helpers](/docs/sdk/nuxt/methods#client-side-helpers) - Learn more about Nuxt client-side helpers and how to use them. --- diff --git a/docs/sdk/nuxt/read-session-data.mdx b/docs/sdk/nuxt/read-session-data.mdx index c5240fb0ba..13d3a159fc 100644 --- a/docs/sdk/nuxt/read-session-data.mdx +++ b/docs/sdk/nuxt/read-session-data.mdx @@ -3,7 +3,7 @@ title: Read session and user data in your Nuxt app with Clerk description: Learn how to use Clerk's composables to access the active session and user data in your Nuxt application. --- -Clerk provides [composables](/docs/references/nuxt/overview#client-side-helpers) to access the session and user data in your Nuxt application. +Clerk provides [composables](/docs/sdk/nuxt/methods#client-side-helpers) to access the session and user data in your Nuxt application. ## Client-side @@ -35,7 +35,7 @@ const { isLoaded, isSignedIn, user } = useUser() The `clerkClient()` helper returns an instance of the [JavaScript Backend SDK](/docs/references/backend/overview). -In the following example, the [`auth`](/docs/references/nuxt/overview#auth-object) object is used to get the `userId` to check if the user is signed in. The `clerkClient()` helper retrieves the full [`User`](/docs/references/javascript/user/user) object. +In the following example, the [`auth`](/docs/sdk/nuxt/methods#auth-object) object is used to get the `userId` to check if the user is signed in. The `clerkClient()` helper retrieves the full [`User`](/docs/references/javascript/user/user) object. ```ts {{ filename: 'server/api/auth/index.ts' }} import { clerkClient } from '@clerk/nuxt/server' diff --git a/docs/sdk/react-router/read-session-data.mdx b/docs/sdk/react-router/read-session-data.mdx index 844605502a..ae536d3140 100644 --- a/docs/sdk/react-router/read-session-data.mdx +++ b/docs/sdk/react-router/read-session-data.mdx @@ -3,7 +3,7 @@ title: Read session and user data in your React Router app with Clerk description: Learn how to use Clerk's hooks and helpers to access the active session and user data in your React Router application. --- -Clerk provides a set of [hooks and helpers](/docs/references/react-router/overview#client-side-helpers) that you can use to access the active session and user data in your React Router application. Here are examples of how to use these helpers in both the client and server-side to get you started. +Clerk provides a set of [hooks and helpers](/docs/sdk/react-router/methods#client-side-helpers) that you can use to access the active session and user data in your React Router application. Here are examples of how to use these helpers in both the client and server-side to get you started. ## Server-side diff --git a/docs/sdk/remix/read-session-data.mdx b/docs/sdk/remix/read-session-data.mdx index 43fd0533fd..71b749f2f5 100644 --- a/docs/sdk/remix/read-session-data.mdx +++ b/docs/sdk/remix/read-session-data.mdx @@ -3,7 +3,7 @@ title: Read session and user data in your Remix app with Clerk description: Learn how to use Clerk's hooks and helpers to access the active session and user data in your Remix application. --- -Clerk provides a set of [hooks and helpers](/docs/references/nextjs/overview#client-side-helpers) that you can use to access the active session and user data in your Remix application. Here are examples of how to use these helpers in both the client and server-side to get you started. +Clerk provides a set of [hooks and helpers](/docs/sdk/nextjs/methods#client-side-helpers) that you can use to access the active session and user data in your Remix application. Here are examples of how to use these helpers in both the client and server-side to get you started. ## Server-side diff --git a/docs/sdk/remix/spa-mode.mdx b/docs/sdk/remix/spa-mode.mdx index 4757b6f462..2980dbcd43 100644 --- a/docs/sdk/remix/spa-mode.mdx +++ b/docs/sdk/remix/spa-mode.mdx @@ -168,6 +168,6 @@ Now that you have an application integrated with Clerk, you will want to read th --- - - [Client Side Helpers](/docs/references/remix/read-session-data#client-side) + - [Client Side Helpers](/docs/sdk/remix/read-session-data#client-side) - Learn more about our client-side helpers and how to use them. diff --git a/docs/sdk/tanstack-start/read-session-data.mdx b/docs/sdk/tanstack-start/read-session-data.mdx index 655e154cff..4d4e9cef74 100644 --- a/docs/sdk/tanstack-start/read-session-data.mdx +++ b/docs/sdk/tanstack-start/read-session-data.mdx @@ -3,7 +3,7 @@ title: Read session and user data in your TanStack Start app with Clerk description: Learn how to use Clerk's hooks and helpers to access the active session and user data in your TanStack Start application. --- -Clerk provides a set of [hooks and helpers](/docs/references/tanstack-start/overview#client-side-helpers) that you can use to access the active session and user data in your TanStack Start application. Here are examples of how to use these helpers in both the client and server-side to get you started. +Clerk provides a set of [hooks and helpers](/docs/sdk/tanstack-start/methods#client-side-helpers) that you can use to access the active session and user data in your TanStack Start application. Here are examples of how to use these helpers in both the client and server-side to get you started. ## Server-side diff --git a/docs/troubleshooting/script-loading.mdx b/docs/troubleshooting/script-loading.mdx index db9235fc0d..abec389c4b 100644 --- a/docs/troubleshooting/script-loading.mdx +++ b/docs/troubleshooting/script-loading.mdx @@ -12,7 +12,7 @@ It sometimes might happen that Clerk doesn't successfully load and initialize du Check your internet access and that e.g. no Ad-Blocker is blocking Clerk's scripts. -If Clerk stops working after you've added another script (e.g. through a React component), you can try delaying the loading of that other script. For example, to only mount `@monaco-editor/react` after Clerk loaded you can use the [`useClerk()` hook](/docs/references/react/use-clerk#use-clerk): +If Clerk stops working after you've added another script (e.g. through a React component), you can try delaying the loading of that other script. For example, to only mount `@monaco-editor/react` after Clerk loaded you can use the [`useClerk()` hook](/docs/sdk/react/use-clerk#use-clerk): ```jsx import { Editor } from '@monaco-editor/react' diff --git a/docs/upgrade-guides/core-2/nextjs.mdx b/docs/upgrade-guides/core-2/nextjs.mdx index ce8ea8d6b9..2a15688dbf 100644 --- a/docs/upgrade-guides/core-2/nextjs.mdx +++ b/docs/upgrade-guides/core-2/nextjs.mdx @@ -130,7 +130,7 @@ A couple things to note here: - The `createRouteMatcher` helper makes it easy to define route groups that you can leverage inside the Middleware function and check in whichever order you'd like. Note that it can take an array of routes as well. - With `clerkMiddleware`, you're defining the routes you want **to be protected**, rather than the routes you don't want to be protected. -- The `auth.protect()` helper is used extensively here. See its [reference doc](/docs/references/nextjs/auth#protect) for more info. +- The `auth.protect()` helper is used extensively here. See its [reference doc](/docs/sdk/nextjs/auth#protect) for more info. See the [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) docs for more information and detailed usage examples. diff --git a/docs/upgrade-guides/core-2/react.mdx b/docs/upgrade-guides/core-2/react.mdx index e360df5cea..64a5ec12d1 100644 --- a/docs/upgrade-guides/core-2/react.mdx +++ b/docs/upgrade-guides/core-2/react.mdx @@ -585,7 +585,7 @@ As part of this major version, a number of previously deprecated props, argument - The `membershipList` param from the `useOrganization` hook has been removed. Instead, [use the `memberships` param](/docs/references/react/use-organization#parameters). Examples of each can be seen here: + The `membershipList` param from the `useOrganization` hook has been removed. Instead, [use the `memberships` param](/docs/sdk/react/use-organization#parameters). Examples of each can be seen here: ```js // before diff --git a/docs/upgrade-guides/node-to-express.mdx b/docs/upgrade-guides/node-to-express.mdx index c43356eeac..02a3443102 100644 --- a/docs/upgrade-guides/node-to-express.mdx +++ b/docs/upgrade-guides/node-to-express.mdx @@ -131,7 +131,7 @@ app.listen(port, () => { ## Migrate from `ClerkExpressRequireAuth` -To enforce strict authentication, replace your existing Node SDK strict middleware, [`ClerkExpressRequireAuth`](/docs/backend-requests/handling/nodejs), with the new Express SDK middleware, [`requireAuth()`](/docs/references/express/overview#require-auth). +To enforce strict authentication, replace your existing Node SDK strict middleware, [`ClerkExpressRequireAuth`](/docs/backend-requests/handling/nodejs), with the new Express SDK middleware, [`requireAuth()`](/docs/sdk/express/methods#require-auth). `requireAuth()` is a middleware function that you can use to protect routes in your Express.js application. This function checks if the user is authenticated, and redirects to the configured sign in URl if they are not. diff --git a/docs/upgrade-guides/upgrading-from-v2-to-v3.mdx b/docs/upgrade-guides/upgrading-from-v2-to-v3.mdx index 55164931df..044d9bed66 100644 --- a/docs/upgrade-guides/upgrading-from-v2-to-v3.mdx +++ b/docs/upgrade-guides/upgrading-from-v2-to-v3.mdx @@ -202,4 +202,4 @@ app.get('/', (req, res) => { }) ``` -[use-auth]: /docs/references/react/use-auth +[use-auth]: /docs/sdk/react/use-auth diff --git a/docs/users/web3.mdx b/docs/users/web3.mdx index 60055819f4..4b056f682b 100644 --- a/docs/users/web3.mdx +++ b/docs/users/web3.mdx @@ -109,7 +109,7 @@ Now that you have Web3 authentication in a new Next.js application, and you know --- - - [Client Side Helpers](/docs/references/nextjs/overview#client-side-helpers) + - [Client Side Helpers](/docs/sdk/nextjs/methods#client-side-helpers) - Learn more about our client-side helpers and how to use them. --- From 0cc90febb84b4f9fcc995a590810a4f30ead6871 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Sat, 11 Jan 2025 01:40:04 +0800 Subject: [PATCH 21/82] Revert "fix up broken links due to mov script missing links with hashes in them" This reverts commit 5503d6975d742c46be783858b8ad5052ced21992. --- docs/advanced-usage/satellite-domains.mdx | 2 +- .../enterprise-connections/overview.mdx | 2 +- docs/components/clerk-provider.mdx | 2 +- docs/deployments/clerk-environment-variables.mdx | 2 +- docs/guides/architecture-scenarios.mdx | 2 +- docs/guides/authjs-migration.mdx | 6 +++--- docs/guides/custom-redirects.mdx | 2 +- docs/guides/waitlist.mdx | 2 +- docs/integrations/databases/supabase.mdx | 2 +- docs/organizations/org-slugs-in-urls.mdx | 2 +- docs/organizations/verify-user-permissions.mdx | 14 +++++++------- docs/references/backend/types/auth-object.mdx | 6 +++--- docs/sdk/astro/clerk-middleware.mdx | 4 ++-- docs/sdk/astro/endpoints.mdx | 2 +- docs/sdk/astro/methods.mdx | 4 ++-- .../astro/migrating-from-astro-community-sdk.mdx | 2 +- docs/sdk/astro/react.mdx | 4 ++-- docs/sdk/astro/read-session-data.mdx | 2 +- docs/sdk/chrome-extension/quickstart.mdx | 2 +- docs/sdk/chrome-extension/sync-host.mdx | 2 +- docs/sdk/expo/quickstart.mdx | 2 +- docs/sdk/express/methods.mdx | 6 +++--- docs/sdk/express/quickstart.mdx | 8 ++++---- docs/sdk/fastify/quickstart.mdx | 2 +- docs/sdk/nextjs/auth.mdx | 2 +- docs/sdk/nextjs/clerk-middleware.mdx | 6 +++--- docs/sdk/nextjs/custom-signup-signin-pages.mdx | 8 ++++---- docs/sdk/nextjs/quickstart.mdx | 4 ++-- docs/sdk/nextjs/read-session-data.mdx | 2 +- docs/sdk/nextjs/route-handlers.mdx | 4 ++-- docs/sdk/nuxt/clerk-middleware.mdx | 4 ++-- docs/sdk/nuxt/methods.mdx | 2 +- docs/sdk/nuxt/protect-pages.mdx | 2 +- docs/sdk/nuxt/quickstart.mdx | 2 +- docs/sdk/nuxt/read-session-data.mdx | 4 ++-- docs/sdk/react-router/read-session-data.mdx | 2 +- docs/sdk/remix/read-session-data.mdx | 2 +- docs/sdk/remix/spa-mode.mdx | 2 +- docs/sdk/tanstack-start/read-session-data.mdx | 2 +- docs/troubleshooting/script-loading.mdx | 2 +- docs/upgrade-guides/core-2/nextjs.mdx | 2 +- docs/upgrade-guides/core-2/react.mdx | 2 +- docs/upgrade-guides/node-to-express.mdx | 2 +- docs/upgrade-guides/upgrading-from-v2-to-v3.mdx | 2 +- docs/users/web3.mdx | 2 +- 45 files changed, 72 insertions(+), 72 deletions(-) diff --git a/docs/advanced-usage/satellite-domains.mdx b/docs/advanced-usage/satellite-domains.mdx index 96e74af2ad..98c179e90d 100644 --- a/docs/advanced-usage/satellite-domains.mdx +++ b/docs/advanced-usage/satellite-domains.mdx @@ -162,7 +162,7 @@ To access authentication state from a satellite domain, users will be transparen - In a Next.js application, you must set the properties in the [``](/docs/components/clerk-provider) component _and_ in your [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware#clerk-middleware). + In a Next.js application, you must set the properties in the [``](/docs/components/clerk-provider) component _and_ in your [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware). - In the Next project associated with your primary domain, only the `signInUrl` prop needs to be configured as shown in the following example: diff --git a/docs/authentication/enterprise-connections/overview.mdx b/docs/authentication/enterprise-connections/overview.mdx index c793435935..db77f71d6a 100644 --- a/docs/authentication/enterprise-connections/overview.mdx +++ b/docs/authentication/enterprise-connections/overview.mdx @@ -43,7 +43,7 @@ Clerk prevents users linked to deprovisioned accounts in the OpenID provider fro Within 10 minutes of a user being removed from the OpenID provider (e.g. [suspendeded](https://support.google.com/a/answer/33312?hl=en) or [deleted](https://support.google.com/a/answer/33314?hl=en) via Google Workspace, or [deleted](https://learn.microsoft.com/en-us/entra/fundamentals/how-to-create-delete-users#delete-a-user) via Microsoft Entra), Clerk will recognize that the user has been deprovisioned and will revoke that user's existing sessions. -It is ultimately the app's responsibility to handle this unauthenticated state and display something appropriate to the user. For example, Next.js apps using [`auth.protect()`](/docs/sdk/nextjs/auth#auth-protect) will automatically redirect the user to the sign-in page. +It is ultimately the app's responsibility to handle this unauthenticated state and display something appropriate to the user. For example, Next.js apps using [`auth.protect()`](/docs/references/nextjs/auth#auth-protect) will automatically redirect the user to the sign-in page. ### SAML vs. EASIE diff --git a/docs/components/clerk-provider.mdx b/docs/components/clerk-provider.mdx index b0df834700..55fff0af9b 100644 --- a/docs/components/clerk-provider.mdx +++ b/docs/components/clerk-provider.mdx @@ -68,7 +68,7 @@ The recommended approach is to wrap your entire app with `` at th {/* TODO: Make dedicated docs pages for these meta-frameworks */} > [!NOTE] -> Other meta-frameworks, like [Remix](/docs/sdk/remix/quickstart#configure-clerk-app), have wrappers around `` to make their integrations tighter. +> Other meta-frameworks, like [Remix](/docs/quickstarts/remix#configure-clerk-app), have wrappers around `` to make their integrations tighter. ## Properties diff --git a/docs/deployments/clerk-environment-variables.mdx b/docs/deployments/clerk-environment-variables.mdx index f9b33df171..99cac33ded 100644 --- a/docs/deployments/clerk-environment-variables.mdx +++ b/docs/deployments/clerk-environment-variables.mdx @@ -91,7 +91,7 @@ The following environment variables enable you to configure API and SDK behavior | `NEXT_PUBLIC_CLERK_API_VERSION` | Sets the version of the Clerk API to use. Defaults to `"v1"` | | `NEXT_PUBLIC_CLERK_FAPI` | Sets the URL to your Clerk app's Frontend API. | | `NEXT_PUBLIC_CLERK_PROXY_URL` | Sets the URL for your proxy. | - | `CLERK_ENCRYPTION_KEY` | Sets the encryption key to securely propagate `clerkMiddleware` dynamic keys during request time. A 128-bit, pseudorandom value should be used. See [Dynamic keys](/docs/sdk/nextjs/clerk-middleware#dynamic-keys) to learn more. | + | `CLERK_ENCRYPTION_KEY` | Sets the encryption key to securely propagate `clerkMiddleware` dynamic keys during request time. A 128-bit, pseudorandom value should be used. See [Dynamic keys](/docs/references/nextjs/clerk-middleware#dynamic-keys) to learn more. | | `CLERK_JWT_KEY` | Sets the JWT verification key that Clerk will use to provide networkless JWT session token verification. Refer to [Manual JWT verification](/docs/backend-requests/handling/manual-jwt). | diff --git a/docs/guides/architecture-scenarios.mdx b/docs/guides/architecture-scenarios.mdx index 1b6bb5b9e1..95297f902b 100644 --- a/docs/guides/architecture-scenarios.mdx +++ b/docs/guides/architecture-scenarios.mdx @@ -56,7 +56,7 @@ Clerk offers a number of building blocks to help integrate organizations into yo - The [`` component](/docs/components/organization/organization-switcher) provides a way for your users to select which organization is active. The [`useOrganizationList()` hook](/docs/organizations/custom-organization-switcher) can be used for more control. - The [`useOrganization()` hook](/docs/sdk/react/use-organization) can be used to fetch the current, active organization. -- The [`` component](/docs/components/protect) enables you to limit who can view certain pages based on their role. Additionally, Clerk exposes a number of helper functions, such as [`auth()`](/docs/sdk/nextjs/auth), and hooks, such as [`useAuth()`](/docs/sdk/react/use-auth#how-to-use-the-use-auth-hook), to check the user's authorization throughout your app and API endpoints. +- The [`` component](/docs/components/protect) enables you to limit who can view certain pages based on their role. Additionally, Clerk exposes a number of helper functions, such as [`auth()`](/docs/sdk/nextjs/auth), and hooks, such as [`useAuth()`](/docs/references/react/use-auth#how-to-use-the-use-auth-hook), to check the user's authorization throughout your app and API endpoints. The organization's ID should be stored in your database alongside each resource so that it can be used to filter and query the resources that should be rendered or returned according to the active organization. diff --git a/docs/guides/authjs-migration.mdx b/docs/guides/authjs-migration.mdx index c73c7d5af9..e3e809fcd2 100644 --- a/docs/guides/authjs-migration.mdx +++ b/docs/guides/authjs-migration.mdx @@ -38,7 +38,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. ## Install `@clerk/nextjs` - Clerk's Next.js SDK gives you access to prebuilt [components](/docs/components/overview), [hooks](/docs/sdk/nextjs/methods#client-side-helpers), and [helpers](/docs/sdk/nextjs/methods) for Next.js Server Components, Route Handlers and Middleware. Run the following command to install it: + Clerk's Next.js SDK gives you access to prebuilt [components](/docs/components/overview), [hooks](/docs/references/nextjs/overview#client-side-helpers), and [helpers](/docs/sdk/nextjs/methods) for Next.js Server Components, Route Handlers and Middleware. Run the following command to install it: ```bash {{ filename: 'terminal' }} @@ -176,7 +176,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. - You can replace Auth.js's `setServerSession()` with Clerk's [`auth()`](/docs/sdk/nextjs/auth#auth) helper in order to read your user data. + You can replace Auth.js's `setServerSession()` with Clerk's [`auth()`](/docs/references/nextjs/auth#auth) helper in order to read your user data. ```tsx {{ filename: 'app/page.tsx' }} import { auth, currentUser } from '@clerk/nextjs/server' @@ -191,7 +191,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. - You can replace Auth.js's `setServerSession()` with Clerk's [`getAuth()`](/docs/sdk/nextjs/get-auth#get-auth) helper in order to read your user data. + You can replace Auth.js's `setServerSession()` with Clerk's [`getAuth()`](/docs/references/nextjs/get-auth#get-auth) helper in order to read your user data. ```tsx {{ filename: 'pages/index.tsx' }} export async function getServerSideProps(context) { diff --git a/docs/guides/custom-redirects.mdx b/docs/guides/custom-redirects.mdx index e6e69205a9..f5a3b9f311 100644 --- a/docs/guides/custom-redirects.mdx +++ b/docs/guides/custom-redirects.mdx @@ -56,7 +56,7 @@ If you would like to override the `redirect_url` value and supply a custom redir ## Middleware -If you are using Next.js and want a more programmatically generated redirect option, you can use the [`auth.protect()`](/docs/sdk/nextjs/auth#protect) method in your [Clerk middleware](/docs/sdk/nextjs/clerk-middleware). +If you are using Next.js and want a more programmatically generated redirect option, you can use the [`auth.protect()`](/docs/references/nextjs/auth#protect) method in your [Clerk middleware](/docs/sdk/nextjs/clerk-middleware). ```tsx {{ filename: 'middleware.ts' }} import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server' diff --git a/docs/guides/waitlist.mdx b/docs/guides/waitlist.mdx index 95cb30bfec..cc4e4a4222 100644 --- a/docs/guides/waitlist.mdx +++ b/docs/guides/waitlist.mdx @@ -108,7 +108,7 @@ In [**Waitlist** mode](/docs/authentication/configuration/restrictions#waitlist) ### Add `clerkMiddleware()` to your app - [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: 1. Create a `middleware.ts` file. diff --git a/docs/integrations/databases/supabase.mdx b/docs/integrations/databases/supabase.mdx index 0e22020ac4..2eaa97ea5a 100644 --- a/docs/integrations/databases/supabase.mdx +++ b/docs/integrations/databases/supabase.mdx @@ -326,7 +326,7 @@ For interacting with the Supabase dashboard, you can either use the **Supabase i The following example uses the [Next.js SDK](/docs/sdk/nextjs/methods) to demonstrate how to integrate Supabase with Clerk in a **server-side rendered** application. - The `createClerkSupabaseClientSsr()` function is stored in a separate file so that it can be re-used in multiple places, such as within `page.tsx` or a Server Action file. This function uses the [`auth().getToken()`](/docs/sdk/nextjs/auth#use-auth-for-data-fetching) method to get the Clerk token and inject it into the request headers sent to Supabase. + The `createClerkSupabaseClientSsr()` function is stored in a separate file so that it can be re-used in multiple places, such as within `page.tsx` or a Server Action file. This function uses the [`auth().getToken()`](/docs/references/nextjs/auth#use-auth-for-data-fetching) method to get the Clerk token and inject it into the request headers sent to Supabase. ```ts {{ filename: 'src/app/ssr/client.ts' }} import { auth } from '@clerk/nextjs/server' diff --git a/docs/organizations/org-slugs-in-urls.mdx b/docs/organizations/org-slugs-in-urls.mdx index 4ecf2ee932..1283b3dc21 100644 --- a/docs/organizations/org-slugs-in-urls.mdx +++ b/docs/organizations/org-slugs-in-urls.mdx @@ -136,7 +136,7 @@ This guide shows you how to add organization slugs to your app's URLs, configure > [!TIP] > If your app doesn't use `clerkMiddleware()`, or you prefer to manually set the active organization, use the [`setActive()`](/docs/references/javascript/clerk/session-methods) method to control the active organization on the client-side. See [this guide](/docs/guides/force-organizations#set-an-active-organization-based-on-the-url) to learn how to manually activate a specific organization based on the URL. - With [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware), you can use the [`organizationSyncOptions`](/docs/sdk/nextjs/clerk-middleware#organization-sync-options) property to declare URL patterns that determine whether a specific organization or user's personal account should be activated. + With [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware), you can use the [`organizationSyncOptions`](/docs/references/nextjs/clerk-middleware#organization-sync-options) property to declare URL patterns that determine whether a specific organization or user's personal account should be activated. If the middleware detects one of these patterns in the URL and finds that a different organization is active in the session, it'll attempt to set the specified organization as the active one. diff --git a/docs/organizations/verify-user-permissions.mdx b/docs/organizations/verify-user-permissions.mdx index f8a5060aaa..60a34a6c81 100644 --- a/docs/organizations/verify-user-permissions.mdx +++ b/docs/organizations/verify-user-permissions.mdx @@ -12,7 +12,7 @@ Clerk enables two broad approaches to role and permissions-based authorization: 1. If you would like to immediately prevent unauthorized users from accessing content, you can: - Use the [``](/docs/components/protect) component to prevent content from rendering if the active user is unauthorized. - - Call [`auth.protect()`](/docs/sdk/nextjs/auth#protect) to throw a `404` error if the active user is unauthorized. + - Call [`auth.protect()`](/docs/references/nextjs/auth#protect) to throw a `404` error if the active user is unauthorized. 1. If you would like more control over the response when a user is unauthorized, you can: - Call the [`has()`](/docs/references/backend/types/auth-object#has) helper, which returns `false` if the active user lacks the role or permissions you're checking for. You can _choose_ how your app responds instead of immediately preventing content from rendering or throwing an error. @@ -113,9 +113,9 @@ The following examples work for both SSR and CSR. > [!WARNING] - > [`auth.protect()`](/docs/sdk/nextjs/auth#protect) is only available for App Router, and only works on the server-side. + > [`auth.protect()`](/docs/references/nextjs/auth#protect) is only available for App Router, and only works on the server-side. - The following example uses [`auth.protect()`](/docs/sdk/nextjs/auth#protect) to protect a RSC from unauthenticated and unauthorized access. + The following example uses [`auth.protect()`](/docs/references/nextjs/auth#protect) to protect a RSC from unauthenticated and unauthorized access. - If the user is not authenticated, `auth.protect()` will redirect the user to the sign-in route. - If the user is authenticated but is not authorized (as in, does not have the `org:team_settings:read` permission), `auth.protect()` will throw a `404` error. @@ -206,9 +206,9 @@ The following examples work for both SSR and CSR. > [!WARNING] - > [`auth.protect()`](/docs/sdk/nextjs/auth#protect) is only available for App Router, and only works on the server-side. + > [`auth.protect()`](/docs/references/nextjs/auth#protect) is only available for App Router, and only works on the server-side. - The following example uses [`auth.protect()`](/docs/sdk/nextjs/auth#protect) to protect a Next.js Route Handler from unauthenticated and unauthorized access. + The following example uses [`auth.protect()`](/docs/references/nextjs/auth#protect) to protect a Next.js Route Handler from unauthenticated and unauthorized access. - If the user is not authenticated nor authorized (as in, does not have the `org:team_settings:manage` permission), `auth.protect()` will throw a `404` error. - If the user is both authenticated and authorized, `auth.protect()` will return the user's `userId`. @@ -339,9 +339,9 @@ You can pass a `role` the same way you can pass a `permission` in all the exampl > [!WARNING] - > [`auth.protect()`](/docs/sdk/nextjs/auth#protect) is only available for App Router, and only works on the server-side. + > [`auth.protect()`](/docs/references/nextjs/auth#protect) is only available for App Router, and only works on the server-side. - The following example uses [`auth.protect()`](/docs/sdk/nextjs/auth#protect) to protect a RSC from unauthenticated and unauthorized access. + The following example uses [`auth.protect()`](/docs/references/nextjs/auth#protect) to protect a RSC from unauthenticated and unauthorized access. - If the user is not authenticated, `auth.protect()` will redirect the user to the sign-in route. - If the user is authenticated but is not authorized (as in, does not have the `org:admin` or `org:billing_manager` role), `auth.protect()` will throw a `404` error. diff --git a/docs/references/backend/types/auth-object.mdx b/docs/references/backend/types/auth-object.mdx index 22f153a930..fda40753de 100644 --- a/docs/references/backend/types/auth-object.mdx +++ b/docs/references/backend/types/auth-object.mdx @@ -13,10 +13,10 @@ The `Auth` object is available on the `request` object in server contexts. Some | - | - | | Next.js App Router | [`auth()`](/docs/sdk/nextjs/auth) | | Next.js Pages Router | [`getAuth()`](/docs/sdk/nextjs/get-auth) | -| Astro | [`locals.auth()`](/docs/sdk/astro/locals#locals-auth) | +| Astro | [`locals.auth()`](/docs/references/astro/locals#locals-auth) | | Express | [`req.auth`](/docs/sdk/express/methods) | | React Router | [`getAuth()`](/docs/sdk/react-router/get-auth) | -| Remix | [`getAuth()`](/docs/sdk/remix/read-session-data#get-auth) | +| Remix | [`getAuth()`](/docs/references/remix/read-session-data#get-auth) | | Tanstack Start | [`getAuth()`](/docs/sdk/tanstack-start/get-auth) | | Other | `request.auth` | @@ -253,7 +253,7 @@ type ServerGetTokenOptions = { The `Auth` object is not available in the frontend. To use the `getToken()` method in the frontend: -- For React-based applications, you can use the `useAuth()` hook. See the [reference documentation](/docs/sdk/react/use-auth#how-to-use-the-use-auth-hook) for example usage. +- For React-based applications, you can use the `useAuth()` hook. See the [reference documentation](/docs/references/react/use-auth#how-to-use-the-use-auth-hook) for example usage. - For JavaScript applications, see the [reference documentation](/docs/references/javascript/session#get-token) for example usage. #### Use `getToken()` in the backend diff --git a/docs/sdk/astro/clerk-middleware.mdx b/docs/sdk/astro/clerk-middleware.mdx index 25d37f0989..e5d17f2e5b 100644 --- a/docs/sdk/astro/clerk-middleware.mdx +++ b/docs/sdk/astro/clerk-middleware.mdx @@ -36,7 +36,7 @@ You can protect routes by checking either or both of the following: ### Protect routes based on user authentication status -To protect routes based on user authentication status, use [`auth().userId`](/docs/sdk/nextjs/auth#retrieving-user-id){{ target: '_blank' }} to check if the `userId` is present. If it is not, the user is not authenticated, and you can redirect them to the sign-in page. +To protect routes based on user authentication status, use [`auth().userId`](/docs/references/nextjs/auth#retrieving-user-id){{ target: '_blank' }} to check if the `userId` is present. If it is not, the user is not authenticated, and you can redirect them to the sign-in page. ```tsx {{ filename: 'src/middleware.ts' }} import { clerkMiddleware, createRouteMatcher } from '@clerk/astro/server' @@ -97,4 +97,4 @@ export const onRequest = clerkMiddleware((auth, context) => { ## `clerkMiddleware()` options -The `clerkMiddleware()` function accepts an optional object. See the full list of options available [here](/docs/sdk/nextjs/clerk-middleware#clerk-middleware-options.){{ target: '_blank' }} +The `clerkMiddleware()` function accepts an optional object. See the full list of options available [here](/docs/references/nextjs/clerk-middleware#clerk-middleware-options.){{ target: '_blank' }} diff --git a/docs/sdk/astro/endpoints.mdx b/docs/sdk/astro/endpoints.mdx index 24c7b37749..7aae507428 100644 --- a/docs/sdk/astro/endpoints.mdx +++ b/docs/sdk/astro/endpoints.mdx @@ -48,7 +48,7 @@ export async function GET({ locals }) { ## Retrieve the current user -In some cases, you might need the current user in your endpoint. Use the asynchronous [`currentUser()` local](/docs/sdk/astro/locals#accessing-the-current-user) to retrieve the current [`Backend User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object, as shown in the following example: +In some cases, you might need the current user in your endpoint. Use the asynchronous [`currentUser()` local](/docs/references/astro/locals#accessing-the-current-user) to retrieve the current [`Backend User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object, as shown in the following example: ```ts {{ filename: 'src/pages/api/route.ts' }} export async function GET({ locals }) { diff --git a/docs/sdk/astro/methods.mdx b/docs/sdk/astro/methods.mdx index a0e160f2ef..3bbfbb9f5d 100644 --- a/docs/sdk/astro/methods.mdx +++ b/docs/sdk/astro/methods.mdx @@ -31,8 +31,8 @@ The following references show how to integrate Clerk features into your Astro ap The Astro SDK provides access to Clerk's authentication data through Astro's [`locals`](https://docs.astro.build/en/guides/middleware/#storing-data-in-contextlocals) object. The following references show how to access authentication data in server-side code: -- [Auth](/docs/sdk/astro/locals#auth) -- [CurrentUser](/docs/sdk/astro/locals#currentuser) +- [Auth](/docs/references/astro/locals#auth) +- [CurrentUser](/docs/references/astro/locals#currentuser) #### `Auth` object diff --git a/docs/sdk/astro/migrating-from-astro-community-sdk.mdx b/docs/sdk/astro/migrating-from-astro-community-sdk.mdx index e4de487c71..b7c022e476 100644 --- a/docs/sdk/astro/migrating-from-astro-community-sdk.mdx +++ b/docs/sdk/astro/migrating-from-astro-community-sdk.mdx @@ -86,7 +86,7 @@ import { SignInButton } from '@clerk/astro/components' ### Stores -Submodule `/stores` was replaced with `/client`. The following changes are required to import the [stores](/docs/sdk/astro/methods#client-side-helpers): +Submodule `/stores` was replaced with `/client`. The following changes are required to import the [stores](/docs/references/astro/overview#client-side-helpers): ```js {{ del: [1, 4, 5], ins: [2, 6, 7] }} import { $clerk } from 'astro-clerk-auth/stores' diff --git a/docs/sdk/astro/react.mdx b/docs/sdk/astro/react.mdx index 5abe2e782b..985d73eea0 100644 --- a/docs/sdk/astro/react.mdx +++ b/docs/sdk/astro/react.mdx @@ -105,7 +105,7 @@ If you have not set up your Astro application to work with Clerk, see the [quick ## Use stores in your React components - Clerk Astro provides a set of useful [stores](/docs/sdk/astro/methods#client-side-helpers) that give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk){{ target: '_blank' }} object, and helper methods for signing in and signing up. + Clerk Astro provides a set of useful [stores](/docs/references/astro/overview#client-side-helpers) that give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk){{ target: '_blank' }} object, and helper methods for signing in and signing up. The following example demonstrates how to use a Clerk Astro store. @@ -127,6 +127,6 @@ If you have not set up your Astro application to work with Clerk, see the [quick --- - - [Client-side helpers](/docs/sdk/astro/methods#client-side-helpers) + - [Client-side helpers](/docs/references/astro/overview#client-side-helpers) - Learn more about Astro client-side helpers and how to use them. diff --git a/docs/sdk/astro/read-session-data.mdx b/docs/sdk/astro/read-session-data.mdx index 7ba56e9181..25c06fd19c 100644 --- a/docs/sdk/astro/read-session-data.mdx +++ b/docs/sdk/astro/read-session-data.mdx @@ -37,7 +37,7 @@ The following example uses the [`auth()`](/docs/sdk/nextjs/auth){{ target: '_bla ## Client-side -Clerk Astro provides a set of useful [stores](/docs/sdk/astro/methods#client-side-helpers) that give you access to many important objects, such as the `Clerk`, `User`, and `Session` object. +Clerk Astro provides a set of useful [stores](/docs/references/astro/overview#client-side-helpers) that give you access to many important objects, such as the `Clerk`, `User`, and `Session` object. ### `$authStore` diff --git a/docs/sdk/chrome-extension/quickstart.mdx b/docs/sdk/chrome-extension/quickstart.mdx index 2938c82b34..cc3b95826f 100644 --- a/docs/sdk/chrome-extension/quickstart.mdx +++ b/docs/sdk/chrome-extension/quickstart.mdx @@ -29,7 +29,7 @@ description: Add authentication and user management to your Chrome Extension wit ## Configure your authentication options - When creating your Clerk application in the Clerk Dashboard, your authentication options will depend on how you configure your Chrome Extension. Chrome Extensions can be used as a popup, a side panel, or in conjunction with a web app. Popups and side panels have limited authentication options. [Learn more about what options are available.](/docs/sdk/chrome-extension/methods#authenication-options) + When creating your Clerk application in the Clerk Dashboard, your authentication options will depend on how you configure your Chrome Extension. Chrome Extensions can be used as a popup, a side panel, or in conjunction with a web app. Popups and side panels have limited authentication options. [Learn more about what options are available.](/docs/references/chrome-extension/overview#authenication-options) This guide will use a popup. diff --git a/docs/sdk/chrome-extension/sync-host.mdx b/docs/sdk/chrome-extension/sync-host.mdx index c41f9ec6c6..159497b388 100644 --- a/docs/sdk/chrome-extension/sync-host.mdx +++ b/docs/sdk/chrome-extension/sync-host.mdx @@ -93,7 +93,7 @@ Clerk allows you to sync the authentication state from your web app to your Chro ### Hide unsupported authentication methods - When using the Sync Host feature, authentication methods that you want to use in your web app [may not be fully supported in the Chrome Extension environment](/docs/sdk/chrome-extension/methods#authentication-options). To hide unsupported methods in your Chrome Extension, you can use the [`appearance`](https://clerk.com/docs/customization/overview) prop with your extension's `` and `` components as demonstrated in the following examples. + When using the Sync Host feature, authentication methods that you want to use in your web app [may not be fully supported in the Chrome Extension environment](/docs/references/chrome-extension/overview#authentication-options). To hide unsupported methods in your Chrome Extension, you can use the [`appearance`](https://clerk.com/docs/customization/overview) prop with your extension's `` and `` components as demonstrated in the following examples. ", ""]}> ```tsx {{ filename: 'src/popup/pages/sign-up.tsx', mark: [[3, 7]] }} diff --git a/docs/sdk/expo/quickstart.mdx b/docs/sdk/expo/quickstart.mdx index 7c4fb958bd..4c2e9f5190 100644 --- a/docs/sdk/expo/quickstart.mdx +++ b/docs/sdk/expo/quickstart.mdx @@ -208,7 +208,7 @@ description: Add authentication and user management to your Expo app with Clerk. ``` > [!TIP] - > When you sign a user out with [`signOut()`](/docs/sdk/react/use-auth#use-auth-returns), Clerk will remove the user's session JWT from the token cache. + > When you sign a user out with [`signOut()`](/docs/references/react/use-auth#use-auth-returns), Clerk will remove the user's session JWT from the token cache. ## Add sign-up and sign-in pages diff --git a/docs/sdk/express/methods.mdx b/docs/sdk/express/methods.mdx index 361e981aa7..f5a677e121 100644 --- a/docs/sdk/express/methods.mdx +++ b/docs/sdk/express/methods.mdx @@ -32,7 +32,7 @@ app.use(clerkMiddleware(options)) #### Options -The `clerkMiddleware()` function accepts [these options](https://clerk.com/docs/sdk/nextjs/clerk-middleware#clerk-middleware-options) plus the following: +The `clerkMiddleware()` function accepts [these options](https://clerk.com/docs/references/nextjs/clerk-middleware#clerk-middleware-options) plus the following: - `clerkClient` @@ -79,11 +79,11 @@ app.get('/protected', requireAuth({ signInUrl: '/sign-in' }), (req, res) => { }) ``` -This middleware accepts the same [options](/docs/sdk/express/methods#options) as `clerkMiddleware()`. +This middleware accepts the same [options](/docs/references/express/overview#options) as `clerkMiddleware()`. ### `getAuth()` -The `getAuth()` helper retrieves authentication state from the request object. See the [Next.js reference documentation](https://clerk.com/docs/sdk/nextjs/get-auth) for more information on how to use the returned `auth` object. +The `getAuth()` helper retrieves authentication state from the request object. See the [Next.js reference documentation](https://clerk.com/docs/references/nextjs/get-auth) for more information on how to use the returned `auth` object. The following example uses `requireAuth()` to protect the route based on _authentication_ status, and then uses `getAuth()` to protect the route based on _authorization_ status. diff --git a/docs/sdk/express/quickstart.mdx b/docs/sdk/express/quickstart.mdx index b43e5a4d02..81170b0c3f 100644 --- a/docs/sdk/express/quickstart.mdx +++ b/docs/sdk/express/quickstart.mdx @@ -90,7 +90,7 @@ Learn how to integrate Clerk into your Express backend for secure user authentic ## Add `clerkMiddleware()` to your application - The [`clerkMiddleware()`](/docs/sdk/express/methods#clerk-middleware) function checks the request's cookies and headers for a session JWT and, if found, attaches the [`Auth`](/docs/references/backend/types/auth-object#auth-object){{ target: '_blank' }} object to the `request` object under the `auth` key. + The [`clerkMiddleware()`](/docs/references/express/overview#clerk-middleware) function checks the request's cookies and headers for a session JWT and, if found, attaches the [`Auth`](/docs/references/backend/types/auth-object#auth-object){{ target: '_blank' }} object to the `request` object under the `auth` key. ```ts {{ filename: 'index.ts', mark: [3, 7] }} import 'dotenv/config' @@ -108,7 +108,7 @@ Learn how to integrate Clerk into your Express backend for secure user authentic ## Protect your routes using `requireAuth()` - To protect your routes, use the [`requireAuth()`](/docs/sdk/express/methods#require-auth) middleware. This middleware functions similarly to `clerkMiddleware()`, but also protects your routes by redirecting unauthenticated users to the sign-in page. + To protect your routes, use the [`requireAuth()`](/docs/references/express/overview#require-auth) middleware. This middleware functions similarly to `clerkMiddleware()`, but also protects your routes by redirecting unauthenticated users to the sign-in page. In the following example, `requireAuth()` is used to protect the `/protected` route. If the user is not authenticated, they are redirected to the '/sign-in' route. If the user is authenticated, the `req.auth` object is used to get the `userId`, which is passed to [`clerkClient.users.getUser()`](/docs/references/backend/user/get-user){{ target: '_blank' }} to fetch the current user's `User` object. @@ -139,12 +139,12 @@ Learn how to integrate Clerk into your Express backend for secure user authentic ## Next steps - - [Use middleware to protect routes](/docs/sdk/express/methods#require-auth) + - [Use middleware to protect routes](/docs/references/express/overview#require-auth) - Learn how to protect specific routes from unauthenticated users. --- - - [Protect routes based on authorization status](/docs/sdk/express/methods#get-auth) + - [Protect routes based on authorization status](/docs/references/express/overview#get-auth) - Learn how to protect a route based on both authentication and authorization status. --- diff --git a/docs/sdk/fastify/quickstart.mdx b/docs/sdk/fastify/quickstart.mdx index db20d007f7..03d9c8160f 100644 --- a/docs/sdk/fastify/quickstart.mdx +++ b/docs/sdk/fastify/quickstart.mdx @@ -82,7 +82,7 @@ Learn how to integrate Clerk into your Fastify backend for secure user authentic The `clerkPlugin` is a Fastify plugin provided by Clerk to integrate authentication into your Fastify application. To ensure that Clerk's authentication and user management features are applied across your Fastify application, configure the `clerkPlugin` to handle all routes or limit it to specific ones. - The following example registers the plugin for all routes. To register the plugin for specific routes only, refer to the [**Using Clerk for specific pages only**](/docs/sdk/fastify/quickstart#using-clerk-for-specific-routes-only) section. + The following example registers the plugin for all routes. To register the plugin for specific routes only, refer to the [**Using Clerk for specific pages only**](/docs/quickstarts/fastify#using-clerk-for-specific-routes-only) section. > [!IMPORTANT] > The `dotenv/config` module must be imported before any Clerk modules. This order is important because Clerk instances are created during the import process and rely on environment variables, such as API keys, to be initialized correctly. For more information, refer to the [Fastify docs](https://fastify.dev/docs/latest/Guides/Getting-Started/#loading-order-of-your-plugins). diff --git a/docs/sdk/nextjs/auth.mdx b/docs/sdk/nextjs/auth.mdx index 7e58382923..2955e28486 100644 --- a/docs/sdk/nextjs/auth.mdx +++ b/docs/sdk/nextjs/auth.mdx @@ -82,7 +82,7 @@ The `auth()` helper returns the `redirectToSignIn()` method, which you can use t > [!NOTE] -> `auth()` on the server-side can only access redirect URLs defined via [environment variables](/docs/deployments/clerk-environment-variables#sign-in-and-sign-up-redirects) or [`clerkMiddleware` dynamic keys](/docs/sdk/nextjs/clerk-middleware#dynamic-keys). +> `auth()` on the server-side can only access redirect URLs defined via [environment variables](/docs/deployments/clerk-environment-variables#sign-in-and-sign-up-redirects) or [`clerkMiddleware` dynamic keys](/docs/references/nextjs/clerk-middleware#dynamic-keys). ### Example diff --git a/docs/sdk/nextjs/clerk-middleware.mdx b/docs/sdk/nextjs/clerk-middleware.mdx index 7d9ab852d8..816b8f96a7 100644 --- a/docs/sdk/nextjs/clerk-middleware.mdx +++ b/docs/sdk/nextjs/clerk-middleware.mdx @@ -54,8 +54,8 @@ You can protect routes based on a user's authentication status by checking if th There are two methods that you can use: -- Use [`auth.protect()`](/docs/sdk/nextjs/auth#protect) if you want to redirect unauthenticated users to the sign-in route automatically. -- Use [`auth().userId`](/docs/sdk/nextjs/auth#retrieving-user-id) if you want more control over what your app does based on user authentication status. +- Use [`auth.protect()`](/docs/references/nextjs/auth#protect) if you want to redirect unauthenticated users to the sign-in route automatically. +- Use [`auth().userId`](/docs/references/nextjs/auth#retrieving-user-id) if you want more control over what your app does based on user authentication status. ```tsx {{ filename: 'middleware.ts' }} @@ -109,7 +109,7 @@ You can protect routes based on a user's authorization status by checking if the There are two methods that you can use: -- Use [`auth.protect()`](/docs/sdk/nextjs/auth#protect) if you want Clerk to return a `404` if the user does not have the role or permission. +- Use [`auth.protect()`](/docs/references/nextjs/auth#protect) if you want Clerk to return a `404` if the user does not have the role or permission. - Use [`auth().has()`](/docs/references/backend/types/auth-object#has) if you want more control over what your app does based on the authorization status. diff --git a/docs/sdk/nextjs/custom-signup-signin-pages.mdx b/docs/sdk/nextjs/custom-signup-signin-pages.mdx index a4f8d017ff..4bf04b985b 100644 --- a/docs/sdk/nextjs/custom-signup-signin-pages.mdx +++ b/docs/sdk/nextjs/custom-signup-signin-pages.mdx @@ -40,13 +40,13 @@ If the prebuilt components don't meet your specific needs or if you require more ## Make the sign-up and sign-in routes public - By default, `clerkMiddleware()` makes all routes public. **This step is specifically for applications that have configured `clerkMiddleware()` to make [all routes protected](/docs/sdk/nextjs/clerk-middleware#protect-all-routes).** If you have not configured `clerkMiddleware()` to protect all routes, you can skip this step. + By default, `clerkMiddleware()` makes all routes public. **This step is specifically for applications that have configured `clerkMiddleware()` to make [all routes protected](/docs/references/nextjs/clerk-middleware#protect-all-routes).** If you have not configured `clerkMiddleware()` to protect all routes, you can skip this step. To make the sign-up and sign-in routes public: - Navigate to your `middleware.ts` file. - - Create a new [route matcher](/docs/sdk/nextjs/clerk-middleware#create-route-matcher) that matches the sign-up and sign-in routes, or you can add them to an existing route matcher that is making routes public. - - Create a check to see if the user's current route is a public route. If it is not a public route, use [`auth.protect()`](/docs/sdk/nextjs/auth#protect) to protect the route. + - Create a new [route matcher](/docs/references/nextjs/clerk-middleware#create-route-matcher) that matches the sign-up and sign-in routes, or you can add them to an existing route matcher that is making routes public. + - Create a check to see if the user's current route is a public route. If it is not a public route, use [`auth.protect()`](/docs/references/nextjs/auth#protect) to protect the route. ```tsx {{ filename: 'middleware.ts' }} import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server' @@ -107,7 +107,7 @@ If the prebuilt components don't meet your specific needs or if you require more --- - - [Client-side helpers](/docs/sdk/nextjs/methods#client-side-helpers) + - [Client-side helpers](/docs/references/nextjs/overview#client-side-helpers) - Learn more about Next.js client-side helpers and how to use them. --- diff --git a/docs/sdk/nextjs/quickstart.mdx b/docs/sdk/nextjs/quickstart.mdx index cf6ce13863..13e1b00958 100644 --- a/docs/sdk/nextjs/quickstart.mdx +++ b/docs/sdk/nextjs/quickstart.mdx @@ -72,7 +72,7 @@ description: Add authentication and user management to your Next.js app with Cle ## Add `clerkMiddleware()` to your app - [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: 1. Create a `middleware.ts` file. - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. @@ -196,7 +196,7 @@ description: Add authentication and user management to your Next.js app with Cle --- - - [Client-side helpers](/docs/sdk/nextjs/methods#client-side-helpers) + - [Client-side helpers](/docs/references/nextjs/overview#client-side-helpers) - Learn more about Next.js client-side helpers and how to use them. --- diff --git a/docs/sdk/nextjs/read-session-data.mdx b/docs/sdk/nextjs/read-session-data.mdx index ae9f4439fb..fbe61ad2dd 100644 --- a/docs/sdk/nextjs/read-session-data.mdx +++ b/docs/sdk/nextjs/read-session-data.mdx @@ -3,7 +3,7 @@ title: Read session and user data in your Next.js app with Clerk description: Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js application. --- -Clerk provides a set of [hooks and helpers](/docs/sdk/nextjs/methods#client-side-helpers) that you can use to access the active session and user data in your Next.js application. Here are examples of how to use these helpers in both the client and server-side to get you started. +Clerk provides a set of [hooks and helpers](/docs/references/nextjs/overview#client-side-helpers) that you can use to access the active session and user data in your Next.js application. Here are examples of how to use these helpers in both the client and server-side to get you started. ## Server-side diff --git a/docs/sdk/nextjs/route-handlers.mdx b/docs/sdk/nextjs/route-handlers.mdx index 3592066e3d..e48bd1eb16 100644 --- a/docs/sdk/nextjs/route-handlers.mdx +++ b/docs/sdk/nextjs/route-handlers.mdx @@ -9,8 +9,8 @@ Clerk provides helpers that allow you to protect your Route Handlers, fetch the If you aren't protecting your Route Handler using [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware), you can protect your Route Handler in two ways: -- Use [`auth.protect()`](/docs/sdk/nextjs/auth#protect) if you want Clerk to return a `404` error when there is no signed in user. -- Use [`auth().userId`](/docs/sdk/nextjs/auth#retrieving-user-id) if you want to customize the behavior or error message. +- Use [`auth.protect()`](/docs/references/nextjs/auth#protect) if you want Clerk to return a `404` error when there is no signed in user. +- Use [`auth().userId`](/docs/references/nextjs/auth#retrieving-user-id) if you want to customize the behavior or error message. ```tsx {{ filename: 'app/api/route.ts' }} diff --git a/docs/sdk/nuxt/clerk-middleware.mdx b/docs/sdk/nuxt/clerk-middleware.mdx index e5deb0062d..44c76890ea 100644 --- a/docs/sdk/nuxt/clerk-middleware.mdx +++ b/docs/sdk/nuxt/clerk-middleware.mdx @@ -40,7 +40,7 @@ You can protect routes using either or both of the following: ### Authentication-based protection -To protect routes based on user authentication status, you can check if the user is signed in by checking the `userId` on the [`auth`](/docs/sdk/nuxt/methods#auth-object) object. +To protect routes based on user authentication status, you can check if the user is signed in by checking the `userId` on the [`auth`](/docs/references/nuxt/overview#auth-object) object. In the following example, the `clerkMiddleware()` helper checks if the user is signed in and accessing a protected route. If they aren't signed in, an error is thrown using Nuxt's [`createError()`](https://nuxt.com/docs/api/utils/create-error) utility. @@ -62,7 +62,7 @@ export default clerkMiddleware((event) => { ### Authorization-based protection -To protect routes based on user authorization status, you can use the `has()` helper to check if the user has the required [organization roles or custom permissions](/docs/organizations/roles-permissions). It is available on the [`auth`](/docs/sdk/nuxt/methods#auth-object) object. +To protect routes based on user authorization status, you can use the `has()` helper to check if the user has the required [organization roles or custom permissions](/docs/organizations/roles-permissions). It is available on the [`auth`](/docs/references/nuxt/overview#auth-object) object. #### Protecting routes using custom permissions diff --git a/docs/sdk/nuxt/methods.mdx b/docs/sdk/nuxt/methods.mdx index 9bbe364995..2964f4ffbe 100644 --- a/docs/sdk/nuxt/methods.mdx +++ b/docs/sdk/nuxt/methods.mdx @@ -26,4 +26,4 @@ The `clerkMiddleware()` helper integrates Clerk authentication and authorization ## `clerkClient()` -The `clerkClient()` helper returns an instance of the [JavaScript Backend SDK](/docs/references/backend/overview). [Learn more](/docs/sdk/nuxt/read-session-data#clerk-client). +The `clerkClient()` helper returns an instance of the [JavaScript Backend SDK](/docs/references/backend/overview). [Learn more](/docs/references/nuxt/read-session-data#clerk-client). diff --git a/docs/sdk/nuxt/protect-pages.mdx b/docs/sdk/nuxt/protect-pages.mdx index ef6ebea2c0..2fd167e218 100644 --- a/docs/sdk/nuxt/protect-pages.mdx +++ b/docs/sdk/nuxt/protect-pages.mdx @@ -9,7 +9,7 @@ There are two ways to protect pages in your Nuxt application: - [Use `defineNuxtRouteMiddleware()`](#use-define-nuxt-route-middleware) > [!NOTE] -> To learn how to protect API routes, see the [dedicated guide](/docs/sdk/nuxt/clerk-middleware#protect-api-routes). +> To learn how to protect API routes, see the [dedicated guide](/docs/references/nuxt/clerk-middleware#protect-api-routes). ## Use `useAuth()` diff --git a/docs/sdk/nuxt/quickstart.mdx b/docs/sdk/nuxt/quickstart.mdx index 8331901607..d398083f15 100644 --- a/docs/sdk/nuxt/quickstart.mdx +++ b/docs/sdk/nuxt/quickstart.mdx @@ -152,7 +152,7 @@ Learn more about Clerk components, how to customize them, and how to use Clerk's --- - - [Client-side helpers](/docs/sdk/nuxt/methods#client-side-helpers) + - [Client-side helpers](/docs/references/nuxt/overview#client-side-helpers) - Learn more about Nuxt client-side helpers and how to use them. --- diff --git a/docs/sdk/nuxt/read-session-data.mdx b/docs/sdk/nuxt/read-session-data.mdx index 13d3a159fc..c5240fb0ba 100644 --- a/docs/sdk/nuxt/read-session-data.mdx +++ b/docs/sdk/nuxt/read-session-data.mdx @@ -3,7 +3,7 @@ title: Read session and user data in your Nuxt app with Clerk description: Learn how to use Clerk's composables to access the active session and user data in your Nuxt application. --- -Clerk provides [composables](/docs/sdk/nuxt/methods#client-side-helpers) to access the session and user data in your Nuxt application. +Clerk provides [composables](/docs/references/nuxt/overview#client-side-helpers) to access the session and user data in your Nuxt application. ## Client-side @@ -35,7 +35,7 @@ const { isLoaded, isSignedIn, user } = useUser() The `clerkClient()` helper returns an instance of the [JavaScript Backend SDK](/docs/references/backend/overview). -In the following example, the [`auth`](/docs/sdk/nuxt/methods#auth-object) object is used to get the `userId` to check if the user is signed in. The `clerkClient()` helper retrieves the full [`User`](/docs/references/javascript/user/user) object. +In the following example, the [`auth`](/docs/references/nuxt/overview#auth-object) object is used to get the `userId` to check if the user is signed in. The `clerkClient()` helper retrieves the full [`User`](/docs/references/javascript/user/user) object. ```ts {{ filename: 'server/api/auth/index.ts' }} import { clerkClient } from '@clerk/nuxt/server' diff --git a/docs/sdk/react-router/read-session-data.mdx b/docs/sdk/react-router/read-session-data.mdx index ae536d3140..844605502a 100644 --- a/docs/sdk/react-router/read-session-data.mdx +++ b/docs/sdk/react-router/read-session-data.mdx @@ -3,7 +3,7 @@ title: Read session and user data in your React Router app with Clerk description: Learn how to use Clerk's hooks and helpers to access the active session and user data in your React Router application. --- -Clerk provides a set of [hooks and helpers](/docs/sdk/react-router/methods#client-side-helpers) that you can use to access the active session and user data in your React Router application. Here are examples of how to use these helpers in both the client and server-side to get you started. +Clerk provides a set of [hooks and helpers](/docs/references/react-router/overview#client-side-helpers) that you can use to access the active session and user data in your React Router application. Here are examples of how to use these helpers in both the client and server-side to get you started. ## Server-side diff --git a/docs/sdk/remix/read-session-data.mdx b/docs/sdk/remix/read-session-data.mdx index 71b749f2f5..43fd0533fd 100644 --- a/docs/sdk/remix/read-session-data.mdx +++ b/docs/sdk/remix/read-session-data.mdx @@ -3,7 +3,7 @@ title: Read session and user data in your Remix app with Clerk description: Learn how to use Clerk's hooks and helpers to access the active session and user data in your Remix application. --- -Clerk provides a set of [hooks and helpers](/docs/sdk/nextjs/methods#client-side-helpers) that you can use to access the active session and user data in your Remix application. Here are examples of how to use these helpers in both the client and server-side to get you started. +Clerk provides a set of [hooks and helpers](/docs/references/nextjs/overview#client-side-helpers) that you can use to access the active session and user data in your Remix application. Here are examples of how to use these helpers in both the client and server-side to get you started. ## Server-side diff --git a/docs/sdk/remix/spa-mode.mdx b/docs/sdk/remix/spa-mode.mdx index 2980dbcd43..4757b6f462 100644 --- a/docs/sdk/remix/spa-mode.mdx +++ b/docs/sdk/remix/spa-mode.mdx @@ -168,6 +168,6 @@ Now that you have an application integrated with Clerk, you will want to read th --- - - [Client Side Helpers](/docs/sdk/remix/read-session-data#client-side) + - [Client Side Helpers](/docs/references/remix/read-session-data#client-side) - Learn more about our client-side helpers and how to use them. diff --git a/docs/sdk/tanstack-start/read-session-data.mdx b/docs/sdk/tanstack-start/read-session-data.mdx index 4d4e9cef74..655e154cff 100644 --- a/docs/sdk/tanstack-start/read-session-data.mdx +++ b/docs/sdk/tanstack-start/read-session-data.mdx @@ -3,7 +3,7 @@ title: Read session and user data in your TanStack Start app with Clerk description: Learn how to use Clerk's hooks and helpers to access the active session and user data in your TanStack Start application. --- -Clerk provides a set of [hooks and helpers](/docs/sdk/tanstack-start/methods#client-side-helpers) that you can use to access the active session and user data in your TanStack Start application. Here are examples of how to use these helpers in both the client and server-side to get you started. +Clerk provides a set of [hooks and helpers](/docs/references/tanstack-start/overview#client-side-helpers) that you can use to access the active session and user data in your TanStack Start application. Here are examples of how to use these helpers in both the client and server-side to get you started. ## Server-side diff --git a/docs/troubleshooting/script-loading.mdx b/docs/troubleshooting/script-loading.mdx index abec389c4b..db9235fc0d 100644 --- a/docs/troubleshooting/script-loading.mdx +++ b/docs/troubleshooting/script-loading.mdx @@ -12,7 +12,7 @@ It sometimes might happen that Clerk doesn't successfully load and initialize du Check your internet access and that e.g. no Ad-Blocker is blocking Clerk's scripts. -If Clerk stops working after you've added another script (e.g. through a React component), you can try delaying the loading of that other script. For example, to only mount `@monaco-editor/react` after Clerk loaded you can use the [`useClerk()` hook](/docs/sdk/react/use-clerk#use-clerk): +If Clerk stops working after you've added another script (e.g. through a React component), you can try delaying the loading of that other script. For example, to only mount `@monaco-editor/react` after Clerk loaded you can use the [`useClerk()` hook](/docs/references/react/use-clerk#use-clerk): ```jsx import { Editor } from '@monaco-editor/react' diff --git a/docs/upgrade-guides/core-2/nextjs.mdx b/docs/upgrade-guides/core-2/nextjs.mdx index 2a15688dbf..ce8ea8d6b9 100644 --- a/docs/upgrade-guides/core-2/nextjs.mdx +++ b/docs/upgrade-guides/core-2/nextjs.mdx @@ -130,7 +130,7 @@ A couple things to note here: - The `createRouteMatcher` helper makes it easy to define route groups that you can leverage inside the Middleware function and check in whichever order you'd like. Note that it can take an array of routes as well. - With `clerkMiddleware`, you're defining the routes you want **to be protected**, rather than the routes you don't want to be protected. -- The `auth.protect()` helper is used extensively here. See its [reference doc](/docs/sdk/nextjs/auth#protect) for more info. +- The `auth.protect()` helper is used extensively here. See its [reference doc](/docs/references/nextjs/auth#protect) for more info. See the [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) docs for more information and detailed usage examples. diff --git a/docs/upgrade-guides/core-2/react.mdx b/docs/upgrade-guides/core-2/react.mdx index 64a5ec12d1..e360df5cea 100644 --- a/docs/upgrade-guides/core-2/react.mdx +++ b/docs/upgrade-guides/core-2/react.mdx @@ -585,7 +585,7 @@ As part of this major version, a number of previously deprecated props, argument - The `membershipList` param from the `useOrganization` hook has been removed. Instead, [use the `memberships` param](/docs/sdk/react/use-organization#parameters). Examples of each can be seen here: + The `membershipList` param from the `useOrganization` hook has been removed. Instead, [use the `memberships` param](/docs/references/react/use-organization#parameters). Examples of each can be seen here: ```js // before diff --git a/docs/upgrade-guides/node-to-express.mdx b/docs/upgrade-guides/node-to-express.mdx index 02a3443102..c43356eeac 100644 --- a/docs/upgrade-guides/node-to-express.mdx +++ b/docs/upgrade-guides/node-to-express.mdx @@ -131,7 +131,7 @@ app.listen(port, () => { ## Migrate from `ClerkExpressRequireAuth` -To enforce strict authentication, replace your existing Node SDK strict middleware, [`ClerkExpressRequireAuth`](/docs/backend-requests/handling/nodejs), with the new Express SDK middleware, [`requireAuth()`](/docs/sdk/express/methods#require-auth). +To enforce strict authentication, replace your existing Node SDK strict middleware, [`ClerkExpressRequireAuth`](/docs/backend-requests/handling/nodejs), with the new Express SDK middleware, [`requireAuth()`](/docs/references/express/overview#require-auth). `requireAuth()` is a middleware function that you can use to protect routes in your Express.js application. This function checks if the user is authenticated, and redirects to the configured sign in URl if they are not. diff --git a/docs/upgrade-guides/upgrading-from-v2-to-v3.mdx b/docs/upgrade-guides/upgrading-from-v2-to-v3.mdx index 044d9bed66..55164931df 100644 --- a/docs/upgrade-guides/upgrading-from-v2-to-v3.mdx +++ b/docs/upgrade-guides/upgrading-from-v2-to-v3.mdx @@ -202,4 +202,4 @@ app.get('/', (req, res) => { }) ``` -[use-auth]: /docs/sdk/react/use-auth +[use-auth]: /docs/references/react/use-auth diff --git a/docs/users/web3.mdx b/docs/users/web3.mdx index 4b056f682b..60055819f4 100644 --- a/docs/users/web3.mdx +++ b/docs/users/web3.mdx @@ -109,7 +109,7 @@ Now that you have Web3 authentication in a new Next.js application, and you know --- - - [Client Side Helpers](/docs/sdk/nextjs/methods#client-side-helpers) + - [Client Side Helpers](/docs/references/nextjs/overview#client-side-helpers) - Learn more about our client-side helpers and how to use them. --- From 13b5fe82b35874ad2b980c6f8b350bc56301dc3a Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Sat, 11 Jan 2025 01:40:20 +0800 Subject: [PATCH 22/82] Revert "Move a large portion of /docs/references to /docs/sdk" This reverts commit 3b017e6bf46b4b45286f9127cb38b36f06ba8aee. --- docs/_partials/react-hooks.mdx | 18 +- docs/_partials/vue-nuxt/composables.mdx | 16 +- docs/_partials/vue-nuxt/use-auth.mdx | 2 +- docs/advanced-usage/satellite-domains.mdx | 6 +- docs/advanced-usage/using-proxies.mdx | 4 +- docs/authentication/overview.mdx | 2 +- .../social-connections/atlassian.mdx | 2 +- .../social-connections/bitbucket.mdx | 2 +- .../social-connections/dropbox.mdx | 2 +- .../social-connections/facebook.mdx | 2 +- .../social-connections/hubspot.mdx | 2 +- .../social-connections/line.mdx | 2 +- .../social-connections/linkedin.mdx | 2 +- .../social-connections/notion.mdx | 2 +- .../social-connections/oauth.mdx | 4 +- .../social-connections/twitch.mdx | 2 +- .../social-connections/twitter.mdx | 2 +- .../social-connections/xero.mdx | 2 +- .../handling/js-backend-sdks.mdx | 4 +- docs/backend-requests/making/cross-origin.mdx | 4 +- .../making/custom-session-token.mdx | 2 +- docs/backend-requests/making/same-origin.mdx | 2 +- docs/backend-requests/overview.mdx | 2 +- .../authentication/google-one-tap.mdx | 2 +- docs/components/authentication/sign-in.mdx | 4 +- docs/components/authentication/sign-up.mdx | 4 +- docs/components/clerk-provider.mdx | 4 +- .../organization/create-organization.mdx | 2 +- .../organization/organization-list.mdx | 2 +- .../organization/organization-profile.mdx | 2 +- .../organization/organization-switcher.mdx | 2 +- docs/components/unstyled/sign-out-button.mdx | 2 +- docs/components/user/user-button.mdx | 2 +- docs/components/user/user-profile.mdx | 2 +- docs/components/waitlist.mdx | 2 +- docs/custom-flows/add-email.mdx | 2 +- docs/custom-flows/add-phone.mdx | 2 +- docs/custom-flows/email-links.mdx | 4 +- docs/custom-flows/email-password-mfa.mdx | 4 +- docs/custom-flows/email-password.mdx | 6 +- docs/custom-flows/manage-totp-based-mfa.mdx | 2 +- docs/custom-flows/sign-out.mdx | 2 +- docs/custom-flows/user-impersonation.mdx | 2 +- .../account-portal/getting-started.mdx | 2 +- docs/customization/elements/overview.mdx | 2 +- docs/customization/localization.mdx | 2 +- docs/customization/overview.mdx | 2 +- docs/deployments/deploy-astro.mdx | 2 +- docs/deployments/deploy-chrome-extension.mdx | 6 +- docs/deployments/deploy-to-vercel.mdx | 2 +- docs/deployments/set-up-staging.mdx | 2 +- docs/guides/add-onboarding-flow.mdx | 2 +- docs/guides/architecture-scenarios.mdx | 4 +- docs/guides/authjs-migration.mdx | 10 +- docs/guides/basic-rbac.mdx | 2 +- docs/guides/custom-redirects.mdx | 2 +- docs/guides/force-mfa.mdx | 2 +- docs/guides/force-organizations.mdx | 8 +- docs/guides/reverification.mdx | 2 +- docs/guides/waitlist.mdx | 6 +- docs/how-clerk-works/overview.mdx | 2 +- docs/index.mdx | 28 +-- docs/integrations/databases/convex.mdx | 2 +- docs/integrations/databases/fauna.mdx | 2 +- docs/integrations/databases/firebase.mdx | 2 +- docs/integrations/databases/grafbase.mdx | 4 +- docs/integrations/databases/hasura.mdx | 2 +- docs/integrations/databases/neon.mdx | 8 +- docs/integrations/databases/nhost.mdx | 4 +- docs/integrations/databases/supabase.mdx | 4 +- docs/manifest.json | 229 +++++++++--------- docs/organizations/creating-organizations.mdx | 2 +- .../custom-organization-switcher.mdx | 2 +- docs/organizations/inviting-users.mdx | 2 +- docs/organizations/manage-invitations.mdx | 2 +- .../manage-membership-requests.mdx | 2 +- docs/organizations/managing-roles.mdx | 2 +- docs/organizations/org-slugs-in-urls.mdx | 6 +- docs/organizations/overview.mdx | 2 +- docs/organizations/updating-organizations.mdx | 2 +- .../organizations/verify-user-permissions.mdx | 4 +- docs/organizations/viewing-memberships.mdx | 2 +- .../quickstart.mdx => quickstarts/astro.mdx} | 10 +- .../chrome-extension.mdx} | 10 +- .../quickstart.mdx => quickstarts/expo.mdx} | 10 +- .../express.mdx} | 4 +- .../fastify.mdx} | 2 +- .../quickstart.mdx => quickstarts/ios.mdx} | 0 .../javascript.mdx} | 0 .../quickstart.mdx => quickstarts/nextjs.mdx} | 12 +- .../quickstart.mdx => quickstarts/nuxt.mdx} | 6 +- .../overview.mdx} | 26 +- .../react-router.mdx} | 4 +- .../quickstart.mdx => quickstarts/react.mdx} | 8 +- .../quickstart.mdx => quickstarts/remix.mdx} | 8 +- .../setup-clerk.mdx} | 24 +- .../tanstack-start.mdx} | 10 +- .../quickstart.mdx => quickstarts/vue.mdx} | 4 +- docs/{sdk => references}/astro/auth-store.mdx | 0 .../astro/clerk-middleware.mdx | 0 .../{sdk => references}/astro/clerk-store.mdx | 0 docs/{sdk => references}/astro/endpoints.mdx | 4 +- .../astro/hybrid-rendering.mdx | 4 +- docs/{sdk => references}/astro/locals.mdx | 8 +- .../migrating-from-astro-community-sdk.mdx | 0 .../astro/organization-store.mdx | 0 .../astro/overview.mdx} | 22 +- docs/{sdk => references}/astro/react.mdx | 4 +- .../astro/read-session-data.mdx | 6 +- .../astro/session-list-store.mdx | 0 .../astro/session-store.mdx | 0 .../astro/sign-in-store.mdx | 0 .../astro/sign-up-store.mdx | 0 docs/{sdk => references}/astro/user-store.mdx | 0 docs/references/backend/overview.mdx | 2 +- docs/references/backend/types/auth-object.mdx | 16 +- .../chrome-extension/add-react-router.mdx | 0 .../configure-consistent-crx-id.mdx | 2 +- .../chrome-extension/create-clerk-client.mdx | 4 +- .../chrome-extension/overview.mdx} | 10 +- .../chrome-extension/sync-host.mdx | 4 +- .../expo/local-credentials.mdx | 6 +- .../expo/offline-support.mdx | 0 .../expo/overview.mdx} | 8 +- .../expo/read-session-user-data.mdx | 4 +- .../expo/use-local-credentials.mdx | 2 +- docs/{sdk => references}/expo/use-oauth.mdx | 0 .../custom-signup-signin-pages.mdx | 2 +- .../expo/web-support/overview.mdx | 4 +- .../express/overview.mdx} | 2 +- .../{sdk => references}/go/other-examples.mdx | 0 .../go/overview.mdx} | 2 +- .../go/verifying-sessions.mdx | 0 docs/{sdk => references}/ios/get-token.mdx | 0 .../ios/overview.mdx} | 2 +- .../ios/sign-in-with-apple.mdx | 0 docs/references/javascript/clerk/clerk.mdx | 2 +- .../javascript/clerk/organization-methods.mdx | 2 +- .../javascript/clerk/waitlist-methods.mdx | 2 +- .../javascript/organization-invitation.mdx | 2 +- .../javascript/organization/domains.mdx | 2 +- .../javascript/organization/invitations.mdx | 2 +- .../organization/membership-request.mdx | 2 +- .../javascript/organization/organization.mdx | 2 +- docs/references/javascript/overview.mdx | 4 +- .../javascript/user/create-metadata.mdx | 2 +- .../javascript/user/password-management.mdx | 2 +- docs/references/javascript/user/totp.mdx | 2 +- docs/{sdk => references}/nextjs/auth.mdx | 6 +- .../nextjs/build-clerk-props.mdx | 0 .../nextjs/clerk-middleware.mdx | 4 +- .../nextjs/current-user.mdx | 0 .../nextjs/custom-signup-signin-pages.mdx | 6 +- docs/{sdk => references}/nextjs/get-auth.mdx | 2 +- .../nextjs/overview.mdx} | 16 +- .../nextjs/read-session-data.mdx | 14 +- .../nextjs/rendering-modes.mdx | 0 .../nextjs/route-handlers.mdx | 4 +- .../nextjs/server-actions.mdx | 4 +- docs/{sdk => references}/nextjs/trpc.mdx | 2 +- .../nodejs/available-methods.mdx} | 0 .../nodejs/overview.mdx} | 4 +- .../nuxt/clerk-middleware.mdx | 2 +- .../nuxt/overview.mdx} | 10 +- .../nuxt/protect-pages.mdx | 0 .../nuxt/read-session-data.mdx | 0 docs/references/overview.mdx | 18 +- .../custom-signup-signin-pages.mdx | 2 +- .../react-router/get-auth.mdx | 0 .../react-router/library-mode.mdx | 4 +- .../react-router/overview.mdx} | 12 +- .../react-router/read-session-data.mdx | 6 +- .../react-router/root-auth-loader.mdx | 0 .../react/overview.mdx} | 12 +- docs/{sdk => references}/react/use-auth.mdx | 2 +- docs/{sdk => references}/react/use-clerk.mdx | 0 .../react/use-organization-list.mdx | 0 .../react/use-organization.mdx | 0 .../react/use-reverification.mdx | 0 .../react/use-session-list.mdx | 0 .../{sdk => references}/react/use-session.mdx | 0 .../{sdk => references}/react/use-sign-in.mdx | 0 .../{sdk => references}/react/use-sign-up.mdx | 0 docs/{sdk => references}/react/use-user.mdx | 0 .../redwood/overview.mdx} | 0 docs/{sdk => references}/remix/clerk-app.mdx | 0 .../remix/custom-signup-signin-pages.mdx | 4 +- .../remix/read-session-data.mdx | 6 +- docs/{sdk => references}/remix/spa-mode.mdx | 2 +- .../ruby/available-methods.mdx} | 0 .../ruby/overview.mdx} | 2 +- docs/{sdk => references}/ruby/rack-rails.mdx | 0 docs/references/sdk/backend-only.mdx | 2 +- docs/references/sdk/conventions.mdx | 2 +- .../tanstack-start/create-clerk-handler.mdx | 0 .../custom-signup-signin-pages.mdx | 4 +- .../tanstack-start/get-auth.mdx | 0 .../tanstack-start/overview.mdx} | 10 +- .../tanstack-start/read-session-data.mdx | 6 +- .../vue/migrating-from-vue-community-sdk.mdx | 0 .../vue/overview.mdx} | 4 +- docs/{sdk => references}/vue/use-auth.mdx | 0 docs/{sdk => references}/vue/use-clerk.mdx | 0 .../vue/use-organization.mdx | 0 .../vue/use-session-list.mdx | 0 docs/{sdk => references}/vue/use-session.mdx | 0 docs/{sdk => references}/vue/use-sign-in.mdx | 0 docs/{sdk => references}/vue/use-sign-up.mdx | 0 docs/{sdk => references}/vue/use-user.mdx | 0 .../create-a-minimal-reproduction.mdx | 4 +- docs/troubleshooting/overview.mdx | 2 +- docs/upgrade-guides/core-2/nextjs.mdx | 20 +- docs/upgrade-guides/core-2/react.mdx | 14 +- docs/upgrade-guides/nextjs/v6.mdx | 2 +- docs/users/metadata.mdx | 4 +- docs/users/overview.mdx | 2 +- docs/users/user-impersonation.mdx | 4 +- docs/users/web3.mdx | 8 +- docs/webhooks/sync-data.mdx | 2 +- 219 files changed, 511 insertions(+), 520 deletions(-) rename docs/{sdk/astro/quickstart.mdx => quickstarts/astro.mdx} (88%) rename docs/{sdk/chrome-extension/quickstart.mdx => quickstarts/chrome-extension.mdx} (96%) rename docs/{sdk/expo/quickstart.mdx => quickstarts/expo.mdx} (94%) rename docs/{sdk/express/quickstart.mdx => quickstarts/express.mdx} (96%) rename docs/{sdk/fastify/quickstart.mdx => quickstarts/fastify.mdx} (95%) rename docs/{sdk/ios/quickstart.mdx => quickstarts/ios.mdx} (100%) rename docs/{references/javascript/quickstart.mdx => quickstarts/javascript.mdx} (100%) rename docs/{sdk/nextjs/quickstart.mdx => quickstarts/nextjs.mdx} (92%) rename docs/{sdk/nuxt/quickstart.mdx => quickstarts/nuxt.mdx} (93%) rename docs/{quickstarts.mdx => quickstarts/overview.mdx} (96%) rename docs/{sdk/react-router/quickstart.mdx => quickstarts/react-router.mdx} (95%) rename docs/{sdk/react/quickstart.mdx => quickstarts/react.mdx} (95%) rename docs/{sdk/remix/quickstart.mdx => quickstarts/remix.mdx} (94%) rename docs/{getting-started.mdx => quickstarts/setup-clerk.mdx} (96%) rename docs/{sdk/tanstack-start/quickstart.mdx => quickstarts/tanstack-start.mdx} (86%) rename docs/{sdk/vue/quickstart.mdx => quickstarts/vue.mdx} (92%) rename docs/{sdk => references}/astro/auth-store.mdx (100%) rename docs/{sdk => references}/astro/clerk-middleware.mdx (100%) rename docs/{sdk => references}/astro/clerk-store.mdx (100%) rename docs/{sdk => references}/astro/endpoints.mdx (91%) rename docs/{sdk => references}/astro/hybrid-rendering.mdx (95%) rename docs/{sdk => references}/astro/locals.mdx (83%) rename docs/{sdk => references}/astro/migrating-from-astro-community-sdk.mdx (100%) rename docs/{sdk => references}/astro/organization-store.mdx (100%) rename docs/{sdk/astro/methods.mdx => references/astro/overview.mdx} (69%) rename docs/{sdk => references}/astro/react.mdx (96%) rename docs/{sdk => references}/astro/read-session-data.mdx (77%) rename docs/{sdk => references}/astro/session-list-store.mdx (100%) rename docs/{sdk => references}/astro/session-store.mdx (100%) rename docs/{sdk => references}/astro/sign-in-store.mdx (100%) rename docs/{sdk => references}/astro/sign-up-store.mdx (100%) rename docs/{sdk => references}/astro/user-store.mdx (100%) rename docs/{sdk => references}/chrome-extension/add-react-router.mdx (100%) rename docs/{sdk => references}/chrome-extension/configure-consistent-crx-id.mdx (97%) rename docs/{sdk => references}/chrome-extension/create-clerk-client.mdx (96%) rename docs/{sdk/chrome-extension/methods.mdx => references/chrome-extension/overview.mdx} (86%) rename docs/{sdk => references}/chrome-extension/sync-host.mdx (95%) rename docs/{sdk => references}/expo/local-credentials.mdx (96%) rename docs/{sdk => references}/expo/offline-support.mdx (100%) rename docs/{sdk/expo/methods.mdx => references/expo/overview.mdx} (81%) rename docs/{sdk => references}/expo/read-session-user-data.mdx (76%) rename docs/{sdk => references}/expo/use-local-credentials.mdx (98%) rename docs/{sdk => references}/expo/use-oauth.mdx (100%) rename docs/{sdk => references}/expo/web-support/custom-signup-signin-pages.mdx (97%) rename docs/{sdk => references}/expo/web-support/overview.mdx (90%) rename docs/{sdk/express/methods.mdx => references/express/overview.mdx} (98%) rename docs/{sdk => references}/go/other-examples.mdx (100%) rename docs/{sdk/go/quickstart.mdx => references/go/overview.mdx} (96%) rename docs/{sdk => references}/go/verifying-sessions.mdx (100%) rename docs/{sdk => references}/ios/get-token.mdx (100%) rename docs/{sdk/ios/methods.mdx => references/ios/overview.mdx} (92%) rename docs/{sdk => references}/ios/sign-in-with-apple.mdx (100%) rename docs/{sdk => references}/nextjs/auth.mdx (95%) rename docs/{sdk => references}/nextjs/build-clerk-props.mdx (100%) rename docs/{sdk => references}/nextjs/clerk-middleware.mdx (98%) rename docs/{sdk => references}/nextjs/current-user.mdx (100%) rename docs/{sdk => references}/nextjs/custom-signup-signin-pages.mdx (96%) rename docs/{sdk => references}/nextjs/get-auth.mdx (96%) rename docs/{sdk/nextjs/methods.mdx => references/nextjs/overview.mdx} (81%) rename docs/{sdk => references}/nextjs/read-session-data.mdx (84%) rename docs/{sdk => references}/nextjs/rendering-modes.mdx (100%) rename docs/{sdk => references}/nextjs/route-handlers.mdx (93%) rename docs/{sdk => references}/nextjs/server-actions.mdx (93%) rename docs/{sdk => references}/nextjs/trpc.mdx (97%) rename docs/{sdk/nodejs/methods.mdx => references/nodejs/available-methods.mdx} (100%) rename docs/{sdk/nodejs/quickstart.mdx => references/nodejs/overview.mdx} (95%) rename docs/{sdk => references}/nuxt/clerk-middleware.mdx (99%) rename docs/{sdk/nuxt/methods.mdx => references/nuxt/overview.mdx} (76%) rename docs/{sdk => references}/nuxt/protect-pages.mdx (100%) rename docs/{sdk => references}/nuxt/read-session-data.mdx (100%) rename docs/{sdk => references}/react-router/custom-signup-signin-pages.mdx (97%) rename docs/{sdk => references}/react-router/get-auth.mdx (100%) rename docs/{sdk => references}/react-router/library-mode.mdx (94%) rename docs/{sdk/react-router/methods.mdx => references/react-router/overview.mdx} (77%) rename docs/{sdk => references}/react-router/read-session-data.mdx (67%) rename docs/{sdk => references}/react-router/root-auth-loader.mdx (100%) rename docs/{sdk/react/methods.mdx => references/react/overview.mdx} (75%) rename docs/{sdk => references}/react/use-auth.mdx (88%) rename docs/{sdk => references}/react/use-clerk.mdx (100%) rename docs/{sdk => references}/react/use-organization-list.mdx (100%) rename docs/{sdk => references}/react/use-organization.mdx (100%) rename docs/{sdk => references}/react/use-reverification.mdx (100%) rename docs/{sdk => references}/react/use-session-list.mdx (100%) rename docs/{sdk => references}/react/use-session.mdx (100%) rename docs/{sdk => references}/react/use-sign-in.mdx (100%) rename docs/{sdk => references}/react/use-sign-up.mdx (100%) rename docs/{sdk => references}/react/use-user.mdx (100%) rename docs/{sdk/redwood/quickstart.mdx => references/redwood/overview.mdx} (100%) rename docs/{sdk => references}/remix/clerk-app.mdx (100%) rename docs/{sdk => references}/remix/custom-signup-signin-pages.mdx (96%) rename docs/{sdk => references}/remix/read-session-data.mdx (79%) rename docs/{sdk => references}/remix/spa-mode.mdx (99%) rename docs/{sdk/ruby/methods.mdx => references/ruby/available-methods.mdx} (100%) rename docs/{sdk/ruby/quickstart.mdx => references/ruby/overview.mdx} (98%) rename docs/{sdk => references}/ruby/rack-rails.mdx (100%) rename docs/{sdk => references}/tanstack-start/create-clerk-handler.mdx (100%) rename docs/{sdk => references}/tanstack-start/custom-signup-signin-pages.mdx (95%) rename docs/{sdk => references}/tanstack-start/get-auth.mdx (100%) rename docs/{sdk/tanstack-start/methods.mdx => references/tanstack-start/overview.mdx} (68%) rename docs/{sdk => references}/tanstack-start/read-session-data.mdx (70%) rename docs/{sdk => references}/vue/migrating-from-vue-community-sdk.mdx (100%) rename docs/{sdk/vue/methods.mdx => references/vue/overview.mdx} (85%) rename docs/{sdk => references}/vue/use-auth.mdx (100%) rename docs/{sdk => references}/vue/use-clerk.mdx (100%) rename docs/{sdk => references}/vue/use-organization.mdx (100%) rename docs/{sdk => references}/vue/use-session-list.mdx (100%) rename docs/{sdk => references}/vue/use-session.mdx (100%) rename docs/{sdk => references}/vue/use-sign-in.mdx (100%) rename docs/{sdk => references}/vue/use-sign-up.mdx (100%) rename docs/{sdk => references}/vue/use-user.mdx (100%) diff --git a/docs/_partials/react-hooks.mdx b/docs/_partials/react-hooks.mdx index a84452f5eb..594ffdf1e8 100644 --- a/docs/_partials/react-hooks.mdx +++ b/docs/_partials/react-hooks.mdx @@ -1,9 +1,9 @@ -- [`useUser()`](/docs/sdk/react/use-user){{ target: '_blank' }} -- [`useClerk()`](/docs/sdk/react/use-clerk){{ target: '_blank' }} -- [`useAuth()`](/docs/sdk/react/use-auth){{ target: '_blank' }} -- [`useSignIn()`](/docs/sdk/react/use-sign-in){{ target: '_blank' }} -- [`useSignUp()`](/docs/sdk/react/use-sign-up){{ target: '_blank' }} -- [`useSession()`](/docs/sdk/react/use-session){{ target: '_blank' }} -- [`useSessionList()`](/docs/sdk/react/use-session-list){{ target: '_blank' }} -- [`useOrganization()`](/docs/sdk/react/use-organization){{ target: '_blank' }} -- [`useOrganizationList()`](/docs/sdk/react/use-organization-list){{ target: '_blank' }} +- [`useUser()`](/docs/references/react/use-user){{ target: '_blank' }} +- [`useClerk()`](/docs/references/react/use-clerk){{ target: '_blank' }} +- [`useAuth()`](/docs/references/react/use-auth){{ target: '_blank' }} +- [`useSignIn()`](/docs/references/react/use-sign-in){{ target: '_blank' }} +- [`useSignUp()`](/docs/references/react/use-sign-up){{ target: '_blank' }} +- [`useSession()`](/docs/references/react/use-session){{ target: '_blank' }} +- [`useSessionList()`](/docs/references/react/use-session-list){{ target: '_blank' }} +- [`useOrganization()`](/docs/references/react/use-organization){{ target: '_blank' }} +- [`useOrganizationList()`](/docs/references/react/use-organization-list){{ target: '_blank' }} diff --git a/docs/_partials/vue-nuxt/composables.mdx b/docs/_partials/vue-nuxt/composables.mdx index 7ef0abff00..5b454d6c23 100644 --- a/docs/_partials/vue-nuxt/composables.mdx +++ b/docs/_partials/vue-nuxt/composables.mdx @@ -1,8 +1,8 @@ -- [`useUser()`](/docs/sdk/vue/use-user) -- [`useClerk()`](/docs/sdk/vue/use-clerk) -- [`useAuth()`](/docs/sdk/vue/use-auth) -- [`useSignIn()`](/docs/sdk/vue/use-sign-in) -- [`useSignUp()`](/docs/sdk/vue/use-sign-up) -- [`useSession()`](/docs/sdk/vue/use-session) -- [`useSessionList()`](/docs/sdk/vue/use-session-list) -- [`useOrganization()`](/docs/sdk/vue/use-organization) +- [`useUser()`](/docs/references/vue/use-user) +- [`useClerk()`](/docs/references/vue/use-clerk) +- [`useAuth()`](/docs/references/vue/use-auth) +- [`useSignIn()`](/docs/references/vue/use-sign-in) +- [`useSignUp()`](/docs/references/vue/use-sign-up) +- [`useSession()`](/docs/references/vue/use-session) +- [`useSessionList()`](/docs/references/vue/use-session-list) +- [`useOrganization()`](/docs/references/vue/use-organization) diff --git a/docs/_partials/vue-nuxt/use-auth.mdx b/docs/_partials/vue-nuxt/use-auth.mdx index 71e5b4131f..9201766300 100644 --- a/docs/_partials/vue-nuxt/use-auth.mdx +++ b/docs/_partials/vue-nuxt/use-auth.mdx @@ -1,4 +1,4 @@ -The `useAuth()` composable provides access to the current user's authentication state and methods to manage the active session. You can use this composable to protect [pages](/docs/sdk/nuxt/protect-pages). +The `useAuth()` composable provides access to the current user's authentication state and methods to manage the active session. You can use this composable to protect [pages](/docs/references/nuxt/protect-pages). In the following example, the `isLoaded` property checks if Clerk has finished initializing and the `userId` property checks if the user is signed in. diff --git a/docs/advanced-usage/satellite-domains.mdx b/docs/advanced-usage/satellite-domains.mdx index 98c179e90d..5ffb193f48 100644 --- a/docs/advanced-usage/satellite-domains.mdx +++ b/docs/advanced-usage/satellite-domains.mdx @@ -12,7 +12,7 @@ Clerk supports sharing sessions across different domains by adding one or many s Your "primary" domain is where the authentication state lives, and satellite domains are able to securely read that state from the primary domain, enabling a seamless authentication flow across domains. -Users must complete both the sign-in and sign-up flows on the primary domain by using the [``](/docs/components/authentication/sign-in) component or [`useSignIn()`](/docs/sdk/react/use-sign-in) hook for sign-in and [``](/docs/components/authentication/sign-up) component or [`useSignUp()`](/docs/sdk/react/use-sign-up) hook for sign-up. +Users must complete both the sign-in and sign-up flows on the primary domain by using the [``](/docs/components/authentication/sign-in) component or [`useSignIn()`](/docs/references/react/use-sign-in) hook for sign-in and [``](/docs/components/authentication/sign-up) component or [`useSignUp()`](/docs/references/react/use-sign-up) hook for sign-up. To access authentication state from a satellite domain, users will be transparently redirected to the primary domain. If users need to sign in, they must be redirected to a sign in flow hosted on the primary domain, then redirected back to the originating satellite domain. The same redirection process applies to sign-up flows. @@ -35,7 +35,7 @@ To access authentication state from a satellite domain, users will be transparen When building your sign-in flow, you must configure it to run within your primary application, e.g. on `/sign-in`. > [!NOTE] - > For more information about creating your application, see the [setup guide](/docs/getting-started). + > For more information about creating your application, see the [setup guide](/docs/quickstarts/setup-clerk). ### Add your first satellite domain @@ -322,7 +322,7 @@ To access authentication state from a satellite domain, users will be transparen - In a Remix application, you must set the properties in the [`ClerkApp`](/docs/sdk/remix/clerk-app) wrapper. + In a Remix application, you must set the properties in the [`ClerkApp`](/docs/references/remix/clerk-app) wrapper. - In the root file associated with your primary domain, you only need to configure the `signInUrl` prop: diff --git a/docs/advanced-usage/using-proxies.mdx b/docs/advanced-usage/using-proxies.mdx index a07f360d7e..44af0b488b 100644 --- a/docs/advanced-usage/using-proxies.mdx +++ b/docs/advanced-usage/using-proxies.mdx @@ -20,7 +20,7 @@ When using a proxy, all requests to the Frontend API will be made through your d To get started, you need to create an application from the [Clerk Dashboard](https://dashboard.clerk.com/). Once you create an instance via the Clerk Dashboard, you will be prompted to choose a domain. For the purposes of this guide, the domain will be `app.dev`. > [!NOTE] - > For more information on creating a Clerk application, see the [setup guide](/docs/getting-started). + > For more information on creating a Clerk application, see the [setup guide](/docs/quickstarts/setup-clerk). ### Configure your proxy server @@ -239,7 +239,7 @@ When using a proxy, all requests to the Frontend API will be made through your d - To configure your proxy setup using properties in your Remix application, set the `proxyUrl` property on the [`ClerkApp`](/docs/sdk/remix/clerk-app) wrapper. + To configure your proxy setup using properties in your Remix application, set the `proxyUrl` property on the [`ClerkApp`](/docs/references/remix/clerk-app) wrapper. ```tsx {{ filename: 'root.tsx' }} export const loader = (args) => { diff --git a/docs/authentication/overview.mdx b/docs/authentication/overview.mdx index 1a05f7ea86..751d726583 100644 --- a/docs/authentication/overview.mdx +++ b/docs/authentication/overview.mdx @@ -9,4 +9,4 @@ Clerk supports multiple authentication strategies so that you can implement the Clerk's configuration settings affect how the users of your application can [sign up and sign in](/docs/authentication/configuration/sign-up-sign-in-options) and which properties are editable via their user profile. You can also manage [user sessions](/docs/authentication/configuration/session-options), [control who gets access](/docs/authentication/configuration/restrictions) to your application, and [customize the email & SMS messages](/docs/authentication/configuration/email-sms-templates) that are sent by Clerk during authentication flows. All of these settings can be found under the **User & Authentication** section in the [Clerk Dashboard](https://dashboard.clerk.com/). -For more information on how to set up your application, see the [setup guide](/docs/getting-started). +For more information on how to set up your application, see the [setup guide](/docs/quickstarts/setup-clerk). diff --git a/docs/authentication/social-connections/atlassian.mdx b/docs/authentication/social-connections/atlassian.mdx index cb6eb4f4c4..c145d1b1ad 100644 --- a/docs/authentication/social-connections/atlassian.mdx +++ b/docs/authentication/social-connections/atlassian.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). - You need to have a Atlassian developer account. To create one, [click here](https://developer.atlassian.com/). ## Configuring an Atlassian OAuth 2.0 Integration diff --git a/docs/authentication/social-connections/bitbucket.mdx b/docs/authentication/social-connections/bitbucket.mdx index b17822adea..4f9425d4d6 100644 --- a/docs/authentication/social-connections/bitbucket.mdx +++ b/docs/authentication/social-connections/bitbucket.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Consumer Key and Co ## Before you start -- You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). +- You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). - You need to have a Bitbucket account. To create one, [click here](https://bitbucket.org/account/signup). ## Configuring Bitbucket social connection diff --git a/docs/authentication/social-connections/dropbox.mdx b/docs/authentication/social-connections/dropbox.mdx index 481e936ad9..415e5a6183 100644 --- a/docs/authentication/social-connections/dropbox.mdx +++ b/docs/authentication/social-connections/dropbox.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). - You need to have a Dropbox account. To create one, [click here](https://www.dropbox.com/lp/developers). ## Configuring Dropbox social connection diff --git a/docs/authentication/social-connections/facebook.mdx b/docs/authentication/social-connections/facebook.mdx index 0f0654778c..e763e85bfb 100644 --- a/docs/authentication/social-connections/facebook.mdx +++ b/docs/authentication/social-connections/facebook.mdx @@ -18,7 +18,7 @@ For production instances, you will need to create your own developer account wit ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). - You need to have a Facebook Developer account. To create one, consult the [Register as a Facebook developer](https://developers.facebook.com/docs/development/register) page. ## Configuring Facebook social connection diff --git a/docs/authentication/social-connections/hubspot.mdx b/docs/authentication/social-connections/hubspot.mdx index b14cd9a93c..ac325a68e7 100644 --- a/docs/authentication/social-connections/hubspot.mdx +++ b/docs/authentication/social-connections/hubspot.mdx @@ -18,7 +18,7 @@ For production instances, you will need to create your own developer account wit ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). - You need to have a HubSpot Developer account. To create one, [click here](https://app.hubspot.com/signup/developers/step/existing-user?_ga=2.145169076.1430980384.1628431607-741498900.1628431607). ## Configuring HubSpot social connection diff --git a/docs/authentication/social-connections/line.mdx b/docs/authentication/social-connections/line.mdx index f7933c3ee0..94231003fe 100644 --- a/docs/authentication/social-connections/line.mdx +++ b/docs/authentication/social-connections/line.mdx @@ -21,7 +21,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). - You need to have a LINE developer account. To create one, [click here](https://developers.line.biz/en/). ## Configuring LINE social connection diff --git a/docs/authentication/social-connections/linkedin.mdx b/docs/authentication/social-connections/linkedin.mdx index 76ec0e7b3f..41645cba86 100644 --- a/docs/authentication/social-connections/linkedin.mdx +++ b/docs/authentication/social-connections/linkedin.mdx @@ -19,7 +19,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). - You need to have a LinkedIn account. To create one, [click here](https://developer.linkedin.com/). ## Configuring LinkedIn social connection diff --git a/docs/authentication/social-connections/notion.mdx b/docs/authentication/social-connections/notion.mdx index 8b7e4e2033..f9c3c15e3f 100644 --- a/docs/authentication/social-connections/notion.mdx +++ b/docs/authentication/social-connections/notion.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). - You need to have a Notion developer account. To create one, [click here](https://developers.notion.com/). ## Configuring Notion social connection diff --git a/docs/authentication/social-connections/oauth.mdx b/docs/authentication/social-connections/oauth.mdx index 49b8bdb3c6..daf2e7670a 100644 --- a/docs/authentication/social-connections/oauth.mdx +++ b/docs/authentication/social-connections/oauth.mdx @@ -12,8 +12,8 @@ The easiest way to add social connections to your Clerk app is by using [prebuil ## Before you start -- You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, check out the [setup guide](/docs/getting-started). -- You need to install the correct SDK for your application. For more information, see the [quickstart guides](/docs/quickstarts). +- You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, check out the [setup guide](/docs/quickstarts/setup-clerk). +- You need to install the correct SDK for your application. For more information, see the [quickstart guides](/docs/quickstarts/overview). ## Enable a social connection diff --git a/docs/authentication/social-connections/twitch.mdx b/docs/authentication/social-connections/twitch.mdx index 142013d789..c55d23cf14 100644 --- a/docs/authentication/social-connections/twitch.mdx +++ b/docs/authentication/social-connections/twitch.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). - You need to have a Twitch account. To create one, [click here](https://www.twitch.tv/). ## Configuring Twitch social connection diff --git a/docs/authentication/social-connections/twitter.mdx b/docs/authentication/social-connections/twitter.mdx index 535a98d5ac..4ef9177dfe 100644 --- a/docs/authentication/social-connections/twitter.mdx +++ b/docs/authentication/social-connections/twitter.mdx @@ -19,7 +19,7 @@ Clerk does not currently support preconfigured shared OAuth credentials for Twit ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). - You need to have a Twitter Application set up so it can be used as a social connection. If you don't have a Twitter Application, click [here](https://developer.twitter.com/en/docs/apps/overview) for instructions on how to create one. If you already have one, go to your [Twitter app settings](https://developer.twitter.com/en/portal/projects-and-apps) and ensure that the _"Allow this app to be used to Sign in with Twitter?_” option is enabled. ## Configuring Twitter social connection diff --git a/docs/authentication/social-connections/xero.mdx b/docs/authentication/social-connections/xero.mdx index d19bfafb40..1a4f3fd0e1 100644 --- a/docs/authentication/social-connections/xero.mdx +++ b/docs/authentication/social-connections/xero.mdx @@ -18,7 +18,7 @@ For production instances, you will need to generate your own Client ID and Clien ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/getting-started). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, see the [setup guide](/docs/quickstarts/setup-clerk). - You need to have a Xero developer account. To create one, [click here](https://developer.xero.com/). ## Configuring Xero social connection diff --git a/docs/backend-requests/handling/js-backend-sdks.mdx b/docs/backend-requests/handling/js-backend-sdks.mdx index 7e35f65241..4dee29e62b 100644 --- a/docs/backend-requests/handling/js-backend-sdks.mdx +++ b/docs/backend-requests/handling/js-backend-sdks.mdx @@ -21,7 +21,7 @@ app.use(clerkMiddleware()) app.use(clerkMiddleware(options)) ``` -For more information on the Middleware functions and SDK features, see the [Express SDK](/docs/sdk/express/methods) page. +For more information on the Middleware functions and SDK features, see the [Express SDK](/docs/references/express/overview) page. ## Clerk Fastify SDK @@ -64,7 +64,7 @@ const start = async () => { start() ``` -For more information on the Clerk plugin and SDK features, see the [Fastify SDK](/docs/sdk/fastify/quickstart) page. +For more information on the Clerk plugin and SDK features, see the [Fastify SDK](/docs/quickstarts/fastify) page. ## Clerk Backend SDK diff --git a/docs/backend-requests/making/cross-origin.mdx b/docs/backend-requests/making/cross-origin.mdx index ce0f0dbf2b..3d834bc021 100644 --- a/docs/backend-requests/making/cross-origin.mdx +++ b/docs/backend-requests/making/cross-origin.mdx @@ -7,7 +7,7 @@ If your client and server are on different origins (e.g. making an API call to a ## Using Fetch with React -In order to pass the session token using the browser Fetch API, it should be put inside a Bearer token in the Authorization header. To retrieve the session token, use the `getToken` method from the [`useAuth()`](/docs/sdk/react/use-auth) hook. Be mindful that `getToken` is an async function that returns a Promise which needs to be resolved. +In order to pass the session token using the browser Fetch API, it should be put inside a Bearer token in the Authorization header. To retrieve the session token, use the `getToken` method from the [`useAuth()`](/docs/references/react/use-auth) hook. Be mindful that `getToken` is an async function that returns a Promise which needs to be resolved. ```js import { useAuth } from '@clerk/nextjs' @@ -27,7 +27,7 @@ export default function useFetch() { ## `useSWR()` hook -If you are using React or Next.js and want to use SWR's [`useSWR()`](https://swr.vercel.app/) hook, you can create a custom hook by using the [`useAuth()`](/docs/sdk/react/use-auth) hook. `useAuth()` returns the asynchronous `getToken()` method that can be called to add the session token as a Bearer token in the Authorization header of requests. +If you are using React or Next.js and want to use SWR's [`useSWR()`](https://swr.vercel.app/) hook, you can create a custom hook by using the [`useAuth()`](/docs/references/react/use-auth) hook. `useAuth()` returns the asynchronous `getToken()` method that can be called to add the session token as a Bearer token in the Authorization header of requests. ```js import useSWR from 'swr' diff --git a/docs/backend-requests/making/custom-session-token.mdx b/docs/backend-requests/making/custom-session-token.mdx index b41d78f7e5..999b5283b0 100644 --- a/docs/backend-requests/making/custom-session-token.mdx +++ b/docs/backend-requests/making/custom-session-token.mdx @@ -24,7 +24,7 @@ This guide will show you how to customize a session token to include additional ## Use the custom claims in your application - The [`Auth`](/docs/references/backend/types/auth-object) object includes a `sessionClaims` property that contains the custom claims you added to your session token. It's returned by the [`auth()`](/docs/sdk/nextjs/auth) and `getAuth()` helpers, and the `request` object in server contexts. + The [`Auth`](/docs/references/backend/types/auth-object) object includes a `sessionClaims` property that contains the custom claims you added to your session token. It's returned by the [`auth()`](/docs/references/nextjs/auth) and `getAuth()` helpers, and the `request` object in server contexts. The following example demonstrates how to access the `fullName` and `primaryEmail` claims that were added to the session token in the last step. This examples are written for Next.js, but they can be adapted to other frameworks by using the appropriate method for accessing the `Auth` object. diff --git a/docs/backend-requests/making/same-origin.mdx b/docs/backend-requests/making/same-origin.mdx index 143e763ab4..1828554f37 100644 --- a/docs/backend-requests/making/same-origin.mdx +++ b/docs/backend-requests/making/same-origin.mdx @@ -15,7 +15,7 @@ fetch('/api/foo').then((res) => res.json()) ## useSWR hook -If you are using React or Next.js and would like to use the [useSWR](https://swr.vercel.app/) hook, it’s as simple as supplying the API route with whichever fetcher function you are using. Because of the [automatic revalidation feature](https://swr.vercel.app/docs/revalidation) of SWR, you need to retrieve and set the session token in the Authorization header. Call the asynchronous `getToken` method from the [`useAuth()`](/docs/sdk/react/use-auth) hook and add it as a Bearer token. +If you are using React or Next.js and would like to use the [useSWR](https://swr.vercel.app/) hook, it’s as simple as supplying the API route with whichever fetcher function you are using. Because of the [automatic revalidation feature](https://swr.vercel.app/docs/revalidation) of SWR, you need to retrieve and set the session token in the Authorization header. Call the asynchronous `getToken` method from the [`useAuth()`](/docs/references/react/use-auth) hook and add it as a Bearer token. ```jsx diff --git a/docs/backend-requests/overview.mdx b/docs/backend-requests/overview.mdx index f52cf4f365..f083b3097c 100644 --- a/docs/backend-requests/overview.mdx +++ b/docs/backend-requests/overview.mdx @@ -31,7 +31,7 @@ For cross-origin requests, refer to our guide on [making cross-origin requests]( Clerk provides various middleware packages to set the session property for easy access. These packages can also require a session to be available on the current request. Choose the guide based on the language or framework you're using: -- [Next.js](/docs/sdk/nextjs/clerk-middleware) +- [Next.js](/docs/references/nextjs/clerk-middleware) - [Node.js / Express](/docs/backend-requests/handling/nodejs) - [Go](/docs/backend-requests/handling/go) - [Ruby on Rails / Rack](/docs/backend-requests/handling/ruby-rails) diff --git a/docs/components/authentication/google-one-tap.mdx b/docs/components/authentication/google-one-tap.mdx index d913ee8728..c6f746f335 100644 --- a/docs/components/authentication/google-one-tap.mdx +++ b/docs/components/authentication/google-one-tap.mdx @@ -98,7 +98,7 @@ The following example includes basic implementation of the `` co The methods in this section are available on instances of the [`Clerk`](/docs/references/javascript/clerk/clerk) class and are used to render and control the `` component. > [!NOTE] -> The examples in this section assume you have completed the [JavaScript quickstart](/docs/references/javascript/quickstart) to set up the Clerk JS SDK in your project. +> The examples in this section assume you have completed the [JavaScript quickstart](/docs/quickstarts/javascript) to set up the Clerk JS SDK in your project. ### `openGoogleOneTap()` diff --git a/docs/components/authentication/sign-in.mdx b/docs/components/authentication/sign-in.mdx index e7a20ecfc2..23fd487615 100644 --- a/docs/components/authentication/sign-in.mdx +++ b/docs/components/authentication/sign-in.mdx @@ -106,7 +106,7 @@ The following example includes basic implementation of the `` componen The following example demonstrates how you can use the `` component on a public page. - If you would like to create a dedicated `/sign-in` page in your Next.js application, see the [dedicated guide](/docs/sdk/nextjs/custom-signup-signin-pages). + If you would like to create a dedicated `/sign-in` page in your Next.js application, see the [dedicated guide](/docs/references/nextjs/custom-signup-signin-pages). ```tsx {{ filename: 'app/page.tsx' }} import { SignIn, useUser } from '@clerk/nextjs' @@ -168,7 +168,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openSignIn()`](#open-sign-in) - [`closeSignIn()`](#close-sign-in) -The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. ### `mountSignIn()` diff --git a/docs/components/authentication/sign-up.mdx b/docs/components/authentication/sign-up.mdx index 9b38fc4a12..c4179ac72d 100644 --- a/docs/components/authentication/sign-up.mdx +++ b/docs/components/authentication/sign-up.mdx @@ -99,7 +99,7 @@ The following example includes basic implementation of the `` componen The following example demonstrates how you can use the `` component on a public page. - If you would like to create a dedicated `/sign-up` page in your Next.js application, see the [dedicated guide](/docs/sdk/nextjs/custom-signup-signin-pages). + If you would like to create a dedicated `/sign-up` page in your Next.js application, see the [dedicated guide](/docs/references/nextjs/custom-signup-signin-pages). ```tsx {{ filename: 'app/page.tsx' }} import { SignUp, useUser } from '@clerk/nextjs' @@ -161,7 +161,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openSignUp()`](#open-sign-up) - [`closeSignUp()`](#close-sign-up) -The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. ### `mountSignUp()` diff --git a/docs/components/clerk-provider.mdx b/docs/components/clerk-provider.mdx index 55fff0af9b..bcda26af27 100644 --- a/docs/components/clerk-provider.mdx +++ b/docs/components/clerk-provider.mdx @@ -230,7 +230,7 @@ The recommended approach is to wrap your entire app with `` at th - `syncHost` - `string` - **Chrome Extension only** To enable, pass the URL of the web application that the extension will sync the authentication state from. See the [dedicated guide](/docs/sdk/chrome-extension/sync-host) for more information. + **Chrome Extension only** To enable, pass the URL of the web application that the extension will sync the authentication state from. See the [dedicated guide](/docs/references/chrome-extension/sync-host) for more information. --- @@ -279,7 +279,7 @@ The recommended approach is to wrap your entire app with `` at th - `dynamic?` - `boolean` - (For Next.js only) Indicates whether or not Clerk should make dynamic auth data available based on the current request. Defaults to `false`. Opts the application into dynamic rendering when `true`. For more information, see [Next.js rendering modes and Clerk](/docs/sdk/nextjs/rendering-modes). + (For Next.js only) Indicates whether or not Clerk should make dynamic auth data available based on the current request. Defaults to `false`. Opts the application into dynamic rendering when `true`. For more information, see [Next.js rendering modes and Clerk](/docs/references/nextjs/rendering-modes). --- diff --git a/docs/components/organization/create-organization.mdx b/docs/components/organization/create-organization.mdx index aa41168497..59fbc6e006 100644 --- a/docs/components/organization/create-organization.mdx +++ b/docs/components/organization/create-organization.mdx @@ -115,7 +115,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openCreateOrganization`](#open-create-organization) - [`closeCreateOrganization`](#close-create-organization) -The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. ### mountCreateOrganization() diff --git a/docs/components/organization/organization-list.mdx b/docs/components/organization/organization-list.mdx index ef219ab729..e6488da233 100644 --- a/docs/components/organization/organization-list.mdx +++ b/docs/components/organization/organization-list.mdx @@ -140,7 +140,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`mountOrganizationList()`](#mount-organization-list) - [`unmountOrganizationList()`](#unmount-organization-list) -The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. ## `mountOrganizationList()` diff --git a/docs/components/organization/organization-profile.mdx b/docs/components/organization/organization-profile.mdx index b596249549..87fc688e18 100644 --- a/docs/components/organization/organization-profile.mdx +++ b/docs/components/organization/organization-profile.mdx @@ -112,7 +112,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openOrganizationProfile()`](#open-organization-profile) - [`closeOrganizationProfile()`](#close-organization-profile) -The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. ### mountOrganizationProfile() diff --git a/docs/components/organization/organization-switcher.mdx b/docs/components/organization/organization-switcher.mdx index c95df599aa..505ac2446e 100644 --- a/docs/components/organization/organization-switcher.mdx +++ b/docs/components/organization/organization-switcher.mdx @@ -169,7 +169,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`mountOrganizationSwitcher()`](#mount-organization-switcher) - [`unmountOrganizationSwitcher()`](#unmount-organization-switcher) -The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. ## `mountOrganizationSwitcher()` diff --git a/docs/components/unstyled/sign-out-button.mdx b/docs/components/unstyled/sign-out-button.mdx index a661f44ab2..0b19ea3483 100644 --- a/docs/components/unstyled/sign-out-button.mdx +++ b/docs/components/unstyled/sign-out-button.mdx @@ -171,7 +171,7 @@ Clicking the `` component signs the user out of all sessions. Thi You can sign out of a specific session by passing in a `sessionId` to the `signOutOptions` prop. This is useful for signing a single account out of a multi-session (multiple account) application. -In the following example, the `sessionId` is retrieved from the [`useAuth()`](/docs/sdk/react/use-auth) hook. If the user is not signed in, the `sessionId` will be `null`, and the user is shown the [``](/docs/components/unstyled/sign-in-button) component. If the user is signed in, the user is shown the `` component, which when clicked, signs the user out of that specific session. +In the following example, the `sessionId` is retrieved from the [`useAuth()`](/docs/references/react/use-auth) hook. If the user is not signed in, the `sessionId` will be `null`, and the user is shown the [``](/docs/components/unstyled/sign-in-button) component. If the user is signed in, the user is shown the `` component, which when clicked, signs the user out of that specific session. diff --git a/docs/components/user/user-button.mdx b/docs/components/user/user-button.mdx index 89beeae3c6..6771014ded 100644 --- a/docs/components/user/user-button.mdx +++ b/docs/components/user/user-button.mdx @@ -263,7 +263,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`mountUserButton()`](#mount-user-button) - [`unmountUserButton()`](#unmount-user-button) -The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. ### `mountUserButton()` diff --git a/docs/components/user/user-profile.mdx b/docs/components/user/user-profile.mdx index 8bc2735dde..82570040f2 100644 --- a/docs/components/user/user-profile.mdx +++ b/docs/components/user/user-profile.mdx @@ -118,7 +118,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openUserProfile()`](#open-user-profile) - [`closeUserProfile()`](#close-user-profile) -The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. ### `mountUserProfile()` diff --git a/docs/components/waitlist.mdx b/docs/components/waitlist.mdx index 30d75bd851..55caa6d91a 100644 --- a/docs/components/waitlist.mdx +++ b/docs/components/waitlist.mdx @@ -89,7 +89,7 @@ The following methods available on an instance of the [`Clerk`](/docs/references - [`openWaitlist()`](#open-waitlist) - [`closeWaitlist()`](#close-waitlist) -The following examples assume that you followed the [quickstart](/docs/references/javascript/quickstart) to add Clerk to your JavaScript app. +The following examples assume that you followed the [quickstart](/docs/quickstarts/javascript) to add Clerk to your JavaScript app. ### mountWaitlist() diff --git a/docs/custom-flows/add-email.mdx b/docs/custom-flows/add-email.mdx index 3d2740fdc6..e1b3db453d 100644 --- a/docs/custom-flows/add-email.mdx +++ b/docs/custom-flows/add-email.mdx @@ -11,7 +11,7 @@ Every user has a [`User`](/docs/references/javascript/user/user) object that rep The following example demonstrates how to build a custom user interface that allows users to add an email address to their account. The example: -1. Uses the [`useUser()`](/docs/sdk/react/use-user) hook to get the `User` object. +1. Uses the [`useUser()`](/docs/references/react/use-user) hook to get the `User` object. 1. Uses the [`User.createEmailAddress()`](/docs/references/javascript/user/create-metadata#create-email-address) method to add the email address to the user's account. A new [`EmailAddress`](/docs/references/javascript/email-address) object is created and stored in `User.emailAddresses`. 1. Uses the `prepareVerification()` method on the newly created `EmailAddress` object to send a verification code to the user. 1. Uses the `attemptVerification()` method on the same `EmailAddress` object with the verification code provided by the user to verify the email address. diff --git a/docs/custom-flows/add-phone.mdx b/docs/custom-flows/add-phone.mdx index 397537e276..81ff9ffc38 100644 --- a/docs/custom-flows/add-phone.mdx +++ b/docs/custom-flows/add-phone.mdx @@ -11,7 +11,7 @@ Every user has a [`User`](/docs/references/javascript/user/user) object that rep The following example demonstrates how to build a custom user interface that allows users to add a phone number to their account. The example: -1. Uses the [`useUser()`](/docs/sdk/react/use-user) hook to get the `User` object. +1. Uses the [`useUser()`](/docs/references/react/use-user) hook to get the `User` object. 1. Uses the [`User.createPhoneNumber()`](/docs/references/javascript/user/create-metadata#create-phone-number) method to add the phone number to the user's account. A new [`PhoneNumber`](/docs/references/javascript/phone-number) object is created and stored in `User.phoneNumbers`. 1. Uses the `prepareVerification()` method on the newly created `PhoneNumber` object to send a verification code to the user. 1. Uses the `attemptVerification()` method on the same `PhoneNumber` object with the verification code provided by the user to verify the phone number. diff --git a/docs/custom-flows/email-links.mdx b/docs/custom-flows/email-links.mdx index 71c7f1da5d..e57f654a0e 100644 --- a/docs/custom-flows/email-links.mdx +++ b/docs/custom-flows/email-links.mdx @@ -37,8 +37,8 @@ We take care of the boring stuff, like efficient polling, secure session managem ## Before you start -- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, check out the [setup guide](/docs/getting-started). -- You need to install the correct SDK for your application. For more information, see the [quickstart guides](/docs/quickstarts). +- You need to create a Clerk Application in the [Clerk Dashboard](https://dashboard.clerk.com/). For more information, check out the [setup guide](/docs/quickstarts/setup-clerk). +- You need to install the correct SDK for your application. For more information, see the [quickstart guides](/docs/quickstarts/overview). ## Set up email link authentication in Your Clerk application diff --git a/docs/custom-flows/email-password-mfa.mdx b/docs/custom-flows/email-password-mfa.mdx index 40385f5511..2296237854 100644 --- a/docs/custom-flows/email-password-mfa.mdx +++ b/docs/custom-flows/email-password-mfa.mdx @@ -309,7 +309,7 @@ This guide will walk you through how to build a custom email/password sign-in fl ### Build the flow 1. Create the `(auth)` route group. This groups your sign-up and sign-in pages. - 1. In the `(auth)` group, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/sdk/react/use-auth) hook is used to access the user's authentication state. If the user's already signed in, they'll be redirected to the home page. + 1. In the `(auth)` group, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/references/react/use-auth) hook is used to access the user's authentication state. If the user's already signed in, they'll be redirected to the home page. ```tsx {{ filename: 'app/(auth)/_layout.tsx' }} import { Redirect, Stack } from 'expo-router' @@ -326,7 +326,7 @@ This guide will walk you through how to build a custom email/password sign-in fl } ``` - In the `(auth)` group, create a `sign-in.tsx` file with the following code. The [`useSignIn()`](/docs/sdk/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using their email and password and will be prompted to verify their account with a code from their authenticator app or with a backup code. + In the `(auth)` group, create a `sign-in.tsx` file with the following code. The [`useSignIn()`](/docs/references/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using their email and password and will be prompted to verify their account with a code from their authenticator app or with a backup code. ```tsx {{ filename: 'app/(auth)/sign-in.tsx', collapsible: true }} import React from 'react' diff --git a/docs/custom-flows/email-password.mdx b/docs/custom-flows/email-password.mdx index 34cef21685..d22ac988ff 100644 --- a/docs/custom-flows/email-password.mdx +++ b/docs/custom-flows/email-password.mdx @@ -258,7 +258,7 @@ This guide will walk you through how to build a custom email/password sign-up an 1. Create the `(auth)` route group. This groups your sign-up and sign-in pages. - 1. In the `(auth)` group, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/sdk/react/use-auth) hook is used to access the user's authentication state. If the user's already signed in, they'll be redirected to the home page. + 1. In the `(auth)` group, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/references/react/use-auth) hook is used to access the user's authentication state. If the user's already signed in, they'll be redirected to the home page. ```tsx {{ filename: 'app/(auth)/_layout.tsx' }} import { Redirect, Stack } from 'expo-router' @@ -275,7 +275,7 @@ This guide will walk you through how to build a custom email/password sign-up an } ``` - In the `(auth)` group, create a `sign-up.tsx` file with the following code. The [`useSignUp()`](/docs/sdk/react/use-sign-up) hook is used to create a sign-up flow. The user can sign up using their email and password and will receive an email verification code to confirm their email. + In the `(auth)` group, create a `sign-up.tsx` file with the following code. The [`useSignUp()`](/docs/references/react/use-sign-up) hook is used to create a sign-up flow. The user can sign up using their email and password and will receive an email verification code to confirm their email. ```tsx {{ filename: 'app/(auth)/sign-up.tsx', collapsible: true }} import * as React from 'react' @@ -638,7 +638,7 @@ This guide will walk you through how to build a custom email/password sign-up an - In the `(auth)` group, create a `sign-in.tsx` file with the following code. The [`useSignIn()`](/docs/sdk/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using email address and password, or navigate to the sign-up page. + In the `(auth)` group, create a `sign-in.tsx` file with the following code. The [`useSignIn()`](/docs/references/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using email address and password, or navigate to the sign-up page. ```tsx {{ filename: 'app/(auth)/sign-in.tsx', collapsible: true }} import { useSignIn } from '@clerk/clerk-expo' diff --git a/docs/custom-flows/manage-totp-based-mfa.mdx b/docs/custom-flows/manage-totp-based-mfa.mdx index 0837a63d74..4bfd03c251 100644 --- a/docs/custom-flows/manage-totp-based-mfa.mdx +++ b/docs/custom-flows/manage-totp-based-mfa.mdx @@ -341,7 +341,7 @@ One of the options that Clerk supports for MFA is **Authenticator applications ( 1. Create the `(dashboard)` route group. This groups your account page and the "Add TOTP MFA" page. - 1. Create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/sdk/react/use-auth) hook is used to check if the user is signed in. If the user isn't signed in, they'll be redirected to the sign-in page. + 1. Create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/references/react/use-auth) hook is used to check if the user is signed in. If the user isn't signed in, they'll be redirected to the sign-in page. ```tsx {{ filename: 'app/(dashboard)/_layout.tsx' }} import { Redirect, Stack } from 'expo-router' diff --git a/docs/custom-flows/sign-out.mdx b/docs/custom-flows/sign-out.mdx index 905cf72be7..732a57ebf8 100644 --- a/docs/custom-flows/sign-out.mdx +++ b/docs/custom-flows/sign-out.mdx @@ -14,7 +14,7 @@ The `signOut()` function signs a user out of all sessions in a [multi-session ap - The [`useClerk()`](/docs/sdk/react/use-clerk) hook is used to access the `signOut()` function, which is called when the user clicks the sign-out button. + The [`useClerk()`](/docs/references/react/use-clerk) hook is used to access the `signOut()` function, which is called when the user clicks the sign-out button. The Next.js [`useRouter()`](https://nextjs.org/docs/api-reference/next/router#userouter) hook is used to redirect the user to the home page after they sign out. diff --git a/docs/custom-flows/user-impersonation.mdx b/docs/custom-flows/user-impersonation.mdx index 802fcc3ce7..2a159c172d 100644 --- a/docs/custom-flows/user-impersonation.mdx +++ b/docs/custom-flows/user-impersonation.mdx @@ -196,7 +196,7 @@ This guide will walk you through how to build a custom flow that handles user im > It is **recommended** that you build impersonation into a dashboard that **only authorized users** can access. 1. Create the `dashboard/` directory. - 1. In the `dashboard/` directory, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/sdk/react/use-auth) hook is used to access the user's authentication state. If the user is already signed in, they'll be redirected to the home page. The [``](/docs/components/protect) component is used to ensure that only users with the `org:dashboard:access` permission can access it. You can modify the `permission` attribute to fit your use case. + 1. In the `dashboard/` directory, create a `_layout.tsx` file with the following code. The [`useAuth()`](/docs/references/react/use-auth) hook is used to access the user's authentication state. If the user is already signed in, they'll be redirected to the home page. The [``](/docs/components/protect) component is used to ensure that only users with the `org:dashboard:access` permission can access it. You can modify the `permission` attribute to fit your use case. ```tsx {{ filename: 'app/dashboard/_layout.tsx' }} import { Redirect, Stack } from 'expo-router' diff --git a/docs/customization/account-portal/getting-started.mdx b/docs/customization/account-portal/getting-started.mdx index ae1674f9b4..b695c7cb86 100644 --- a/docs/customization/account-portal/getting-started.mdx +++ b/docs/customization/account-portal/getting-started.mdx @@ -3,7 +3,7 @@ title: Getting started with the Account Portal description: The Account Portal offers a comprehensive solution for managing user authentication and profile management in your web application and is the fastest way to add Clerk's authentication to your application with minimal code required. --- -To integrate the Account Portal into your application, simply follow one of the [quickstart guides](/docs/quickstarts). Once your application is set up, all you have to do is run it. Clerk will automatically redirect your users to the Account Portal sign-up/sign-in pages. After successful authentication, users will be redirected back to your application with an active session. +To integrate the Account Portal into your application, simply follow one of the [quickstart guides](/docs/quickstarts/overview). Once your application is set up, all you have to do is run it. Clerk will automatically redirect your users to the Account Portal sign-up/sign-in pages. After successful authentication, users will be redirected back to your application with an active session. You can also integrate the Account Portal into your application using prebuilt components. For example, the [``](/docs/components/unstyled/sign-up-button) and [``](/docs/components/unstyled/sign-in-button) components will redirect users to the Account Portal sign-up and sign-in pages if no props or [environment variables](/docs/deployments/clerk-environment-variables#sign-in-and-sign-up-redirects) are configured to override this behavior. diff --git a/docs/customization/elements/overview.mdx b/docs/customization/elements/overview.mdx index bc775614c2..b571fe7ad4 100644 --- a/docs/customization/elements/overview.mdx +++ b/docs/customization/elements/overview.mdx @@ -29,7 +29,7 @@ Clerk Elements can be integrated into your existing application and workflows. F ## Getting started -Clerk Elements currently only works with Next.js App Router and [Clerk Core 2](/changelog/2024-04-19){{ target: '_blank' }}. As it gets closer to a stable release, support for additional frameworks will be added. If your Next.js application is already using Clerk, make sure to [upgrade to Core 2](/docs/upgrade-guides/core-2/nextjs). If you're starting from scratch, follow the [Next.js quickstart](/docs/sdk/nextjs/quickstart) before proceeding. +Clerk Elements currently only works with Next.js App Router and [Clerk Core 2](/changelog/2024-04-19){{ target: '_blank' }}. As it gets closer to a stable release, support for additional frameworks will be added. If your Next.js application is already using Clerk, make sure to [upgrade to Core 2](/docs/upgrade-guides/core-2/nextjs). If you're starting from scratch, follow the [Next.js quickstart](/docs/quickstarts/nextjs) before proceeding. To get started, install the Clerk Elements package: diff --git a/docs/customization/localization.mdx b/docs/customization/localization.mdx index 919ad74382..3b51ede253 100644 --- a/docs/customization/localization.mdx +++ b/docs/customization/localization.mdx @@ -122,7 +122,7 @@ Once the `@clerk/localizations` package is installed, you can import the localiz - In the following example, the fr-FR locale is imported as `frFR`. The imported localization is then passed to the `localization` prop in the [`ClerkApp`](/docs/sdk/remix/clerk-app) options. + In the following example, the fr-FR locale is imported as `frFR`. The imported localization is then passed to the `localization` prop in the [`ClerkApp`](/docs/references/remix/clerk-app) options. ```tsx {{ filename: 'app/root.tsx', mark: [[6, 7], [39, 41]] }} import type { MetaFunction, LoaderFunction } from '@remix-run/node' diff --git a/docs/customization/overview.mdx b/docs/customization/overview.mdx index ceeb7c0810..8108ede792 100644 --- a/docs/customization/overview.mdx +++ b/docs/customization/overview.mdx @@ -9,7 +9,7 @@ Customizing the appearance of Clerk components is a powerful way to make your ap The `appearance` prop can be applied to [``](/docs/components/clerk-provider) to share styles across every component, or individually to any of the Clerk components. -This applies to all of the React-based packages, like [Next.js](/docs/sdk/nextjs/quickstart), as well as [the pure JavaScript ClerkJS package](/docs/references/javascript/overview). +This applies to all of the React-based packages, like [Next.js](/docs/quickstarts/nextjs), as well as [the pure JavaScript ClerkJS package](/docs/references/javascript/overview). ## Properties diff --git a/docs/deployments/deploy-astro.mdx b/docs/deployments/deploy-astro.mdx index 9ce3f8defb..227a204bb9 100644 --- a/docs/deployments/deploy-astro.mdx +++ b/docs/deployments/deploy-astro.mdx @@ -4,7 +4,7 @@ description: Learn how to deploy an Astro app to production with Clerk. --- > [!WARNING] -> This guide assumes that you have already installed Clerk in your application locally and are ready to deploy. If you haven't installed Clerk yet, see [the quickstart guide](/docs/sdk/astro/quickstart). +> This guide assumes that you have already installed Clerk in your application locally and are ready to deploy. If you haven't installed Clerk yet, see [the quickstart guide](/docs/quickstarts/astro). This guide will walk you through the steps to deploy your Astro app to production. diff --git a/docs/deployments/deploy-chrome-extension.mdx b/docs/deployments/deploy-chrome-extension.mdx index e2d5f3593d..33ada0d783 100644 --- a/docs/deployments/deploy-chrome-extension.mdx +++ b/docs/deployments/deploy-chrome-extension.mdx @@ -13,7 +13,7 @@ For Clerk production instances, there must be a domain associated with the insta ## Update your `.env.production` file - Add your Publishable and Frontend API keys for your Clerk production instance to your `.env.production` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. If you're using [the Sync Host feature](/docs/sdk/chrome-extension/sync-host), you also need to set the `PLASMO_PUBLIC_CLERK_SYNC_HOST` environment variable. The value is the domain your web app's production server runs on. For example, `https://clerk.com`. + Add your Publishable and Frontend API keys for your Clerk production instance to your `.env.production` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. If you're using [the Sync Host feature](/docs/references/chrome-extension/sync-host), you also need to set the `PLASMO_PUBLIC_CLERK_SYNC_HOST` environment variable. The value is the domain your web app's production server runs on. For example, `https://clerk.com`. @@ -21,7 +21,7 @@ For Clerk production instances, there must be a domain associated with the insta 1. In the navigation sidebar, select [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys). 1. In the **Quick Copy** section, select **Chrome Extension** and copy your Clerk Publishable and Frontend API keys. 1. Paste your keys into your `.env.production` file. - 1. If you are using [the Sync Host feature](/docs/sdk/chrome-extension/sync-host), you will also need to set the `PLASMO_PUBLIC_CLERK_SYNC_HOST` environment variable. The value should be the domain your web app's production server runs on. For example, `https://clerk.com`. + 1. If you are using [the Sync Host feature](/docs/references/chrome-extension/sync-host), you will also need to set the `PLASMO_PUBLIC_CLERK_SYNC_HOST` environment variable. The value should be the domain your web app's production server runs on. For example, `https://clerk.com`. The final result should resemble the following: @@ -37,7 +37,7 @@ PLASMO_PUBLIC_CLERK_SYNC_HOST=https://yourdomain.com `host_permissions` specifies which hosts, or websites, will have permission to sync auth state with your app. It accepts an array, allowing you to add more than one host. You must add your production domain to the `host_permissions` array. > [!WARNING] -> If you are using the Sync Host feature and followed [the configuration guide](/docs/sdk/chrome-extension/sync-host), then you have already completed this step (the `http://$PLASMO_PUBLIC_CLERK_SYNC_HOST/*` value points to your production domain.) +> If you are using the Sync Host feature and followed [the configuration guide](/docs/references/chrome-extension/sync-host), then you have already completed this step (the `http://$PLASMO_PUBLIC_CLERK_SYNC_HOST/*` value points to your production domain.) In the `package.json` file, in the `manifest` object, update the `host_permissions` array. Add your domain and ensure it is preceded with `https://`. For example, `https://clerk.com`. Only add the root domain and not any subdomains. Then, add `/*` to the end of the domain. diff --git a/docs/deployments/deploy-to-vercel.mdx b/docs/deployments/deploy-to-vercel.mdx index 0118b522bd..305d72b903 100644 --- a/docs/deployments/deploy-to-vercel.mdx +++ b/docs/deployments/deploy-to-vercel.mdx @@ -4,7 +4,7 @@ description: Learn how to deploy a Clerk app to Vercel. --- > [!WARNING] -> This guide assumes that you have already installed Clerk in your application locally and are ready to deploy. If you haven't installed Clerk yet, see the [setup guide](/docs/getting-started). +> This guide assumes that you have already installed Clerk in your application locally and are ready to deploy. If you haven't installed Clerk yet, see the [setup guide](/docs/quickstarts/setup-clerk). If you haven't set up your application in Vercel yet, [set up a new Vercel project](#set-up-a-new-vercel-project). diff --git a/docs/deployments/set-up-staging.mdx b/docs/deployments/set-up-staging.mdx index 12351b3089..2eafdbb04a 100644 --- a/docs/deployments/set-up-staging.mdx +++ b/docs/deployments/set-up-staging.mdx @@ -14,7 +14,7 @@ It is important to note that when you use a separate Clerk application for your The following steps will help you set up a new Clerk application with a staging-specific domain: 1. **Set up a subdomain** - This will be your staging domain. For example, if your domain is `my-site.com`, you could use `staging.my-site.com`. -1. **Create a new Clerk app** - Your staging environment will connect to this app instead of your main one. See [the Clerk quickstart guide](/docs/getting-started) to learn how to create a Clerk app. +1. **Create a new Clerk app** - Your staging environment will connect to this app instead of your main one. See [the Clerk quickstart guide](/docs/quickstarts/setup-clerk) to learn how to create a Clerk app. 1. **Deploy and configure your staging app's production instance** - Using production API keys will make your staging app more secure. Follow the [Deploy to production](/docs/deployments/overview) guide to do so. 1. **Contact Clerk support to upgrade your staging app for free** - If you are on a Pro, Enterprise, or Startup plan, Clerk will fully upgrade your staging app for free. diff --git a/docs/guides/add-onboarding-flow.mdx b/docs/guides/add-onboarding-flow.mdx index da21498a98..62a9c15bb8 100644 --- a/docs/guides/add-onboarding-flow.mdx +++ b/docs/guides/add-onboarding-flow.mdx @@ -60,7 +60,7 @@ declare global { ## Configure your Middleware to read session data -[`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) allows you to configure access to your routes with fine grained control. It also allows you to retrieve claims directly from the session and redirect your user accordingly. +[`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) allows you to configure access to your routes with fine grained control. It also allows you to retrieve claims directly from the session and redirect your user accordingly. The following example demonstrates how to use `clerkMiddleware()` to redirect users based on their onboarding status. If the user is signed in and has not completed onboarding, they will be redirected to the onboarding page. diff --git a/docs/guides/architecture-scenarios.mdx b/docs/guides/architecture-scenarios.mdx index 95297f902b..68cb423248 100644 --- a/docs/guides/architecture-scenarios.mdx +++ b/docs/guides/architecture-scenarios.mdx @@ -55,8 +55,8 @@ B2B SaaS applications with the following characteristics are well-supported with Clerk offers a number of building blocks to help integrate organizations into your application: - The [`` component](/docs/components/organization/organization-switcher) provides a way for your users to select which organization is active. The [`useOrganizationList()` hook](/docs/organizations/custom-organization-switcher) can be used for more control. -- The [`useOrganization()` hook](/docs/sdk/react/use-organization) can be used to fetch the current, active organization. -- The [`` component](/docs/components/protect) enables you to limit who can view certain pages based on their role. Additionally, Clerk exposes a number of helper functions, such as [`auth()`](/docs/sdk/nextjs/auth), and hooks, such as [`useAuth()`](/docs/references/react/use-auth#how-to-use-the-use-auth-hook), to check the user's authorization throughout your app and API endpoints. +- The [`useOrganization()` hook](/docs/references/react/use-organization) can be used to fetch the current, active organization. +- The [`` component](/docs/components/protect) enables you to limit who can view certain pages based on their role. Additionally, Clerk exposes a number of helper functions, such as [`auth()`](/docs/references/nextjs/auth), and hooks, such as [`useAuth()`](/docs/references/react/use-auth#how-to-use-the-use-auth-hook), to check the user's authorization throughout your app and API endpoints. The organization's ID should be stored in your database alongside each resource so that it can be used to filter and query the resources that should be rendered or returned according to the active organization. diff --git a/docs/guides/authjs-migration.mdx b/docs/guides/authjs-migration.mdx index e3e809fcd2..a038b20029 100644 --- a/docs/guides/authjs-migration.mdx +++ b/docs/guides/authjs-migration.mdx @@ -38,7 +38,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. ## Install `@clerk/nextjs` - Clerk's Next.js SDK gives you access to prebuilt [components](/docs/components/overview), [hooks](/docs/references/nextjs/overview#client-side-helpers), and [helpers](/docs/sdk/nextjs/methods) for Next.js Server Components, Route Handlers and Middleware. Run the following command to install it: + Clerk's Next.js SDK gives you access to prebuilt [components](/docs/components/overview), [hooks](/docs/references/nextjs/overview#client-side-helpers), and [helpers](/docs/references/nextjs/overview) for Next.js Server Components, Route Handlers and Middleware. Run the following command to install it: ```bash {{ filename: 'terminal' }} @@ -114,8 +114,8 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. If Clerk's Account Portal pages aren't a good fit your app, you can build a custom sign-in and sign-up UI in one of two ways: - - use the [prebuilt components](/docs/sdk/nextjs/custom-signup-signin-pages), such as the [``](/docs/components/authentication/sign-in) and [``](/docs/components/authentication/sign-up) components - - build a [fully custom UI using the Clerk API](/docs/custom-flows/overview), leveraging Clerk's React hooks such as [`useSignIn()`](/docs/sdk/react/use-sign-in) and [`useSignUp()`](/docs/sdk/react/use-sign-up) + - use the [prebuilt components](/docs/references/nextjs/custom-signup-signin-pages), such as the [``](/docs/components/authentication/sign-in) and [``](/docs/components/authentication/sign-up) components + - build a [fully custom UI using the Clerk API](/docs/custom-flows/overview), leveraging Clerk's React hooks such as [`useSignIn()`](/docs/references/react/use-sign-in) and [`useSignUp()`](/docs/references/react/use-sign-up) ## Protect your app @@ -129,7 +129,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. Clerk's Middleware gives you fine-grained control over handling the authenticated state and will, by default, run for your entire application. - The example below is a basic configuration that does not protect any routes. All routes are public and you must opt-in to protection for routes. Read the [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) documentation to learn more about how you can configure your Middleware. + The example below is a basic configuration that does not protect any routes. All routes are public and you must opt-in to protection for routes. Read the [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) documentation to learn more about how you can configure your Middleware. ```tsx {{ filename: 'middleware.ts' }} import { clerkMiddleware } from '@clerk/nextjs' @@ -207,7 +207,7 @@ This guide shows how to migrate an application using Auth.js (formerly NextAuth. Replace Auth.js's `useSession()` hook with Clerk's hooks. - The [`useAuth()`](/docs/sdk/react/use-auth) hook can be used to retrieve basic authentication information. The [`useUser()`](/docs/sdk/react/use-user) hook can be used to retrieve the full [`User`](/docs/references/javascript/user/user#user) object, which includes information about the user, such as their first name, emails, phone numbers, and more. + The [`useAuth()`](/docs/references/react/use-auth) hook can be used to retrieve basic authentication information. The [`useUser()`](/docs/references/react/use-user) hook can be used to retrieve the full [`User`](/docs/references/javascript/user/user#user) object, which includes information about the user, such as their first name, emails, phone numbers, and more. ```tsx {{ filename: 'app/page.tsx' }} 'use client' diff --git a/docs/guides/basic-rbac.mdx b/docs/guides/basic-rbac.mdx index f7df28a0e3..900193a9f5 100644 --- a/docs/guides/basic-rbac.mdx +++ b/docs/guides/basic-rbac.mdx @@ -66,7 +66,7 @@ This guide assumes that you're using Next.js App Router, but the concepts can be Create a helper function to simplify checking roles. 1. In your application's root directory, create a `utils/` folder. - 1. Inside this directory, create a `roles.ts` file with the following code. The `checkRole()` helper uses the [`auth()`](/docs/sdk/nextjs/auth) helper to access the user's session claims. From the session claims, it accesses the `metadata` object to check the user's role. The `checkRole()` helper accepts a role of type `Roles`, which you created in the [Create a global TypeScript definition](#create-a-global-typescript-definition) step. It returns `true` if the user has that role or `false` if they do not. + 1. Inside this directory, create a `roles.ts` file with the following code. The `checkRole()` helper uses the [`auth()`](/docs/references/nextjs/auth) helper to access the user's session claims. From the session claims, it accesses the `metadata` object to check the user's role. The `checkRole()` helper accepts a role of type `Roles`, which you created in the [Create a global TypeScript definition](#create-a-global-typescript-definition) step. It returns `true` if the user has that role or `false` if they do not. ```ts {{ filename: 'utils/roles.ts' }} import { Roles } from '@/types/globals' diff --git a/docs/guides/custom-redirects.mdx b/docs/guides/custom-redirects.mdx index f5a3b9f311..b1ba643c4e 100644 --- a/docs/guides/custom-redirects.mdx +++ b/docs/guides/custom-redirects.mdx @@ -56,7 +56,7 @@ If you would like to override the `redirect_url` value and supply a custom redir ## Middleware -If you are using Next.js and want a more programmatically generated redirect option, you can use the [`auth.protect()`](/docs/references/nextjs/auth#protect) method in your [Clerk middleware](/docs/sdk/nextjs/clerk-middleware). +If you are using Next.js and want a more programmatically generated redirect option, you can use the [`auth.protect()`](/docs/references/nextjs/auth#protect) method in your [Clerk middleware](/docs/references/nextjs/clerk-middleware). ```tsx {{ filename: 'middleware.ts' }} import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server' diff --git a/docs/guides/force-mfa.mdx b/docs/guides/force-mfa.mdx index ada3ed1fbc..7477247c77 100644 --- a/docs/guides/force-mfa.mdx +++ b/docs/guides/force-mfa.mdx @@ -108,7 +108,7 @@ By default, Clerk does not enforce [multi-factor authentication (MFA)](/docs/aut - By default, the Nuxt SDK automatically adds [the `clerkMiddleware()` helper](/docs/sdk/nuxt/clerk-middleware) to your Nuxt application. To manually configure the middleware, in your `nuxt.config.ts` file, under the `clerk` property, set `skipServerMiddleware: true`. + By default, the Nuxt SDK automatically adds [the `clerkMiddleware()` helper](/docs/references/nuxt/clerk-middleware) to your Nuxt application. To manually configure the middleware, in your `nuxt.config.ts` file, under the `clerk` property, set `skipServerMiddleware: true`. ```tsx {{ filename: 'nuxt.config.ts', mark: [[3, 5]] }} export default defineNuxtConfig({ diff --git a/docs/guides/force-organizations.mdx b/docs/guides/force-organizations.mdx index cd28225482..1b319d88fa 100644 --- a/docs/guides/force-organizations.mdx +++ b/docs/guides/force-organizations.mdx @@ -76,7 +76,7 @@ This guide will be written for Next.js applications using App Router, but the sa - The [`auth()`](/docs/sdk/nextjs/auth) helper function can be used to get the `orgId` from the session _server-side_. If the `orgId` is `null`, then the user does not have an active organization. + The [`auth()`](/docs/references/nextjs/auth) helper function can be used to get the `orgId` from the session _server-side_. If the `orgId` is `null`, then the user does not have an active organization. ```tsx import { auth } from '@clerk/nextjs/server' @@ -91,7 +91,7 @@ This guide will be written for Next.js applications using App Router, but the sa - The [`useAuth()`](/docs/sdk/react/use-auth) hook can be used to get the `orgId` from the session _client-side_. If the `orgId` is `null`, then the user does not have an active organization. + The [`useAuth()`](/docs/references/react/use-auth) hook can be used to get the `orgId` from the session _client-side_. If the `orgId` is `null`, then the user does not have an active organization. ```tsx 'use client' @@ -109,7 +109,7 @@ This guide will be written for Next.js applications using App Router, but the sa ### Set an active organization - In the case of [prebuilt components](/docs/components/overview), an organization will _automatically_ be set as active each time the user creates an organization, accepts an invitation, or selects a membership from the organization switcher. In the case of custom flows, you will need to implement the logic for setting an organization as active. The [`useOrganizationList()`](/docs/sdk/react/use-organization-list) hook provides a `setActive` method to help you with this. + In the case of [prebuilt components](/docs/components/overview), an organization will _automatically_ be set as active each time the user creates an organization, accepts an invitation, or selects a membership from the organization switcher. In the case of custom flows, you will need to implement the logic for setting an organization as active. The [`useOrganizationList()`](/docs/references/react/use-organization-list) hook provides a `setActive` method to help you with this. In the following example, a custom organization switcher is created. It allows a user to select an organization from a list of their memberships. The `useOrganizationList()` hook is used to fetch a list of the user's memberships, and the `setActive` method is used to set the selected organization as active. @@ -229,7 +229,7 @@ This guide will be written for Next.js applications using App Router, but the sa ### Limit access using the `clerkMiddleware()` helper - Clerk's [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) helper can be used in both App Router and Pages Router applications to limit access to users with active organizations only. + Clerk's [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) helper can be used in both App Router and Pages Router applications to limit access to users with active organizations only. In the example below, the `clerkMiddleware()` helper is used to redirect signed in users to the organization selection page if they are not active in an organization. diff --git a/docs/guides/reverification.mdx b/docs/guides/reverification.mdx index 55a813c040..ee5819b034 100644 --- a/docs/guides/reverification.mdx +++ b/docs/guides/reverification.mdx @@ -124,7 +124,7 @@ To handle reverification server-side, use the [`auth.has()`](/docs/references/ba After setting up reverification on the server-side, you must handle reverification on the client-side. -The following example demonstrates how to use the [`useReverification()`](/docs/sdk/react/use-reverification) hook to detect authorization errors and automatically display a modal that allows the user to verify their identity. Upon successful verification, the previously failed request is automatically retried. +The following example demonstrates how to use the [`useReverification()`](/docs/references/react/use-reverification) hook to detect authorization errors and automatically display a modal that allows the user to verify their identity. Upon successful verification, the previously failed request is automatically retried. diff --git a/docs/guides/waitlist.mdx b/docs/guides/waitlist.mdx index cc4e4a4222..f4012afc5a 100644 --- a/docs/guides/waitlist.mdx +++ b/docs/guides/waitlist.mdx @@ -8,7 +8,7 @@ In [**Waitlist** mode](/docs/authentication/configuration/restrictions#waitlist) ## Install `@clerk/nextjs` - Clerk's [Next.js SDK](/docs/sdk/nextjs/methods) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -132,7 +132,7 @@ In [**Waitlist** mode](/docs/authentication/configuration/restrictions#waitlist) } ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/sdk/nextjs/clerk-middleware) to learn how to require authentication for specific routes. + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. ### Add a sign-in page @@ -146,7 +146,7 @@ In [**Waitlist** mode](/docs/authentication/configuration/restrictions#waitlist) } ``` - Update your environment variables to point to your custom sign-in page. For more information on building custom sign-in and sign-up pages, see the [dedicated guide](/docs/sdk/nextjs/custom-signup-signin-pages). + Update your environment variables to point to your custom sign-in page. For more information on building custom sign-in and sign-up pages, see the [dedicated guide](/docs/references/nextjs/custom-signup-signin-pages). ```env {{ filename: '.env.local' }} NEXT_PUBLIC_CLERK_SIGN_IN_URL="/sign-in" diff --git a/docs/how-clerk-works/overview.mdx b/docs/how-clerk-works/overview.mdx index 80f2a2b4cc..7b54e02a7f 100644 --- a/docs/how-clerk-works/overview.mdx +++ b/docs/how-clerk-works/overview.mdx @@ -3,7 +3,7 @@ title: How Clerk works description: Learn how Clerk is architected and how it works under the hood. --- -This guide provides a deep dive into Clerk's architecture and internal workings. For developers who are simply looking to add authentication to their app, see the [quickstart guides](/docs/quickstarts). +This guide provides a deep dive into Clerk's architecture and internal workings. For developers who are simply looking to add authentication to their app, see the [quickstart guides](/docs/quickstarts/overview). ## The frontend API diff --git a/docs/index.mdx b/docs/index.mdx index 7da7f54b6e..0645869ca2 100644 --- a/docs/index.mdx +++ b/docs/index.mdx @@ -7,7 +7,7 @@ template: wide Find all the guides and resources you need to develop with Clerk. - - [Quickstarts & Tutorials](/docs/quickstarts) + - [Quickstarts & Tutorials](/docs/quickstarts/overview) - Explore our end-to-end tutorials and getting started guides for different application stacks using Clerk. - {} @@ -33,67 +33,67 @@ Find all the guides and resources you need to develop with Clerk. ## Explore by frontend framework - - [Next.js](/docs/sdk/nextjs/quickstart) + - [Next.js](/docs/quickstarts/nextjs) - Easily add secure, beautiful, and fast authentication to Next.js with Clerk. - {} --- - - [React](/docs/sdk/react/quickstart) + - [React](/docs/quickstarts/react) - Get started installing and initializing Clerk in a new React + Vite app. - {} --- - - [Remix](/docs/sdk/remix/quickstart) + - [Remix](/docs/quickstarts/remix) - Easily add secure, edge- and SSR-friendly authentication to Remix with Clerk. - {} --- - - [RedwoodJS](/docs/sdk/redwood/quickstart) + - [RedwoodJS](/docs/references/redwood/overview) - Grow your RedwoodJS application with Clerk user management and authentication. - {} --- - - [React Native / Expo](/docs/sdk/expo/quickstart) + - [React Native / Expo](/docs/quickstarts/expo) - Use Clerk with Expo to authenticate users in your React Native application. - {} --- - - [Astro](/docs/sdk/astro/quickstart) + - [Astro](/docs/quickstarts/astro) - Easily add secure and SSR-friendly authentication to your Astro application with Clerk. - {} --- - - [iOS (Beta)](/docs/sdk/ios/quickstart) + - [iOS (Beta)](/docs/quickstarts/ios) - Use the Clerk iOS SDK to authenticate users in your native Apple applications. - {} --- - - [TanStack Start (Beta)](/docs/sdk/tanstack-start/quickstart) + - [TanStack Start (Beta)](/docs/quickstarts/tanstack-start) - Easily add secure and SSR-friendly authentication to your TanStack Start application with Clerk. - ![](data:image/webp;base64,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) --- - - [React Router (Beta)](/docs/sdk/react-router/quickstart) + - [React Router (Beta)](/docs/quickstarts/react-router) - Easily add secure, edge- and SSR-friendly authentication to React Router with Clerk. - {} --- - - [Nuxt](/docs/sdk/nuxt/quickstart) + - [Nuxt](/docs/quickstarts/nuxt) - Easily add secure, beautiful, and fast authentication to Nuxt with Clerk. - {} --- - - [Vue](/docs/sdk/vue/quickstart) + - [Vue](/docs/quickstarts/vue) - Get started installing and initializing Clerk in a new Vue + Vite app. - {} @@ -101,13 +101,13 @@ Find all the guides and resources you need to develop with Clerk. ## Explore by backend framework - - [Node / Express](/docs/sdk/nodejs/quickstart) + - [Node / Express](/docs/references/nodejs/overview) - Quickly add authentication and user management to your Node.js application. - {} --- - - [Ruby on Rails](/docs/sdk/ruby/quickstart) + - [Ruby on Rails](/docs/references/ruby/overview) - Integrate user management and authentication into your Ruby application. - {} diff --git a/docs/integrations/databases/convex.mdx b/docs/integrations/databases/convex.mdx index 3eea55d126..bbce2b5bc4 100644 --- a/docs/integrations/databases/convex.mdx +++ b/docs/integrations/databases/convex.mdx @@ -26,7 +26,7 @@ description: Learn how to integrate Clerk into your Convex application. Convex is the full-stack TypeScript development platform. With Convex you get to build a backend with a provided realtime database, file storage, text search, scheduling and more. Paired with Clerk's user authentication and management features, you can build a powerful application with minimal effort. -This tutorial assumes that you have already [set up a Clerk application](/docs/getting-started) and a [React + Convex application](https://docs.convex.dev/quickstart/react){{ target: '_blank' }}. This tutorial will also assume that you have not added Clerk to your application yet. +This tutorial assumes that you have already [set up a Clerk application](/docs/quickstarts/setup-clerk) and a [React + Convex application](https://docs.convex.dev/quickstart/react){{ target: '_blank' }}. This tutorial will also assume that you have not added Clerk to your application yet. ## Create a JWT template based on Convex diff --git a/docs/integrations/databases/fauna.mdx b/docs/integrations/databases/fauna.mdx index 06cf0be3f4..0e01ef4f9f 100644 --- a/docs/integrations/databases/fauna.mdx +++ b/docs/integrations/databases/fauna.mdx @@ -110,7 +110,7 @@ This guide will walk you through the steps to integrate Fauna with Clerk in your ## Authenticate Fauna queries in your Next.js app - You can now create Fauna JWTs in Clerk using the JWT template you created in the previous step. Generate the Fauna JWT by calling Clerk's [`useAuth().getToken`](/docs/sdk/react/use-auth) method, and use it to authenticate with Fauna as an end user, as shown in the following example: + You can now create Fauna JWTs in Clerk using the JWT template you created in the previous step. Generate the Fauna JWT by calling Clerk's [`useAuth().getToken`](/docs/references/react/use-auth) method, and use it to authenticate with Fauna as an end user, as shown in the following example: ```jsx {{ filename: 'app/page.tsx' }} 'use client' diff --git a/docs/integrations/databases/firebase.mdx b/docs/integrations/databases/firebase.mdx index a0c8d1ef50..61219e5315 100644 --- a/docs/integrations/databases/firebase.mdx +++ b/docs/integrations/databases/firebase.mdx @@ -205,7 +205,7 @@ Integrating Firebase with Clerk gives you the benefits of using Firebase's featu --- - - [Create custom sign-up and sign-in pages in your Next.js app](/docs/sdk/nextjs/custom-signup-signin-pages) + - [Create custom sign-up and sign-in pages in your Next.js app](/docs/references/nextjs/custom-signup-signin-pages) - Learn how add custom sign-up and sign-in pages with Clerk components in your Next.js application. --- diff --git a/docs/integrations/databases/grafbase.mdx b/docs/integrations/databases/grafbase.mdx index cc4cb1267f..948b6f3bd1 100644 --- a/docs/integrations/databases/grafbase.mdx +++ b/docs/integrations/databases/grafbase.mdx @@ -3,7 +3,7 @@ title: Integrate Grafbase with Clerk description: Learn how to integrate Clerk and Grafbase into your application --- -The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/getting-started). +The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/quickstarts/setup-clerk). After your Clerk application has been created, navigate to the [**JWT templates**](https://dashboard.clerk.com/last-active?path=jwt-templates) page in the Clerk Dashboard. Click on the **New template** button to create a new template based on Grafbase. @@ -67,7 +67,7 @@ If needed, you can also use a shortcode to dynamically include the users current You must send OIDC (JWT) tokens using an `Authorization: Bearer TOKEN` header. Your token must include the group if using group-based authentication. -The [`useAuth()`](/docs/sdk/react/use-auth) hook os the easiest way to generate JWTs. Use `await getToken({ template: "..." })` and specify your grafbase template to retrieve a new JWT. +The [`useAuth()`](/docs/references/react/use-auth) hook os the easiest way to generate JWTs. Use `await getToken({ template: "..." })` and specify your grafbase template to retrieve a new JWT. ```tsx diff --git a/docs/integrations/databases/hasura.mdx b/docs/integrations/databases/hasura.mdx index 843a35b979..9dea99b5d3 100644 --- a/docs/integrations/databases/hasura.mdx +++ b/docs/integrations/databases/hasura.mdx @@ -3,7 +3,7 @@ title: Integrate Hasura with Clerk description: Learn how to integrate Clerk into your Hasura application. --- -The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/getting-started). +The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/quickstarts/setup-clerk). After your Clerk application has been created, navigate to the [**JWT templates**](https://dashboard.clerk.com/last-active?path=jwt-templates) page in the Clerk Dashboard. Click on the **New template** button to create a new template based on Hasura. diff --git a/docs/integrations/databases/neon.mdx b/docs/integrations/databases/neon.mdx index 2efa53179b..d62eba71b1 100644 --- a/docs/integrations/databases/neon.mdx +++ b/docs/integrations/databases/neon.mdx @@ -39,11 +39,11 @@ This tutorial demonstrates how to integrate Neon Postgres with Clerk in a Next.j ## Integrate the Next.js Clerk SDK - Follow the [Next.js quickstart](/docs/sdk/nextjs/quickstart) to integrate the Clerk Next.js SDK into your application. + Follow the [Next.js quickstart](/docs/quickstarts/nextjs) to integrate the Clerk Next.js SDK into your application. ## Protect your application routes - To ensure that only authenticated users can access your application, modify [`clerkMiddleware`](/docs/sdk/nextjs/clerk-middleware) to require authentication for every route. + To ensure that only authenticated users can access your application, modify [`clerkMiddleware`](/docs/references/nextjs/clerk-middleware) to require authentication for every route. ```typescript {{ filename: 'middleware.ts', mark: [[3, 5]] }} import { clerkMiddleware } from '@clerk/nextjs/server' @@ -141,7 +141,7 @@ This tutorial demonstrates how to integrate Neon Postgres with Clerk in a Next.j ## Create Server Actions to handle user interactions - To handle form submissions for adding and deleting user messages, create two Server Actions in `app/actions.ts`. Use Clerk's [`auth()` helper](/docs/sdk/nextjs/auth) to obtain the user ID, which will be used to interact with the database. + To handle form submissions for adding and deleting user messages, create two Server Actions in `app/actions.ts`. Use Clerk's [`auth()` helper](/docs/references/nextjs/auth) to obtain the user ID, which will be used to interact with the database. ```typescript {{ filename: 'app/actions.ts' }} 'use server' @@ -174,7 +174,7 @@ This tutorial demonstrates how to integrate Neon Postgres with Clerk in a Next.j In your `app/page.tsx` file, add the following code to create the UI for the home page. If a message exists, the user can view and delete it; otherwise, they can add a new message. - To retrieve the user's messages, use Clerk's [`auth()` helper](/docs/sdk/nextjs/auth) to obtain the user's ID. Then, use this ID to query the database for the user's messages. + To retrieve the user's messages, use Clerk's [`auth()` helper](/docs/references/nextjs/auth) to obtain the user's ID. Then, use this ID to query the database for the user's messages. To enable the user to delete or add a message, use the `deleteUserMessage()` and `createUserMessage()` actions created in the previous step. diff --git a/docs/integrations/databases/nhost.mdx b/docs/integrations/databases/nhost.mdx index 9368abaf84..9ccf6c0d1a 100644 --- a/docs/integrations/databases/nhost.mdx +++ b/docs/integrations/databases/nhost.mdx @@ -3,7 +3,7 @@ title: Integrate Nhost with Clerk description: Learn how to integrate Clerk into your Nhost project. --- -The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/getting-started). +The first step is to create a new Clerk application from the Clerk Dashboard if you haven’t done so already. You can choose whichever authentication strategy and social sign-in providers you prefer. For more information, see the [setup guide](/docs/quickstarts/setup-clerk). After your Clerk application has been created, navigate to the [**JWT templates**](https://dashboard.clerk.com/last-active?path=jwt-templates) page in the Clerk Dashboard. Click on the **New template** button to create a new template based on Nhost. @@ -80,7 +80,7 @@ The last step of integrating Clerk as the modern web authentication solution for Even if you don’t have a database table set up yet, we can make use of the [built-in GraphQL introspection system](https://graphql.org/learn/introspection/) to validate that the authenticated requests are working properly. -Here is an example of using [Apollo Client](https://github.com/apollographql/apollo-client) in conjunction with the [`useAuth()`](/docs/sdk/react/use-auth) hook in a Next.js application to make a request to the Hasura GraphQL endpoint: +Here is an example of using [Apollo Client](https://github.com/apollographql/apollo-client) in conjunction with the [`useAuth()`](/docs/references/react/use-auth) hook in a Next.js application to make a request to the Hasura GraphQL endpoint: ```jsx import { ApolloProvider, ApolloClient, HttpLink, from, InMemoryCache } from '@apollo/client' diff --git a/docs/integrations/databases/supabase.mdx b/docs/integrations/databases/supabase.mdx index 2eaa97ea5a..5e07259eef 100644 --- a/docs/integrations/databases/supabase.mdx +++ b/docs/integrations/databases/supabase.mdx @@ -224,7 +224,7 @@ For interacting with the Supabase dashboard, you can either use the **Supabase i - The following example uses the [Next.js SDK](/docs/sdk/nextjs/methods) to access the [`useUser()`](/docs/sdk/react/use-user) and [`useSession()`](/docs/sdk/react/use-session) hooks, but you can adapt this code to work with any React-based Clerk SDK. + The following example uses the [Next.js SDK](/docs/references/nextjs/overview) to access the [`useUser()`](/docs/references/react/use-user) and [`useSession()`](/docs/references/react/use-session) hooks, but you can adapt this code to work with any React-based Clerk SDK. ```tsx {{ filename: 'app/page.tsx' }} 'use client' @@ -324,7 +324,7 @@ For interacting with the Supabase dashboard, you can either use the **Supabase i - The following example uses the [Next.js SDK](/docs/sdk/nextjs/methods) to demonstrate how to integrate Supabase with Clerk in a **server-side rendered** application. + The following example uses the [Next.js SDK](/docs/references/nextjs/overview) to demonstrate how to integrate Supabase with Clerk in a **server-side rendered** application. The `createClerkSupabaseClientSsr()` function is stored in a separate file so that it can be re-used in multiple places, such as within `page.tsx` or a Server Action file. This function uses the [`auth().getToken()`](/docs/references/nextjs/auth#use-auth-for-data-fetching) method to get the Clerk token and inject it into the request headers sent to Supabase. diff --git a/docs/manifest.json b/docs/manifest.json index e16faf2d0c..81d277a6dd 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -9,7 +9,7 @@ }, { "title": "Getting Started", - "href": "/docs/getting-started", + "href": "/docs/quickstarts/setup-clerk", "icon": "checkmark-circle" }, { @@ -91,11 +91,11 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/nextjs/quickstart" + "href": "/docs/quickstarts/nextjs" }, { "title": "Available Methods", - "href": "/docs/sdk/nextjs/methods" + "href": "/docs/references/nextjs/overview" }, { "title": "Guides", @@ -103,19 +103,19 @@ [ { "title": "Read session and user data", - "href": "/docs/sdk/nextjs/read-session-data" + "href": "/docs/references/nextjs/read-session-data" }, { "title": "Add custom sign up and sign in pages", - "href": "/docs/sdk/nextjs/custom-signup-signin-pages" + "href": "/docs/references/nextjs/custom-signup-signin-pages" }, { "title": "Integrate Clerk into your app with tRPC", - "href": "/docs/sdk/nextjs/trpc" + "href": "/docs/references/nextjs/trpc" }, { "title": "Next.js rendering modes and Clerk", - "href": "/docs/sdk/nextjs/rendering-modes" + "href": "/docs/references/nextjs/rendering-modes" } ] ] @@ -127,7 +127,7 @@ { "title": "`clerkMiddleware()`", "wrap": false, - "href": "/docs/sdk/nextjs/clerk-middleware" + "href": "/docs/references/nextjs/clerk-middleware" } ] ] @@ -139,20 +139,20 @@ { "title": "`auth()`", "wrap": false, - "href": "/docs/sdk/nextjs/auth" + "href": "/docs/references/nextjs/auth" }, { "title": "`currentUser()`", "wrap": false, - "href": "/docs/sdk/nextjs/current-user" + "href": "/docs/references/nextjs/current-user" }, { "title": "Route Handlers", - "href": "/docs/sdk/nextjs/route-handlers" + "href": "/docs/references/nextjs/route-handlers" }, { "title": "Server Actions", - "href": "/docs/sdk/nextjs/server-actions" + "href": "/docs/references/nextjs/server-actions" } ] ] @@ -164,12 +164,12 @@ { "title": "`getAuth()`", "wrap": false, - "href": "/docs/sdk/nextjs/get-auth" + "href": "/docs/references/nextjs/get-auth" }, { "title": "`buildClerkProps()`", "wrap": false, - "href": "/docs/sdk/nextjs/build-clerk-props" + "href": "/docs/references/nextjs/build-clerk-props" } ] ] @@ -200,11 +200,11 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/react/quickstart" + "href": "/docs/quickstarts/react" }, { "title": "Available Methods", - "href": "/docs/sdk/react/methods" + "href": "/docs/references/react/overview" }, { "title": "Client-side helpers", @@ -213,53 +213,53 @@ { "title": "`useUser()`", "wrap": false, - "href": "/docs/sdk/react/use-user" + "href": "/docs/references/react/use-user" }, { "title": "`useClerk()`", "wrap": false, - "href": "/docs/sdk/react/use-clerk" + "href": "/docs/references/react/use-clerk" }, { "title": "`useAuth()`", "wrap": false, - "href": "/docs/sdk/react/use-auth" + "href": "/docs/references/react/use-auth" }, { "title": "`useSignIn()`", "wrap": false, - "href": "/docs/sdk/react/use-sign-in" + "href": "/docs/references/react/use-sign-in" }, { "title": "`useSignUp()`", "wrap": false, - "href": "/docs/sdk/react/use-sign-up" + "href": "/docs/references/react/use-sign-up" }, { "title": "`useSession()`", "wrap": false, - "href": "/docs/sdk/react/use-session" + "href": "/docs/references/react/use-session" }, { "title": "`useSessionList()`", "wrap": false, - "href": "/docs/sdk/react/use-session-list" + "href": "/docs/references/react/use-session-list" }, { "title": "`useOrganization()`", "wrap": false, - "href": "/docs/sdk/react/use-organization" + "href": "/docs/references/react/use-organization" }, { "title": "`useOrganizationList()`", "wrap": false, - "href": "/docs/sdk/react/use-organization-list" + "href": "/docs/references/react/use-organization-list" }, { "title": "`useReverification()`", "tag": "(Beta)", "wrap": false, - "href": "/docs/sdk/react/use-reverification" + "href": "/docs/references/react/use-reverification" } ] ] @@ -275,11 +275,11 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/chrome-extension/quickstart" + "href": "/docs/quickstarts/chrome-extension" }, { "title": "Available Methods", - "href": "/docs/sdk/chrome-extension/methods" + "href": "/docs/references/chrome-extension/overview" }, { "title": "Guides", @@ -288,19 +288,19 @@ [ { "title": "Add React Router", - "href": "/docs/sdk/chrome-extension/add-react-router" + "href": "/docs/references/chrome-extension/add-react-router" }, { "title": "Sync auth status between your Chrome Extension and web app", - "href": "/docs/sdk/chrome-extension/sync-host" + "href": "/docs/references/chrome-extension/sync-host" }, { "title": "`createClerkClient()`", - "href": "/docs/sdk/chrome-extension/create-clerk-client" + "href": "/docs/references/chrome-extension/create-clerk-client" }, { "title": "Configure a consistent CRX ID", - "href": "/docs/sdk/chrome-extension/configure-consistent-crx-id" + "href": "/docs/references/chrome-extension/configure-consistent-crx-id" } ] ] @@ -316,11 +316,11 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/expo/quickstart" + "href": "/docs/quickstarts/expo" }, { "title": "Available Methods", - "href": "/docs/sdk/expo/methods" + "href": "/docs/references/expo/overview" }, { "title": "Hooks", @@ -328,11 +328,11 @@ [ { "title": "useLocalCredentials()", - "href": "/docs/sdk/expo/use-local-credentials" + "href": "/docs/references/expo/use-local-credentials" }, { "title": "useOAuth()", - "href": "/docs/sdk/expo/use-oauth" + "href": "/docs/references/expo/use-oauth" } ] ] @@ -343,15 +343,15 @@ [ { "title": "Read session and user data", - "href": "/docs/sdk/expo/read-session-user-data" + "href": "/docs/references/expo/read-session-user-data" }, { "title": "Use biometrics with local credentials", - "href": "/docs/sdk/expo/local-credentials" + "href": "/docs/references/expo/local-credentials" }, { "title": "Offline support", - "href": "/docs/sdk/expo/offline-support" + "href": "/docs/references/expo/offline-support" } ] ] @@ -363,11 +363,11 @@ [ { "title": "Overview", - "href": "/docs/sdk/expo/web-support/overview" + "href": "/docs/references/expo/web-support/overview" }, { "title": "Add custom sign-up and sign-in pages", - "href": "/docs/sdk/expo/web-support/custom-signup-signin-pages" + "href": "/docs/references/expo/web-support/custom-signup-signin-pages" } ] ] @@ -384,15 +384,15 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/ios/quickstart" + "href": "/docs/quickstarts/ios" }, { "title": "Available Methods", - "href": "/docs/sdk/ios/methods" + "href": "/docs/references/ios/overview" }, { "title": "`getToken()`", - "href": "/docs/sdk/ios/get-token" + "href": "/docs/references/ios/get-token" }, { "title": "Guides", @@ -400,7 +400,7 @@ [ { "title": "Sign in with Apple", - "href": "/docs/sdk/ios/sign-in-with-apple" + "href": "/docs/references/ios/sign-in-with-apple" } ] ] @@ -417,11 +417,11 @@ [ { "title": "Quickstart & Available Methods", - "href": "/docs/sdk/nodejs/quickstart" + "href": "/docs/references/nodejs/overview" }, { "title": "Available methods", - "href": "/docs/sdk/nodejs/methods" + "href": "/docs/references/nodejs/available-methods" }, { "title": "Connect/Express Middleware", @@ -438,11 +438,11 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/express/quickstart" + "href": "/docs/quickstarts/express" }, { "title": "Available Methods", - "href": "/docs/sdk/express/methods" + "href": "/docs/references/express/overview" } ] ] @@ -455,7 +455,7 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/fastify/quickstart" + "href": "/docs/quickstarts/fastify" } ] ] @@ -469,11 +469,11 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/react-router/quickstart" + "href": "/docs/quickstarts/react-router" }, { "title": "Available Methods", - "href": "/docs/sdk/react-router/methods" + "href": "/docs/references/react-router/overview" }, { "title": "Guides", @@ -481,15 +481,15 @@ [ { "title": "Read session and user data", - "href": "/docs/sdk/react-router/read-session-data" + "href": "/docs/references/react-router/read-session-data" }, { "title": "Add custom sign up and sign in pages", - "href": "/docs/sdk/react-router/custom-signup-signin-pages" + "href": "/docs/references/react-router/custom-signup-signin-pages" }, { "title": "Library mode", - "href": "/docs/sdk/react-router/library-mode" + "href": "/docs/references/react-router/library-mode" } ] ] @@ -501,11 +501,11 @@ { "title": "`rootAuthLoader()`", "wrap": false, - "href": "/docs/sdk/react-router/root-auth-loader" + "href": "/docs/references/react-router/root-auth-loader" }, { "title": "`getAuth()`", - "href": "/docs/sdk/react-router/get-auth" + "href": "/docs/references/react-router/get-auth" } ] ] @@ -521,27 +521,27 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/remix/quickstart" + "href": "/docs/quickstarts/remix" }, { "title": "``", "wrap": false, - "href": "/docs/sdk/remix/clerk-app" + "href": "/docs/references/remix/clerk-app" }, { "title": "SPA Mode", "wrap": false, - "href": "/docs/sdk/remix/spa-mode" + "href": "/docs/references/remix/spa-mode" }, { "title": "Add custom sign up and sign in pages", "wrap": true, - "href": "/docs/sdk/remix/custom-signup-signin-pages" + "href": "/docs/references/remix/custom-signup-signin-pages" }, { "title": "Read session and user data", "wrap": true, - "href": "/docs/sdk/remix/read-session-data" + "href": "/docs/references/remix/read-session-data" } ] ] @@ -555,11 +555,11 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/tanstack-start/quickstart" + "href": "/docs/quickstarts/tanstack-start" }, { "title": "Available Methods", - "href": "/docs/sdk/tanstack-start/methods" + "href": "/docs/references/tanstack-start/overview" }, { "title": "General references", @@ -567,11 +567,11 @@ [ { "title": "`getAuth()`", - "href": "/docs/sdk/tanstack-start/get-auth" + "href": "/docs/references/tanstack-start/get-auth" }, { "title": "`createClerkHandler()`", - "href": "/docs/sdk/tanstack-start/create-clerk-handler" + "href": "/docs/references/tanstack-start/create-clerk-handler" } ] ] @@ -582,12 +582,12 @@ [ { "title": "Add custom sign up and sign in pages", - "href": "/docs/sdk/tanstack-start/custom-signup-signin-pages", + "href": "/docs/references/tanstack-start/custom-signup-signin-pages", "wrap": true }, { "title": "Read session and user data", - "href": "/docs/sdk/tanstack-start/read-session-data", + "href": "/docs/references/tanstack-start/read-session-data", "wrap": true } ] @@ -604,15 +604,15 @@ [ { "title": "Quickstart & Available Methods", - "href": "/docs/sdk/go/quickstart" + "href": "/docs/references/go/overview" }, { "title": "Verifying sessions", - "href": "/docs/sdk/go/verifying-sessions" + "href": "/docs/references/go/verifying-sessions" }, { "title": "Use Clerk Go for Backend API Operations", - "href": "/docs/sdk/go/other-examples" + "href": "/docs/references/go/other-examples" }, { "title": "Go SDK repository", @@ -629,11 +629,11 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/astro/quickstart" + "href": "/docs/quickstarts/astro" }, { "title": "Available Methods", - "href": "/docs/sdk/astro/methods" + "href": "/docs/references/astro/overview" }, { "title": "UI Frameworks", @@ -641,7 +641,7 @@ [ { "title": "Use Clerk with Astro and React", - "href": "/docs/sdk/astro/react" + "href": "/docs/references/astro/react" } ] ] @@ -652,17 +652,17 @@ [ { "title": "Migrating from community SDK", - "href": "/docs/sdk/astro/migrating-from-astro-community-sdk" + "href": "/docs/references/astro/migrating-from-astro-community-sdk" }, { "title": "Read session and user data", "wrap": false, - "href": "/docs/sdk/astro/read-session-data" + "href": "/docs/references/astro/read-session-data" }, { "title": "Hybrid rendering", "wrap": false, - "href": "/docs/sdk/astro/hybrid-rendering" + "href": "/docs/references/astro/hybrid-rendering" } ] ] @@ -674,17 +674,17 @@ { "title": "`clerkMiddleware()`", "wrap": false, - "href": "/docs/sdk/astro/clerk-middleware" + "href": "/docs/references/astro/clerk-middleware" }, { "title": "Locals", "wrap": false, - "href": "/docs/sdk/astro/locals" + "href": "/docs/references/astro/locals" }, { "title": "Endpoints", "wrap": false, - "href": "/docs/sdk/astro/endpoints" + "href": "/docs/references/astro/endpoints" } ] ] @@ -696,42 +696,42 @@ { "title": "`$authStore`", "wrap": false, - "href": "/docs/sdk/astro/auth-store" + "href": "/docs/references/astro/auth-store" }, { "title": "`$clerkStore`", "wrap": false, - "href": "/docs/sdk/astro/clerk-store" + "href": "/docs/references/astro/clerk-store" }, { "title": "`$userStore`", "wrap": false, - "href": "/docs/sdk/astro/user-store" + "href": "/docs/references/astro/user-store" }, { "title": "`$signInStore`", "wrap": false, - "href": "/docs/sdk/astro/sign-in-store" + "href": "/docs/references/astro/sign-in-store" }, { "title": "`$signUpStore`", "wrap": false, - "href": "/docs/sdk/astro/sign-up-store" + "href": "/docs/references/astro/sign-up-store" }, { "title": "`$sessionStore`", "wrap": false, - "href": "/docs/sdk/astro/session-store" + "href": "/docs/references/astro/session-store" }, { "title": "`$sessionListStore`", "wrap": false, - "href": "/docs/sdk/astro/session-list-store" + "href": "/docs/references/astro/session-list-store" }, { "title": "`$organizationStore`", "wrap": false, - "href": "/docs/sdk/astro/organization-store" + "href": "/docs/references/astro/organization-store" } ] ] @@ -747,12 +747,9 @@ [ { "title": "Nuxt", - "href": "/docs/sdk/nuxt/quickstart" - }, - { - "title": "Available Methods", - "href": "/docs/sdk/nuxt/methods" + "href": "/docs/quickstarts/nuxt" }, + { "title": "Available Methods", "href": "/docs/references/nuxt/overview" }, { "title": "Guides", "items": [ @@ -760,12 +757,12 @@ { "title": "Read session and user data", "wrap": false, - "href": "/docs/sdk/nuxt/read-session-data" + "href": "/docs/references/nuxt/read-session-data" }, { "title": "Protect pages", "wrap": false, - "href": "/docs/sdk/nuxt/protect-pages" + "href": "/docs/references/nuxt/protect-pages" } ] ] @@ -777,7 +774,7 @@ { "title": "`clerkMiddleware()`", "wrap": false, - "href": "/docs/sdk/nuxt/clerk-middleware" + "href": "/docs/references/nuxt/clerk-middleware" } ] ] @@ -791,21 +788,15 @@ "icon": "vue", "items": [ [ - { - "title": "Quickstart", - "href": "/docs/sdk/vue/quickstart" - }, - { - "title": "Available Methods", - "href": "/docs/sdk/vue/methods" - }, + { "title": "Quickstart", "href": "/docs/quickstarts/vue" }, + { "title": "Available Methods", "href": "/docs/references/vue/overview" }, { "title": "Guides", "items": [ [ { "title": "Migrating from community SDK", - "href": "/docs/sdk/vue/migrating-from-vue-community-sdk" + "href": "/docs/references/vue/migrating-from-vue-community-sdk" } ] ] @@ -817,42 +808,42 @@ { "title": "`useUser()`", "wrap": false, - "href": "/docs/sdk/vue/use-user" + "href": "/docs/references/vue/use-user" }, { "title": "`useClerk()`", "wrap": false, - "href": "/docs/sdk/vue/use-clerk" + "href": "/docs/references/vue/use-clerk" }, { "title": "`useAuth()`", "wrap": false, - "href": "/docs/sdk/vue/use-auth" + "href": "/docs/references/vue/use-auth" }, { "title": "`useSignIn()`", "wrap": false, - "href": "/docs/sdk/vue/use-sign-in" + "href": "/docs/references/vue/use-sign-in" }, { "title": "`useSignUp`", "wrap": false, - "href": "/docs/sdk/vue/use-sign-up" + "href": "/docs/references/vue/use-sign-up" }, { "title": "`useSession()`", "wrap": false, - "href": "/docs/sdk/vue/use-session" + "href": "/docs/references/vue/use-session" }, { "title": "`useSessionList()`", "wrap": false, - "href": "/docs/sdk/vue/use-session-list" + "href": "/docs/references/vue/use-session-list" }, { "title": "`useOrganization()`", "wrap": false, - "href": "/docs/sdk/vue/use-organization" + "href": "/docs/references/vue/use-organization" } ] ] @@ -868,15 +859,15 @@ [ { "title": "Quickstart", - "href": "/docs/sdk/ruby/quickstart" + "href": "/docs/references/ruby/overview" }, { "title": "Available Methods", - "href": "/docs/sdk/ruby/methods" + "href": "/docs/references/ruby/available-methods" }, { "title": "Rack/Rails integration", - "href": "/docs/sdk/ruby/rack-rails" + "href": "/docs/references/ruby/rack-rails" }, { "title": "Ruby SDK repository", @@ -904,7 +895,7 @@ [ { "title": "Overview", - "href": "/docs/sdk/redwood/quickstart" + "href": "/docs/references/redwood/overview" }, { "title": "Redwood", @@ -2602,7 +2593,7 @@ [ { "title": "Quickstart", - "href": "/docs/references/javascript/quickstart", + "href": "/docs/quickstarts/javascript", "icon": "javascript" }, { @@ -3492,4 +3483,4 @@ } ] ] -} \ No newline at end of file +} diff --git a/docs/organizations/creating-organizations.mdx b/docs/organizations/creating-organizations.mdx index 535659a031..c8c9dc4410 100644 --- a/docs/organizations/creating-organizations.mdx +++ b/docs/organizations/creating-organizations.mdx @@ -11,7 +11,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for - The following example uses the [`useOrganizationList()`](/docs/sdk/react/use-organization-list) hook to get the `createOrganization()` method. This method is used to create a new organization with the provided name. + The following example uses the [`useOrganizationList()`](/docs/references/react/use-organization-list) hook to get the `createOrganization()` method. This method is used to create a new organization with the provided name. This example is written for Next.js App Router but can be adapted for any React meta framework, such as Remix. diff --git a/docs/organizations/custom-organization-switcher.mdx b/docs/organizations/custom-organization-switcher.mdx index 18d36f1f74..d641103997 100644 --- a/docs/organizations/custom-organization-switcher.mdx +++ b/docs/organizations/custom-organization-switcher.mdx @@ -11,7 +11,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for The following example: - - Uses the [`useOrganizationList()`](/docs/sdk/react/use-organization-list) hook to get `memberships`, which is a list of the current user's organization memberships. `memberships` returns `data`, which is an array of [`OrganizationMembership`](/docs/references/javascript/organization-membership) objects. + - Uses the [`useOrganizationList()`](/docs/references/react/use-organization-list) hook to get `memberships`, which is a list of the current user's organization memberships. `memberships` returns `data`, which is an array of [`OrganizationMembership`](/docs/references/javascript/organization-membership) objects. - Maps over the `data` array to display the user's organization memberships in a list. - Provides a button that calls `setActive()` to set the selected organization as the active organization. - Provides a button to load more organizations if there are more available. The `data` array is paginated and will only return the first 10 results, so the `fetchNext()` method is used to load more organizations if they are available. diff --git a/docs/organizations/inviting-users.mdx b/docs/organizations/inviting-users.mdx index 68d7a39a6c..9b1f6c1bb2 100644 --- a/docs/organizations/inviting-users.mdx +++ b/docs/organizations/inviting-users.mdx @@ -20,7 +20,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for To invite a user: - 1. Use the [`useOrganization()`](/docs/sdk/react/use-organization) hook to get `organization`, which is the active organization. + 1. Use the [`useOrganization()`](/docs/references/react/use-organization) hook to get `organization`, which is the active organization. 1. Use `organization` to call the [`inviteMember()`](/docs/references/javascript/organization/invitations#invite-member) method, with the recipient's email address and desired role passed as arguments. To revoke an invitation: diff --git a/docs/organizations/manage-invitations.mdx b/docs/organizations/manage-invitations.mdx index a760f50d32..bdd352eba4 100644 --- a/docs/organizations/manage-invitations.mdx +++ b/docs/organizations/manage-invitations.mdx @@ -9,7 +9,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for - The following example uses the [`useOrganizationList()`](/docs/sdk/react/use-organization) hook to get `userInvitations`, which is a list of the user's organization invitations. + The following example uses the [`useOrganizationList()`](/docs/references/react/use-organization) hook to get `userInvitations`, which is a list of the user's organization invitations. `userInvitations` is an object with `data` that contains an array of [`UserOrganizationInvitation`](/docs/references/javascript/types/user-organization-invitation) objects. diff --git a/docs/organizations/manage-membership-requests.mdx b/docs/organizations/manage-membership-requests.mdx index 2084705268..75dc7ad6d6 100644 --- a/docs/organizations/manage-membership-requests.mdx +++ b/docs/organizations/manage-membership-requests.mdx @@ -9,7 +9,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for - The following example uses the [`useOrganization()`](/docs/sdk/react/use-organization) hook to get `membershipRequests`, which is a list of the active organization's membership requests. + The following example uses the [`useOrganization()`](/docs/references/react/use-organization) hook to get `membershipRequests`, which is a list of the active organization's membership requests. `membershipRequests` is an object with `data` that contains an array of [`OrganizationMembershipRequest`](/docs/references/javascript/organization-membership-request) objects. diff --git a/docs/organizations/managing-roles.mdx b/docs/organizations/managing-roles.mdx index 8cc42ee9e8..7dff5b5523 100644 --- a/docs/organizations/managing-roles.mdx +++ b/docs/organizations/managing-roles.mdx @@ -11,7 +11,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for - The following example uses the [`useOrganization()`](/docs/sdk/react/use-organization) hook to get `memberships`, which is a list of the active organization's memberships. + The following example uses the [`useOrganization()`](/docs/references/react/use-organization) hook to get `memberships`, which is a list of the active organization's memberships. `memberships` is an object with `data` that contains an array of [`OrganizationMembership`](/docs/references/javascript/organization-membership) objects. diff --git a/docs/organizations/org-slugs-in-urls.mdx b/docs/organizations/org-slugs-in-urls.mdx index 1283b3dc21..fefae307f5 100644 --- a/docs/organizations/org-slugs-in-urls.mdx +++ b/docs/organizations/org-slugs-in-urls.mdx @@ -136,7 +136,7 @@ This guide shows you how to add organization slugs to your app's URLs, configure > [!TIP] > If your app doesn't use `clerkMiddleware()`, or you prefer to manually set the active organization, use the [`setActive()`](/docs/references/javascript/clerk/session-methods) method to control the active organization on the client-side. See [this guide](/docs/guides/force-organizations#set-an-active-organization-based-on-the-url) to learn how to manually activate a specific organization based on the URL. - With [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware), you can use the [`organizationSyncOptions`](/docs/references/nextjs/clerk-middleware#organization-sync-options) property to declare URL patterns that determine whether a specific organization or user's personal account should be activated. + With [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware), you can use the [`organizationSyncOptions`](/docs/references/nextjs/clerk-middleware#organization-sync-options) property to declare URL patterns that determine whether a specific organization or user's personal account should be activated. If the middleware detects one of these patterns in the URL and finds that a different organization is active in the session, it'll attempt to set the specified organization as the active one. @@ -227,7 +227,7 @@ This guide shows you how to add organization slugs to your app's URLs, configure - To get organization information on the server-side, access the [`Auth`](/docs/references/backend/types/auth-object) object. In Next.js apps, this object is returned by [`auth()`](/docs/sdk/nextjs/auth). In other frameworks, use the [`getAuth()`](/docs/sdk/nextjs/get-auth) helper to get the `Auth` object. + To get organization information on the server-side, access the [`Auth`](/docs/references/backend/types/auth-object) object. In Next.js apps, this object is returned by [`auth()`](/docs/references/nextjs/auth). In other frameworks, use the [`getAuth()`](/docs/references/nextjs/get-auth) helper to get the `Auth` object. To access additional organization information like the organization name, you'll need to [customize the Clerk session token](/docs/backend-requests/making/custom-session-token) to include these details: @@ -274,7 +274,7 @@ This guide shows you how to add organization slugs to your app's URLs, configure - To get organization information on the client-side, use the [`useOrganization()`](/docs/sdk/react/use-organization) hook to access the [`organization`](/docs/references/javascript/organization/organization) object. + To get organization information on the client-side, use the [`useOrganization()`](/docs/references/react/use-organization) hook to access the [`organization`](/docs/references/javascript/organization/organization) object. ```tsx {{ filename: 'app/orgs/[slug]/page.tsx', mark: [24] }} 'use client' diff --git a/docs/organizations/overview.mdx b/docs/organizations/overview.mdx index 2960a7beb0..b750105d26 100644 --- a/docs/organizations/overview.mdx +++ b/docs/organizations/overview.mdx @@ -74,7 +74,7 @@ By default, when a user initially signs in to a Clerk-powered application, they The easiest way to allow users to set an organization as active is to use the [``](/docs/components/organization/organization-switcher) component. -You can also use the `setActive()` method, which is available on the [`Clerk`](/docs/references/javascript/clerk/session-methods#set-active) object and is returned by the [`useOrganizationList()`](/docs/sdk/react/use-organization-list) hook. +You can also use the `setActive()` method, which is available on the [`Clerk`](/docs/references/javascript/clerk/session-methods#set-active) object and is returned by the [`useOrganizationList()`](/docs/references/react/use-organization-list) hook. If you would like to hide personal workspaces and require users to always have an organization set as active, see the [Force organizations](/docs/guides/force-organizations) guide. diff --git a/docs/organizations/updating-organizations.mdx b/docs/organizations/updating-organizations.mdx index d87ed740e2..6fd3ddf347 100644 --- a/docs/organizations/updating-organizations.mdx +++ b/docs/organizations/updating-organizations.mdx @@ -13,7 +13,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for The following example: - 1. Uses the [`useOrganization()`](/docs/sdk/react/use-organization) hook to fetch the active `organization`. + 1. Uses the [`useOrganization()`](/docs/references/react/use-organization) hook to fetch the active `organization`. 1. Uses `organization` to call the [`update()`](/docs/references/javascript/organization/organization#update) method with the desired name to update the organization. This example is written for Next.js App Router but can be adapted for any React meta framework, such as Remix. diff --git a/docs/organizations/verify-user-permissions.mdx b/docs/organizations/verify-user-permissions.mdx index 60a34a6c81..58241c1453 100644 --- a/docs/organizations/verify-user-permissions.mdx +++ b/docs/organizations/verify-user-permissions.mdx @@ -176,7 +176,7 @@ The following examples work for both SSR and CSR. The example: - - uses the `userId` returned from [`auth()`](/docs/sdk/nextjs/auth) to check if the user is signed in. If the user is not **authenticated**, the Route Handler will return a `401` error. + - uses the `userId` returned from [`auth()`](/docs/references/nextjs/auth) to check if the user is signed in. If the user is not **authenticated**, the Route Handler will return a `401` error. - uses `has()` to check if the user has the correct permission. If the user is not **authorized**, `has()` will return false, causing the Route Handler to return a `403` error. ```tsx {{ filename: 'app/api/get-teams/route.tsx' }} @@ -229,7 +229,7 @@ The following examples work for both SSR and CSR. - Use the [`getAuth()`](/docs/sdk/nextjs/get-auth) helper to access the `has()` helper in a Next.js Pages Router application. + Use the [`getAuth()`](/docs/references/nextjs/get-auth) helper to access the `has()` helper in a Next.js Pages Router application. The following example: diff --git a/docs/organizations/viewing-memberships.mdx b/docs/organizations/viewing-memberships.mdx index ee43702a65..63ad061baa 100644 --- a/docs/organizations/viewing-memberships.mdx +++ b/docs/organizations/viewing-memberships.mdx @@ -11,7 +11,7 @@ This guide will demonstrate how to use the Clerk API to build a custom flow for The following example: - 1. Uses the [`useOrganizationList()`](/docs/sdk/react/use-organization-list) hook to get `memberships`, which is a list of the current user's organization memberships. + 1. Uses the [`useOrganizationList()`](/docs/references/react/use-organization-list) hook to get `memberships`, which is a list of the current user's organization memberships. `memberships` returns `data`, which is an array of [`OrganizationMembership`](/docs/references/javascript/organization-membership) objects. 1. Maps over the `data` array to display the user's organization memberships in a table. diff --git a/docs/sdk/astro/quickstart.mdx b/docs/quickstarts/astro.mdx similarity index 88% rename from docs/sdk/astro/quickstart.mdx rename to docs/quickstarts/astro.mdx index 8945ac5198..c6ed6adbaf 100644 --- a/docs/sdk/astro/quickstart.mdx +++ b/docs/quickstarts/astro.mdx @@ -33,7 +33,7 @@ description: Add authentication and user management to your Astro app with Clerk ## Install `@clerk/astro` - Clerk's [Astro SDK](/docs/sdk/astro/methods) provides a set of components, hooks, and stores that make it easy to build authentication and user management features in your Astro app. + Clerk's [Astro SDK](/docs/references/astro/overview) provides a set of components, hooks, and stores that make it easy to build authentication and user management features in your Astro app. Run the following command to install the SDK: @@ -92,7 +92,7 @@ description: Add authentication and user management to your Astro app with Clerk ## Add `clerkMiddleware()` to your app - [`clerkMiddleware()`](/docs/sdk/astro/clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + [`clerkMiddleware()`](/docs/references/astro/clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: 1. Create a `middleware.ts` file. - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. @@ -103,7 +103,7 @@ description: Add authentication and user management to your Astro app with Clerk export const onRequest = clerkMiddleware() ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/sdk/astro/clerk-middleware) to learn how to require authentication for specific routes. + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/astro/clerk-middleware) to learn how to require authentication for specific routes. ## Add Clerk components to your app @@ -183,12 +183,12 @@ description: Add authentication and user management to your Astro app with Clerk ## Next steps - - [Protect routes using Clerk Middleware](/docs/sdk/astro/clerk-middleware) + - [Protect routes using Clerk Middleware](/docs/references/astro/clerk-middleware) - Learn how to protect specific routes from unauthenticated users. --- - - [Read session and user data](/docs/sdk/astro/read-session-data) + - [Read session and user data](/docs/references/astro/read-session-data) - Learn how to use Clerk's stores and helpers to access the active session and user data in your Astro app. --- diff --git a/docs/sdk/chrome-extension/quickstart.mdx b/docs/quickstarts/chrome-extension.mdx similarity index 96% rename from docs/sdk/chrome-extension/quickstart.mdx rename to docs/quickstarts/chrome-extension.mdx index cc3b95826f..bcbf211ec9 100644 --- a/docs/sdk/chrome-extension/quickstart.mdx +++ b/docs/quickstarts/chrome-extension.mdx @@ -57,7 +57,7 @@ description: Add authentication and user management to your Chrome Extension wit ## Install `@clerk/chrome-extension` - Clerk's [Chrome Extension SDK](/docs/sdk/chrome-extension/methods) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + Clerk's [Chrome Extension SDK](/docs/references/chrome-extension/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. Add the SDK to your project: @@ -282,22 +282,22 @@ description: Add authentication and user management to your Chrome Extension wit > [!WARNING] > After signing up or signing in, your popup may appear to crash. Closing and reopening the popup should restart the extension and you should be signed in. > - > Your extension does not yet have anything to handle routing, and by default, the Clerk components attempt to redirect the user. See [the guide on adding React Router to your Chrome Extension](/docs/sdk/chrome-extension/add-react-router) to add routing to your extension. + > Your extension does not yet have anything to handle routing, and by default, the Clerk components attempt to redirect the user. See [the guide on adding React Router to your Chrome Extension](/docs/references/chrome-extension/add-react-router) to add routing to your extension. ## Next steps - - [Add React Router](/docs/sdk/chrome-extension/add-react-router) + - [Add React Router](/docs/references/chrome-extension/add-react-router) - Learn how to add React Router to your Chrome Extension. --- - - [Sync your Chrome Extension with your web app](/docs/sdk/chrome-extension/sync-host) + - [Sync your Chrome Extension with your web app](/docs/references/chrome-extension/sync-host) - Learn how to configure your Chrome Extension to sync user authentication with your web application. --- - - [createClerkClient()](/docs/sdk/chrome-extension/create-clerk-client) + - [createClerkClient()](/docs/references/chrome-extension/create-clerk-client) - For Chrome Extension's configured as popups, learn how to use Clerk's `createClerkClient()` function in a background service worker to ensure that the user's session is always fresh. diff --git a/docs/sdk/expo/quickstart.mdx b/docs/quickstarts/expo.mdx similarity index 94% rename from docs/sdk/expo/quickstart.mdx rename to docs/quickstarts/expo.mdx index 4c2e9f5190..7a130303cd 100644 --- a/docs/sdk/expo/quickstart.mdx +++ b/docs/quickstarts/expo.mdx @@ -35,7 +35,7 @@ description: Add authentication and user management to your Expo app with Clerk. ## Install `@clerk/clerk-expo` - Clerk's [Expo SDK](/docs/sdk/expo/methods) gives you access to prebuilt components, hooks, and helpers to make user authentication easier. + Clerk's [Expo SDK](/docs/references/expo/overview) gives you access to prebuilt components, hooks, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -220,7 +220,7 @@ description: Add authentication and user management to your Expo app with Clerk. 1. Create an `(auth)` [route group](https://docs.expo.dev/router/layouts/#groups). This will group your sign-up and sign-in pages. 1. In the `(auth)` group, create a `_layout.tsx` file. - 1. Paste the following code. The [`useAuth()`](/docs/sdk/react/use-auth) hook is used to access the user's authentication state. If the user is already signed in, they will be redirected to the home page. + 1. Paste the following code. The [`useAuth()`](/docs/references/react/use-auth) hook is used to access the user's authentication state. If the user is already signed in, they will be redirected to the home page. ```tsx filename="app/(auth)/_layout.tsx" import { Redirect, Stack } from 'expo-router' @@ -240,7 +240,7 @@ description: Add authentication and user management to your Expo app with Clerk. ### Sign-up page 1. In the `(auth)` group, create a `sign-up.tsx` file. - 1. Paste the following code. The [`useSignUp()`](/docs/sdk/react/use-sign-up) hook is used to create a sign-up flow. The user can sign up using their email and password and will receive an email verification code to confirm their email. + 1. Paste the following code. The [`useSignUp()`](/docs/references/react/use-sign-up) hook is used to create a sign-up flow. The user can sign up using their email and password and will receive an email verification code to confirm their email. ```tsx {{ filename: 'app/(auth)/sign-up.tsx', collapsible: true }} import * as React from 'react' @@ -348,7 +348,7 @@ description: Add authentication and user management to your Expo app with Clerk. ### Sign-in page 1. In the `(auth)` group, create a `sign-in.tsx` file. - 1. Paste the following code. The [`useSignIn()`](/docs/sdk/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using email address and password, or navigate to the sign-up page. + 1. Paste the following code. The [`useSignIn()`](/docs/references/react/use-sign-in) hook is used to create a sign-in flow. The user can sign in using email address and password, or navigate to the sign-up page. ```tsx {{ filename: 'app/(auth)/sign-in.tsx', collapsible: true }} import { useSignIn } from '@clerk/clerk-expo' @@ -508,7 +508,7 @@ See the [`expo-updates`](https://docs.expo.dev/versions/latest/sdk/updates) libr --- - - [Read session and user data](/docs/sdk/expo/read-session-user-data) + - [Read session and user data](/docs/references/expo/read-session-user-data) - Learn how to read session and user data with Expo. --- diff --git a/docs/sdk/express/quickstart.mdx b/docs/quickstarts/express.mdx similarity index 96% rename from docs/sdk/express/quickstart.mdx rename to docs/quickstarts/express.mdx index 81170b0c3f..f5dc8d6491 100644 --- a/docs/sdk/express/quickstart.mdx +++ b/docs/quickstarts/express.mdx @@ -35,7 +35,7 @@ Learn how to integrate Clerk into your Express backend for secure user authentic ## Install `@clerk/express` - Clerk's [Express SDK](/docs/sdk/express/methods) ships with a variety of helpers for the backend to make user authentication easier. + Clerk's [Express SDK](/docs/references/express/overview) ships with a variety of helpers for the backend to make user authentication easier. To get started using Clerk with Express, add the SDK to your project: @@ -149,7 +149,7 @@ Learn how to integrate Clerk into your Express backend for secure user authentic --- - - [Express SDK reference](/docs/sdk/express/methods) + - [Express SDK reference](/docs/references/express/overview) - Learn more about additional Express SDK methods. --- diff --git a/docs/sdk/fastify/quickstart.mdx b/docs/quickstarts/fastify.mdx similarity index 95% rename from docs/sdk/fastify/quickstart.mdx rename to docs/quickstarts/fastify.mdx index 03d9c8160f..9e146a2029 100644 --- a/docs/sdk/fastify/quickstart.mdx +++ b/docs/quickstarts/fastify.mdx @@ -110,7 +110,7 @@ Learn how to integrate Clerk into your Fastify backend for secure user authentic ## Use `getAuth()` to access the auth state and protect routes - The following example uses [`getAuth()`](/docs/sdk/nextjs/get-auth){{ target: '_blank' }} to retrieve the `userId`, which is used to protect the route and is passed to [`clerkClient.users.getUser()`](/docs/references/backend/user/get-user){{ target: '_blank' }} to retrieve the current user's `User` object. + The following example uses [`getAuth()`](/docs/references/nextjs/get-auth){{ target: '_blank' }} to retrieve the `userId`, which is used to protect the route and is passed to [`clerkClient.users.getUser()`](/docs/references/backend/user/get-user){{ target: '_blank' }} to retrieve the current user's `User` object. ```ts {{ filename: 'index.ts' }} import 'dotenv/config' diff --git a/docs/sdk/ios/quickstart.mdx b/docs/quickstarts/ios.mdx similarity index 100% rename from docs/sdk/ios/quickstart.mdx rename to docs/quickstarts/ios.mdx diff --git a/docs/references/javascript/quickstart.mdx b/docs/quickstarts/javascript.mdx similarity index 100% rename from docs/references/javascript/quickstart.mdx rename to docs/quickstarts/javascript.mdx diff --git a/docs/sdk/nextjs/quickstart.mdx b/docs/quickstarts/nextjs.mdx similarity index 92% rename from docs/sdk/nextjs/quickstart.mdx rename to docs/quickstarts/nextjs.mdx index 13e1b00958..1c6e51bce7 100644 --- a/docs/sdk/nextjs/quickstart.mdx +++ b/docs/quickstarts/nextjs.mdx @@ -27,7 +27,7 @@ description: Add authentication and user management to your Next.js app with Cle ## Install `@clerk/nextjs` - Clerk's [Next.js SDK](/docs/sdk/nextjs/methods) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -93,7 +93,7 @@ description: Add authentication and user management to your Next.js app with Cle ], } ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/sdk/nextjs/clerk-middleware) to learn how to require authentication for specific routes. + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. ## Add `` and Clerk components to your app @@ -181,17 +181,17 @@ description: Add authentication and user management to your Next.js app with Cle ## Next steps - - [Protect routes using Clerk Middleware](/docs/sdk/nextjs/clerk-middleware) + - [Protect routes using Clerk Middleware](/docs/references/nextjs/clerk-middleware) - Learn how to protect specific routes from unauthenticated users. --- - - [Create custom sign-up and sign-in pages](/docs/sdk/nextjs/custom-signup-signin-pages) + - [Create custom sign-up and sign-in pages](/docs/references/nextjs/custom-signup-signin-pages) - Learn how add custom sign-up and sign-in pages with Clerk components. --- - - [Read user and session data](/docs/sdk/nextjs/read-session-data) + - [Read user and session data](/docs/references/nextjs/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. --- @@ -201,7 +201,7 @@ description: Add authentication and user management to your Next.js app with Cle --- - - [Next.js SDK Reference](/docs/sdk/nextjs/methods) + - [Next.js SDK Reference](/docs/references/nextjs/overview) - Learn more about additional Next.js methods. --- diff --git a/docs/sdk/nuxt/quickstart.mdx b/docs/quickstarts/nuxt.mdx similarity index 93% rename from docs/sdk/nuxt/quickstart.mdx rename to docs/quickstarts/nuxt.mdx index d398083f15..452360020f 100644 --- a/docs/sdk/nuxt/quickstart.mdx +++ b/docs/quickstarts/nuxt.mdx @@ -35,7 +35,7 @@ description: Add authentication and user management to your Nuxt app with Clerk. ## Install `@clerk/nuxt` - Clerk's [Nuxt SDK](/docs/sdk/nuxt/methods) gives you access to prebuilt components, Vue composables, and helpers to make user authentication easier. + Clerk's [Nuxt SDK](/docs/references/nuxt/overview) gives you access to prebuilt components, Vue composables, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -142,12 +142,12 @@ description: Add authentication and user management to your Nuxt app with Clerk. Learn more about Clerk components, how to customize them, and how to use Clerk's client-side helpers using the following guides. - - [Protect API routes using `clerkMiddleware()`](/docs/sdk/nuxt/clerk-middleware) + - [Protect API routes using `clerkMiddleware()`](/docs/references/nuxt/clerk-middleware) - Learn how to protect specific API routes from unauthenticated users. --- - - [Read session and user data](/docs/sdk/nuxt/read-session-data) + - [Read session and user data](/docs/references/nuxt/read-session-data) - Learn how to use Clerk's composables and helpers to access the active session and user data in your Nuxt app. --- diff --git a/docs/quickstarts.mdx b/docs/quickstarts/overview.mdx similarity index 96% rename from docs/quickstarts.mdx rename to docs/quickstarts/overview.mdx index ec785aa618..ae8326fb50 100644 --- a/docs/quickstarts.mdx +++ b/docs/quickstarts/overview.mdx @@ -6,37 +6,37 @@ description: See the getting started guides and tutorials. ## Full Stack - - [Next.js](/docs/sdk/nextjs/quickstart) + - [Next.js](/docs/quickstarts/nextjs) - Easily add secure, beautiful, and fast authentication to your Next.js application with Clerk. - {} --- - - [Remix](/docs/sdk/remix/quickstart) + - [Remix](/docs/quickstarts/remix) - Easily add secure, edge- and SSR-friendly authentication to your Remix application with Clerk. - {} --- - - [RedwoodJS](/docs/sdk/redwood/quickstart) + - [RedwoodJS](/docs/references/redwood/overview) - Grow your RedwoodJS application with Clerk user management and authentication. - {} --- - - [Astro](/docs/sdk/astro/quickstart) + - [Astro](/docs/quickstarts/astro) - Easily add secure and SSR-friendly authentication to your Astro application with Clerk. - {} --- - - [TanStack Start (Beta)](/docs/sdk/tanstack-start/quickstart) + - [TanStack Start (Beta)](/docs/quickstarts/tanstack-start) - Easily add secure and SSR-friendly authentication to your TanStack Start application with Clerk. - ![](data:image/webp;base64,UklGRu4JAABXRUJQVlA4TOEJAAAvP8APEM8Hu9r2tM0n/1KSMjNze8UzdNWu0duOwMzMlfXTGnBt204b3SczDjPU0+Vr5j+nnZ6Zp2dm0vjJ0oUc2bZqZZ1z3rX/cXcdQphEQgoWB0TgMHOHa3JEASCA6mXbtl1bY02NHcC+gJtq6gS2j+Aa/Sf7/8nY7ADw+MR//od0UAdVqEIUojCFeOEKdZ2TC6d7an1+DTIlHUShDur0v2kPEIX1/ZF5rZCuYct/87xXJc3Jdcw4BHhRxdJqF9PdrdRpi51GGXWq0NbpSINW7nVWUXczcgDDExNiEfXqZnAy7g9PvOkcndL6ndA2FYTZ0e8waiGBcsekHQvyZJbM2C5dIKjFQE9hqRgZowLYZ5RSB00iBaNgKQx8DtQvIjlPAAWYEBECKCAEwEeBpigqfJvUv+k1pq4ajyduRLjbAe2/hCJ8eA5ejtzrLD3L+S1LJiwHtfy3qRsMF6O5Zs3w+OdGQFuYDmjCTUfIq2jCRruMVca0QtDGxEN73TM9m9mVTwTQlWqXKebbnReuFRAsKaMztr8sBDF4XQiCZf2gyhm+evx475T/bMXkJ/P/bH7sn4/fpvxg5xfdVOv/C1DP+5nOBtpF8V51yL7Hp19nN/1fWo2BdPkhPBQTrqPW+58ZI04aj9D8dcriIDYfPs2PeQKY0xtmlRvzW5u3wjVx+VkW8V3c9Bcz/d68ppcUT7NN5BwXMtrfxltpLS6TnfpxZ65i9Jva4/F09xKHDn33UUc9g2Lsa8dmfGDtesPbS7Q+O2PMJOiThnjBUOGBPkhPBomjsrRXRWakM5V5K+byF0kO8uIPPOcl/mupUf4X+Q+g+66zmdB050bbJVvZst3+2OJJd7s3ax939pabr/0Tagr9c9w69ufp30Cs+xcogWqHv6AEedBreClwp6kGmkJSOyjPr6vh72iOy4jMPEacH9WAtuOxwWx1qDE9nwH2MhCgNB9uLeTdml/ZZaWrxv9MWjrSMfjLmHJTb50zARERTEvbtrVt5K0IDGF0mDkb6FLaMDPYwxBmzuBRmSF84GFmxkj25WOBISv4v++T/j+i/w7ctnGk0FOwe8XvoKz9f2KnO/V25pQexx1WfZ5zGTjUXY7U3ff4yh32haU7VwF/vYjCtrJNMplMryD55Zckov8O3LaNpCiDFTqX926/4ElBrkDDz3//8+8P//OfGOfufyB+tjW6CgJR/PyL+yNLgruEZqMrucV//eF7w3cAQEAE1gbEyP01jijSv/3Gv2XfGFgyv//B+Lc/ijQvAtH9/esUfXtzaDDyx7d4/TCdCLz/w1dp+OP2PH69dgMO3k81AvHpl19A6swHADs3AFJ9KBAffJGW2wYhzAHYSyUC8eHn6fjs9tAg9t51jekAgv3kEYiP7qXpjutyxnagw9BJKQQfPk7ujutCcjsdZEvS88GTZJ65eeGBlzCh4vVteLLaQV2dln0v4SHw6bOkCqcHNJb3nCewMBRZPOfUsdtlc5ggAu8/fyEgscIBSVX080RFRLDMrHax02GZXk7X3090PT6yOS8qFHRE57rq55oeBsgWF0cWL4BOVstAdOz2EhmL6CDRsxOr82x9gLFozkV+LCDrpDkO9bNw0dEJceK8OjK4ekTLRmzsj+KnljkqGuhXfRy4CAOXomAhc43lW2qdRZaA86PTnS5r+qgnbj1LmU2BpgRcvw+0qOPoIKk+4LLkAyNmqyDnfHX59Mzp4sbNZP6gwHjxmQ0rDutS1HHIccghcjQ1gwdc7teLmdkKoHZwGRis7hoXU3fcI4zzLAgIAAiYP6MTWUIagaQ5ks8fyMi8RLMUQs3Q4hmUrYJY2d7t6OKduGUeJUGbsqwBDXSIEtGUI5MGROCE2LTUz4IW5Y1BxMh2EM+wfNVQVpLrwY0yu5wBVdZIlzSASUGcy6BwKbxWDmtQZhFEgc2D1cHyZUBERCE2PFgKAAIAxFpUVTQOQEAwNQ6aD7jE/f3ZZQazmtXgkhArfasClpkAKPVgBQBUAwDkxHySynVFBseY0dmYP+AzHvfPW2ox29QygKUIAOtbAQaVuFHFbEKXPsUvayoRl6bGJt7M7g9kuH7uDVfb1TCryFI5w8FFxljVxmaNzfqMP+CqUcUncZ80Ozbxek228GZkci7mMak6RKyNLFYj4uZWrRXOSYEM7/SM4pOBzbwxOgaNNfOhmHHxf4y1KWkk01Z9nRXNaZl+fT7k9cmBy9DCKIyL2jp3/mNNuZypS0d9A1q5c3IgOoezXp/qxt5EY94y2+DC3MchB9PQ0NZk1TgX1eewKeTN4P7pBecTGPvQVgiddGBba7PNnO40ue7HxsTecJo/HBv9xL0SrS127XNCCPeNy8zA9EJL82tjI6PXWq7E+RDc85Ny89mZ8+7F7Zvw5AzuBmcvhNCtT9+9YC2SuvUUbXQunj13yYVw7+oL55wl5f5TNIGLyLleFUL/83tKKXWx69ZNp+TFS5d7VERMX/9lPrIbtNZadt10N2496ZeP/5f9OhJ9r6+E0YIUptxHjfhFP+7HCLS8ftUiBnY5Y8x/rdaihqEWi4hWkFfrbVKIdqZuPW6xHZ++wOiQbR8wLUL52tZjvZrQQdFcHtNyT3TH56+a9M9f8i8YYFKFxOyNQd8gYuc3SicSOphQbJmPPU+s1mTXwJD9+QuMaTeDITH7YrD+YwN/L68AKIP4g6YhNfD45gd8p5Qf9wD+MR+6Oj6rTmMGyLEhMddjkF9b5bLyW30bHAD5PJ1giFP8BuV96BmAwW8/zAo/5Vo+5uDP8tLC/NyshCWnFB3YePlPMmWtTZDr1RMUWvQUmJcbdGRZLTkm5sKS+hPLO9geHpGlotYoZWFybml1ZSubTslkvKGuprrKVZoK42Sd56PCnZXVpbnJAifm8HaMPkzNzrO4mYmC2mpOp5QkVotYA9V0oIIg633Pvd0qjE/McGJOsROH7cUFHg+zGZ1OeA2q3tUZRqqYw7WW3hsFD7gRF7cD85bpmUmKMXPzD7LGpMlNUEzq7BvVPD83E4g5HZw4uXKRUsLC/Zy16WQC4wJSSQV80oUSMjHLvGnf9gTLndw+myFXEJDqgEj/jdccCEnPgeAQUw/3AWQzaRVFKhynmTFOjxXHC4/2IykjInXGBD8CRlofHxbGi2OxMHTJHNhPOmdtNsMXjxXOhwgTfuJRKXTLA5Tv7GcaSAclEZR6nlTWJ/x7ZaGJ/7EDxvCFDoqJ9BN7BBceRw6pEEkLCzYJL3yOHhKWuPV5guJLNwfvD4eLFvgQNXLWbYKDB4OyT+yAhjd0NOK69UgkedvEzHQBosphjoR8DBuJQX531u3vjx0+yBcy0Nj0Ps/aLjQT7v3RI+RQt3+f2yuPHbHv6T4nsgEA) --- - - [Nuxt](/docs/sdk/nuxt/quickstart) + - [Nuxt](/docs/quickstarts/nuxt) - Easily add secure, beautiful, and fast authentication to Nuxt with Clerk. - {} @@ -44,37 +44,37 @@ description: See the getting started guides and tutorials. ## Frontend - - [JavaScript](/docs/references/javascript/quickstart) + - [JavaScript](/docs/quickstarts/javascript) - Easily add secure, beautiful, and fast authentication to your JavaScript application with Clerk. - {} --- - - [React](/docs/sdk/react/quickstart) + - [React](/docs/quickstarts/react) - Easily add secure, beautiful, and fast authentication to your React application with Clerk. - {} --- - - [Expo](/docs/sdk/expo/quickstart) + - [Expo](/docs/quickstarts/expo) - Use Clerk with Expo to authenticate users in your React Native application. - {} --- - - [iOS (Beta)](/docs/sdk/ios/quickstart) + - [iOS (Beta)](/docs/quickstarts/ios) - Use the Clerk iOS SDK to authenticate users in your native Apple applications. - {} --- - - [Chrome Extension](/docs/sdk/chrome-extension/quickstart) + - [Chrome Extension](/docs/quickstarts/chrome-extension) - Use the Chome Extension SDK to authenticate users in your Chrome extension. - {} --- - - [Vue](/docs/sdk/vue/quickstart) + - [Vue](/docs/quickstarts/vue) - Easily add secure, beautiful, and fast authentication to your Vue application with Clerk. - {} @@ -82,7 +82,7 @@ description: See the getting started guides and tutorials. ## Backend - - [Fastify](/docs/sdk/fastify/quickstart) + - [Fastify](/docs/quickstarts/fastify) - Easily add secure, beautiful, and fast authentication to your Fastify application with Clerk. - {} diff --git a/docs/sdk/react-router/quickstart.mdx b/docs/quickstarts/react-router.mdx similarity index 95% rename from docs/sdk/react-router/quickstart.mdx rename to docs/quickstarts/react-router.mdx index 12e3e08b34..7536264e2e 100644 --- a/docs/sdk/react-router/quickstart.mdx +++ b/docs/quickstarts/react-router.mdx @@ -31,7 +31,7 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat - Add `` and Clerk components -Clerk's [React Router SDK](/docs/sdk/react-router/methods) provides prebuilt components, hooks, and stores to make it easy to integrate authentication and user management in your React Router app. This guide assumes that you're using [React Router v7 or later](https://api.reactrouter.com/v7). +Clerk's [React Router SDK](/docs/references/react-router/overview) provides prebuilt components, hooks, and stores to make it easy to integrate authentication and user management in your React Router app. This guide assumes that you're using [React Router v7 or later](https://api.reactrouter.com/v7). > [!WARNING] > Due to an active [issue with React Router](https://github.com/remix-run/react-router/issues/12475), Clerk and React Router currently requires using Node.js 22.11 or lower. @@ -80,7 +80,7 @@ Clerk's [React Router SDK](/docs/sdk/react-router/methods) provides prebuilt com The following code shows how to add this function to your `root.tsx` file. If you're using [Clerk's React Router quickstart](https://github.com/clerk/clerk-react-router-quickstart) or the [React Router template](https://reactrouter.com/start/framework/installation), most of this code will already be present. - To load additional data or configure options, see the [`rootAuthLoader()`](/docs/sdk/react-router/root-auth-loader) reference. + To load additional data or configure options, see the [`rootAuthLoader()`](/docs/references/react-router/root-auth-loader) reference. ```tsx {{ filename: 'app/root.tsx', mark: [1, [6, 8]], collapsible: true }} import { rootAuthLoader } from '@clerk/react-router/ssr.server' diff --git a/docs/sdk/react/quickstart.mdx b/docs/quickstarts/react.mdx similarity index 95% rename from docs/sdk/react/quickstart.mdx rename to docs/quickstarts/react.mdx index 6364d89df8..c904071c13 100644 --- a/docs/sdk/react/quickstart.mdx +++ b/docs/quickstarts/react.mdx @@ -57,7 +57,7 @@ description: Add authentication and user management to your React app with Clerk ## Install `@clerk/clerk-react` - Clerk's [React SDK](/docs/sdk/react/methods) gives you access to prebuilt components, hooks, and helpers to make user authentication easier. + Clerk's [React SDK](/docs/references/react/overview) gives you access to prebuilt components, hooks, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -197,8 +197,8 @@ description: Add authentication and user management to your React app with Clerk React Router can be integrated with Clerk in two ways: -- As a framework: Use Clerk's built-in [React Router integration](/docs/sdk/react-router/quickstart) -- As a library: Manually integrate React Router into your Clerk application using [library mode](/docs/sdk/react-router/library-mode) +- As a framework: Use Clerk's built-in [React Router integration](/docs/quickstarts/react-router) +- As a library: Manually integrate React Router into your Clerk application using [library mode](/docs/references/react-router/library-mode) ## More resources @@ -215,6 +215,6 @@ Learn more about Clerk components, how to customize them, and how to use Clerk's --- - - [Client-side helpers (hooks)](/docs/sdk/react/use-user) + - [Client-side helpers (hooks)](/docs/references/react/use-user) - Learn more about Clerk's client-side helpers and how to use them. diff --git a/docs/sdk/remix/quickstart.mdx b/docs/quickstarts/remix.mdx similarity index 94% rename from docs/sdk/remix/quickstart.mdx rename to docs/quickstarts/remix.mdx index 4b29a716af..7b7909a905 100644 --- a/docs/sdk/remix/quickstart.mdx +++ b/docs/quickstarts/remix.mdx @@ -35,7 +35,7 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat Learn how to use Clerk to quickly and easily add secure authentication and user management to your Remix app. This guide assumes that you are using Remix v2 or later. > [!NOTE] -> If you are using Remix SPA mode, follow the [Remix SPA mode guide](/docs/sdk/remix/spa-mode). +> If you are using Remix SPA mode, follow the [Remix SPA mode guide](/docs/references/remix/spa-mode). ## Install `@clerk/remix` @@ -230,7 +230,7 @@ Learn how to use Clerk to quickly and easily add secure authentication and user ### Server-side - To protect your routes, use the [`getAuth()`](/docs/sdk/nextjs/get-auth) function in your loader. This function retrieves the authentication state from the request object, returning an `Auth` object that includes the `userId`, allowing you to determine if the user is authenticated. + To protect your routes, use the [`getAuth()`](/docs/references/nextjs/get-auth) function in your loader. This function retrieves the authentication state from the request object, returning an `Auth` object that includes the `userId`, allowing you to determine if the user is authenticated. ```tsx {{ filename: 'routes/_index.tsx' }} import { UserButton } from '@clerk/remix' @@ -280,12 +280,12 @@ Learn how to use Clerk to quickly and easily add secure authentication and user ## Next steps - - [Create custom sign-up and sign-in pages](/docs/sdk/remix/custom-signup-signin-pages) + - [Create custom sign-up and sign-in pages](/docs/references/remix/custom-signup-signin-pages) - Learn how add custom sign-up and sign-in pages with Clerk components. --- - - [Read user and session data](/docs/sdk/remix/read-session-data) + - [Read user and session data](/docs/references/remix/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Remix app. --- diff --git a/docs/getting-started.mdx b/docs/quickstarts/setup-clerk.mdx similarity index 96% rename from docs/getting-started.mdx rename to docs/quickstarts/setup-clerk.mdx index 2cff6ec291..3631ed0597 100644 --- a/docs/getting-started.mdx +++ b/docs/quickstarts/setup-clerk.mdx @@ -27,70 +27,70 @@ Before you can start integrating Clerk into your application, you need to create ## Integrate Clerk into your application - Now that your application is created in the Clerk Dashboard, you can integrate it into your codebase. To integrate Clerk into your application, use one of our [quickstarts](/docs/quickstarts): + Now that your application is created in the Clerk Dashboard, you can integrate it into your codebase. To integrate Clerk into your application, use one of our [quickstarts](/docs/quickstarts/overview): - - [Next.js](/docs/sdk/nextjs/quickstart) + - [Next.js](/docs/quickstarts/nextjs) - Easily add secure, beautiful, and fast authentication to Next.js with Clerk. - {} --- - - [React](/docs/sdk/react/quickstart) + - [React](/docs/quickstarts/react) - Get started installing and initializing Clerk in a new React + Vite app. - {} --- - - [Remix](/docs/sdk/remix/quickstart) + - [Remix](/docs/quickstarts/remix) - Easily add secure, edge- and SSR-friendly authentication to Remix with Clerk. - {} --- - - [RedwoodJS](/docs/sdk/redwood/quickstart) + - [RedwoodJS](/docs/references/redwood/overview) - Grow your RedwoodJS application with Clerk user management and authentication. - {} --- - - [React Native / Expo](/docs/sdk/expo/quickstart) + - [React Native / Expo](/docs/quickstarts/expo) - Use Clerk with Expo to authenticate users in your React Native application. - {} --- - - [Astro](/docs/sdk/astro/quickstart) + - [Astro](/docs/quickstarts/astro) - Easily add secure and SSR-friendly authentication to your Astro application with Clerk. - {} --- - - [iOS](/docs/sdk/ios/quickstart) + - [iOS](/docs/quickstarts/ios) - Use the Clerk iOS SDK to authenticate users in your native Apple applications. - {} --- - - [TanStack Start](/docs/sdk/tanstack-start/quickstart) + - [TanStack Start](/docs/quickstarts/tanstack-start) - Easily add secure and SSR-friendly authentication to your TanStack Start application with Clerk. - ![](data:image/webp;base64,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) --- - - [React Router](/docs/sdk/react-router/quickstart) + - [React Router](/docs/quickstarts/react-router) - Easily add secure, edge- and SSR-friendly authentication to React Router with Clerk. - {} --- - - [Nuxt](/docs/sdk/nuxt/quickstart) + - [Nuxt](/docs/quickstarts/nuxt) - Easily add secure, beautiful, and fast authentication to Nuxt with Clerk. - {} --- - - [Vue](/docs/sdk/vue/quickstart) + - [Vue](/docs/quickstarts/vue) - Get started installing and initializing Clerk in a new Vue + Vite app. - {} diff --git a/docs/sdk/tanstack-start/quickstart.mdx b/docs/quickstarts/tanstack-start.mdx similarity index 86% rename from docs/sdk/tanstack-start/quickstart.mdx rename to docs/quickstarts/tanstack-start.mdx index 864638bb09..0490284dca 100644 --- a/docs/sdk/tanstack-start/quickstart.mdx +++ b/docs/quickstarts/tanstack-start.mdx @@ -33,7 +33,7 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat ## Install `@clerk/tanstack-start` - Clerk's [TanStack Start SDK](/docs/sdk/tanstack-start/methods) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + Clerk's [TanStack Start SDK](/docs/references/tanstack-start/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. Run the following command to install the SDK: @@ -74,7 +74,7 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat TanStack's [`createStartHandler()`](https://tanstack.com/router/latest/docs/framework/react/start/getting-started#the-server-entry-point) creates a server-side handler that determines which routes and loaders need to be executed when the user hits a given route. - Clerk's [`createClerkHandler()`](/docs/sdk/tanstack-start/create-clerk-handler) configures Clerk to handle authentication state for TanStack routes, allowing you to easily access user session information within your app. + Clerk's [`createClerkHandler()`](/docs/references/tanstack-start/create-clerk-handler) configures Clerk to handle authentication state for TanStack routes, allowing you to easily access user session information within your app. Update your app's SSR entrypoint by wrapping `createStartHandler()` in `createClerkHandler()`, as shown in the following example: @@ -179,7 +179,7 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat ### Server-side - To protect your routes, create a [server function](https://tanstack.com/router/latest/docs/framework/react/start/server-functions) that checks the user's authentication state via the [`getAuth()`](/docs/sdk/tanstack-start/get-auth) method. If the user is not authenticated, they are redirected to a sign-in page. If authenticated, the user's `userId` is passed to the route, allowing access to the `` component, which welcomes the user and displays their `userId`. The [`beforeLoad()`](https://tanstack.com/router/latest/docs/framework/react/api/router/RouteOptionsType#beforeload-method) method ensures authentication is checked before loading the page, and the [`loader()`](https://tanstack.com/router/latest/docs/framework/react/api/router/RouteOptionsType#loader-method) method returns the user data for use in the component. + To protect your routes, create a [server function](https://tanstack.com/router/latest/docs/framework/react/start/server-functions) that checks the user's authentication state via the [`getAuth()`](/docs/references/tanstack-start/get-auth) method. If the user is not authenticated, they are redirected to a sign-in page. If authenticated, the user's `userId` is passed to the route, allowing access to the `` component, which welcomes the user and displays their `userId`. The [`beforeLoad()`](https://tanstack.com/router/latest/docs/framework/react/api/router/RouteOptionsType#beforeload-method) method ensures authentication is checked before loading the page, and the [`loader()`](https://tanstack.com/router/latest/docs/framework/react/api/router/RouteOptionsType#loader-method) method returns the user data for use in the component. > [!TIP] > Ensure that your app has the [TanStack Start API entry handler](https://tanstack.com/router/latest/docs/framework/react/start/api-routes#setting-up-the-entry-handler) configured in order for your API routes to work. @@ -243,12 +243,12 @@ description: Learn how to use Clerk to quickly and easily add secure authenticat ## Next steps - - [Create custom sign-up and sign-in pages](/docs/sdk/tanstack-start/custom-signup-signin-pages) + - [Create custom sign-up and sign-in pages](/docs/references/tanstack-start/custom-signup-signin-pages) - Learn how add custom sign-up and sign-in pages with Clerk components. --- - - [Read user and session data](/docs/sdk/tanstack-start/read-session-data) + - [Read user and session data](/docs/references/tanstack-start/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your TanStack Start app. --- diff --git a/docs/sdk/vue/quickstart.mdx b/docs/quickstarts/vue.mdx similarity index 92% rename from docs/sdk/vue/quickstart.mdx rename to docs/quickstarts/vue.mdx index fc7521fc51..f80dbe23cb 100644 --- a/docs/sdk/vue/quickstart.mdx +++ b/docs/quickstarts/vue.mdx @@ -27,7 +27,7 @@ description: Add authentication and user management to your Vue app with Clerk. - Create a header with Clerk components -Clerk's [Vue SDK](/docs/sdk/vue/methods) provides prebuilt components and composables to make it easy to integrate authentication and user management in your Vue app. This guide assumes that you're using [Vue 3](https://vuejs.org/) with [TypeScript](https://www.typescriptlang.org/). +Clerk's [Vue SDK](/docs/references/vue/overview) provides prebuilt components and composables to make it easy to integrate authentication and user management in your Vue app. This guide assumes that you're using [Vue 3](https://vuejs.org/) with [TypeScript](https://www.typescriptlang.org/). ### Create a Vue app using Vite @@ -59,7 +59,7 @@ Clerk's [Vue SDK](/docs/sdk/vue/methods) provides prebuilt components and compos ### Install `@clerk/vue` - Clerk's [Vue SDK](/docs/sdk/vue/methods) gives you access to prebuilt components, composables, and helpers to make user authentication easier. + Clerk's [Vue SDK](/docs/references/vue/overview) gives you access to prebuilt components, composables, and helpers to make user authentication easier. Run the following command to install the SDK: diff --git a/docs/sdk/astro/auth-store.mdx b/docs/references/astro/auth-store.mdx similarity index 100% rename from docs/sdk/astro/auth-store.mdx rename to docs/references/astro/auth-store.mdx diff --git a/docs/sdk/astro/clerk-middleware.mdx b/docs/references/astro/clerk-middleware.mdx similarity index 100% rename from docs/sdk/astro/clerk-middleware.mdx rename to docs/references/astro/clerk-middleware.mdx diff --git a/docs/sdk/astro/clerk-store.mdx b/docs/references/astro/clerk-store.mdx similarity index 100% rename from docs/sdk/astro/clerk-store.mdx rename to docs/references/astro/clerk-store.mdx diff --git a/docs/sdk/astro/endpoints.mdx b/docs/references/astro/endpoints.mdx similarity index 91% rename from docs/sdk/astro/endpoints.mdx rename to docs/references/astro/endpoints.mdx index 7aae507428..d3946b608b 100644 --- a/docs/sdk/astro/endpoints.mdx +++ b/docs/references/astro/endpoints.mdx @@ -7,7 +7,7 @@ Clerk provides helpers that allow you to protect your [Astro endpoints](https:// ## Protect your endpoints -If you aren't protecting your endpoints using [`clerkMiddleware()`](/docs/sdk/astro/clerk-middleware), you can use the [`auth()` local](/docs/sdk/astro/locals) and check for the `userId` value, as shown in the following example: +If you aren't protecting your endpoints using [`clerkMiddleware()`](/docs/references/astro/clerk-middleware), you can use the [`auth()` local](/docs/references/astro/locals) and check for the `userId` value, as shown in the following example: ```ts {{ filename: 'src/pages/api/route.ts' }} export async function GET({ locals }) { @@ -27,7 +27,7 @@ export async function GET({ locals }) { Clerk provides integrations with a number of popular databases. -To retrieve a token from a JWT template and fetch data from an external source, use the [`getToken()`](/docs/references/backend/types/auth-object#get-token){{ target: '_blank' }} method from the [`auth()` local](/docs/sdk/astro/locals), as shown in the following example: +To retrieve a token from a JWT template and fetch data from an external source, use the [`getToken()`](/docs/references/backend/types/auth-object#get-token){{ target: '_blank' }} method from the [`auth()` local](/docs/references/astro/locals), as shown in the following example: ```ts {{ filename: 'src/pages/api/route.ts' }} export async function GET({ locals }) { diff --git a/docs/sdk/astro/hybrid-rendering.mdx b/docs/references/astro/hybrid-rendering.mdx similarity index 95% rename from docs/sdk/astro/hybrid-rendering.mdx rename to docs/references/astro/hybrid-rendering.mdx index fe969ac10a..4565d705ae 100644 --- a/docs/sdk/astro/hybrid-rendering.mdx +++ b/docs/references/astro/hybrid-rendering.mdx @@ -7,7 +7,7 @@ Astro's on-demand rendering output modes (`server` and `hybrid`) allow you to pr ## Server output mode -In `server` output mode, pages and control components are server-rendered by default, but you can opt-in to pre-rendering specific pages by adding `export const prerender = true` to the page. When you opt-in to pre-rendering a page, you must add `isStatic={true}` to any control components used on that page. This specifies that the component should use the client-side version, which relies on [client nanostores](/docs/sdk/astro/auth-store). +In `server` output mode, pages and control components are server-rendered by default, but you can opt-in to pre-rendering specific pages by adding `export const prerender = true` to the page. When you opt-in to pre-rendering a page, you must add `isStatic={true}` to any control components used on that page. This specifies that the component should use the client-side version, which relies on [client nanostores](/docs/references/astro/auth-store). The following example shows how to opt-in to pre-rendering a page and specify that the control components used on that page should use the client-side version. @@ -21,7 +21,7 @@ export const prerender = true ## Hybrid output mode -In `hybrid` output mode, pages and control components are pre-rendered by default, but you can opt-out of pre-rendering for specific pages by adding `export const prerender = false`. When you opt-out of pre-rendering a page, you must add the `isStatic={false}` prop to any control components used on that page. This specifies that the component should use the server-side version which relies on the [locals](/docs/sdk/astro/locals) injected by the middleware. +In `hybrid` output mode, pages and control components are pre-rendered by default, but you can opt-out of pre-rendering for specific pages by adding `export const prerender = false`. When you opt-out of pre-rendering a page, you must add the `isStatic={false}` prop to any control components used on that page. This specifies that the component should use the server-side version which relies on the [locals](/docs/references/astro/locals) injected by the middleware. The following example shows how to opt-out of pre-rendering a page and specify that the control components used on that page should use the server-side version. diff --git a/docs/sdk/astro/locals.mdx b/docs/references/astro/locals.mdx similarity index 83% rename from docs/sdk/astro/locals.mdx rename to docs/references/astro/locals.mdx index 4bdb10c049..bca9ab05d2 100644 --- a/docs/sdk/astro/locals.mdx +++ b/docs/references/astro/locals.mdx @@ -3,13 +3,13 @@ title: Locals description: Learn how to authenticate your Astro application with Clerk using locals. --- -Through Astro [`locals`](https://docs.astro.build/en/guides/middleware/#storing-data-in-contextlocals), Clerk's [`Auth`](/docs/references/backend/types/auth-object){{ target: '_blank' }} and current [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} objects can be accessed between middlewares and pages. These locals are injected when you install the provided [middleware](/docs/sdk/astro/clerk-middleware). +Through Astro [`locals`](https://docs.astro.build/en/guides/middleware/#storing-data-in-contextlocals), Clerk's [`Auth`](/docs/references/backend/types/auth-object){{ target: '_blank' }} and current [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} objects can be accessed between middlewares and pages. These locals are injected when you install the provided [middleware](/docs/references/astro/clerk-middleware). -The following guide provides examples of using the [`auth()`](/docs/sdk/nextjs/auth){{ target: '_blank' }} local to validate an authenticated user and the [`currentUser()`](/docs/sdk/nextjs/current-user){{ target: '_blank' }} local to access the [`Backend API User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object for the authenticated user. +The following guide provides examples of using the [`auth()`](/docs/references/nextjs/auth){{ target: '_blank' }} local to validate an authenticated user and the [`currentUser()`](/docs/references/nextjs/current-user){{ target: '_blank' }} local to access the [`Backend API User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object for the authenticated user. ## `locals.auth()` -You can use the `auth()` local to protect your pages and forms. It will return the current user's ID if they are signed in, or `null` if they are not. For more information on `auth()`, see the [reference](/docs/sdk/nextjs/auth){{ target: '_blank' }}. +You can use the `auth()` local to protect your pages and forms. It will return the current user's ID if they are signed in, or `null` if they are not. For more information on `auth()`, see the [reference](/docs/references/nextjs/auth){{ target: '_blank' }}. ```astro {{ filename: 'src/pages/protected.astro' }} @@ -52,7 +52,7 @@ Under the hood, this local: - uses the `GET /v1/users/me` endpoint. - counts towards the [Backend API Request Rate Limit](/docs/backend-requests/resources/rate-limits#rate-limits). -For more information on `currentUser()`, see the [reference](/docs/sdk/nextjs/current-user){{ target: '_blank' }}. +For more information on `currentUser()`, see the [reference](/docs/references/nextjs/current-user){{ target: '_blank' }}. ```astro {{ filename: 'src/pages/form.astro' }} --- diff --git a/docs/sdk/astro/migrating-from-astro-community-sdk.mdx b/docs/references/astro/migrating-from-astro-community-sdk.mdx similarity index 100% rename from docs/sdk/astro/migrating-from-astro-community-sdk.mdx rename to docs/references/astro/migrating-from-astro-community-sdk.mdx diff --git a/docs/sdk/astro/organization-store.mdx b/docs/references/astro/organization-store.mdx similarity index 100% rename from docs/sdk/astro/organization-store.mdx rename to docs/references/astro/organization-store.mdx diff --git a/docs/sdk/astro/methods.mdx b/docs/references/astro/overview.mdx similarity index 69% rename from docs/sdk/astro/methods.mdx rename to docs/references/astro/overview.mdx index 3bbfbb9f5d..dbe0b11d70 100644 --- a/docs/sdk/astro/methods.mdx +++ b/docs/references/astro/overview.mdx @@ -7,21 +7,21 @@ The Clerk Astro SDK is the recommended method for integrating Clerk into your As ## Guides -- [Read session and user data](/docs/sdk/astro/read-session-data) -- [Migrate from the Astro community SDK to the official Clerk SDK](/docs/sdk/astro/migrating-from-astro-community-sdk) +- [Read session and user data](/docs/references/astro/read-session-data) +- [Migrate from the Astro community SDK to the official Clerk SDK](/docs/references/astro/migrating-from-astro-community-sdk) ## Client-side helpers The Astro SDK provides [stores](https://github.com/nanostores/nanostores) that give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and helper methods for authentication flows. -- [`$authStore`](/docs/sdk/astro/auth-store) -- [`$clerkStore`](/docs/sdk/astro/clerk-store) -- [`$userStore`](/docs/sdk/astro/user-store) -- [`$signInStore`](/docs/sdk/astro/sign-in-store) -- [`$signUpStore`](/docs/sdk/astro/sign-up-store) -- [`$sessionStore`](/docs/sdk/astro/session-store) -- [`$sessionListStore`](/docs/sdk/astro/session-list-store) -- [`$organizationStore`](/docs/sdk/astro/organization-store) +- [`$authStore`](/docs/references/astro/auth-store) +- [`$clerkStore`](/docs/references/astro/clerk-store) +- [`$userStore`](/docs/references/astro/user-store) +- [`$signInStore`](/docs/references/astro/sign-in-store) +- [`$signUpStore`](/docs/references/astro/sign-up-store) +- [`$sessionStore`](/docs/references/astro/session-store) +- [`$sessionListStore`](/docs/references/astro/session-list-store) +- [`$organizationStore`](/docs/references/astro/organization-store) ## Server-side helpers @@ -40,4 +40,4 @@ The Astro SDK provides access to Clerk's authentication data through Astro's [`l ### `clerkMiddleware()` -The `clerkMiddleware()` helper integrates Clerk authentication and authorization into your Astro application through middleware. You can learn more [here](/docs/sdk/astro/clerk-middleware). +The `clerkMiddleware()` helper integrates Clerk authentication and authorization into your Astro application through middleware. You can learn more [here](/docs/references/astro/clerk-middleware). diff --git a/docs/sdk/astro/react.mdx b/docs/references/astro/react.mdx similarity index 96% rename from docs/sdk/astro/react.mdx rename to docs/references/astro/react.mdx index 985d73eea0..eb54d976b5 100644 --- a/docs/sdk/astro/react.mdx +++ b/docs/references/astro/react.mdx @@ -5,7 +5,7 @@ description: Learn how to user Clerk inside an Astro app with React Astro provides an [integration](https://docs.astro.build/en/guides/integrations-guide/react/) that enables server-side rendering and client-side hydration for your React components. This guide demonstrates how to use Clerk with Astro and React. -If you have not set up your Astro application to work with Clerk, see the [quickstart guide](/docs/sdk/astro/quickstart). +If you have not set up your Astro application to work with Clerk, see the [quickstart guide](/docs/quickstarts/astro). ## Install `@astrojs/react` @@ -122,7 +122,7 @@ If you have not set up your Astro application to work with Clerk, see the [quick ## Next steps - - [Read user and session data](/docs/sdk/astro/read-session-data) + - [Read user and session data](/docs/references/astro/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Astro application. --- diff --git a/docs/sdk/astro/read-session-data.mdx b/docs/references/astro/read-session-data.mdx similarity index 77% rename from docs/sdk/astro/read-session-data.mdx rename to docs/references/astro/read-session-data.mdx index 25c06fd19c..ad53789e23 100644 --- a/docs/sdk/astro/read-session-data.mdx +++ b/docs/references/astro/read-session-data.mdx @@ -7,7 +7,7 @@ Clerk provides helpers that you can use to access the active session and user da ## Server-side -The following example uses the [`auth()`](/docs/sdk/nextjs/auth){{ target: '_blank' }} local to validate an authenticated user and the [`currentUser()`](/docs/sdk/nextjs/current-user){{ target: '_blank' }} local to access the [`Backend API User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object for the authenticated user. +The following example uses the [`auth()`](/docs/references/nextjs/auth){{ target: '_blank' }} local to validate an authenticated user and the [`currentUser()`](/docs/references/nextjs/current-user){{ target: '_blank' }} local to access the [`Backend API User`](/docs/references/backend/types/backend-user){{ target: '_blank' }} object for the authenticated user. ```astro {{ filename: 'src/pages/me.astro' }} @@ -41,7 +41,7 @@ Clerk Astro provides a set of useful [stores](/docs/references/astro/overview#cl ### `$authStore` -The following example demonstrates how to use the [`$authStore`](/docs/sdk/astro/auth-store) to access auth information for the active user, such as the `userId` and `sessionId`. +The following example demonstrates how to use the [`$authStore`](/docs/references/astro/auth-store) to access auth information for the active user, such as the `userId` and `sessionId`. ```tsx {{ filename: 'components/example.tsx' }} import { useStore } from '@nanostores/react' @@ -65,7 +65,7 @@ export default function Example() { ### `$userStore` -The following example demonstrates how to use the [`$userStore`](/docs/sdk/astro/user-store) store to access information about the active user, such as their `firstName`. +The following example demonstrates how to use the [`$userStore`](/docs/references/astro/user-store) store to access information about the active user, such as their `firstName`. ```tsx {{ filename: 'components/example.tsx' }} import { useStore } from '@nanostores/react' diff --git a/docs/sdk/astro/session-list-store.mdx b/docs/references/astro/session-list-store.mdx similarity index 100% rename from docs/sdk/astro/session-list-store.mdx rename to docs/references/astro/session-list-store.mdx diff --git a/docs/sdk/astro/session-store.mdx b/docs/references/astro/session-store.mdx similarity index 100% rename from docs/sdk/astro/session-store.mdx rename to docs/references/astro/session-store.mdx diff --git a/docs/sdk/astro/sign-in-store.mdx b/docs/references/astro/sign-in-store.mdx similarity index 100% rename from docs/sdk/astro/sign-in-store.mdx rename to docs/references/astro/sign-in-store.mdx diff --git a/docs/sdk/astro/sign-up-store.mdx b/docs/references/astro/sign-up-store.mdx similarity index 100% rename from docs/sdk/astro/sign-up-store.mdx rename to docs/references/astro/sign-up-store.mdx diff --git a/docs/sdk/astro/user-store.mdx b/docs/references/astro/user-store.mdx similarity index 100% rename from docs/sdk/astro/user-store.mdx rename to docs/references/astro/user-store.mdx diff --git a/docs/references/backend/overview.mdx b/docs/references/backend/overview.mdx index 2bb0b94d6c..e186be41e6 100644 --- a/docs/references/backend/overview.mdx +++ b/docs/references/backend/overview.mdx @@ -375,7 +375,7 @@ To access the [properties](/docs/references/backend/types/auth-object#auth-objec - The following example uses the Next.js [`auth()`](/docs/sdk/nextjs/auth){{ target: '_blank' }} helper to access the `userId`. + The following example uses the Next.js [`auth()`](/docs/references/nextjs/auth){{ target: '_blank' }} helper to access the `userId`. ```ts import { auth, clerkClient } from '@clerk/nextjs/server' diff --git a/docs/references/backend/types/auth-object.mdx b/docs/references/backend/types/auth-object.mdx index fda40753de..022f5a818e 100644 --- a/docs/references/backend/types/auth-object.mdx +++ b/docs/references/backend/types/auth-object.mdx @@ -11,13 +11,13 @@ The `Auth` object is available on the `request` object in server contexts. Some | Framework | How to access the `Auth` object | | - | - | -| Next.js App Router | [`auth()`](/docs/sdk/nextjs/auth) | -| Next.js Pages Router | [`getAuth()`](/docs/sdk/nextjs/get-auth) | +| Next.js App Router | [`auth()`](/docs/references/nextjs/auth) | +| Next.js Pages Router | [`getAuth()`](/docs/references/nextjs/get-auth) | | Astro | [`locals.auth()`](/docs/references/astro/locals#locals-auth) | -| Express | [`req.auth`](/docs/sdk/express/methods) | -| React Router | [`getAuth()`](/docs/sdk/react-router/get-auth) | +| Express | [`req.auth`](/docs/references/express/overview) | +| React Router | [`getAuth()`](/docs/references/react-router/get-auth) | | Remix | [`getAuth()`](/docs/references/remix/read-session-data#get-auth) | -| Tanstack Start | [`getAuth()`](/docs/sdk/tanstack-start/get-auth) | +| Tanstack Start | [`getAuth()`](/docs/references/tanstack-start/get-auth) | | Other | `request.auth` | ## Properties @@ -262,8 +262,8 @@ The `Auth` object is not available in the frontend. To use the `getToken()` meth To use the `getToken()` method in the backend: - - In App Router applications, use the [`auth()`](/docs/sdk/nextjs/auth) helper. - - In Pages Router applications, use the [`getAuth()`](/docs/sdk/nextjs/get-auth) helper. + - In App Router applications, use the [`auth()`](/docs/references/nextjs/auth) helper. + - In Pages Router applications, use the [`getAuth()`](/docs/references/nextjs/get-auth) helper. ```js {{ filename: 'app/api/get-token-example/route.ts' }} @@ -323,7 +323,7 @@ The `Auth` object is not available in the frontend. To use the `getToken()` meth - To use the `getToken()` method in the backend, you can access it using the [`getAuth()`](/docs/sdk/nextjs/get-auth) function. + To use the `getToken()` method in the backend, you can access it using the [`getAuth()`](/docs/references/nextjs/get-auth) function. ```ts {{ filename: 'app/routes/get-token.ts' }} import { getAuth } from '@clerk/remix/ssr.server' diff --git a/docs/sdk/chrome-extension/add-react-router.mdx b/docs/references/chrome-extension/add-react-router.mdx similarity index 100% rename from docs/sdk/chrome-extension/add-react-router.mdx rename to docs/references/chrome-extension/add-react-router.mdx diff --git a/docs/sdk/chrome-extension/configure-consistent-crx-id.mdx b/docs/references/chrome-extension/configure-consistent-crx-id.mdx similarity index 97% rename from docs/sdk/chrome-extension/configure-consistent-crx-id.mdx rename to docs/references/chrome-extension/configure-consistent-crx-id.mdx index 20002c3403..85726b780a 100644 --- a/docs/sdk/chrome-extension/configure-consistent-crx-id.mdx +++ b/docs/references/chrome-extension/configure-consistent-crx-id.mdx @@ -11,7 +11,7 @@ There are two ways to configure a consistent CRX ID: 1. [For an extension uploaded to the Chrome Developer Dashboard](#for-an-extension-uploaded-to-the-chrome-developer-dashboard). > [!WARNING] -> If you followed the [Chrome Extension Quickstart](/docs/sdk/chrome-extension/quickstart), you have already completed this configuration. +> If you followed the [Chrome Extension Quickstart](/docs/quickstarts/chrome-extension), you have already completed this configuration. ## For a new extension diff --git a/docs/sdk/chrome-extension/create-clerk-client.mdx b/docs/references/chrome-extension/create-clerk-client.mdx similarity index 96% rename from docs/sdk/chrome-extension/create-clerk-client.mdx rename to docs/references/chrome-extension/create-clerk-client.mdx index 7e4403c7b1..ca86fbd77d 100644 --- a/docs/sdk/chrome-extension/create-clerk-client.mdx +++ b/docs/references/chrome-extension/create-clerk-client.mdx @@ -16,7 +16,7 @@ The following example: - The new tab has a button on it that, when clicked, triggers the background service worker. > [!WARNING] -> The following example assumes that you have followed the [Chrome Extension Quickstart](/docs/sdk/chrome-extension/quickstart) and then the [Add React Router](/docs/sdk/chrome-extension/add-react-router) guide, but you can apply these concepts to your own application. +> The following example assumes that you have followed the [Chrome Extension Quickstart](/docs/quickstarts/chrome-extension) and then the [Add React Router](/docs/references/chrome-extension/add-react-router) guide, but you can apply these concepts to your own application. ### Create your background service worker @@ -170,5 +170,5 @@ The `createClerkClient()` function accepts an optional object. The following opt - `syncHost?` - `string` - The host to sync the session with. For more information, see [the dedicated guide](/docs/sdk/chrome-extension/sync-host). + The host to sync the session with. For more information, see [the dedicated guide](/docs/references/chrome-extension/sync-host). diff --git a/docs/sdk/chrome-extension/methods.mdx b/docs/references/chrome-extension/overview.mdx similarity index 86% rename from docs/sdk/chrome-extension/methods.mdx rename to docs/references/chrome-extension/overview.mdx index acfb78795d..908495d62c 100644 --- a/docs/sdk/chrome-extension/methods.mdx +++ b/docs/references/chrome-extension/overview.mdx @@ -11,7 +11,7 @@ When creating your Clerk application in the Clerk Dashboard, your authentication - **Popup** - Opens as a popup. This is the default behavior. - **Side Panel** - Opens in a side panel -- **Sync Host** - Deployed alongside a web app that uses [Sync Host](/docs/sdk/chrome-extension/sync-host). +- **Sync Host** - Deployed alongside a web app that uses [Sync Host](/docs/references/chrome-extension/sync-host). See the following table to determine the authentication options available for each configuration. @@ -33,17 +33,17 @@ See the following table to determine the authentication options available for ea ## Sync auth status between your Chrome Extension and web app -Clerk allows you to sync the authentication state from your web app to your Chrome Extension using the Sync Host feature. When a user authenticates in your web app, they will also be authenticated in your Chrome Extension. See [the dedicated guide](/docs/sdk/chrome-extension/sync-host) for more information. +Clerk allows you to sync the authentication state from your web app to your Chrome Extension using the Sync Host feature. When a user authenticates in your web app, they will also be authenticated in your Chrome Extension. See [the dedicated guide](/docs/references/chrome-extension/sync-host) for more information. ## `createClerkClient()` It's recommended to use `createClerkClient()` for Chrome Extension's that need to interact with Clerk in a content script. -The `createClerkClient()` helper initializes a new Clerk instance on demand and refreshes the session token if there is a valid, signed-in user. It can be used in a [content script](https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts) or a [background service worker](https://developer.chrome.com/docs/extensions/develop/concepts/service-workers/basics) to access a user's information or session token. [Learn more about `createClerkClient()`](/docs/sdk/chrome-extension/create-clerk-client). +The `createClerkClient()` helper initializes a new Clerk instance on demand and refreshes the session token if there is a valid, signed-in user. It can be used in a [content script](https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts) or a [background service worker](https://developer.chrome.com/docs/extensions/develop/concepts/service-workers/basics) to access a user's information or session token. [Learn more about `createClerkClient()`](/docs/references/chrome-extension/create-clerk-client). ## Add React Router -[Learn how to add React Router to your Chrome Extension](/docs/sdk/chrome-extension/add-react-router) to enable routing in your application. +[Learn how to add React Router to your Chrome Extension](/docs/references/chrome-extension/add-react-router) to enable routing in your application. ## Deploy your extension to production @@ -51,7 +51,7 @@ See [the Chrome Extension deployment guide](/docs/deployments/deploy-chrome-exte ## Configure a consistent CRX ID -A Chrome Extension can be identified by its unique CRX ID, similar to how a website can be identified by its domain. The CRX ID rotates by default, which can cause errors with the Clerk integration. [Learn how to configure a consistent CRX ID](/docs/sdk/chrome-extension/configure-consistent-crx-id) so that your extension will have a stable, unchanging key. +A Chrome Extension can be identified by its unique CRX ID, similar to how a website can be identified by its domain. The CRX ID rotates by default, which can cause errors with the Clerk integration. [Learn how to configure a consistent CRX ID](/docs/references/chrome-extension/configure-consistent-crx-id) so that your extension will have a stable, unchanging key. ## Frequently asked questions (FAQ) diff --git a/docs/sdk/chrome-extension/sync-host.mdx b/docs/references/chrome-extension/sync-host.mdx similarity index 95% rename from docs/sdk/chrome-extension/sync-host.mdx rename to docs/references/chrome-extension/sync-host.mdx index 159497b388..592ccce0fe 100644 --- a/docs/sdk/chrome-extension/sync-host.mdx +++ b/docs/references/chrome-extension/sync-host.mdx @@ -9,7 +9,7 @@ Clerk allows you to sync the authentication state from your web app to your Chro > Our Chrome Extension SDK currently does not fully support Sync Host on side panels. Currently, if a user authenticates in your web app, they need to close and reopen the side panel to update their auth status. > [!WARNING] -> This guide assumes assumes that you have followed the [Chrome Extension Quickstart](/docs/sdk/chrome-extension/quickstart) and then the [Add React Router](/docs/sdk/chrome-extension/add-react-router) guide. +> This guide assumes assumes that you have followed the [Chrome Extension Quickstart](/docs/quickstarts/chrome-extension) and then the [Add React Router](/docs/references/chrome-extension/add-react-router) guide. ## Add `PLASMO_PUBLIC_CLERK_SYNC_HOST` to your environment variables @@ -141,7 +141,7 @@ Clerk allows you to sync the authentication state from your web app to your Chro To allow your Chrome Extension to sync with your web app, you must add the extension's ID to your web app's `allowed_origins`. > [!NOTE] - > If you have not [configured a consistent key](/docs/sdk/chrome-extension/configure-consistent-crx-id), you will have to repeat this step every time your extension's ID changes. + > If you have not [configured a consistent key](/docs/references/chrome-extension/configure-consistent-crx-id), you will have to repeat this step every time your extension's ID changes. 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page. 1. Copy your Secret Key. It should start with `sk_test_` or `sk_live_` for your development and production instances, respectively. diff --git a/docs/sdk/expo/local-credentials.mdx b/docs/references/expo/local-credentials.mdx similarity index 96% rename from docs/sdk/expo/local-credentials.mdx rename to docs/references/expo/local-credentials.mdx index fd1c24d897..7c3b8f43ff 100644 --- a/docs/sdk/expo/local-credentials.mdx +++ b/docs/references/expo/local-credentials.mdx @@ -3,7 +3,7 @@ title: Allow returning users to sign in with biometrics in Expo description: Learn how to use the useLocalCredentials hook in your Expo app with Clerk. --- -Clerk's [`useLocalCredentials()`](/docs/sdk/expo/use-local-credentials) hook enables you to store a user's password credentials on their device and subsequently use biometrics for sign-in. +Clerk's [`useLocalCredentials()`](/docs/references/expo/use-local-credentials) hook enables you to store a user's password credentials on their device and subsequently use biometrics for sign-in. This guide shows you how to use the `useLocalCredentials()` hook to enhance your user experience by allowing users to sign in using biometrics when they re-sign in to your Expo app. @@ -198,7 +198,7 @@ This guide shows you how to use the `useLocalCredentials()` hook to enhance your Use the following guides to learn more about Clerk components, how to build custom flows for your native apps, and how to use Clerk's client-side helpers. - - [Expo SDK](/docs/sdk/expo/quickstart) + - [Expo SDK](/docs/quickstarts/expo) - Use Clerk with Expo to authenticate users in your React Native application. --- @@ -208,6 +208,6 @@ Use the following guides to learn more about Clerk components, how to build cust --- - - [Client-side helpers](/docs/sdk/react/use-user) + - [Client-side helpers](/docs/references/react/use-user) - Clerk's client-side helpers enable you to access user data and perform actions on the client-side. diff --git a/docs/sdk/expo/offline-support.mdx b/docs/references/expo/offline-support.mdx similarity index 100% rename from docs/sdk/expo/offline-support.mdx rename to docs/references/expo/offline-support.mdx diff --git a/docs/sdk/expo/methods.mdx b/docs/references/expo/overview.mdx similarity index 81% rename from docs/sdk/expo/methods.mdx rename to docs/references/expo/overview.mdx index fef4e4a239..126bcd9d51 100644 --- a/docs/sdk/expo/methods.mdx +++ b/docs/references/expo/overview.mdx @@ -5,7 +5,7 @@ description: Learn how to integrate Clerk into your Expo application using the C The Clerk Expo SDK is the recommended method for integrating Clerk into your Expo application. -See [the quickstart](/docs/sdk/expo/quickstart) to get started. +See [the quickstart](/docs/quickstarts/expo) to get started. ## Available resources @@ -15,9 +15,9 @@ The Expo SDK gives you access to the following resources: The following hooks are available for both **native** and **web** apps: -- All React hooks are available. See [the React docs](/docs/sdk/react/methods){{ target: '_blank' }} for more information. -- [`useOAuth()`](/docs/sdk/expo/use-oauth) -- [`useLocalCredentials()`](/docs/sdk/expo/use-local-credentials) +- All React hooks are available. See [the React docs](/docs/references/react/overview){{ target: '_blank' }} for more information. +- [`useOAuth()`](/docs/references/expo/use-oauth) +- [`useLocalCredentials()`](/docs/references/expo/use-local-credentials) ### Clerk components diff --git a/docs/sdk/expo/read-session-user-data.mdx b/docs/references/expo/read-session-user-data.mdx similarity index 76% rename from docs/sdk/expo/read-session-user-data.mdx rename to docs/references/expo/read-session-user-data.mdx index 2694d2212a..77925a7e3b 100644 --- a/docs/sdk/expo/read-session-user-data.mdx +++ b/docs/references/expo/read-session-user-data.mdx @@ -7,7 +7,7 @@ This guide demonstrates how to access active session and user data in your Expo ## Session data example -The [`useAuth()`](/docs/sdk/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. +The [`useAuth()`](/docs/references/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The following example demonstrates how to use `useAuth()` to get and display session and user data: @@ -32,7 +32,7 @@ export default function UseAuthExample() { ## User data example -The [`useUser()`](/docs/sdk/react/use-user){{ target: '_blank' }} hook enables you to access the current user's data and provides helper methods to manage the current active session. +The [`useUser()`](/docs/references/react/use-user){{ target: '_blank' }} hook enables you to access the current user's data and provides helper methods to manage the current active session. The following example demonstrates how to use `useUser()` to check if the user is signed in and display their first name: diff --git a/docs/sdk/expo/use-local-credentials.mdx b/docs/references/expo/use-local-credentials.mdx similarity index 98% rename from docs/sdk/expo/use-local-credentials.mdx rename to docs/references/expo/use-local-credentials.mdx index c847a62433..f08349cd38 100644 --- a/docs/sdk/expo/use-local-credentials.mdx +++ b/docs/references/expo/use-local-credentials.mdx @@ -72,4 +72,4 @@ The `useLocalCredentials()` hook enables you to store a user's password credenti ## How to use the `useLocalCredentials()` hook -To learn how to use the `useLocalCredentials()` hook, see the [reference doc](/docs/sdk/expo/local-credentials). +To learn how to use the `useLocalCredentials()` hook, see the [reference doc](/docs/references/expo/local-credentials). diff --git a/docs/sdk/expo/use-oauth.mdx b/docs/references/expo/use-oauth.mdx similarity index 100% rename from docs/sdk/expo/use-oauth.mdx rename to docs/references/expo/use-oauth.mdx diff --git a/docs/sdk/expo/web-support/custom-signup-signin-pages.mdx b/docs/references/expo/web-support/custom-signup-signin-pages.mdx similarity index 97% rename from docs/sdk/expo/web-support/custom-signup-signin-pages.mdx rename to docs/references/expo/web-support/custom-signup-signin-pages.mdx index 24528fb17c..e0d47a0dd1 100644 --- a/docs/sdk/expo/web-support/custom-signup-signin-pages.mdx +++ b/docs/references/expo/web-support/custom-signup-signin-pages.mdx @@ -73,6 +73,6 @@ Use the following guides to learn more about Clerk components, how to build cust --- - - [Client-side helpers](/docs/sdk/react/use-user) + - [Client-side helpers](/docs/references/react/use-user) - Learn more about our client-side helpers and how to use them. diff --git a/docs/sdk/expo/web-support/overview.mdx b/docs/references/expo/web-support/overview.mdx similarity index 90% rename from docs/sdk/expo/web-support/overview.mdx rename to docs/references/expo/web-support/overview.mdx index 2555b82ea9..134b50e659 100644 --- a/docs/sdk/expo/web-support/overview.mdx +++ b/docs/references/expo/web-support/overview.mdx @@ -7,7 +7,7 @@ Expo provides a way to [develop web applications](https://docs.expo.dev/workflow ## Create a new project with web support -If you're starting from scratch, you can follow the [Expo quickstart](/docs/sdk/expo/quickstart), which showcases how to create a sign-in and sign-up page with the same code for all platforms Expo supports. +If you're starting from scratch, you can follow the [Expo quickstart](/docs/quickstarts/expo), which showcases how to create a sign-in and sign-up page with the same code for all platforms Expo supports. ## Add web support to an existing project @@ -36,6 +36,6 @@ Use the following guides to learn more about Clerk components, how to build cust --- - - [Client-side helpers](/docs/sdk/react/use-user) + - [Client-side helpers](/docs/references/react/use-user) - Learn more about our client-side helpers and how to use them. diff --git a/docs/sdk/express/methods.mdx b/docs/references/express/overview.mdx similarity index 98% rename from docs/sdk/express/methods.mdx rename to docs/references/express/overview.mdx index f5a677e121..f937285b40 100644 --- a/docs/sdk/express/methods.mdx +++ b/docs/references/express/overview.mdx @@ -5,7 +5,7 @@ description: Learn how to integrate Clerk into your Express application using th The Clerk Express SDK is the recommended method for integrating Clerk into your Express application. -See the [quickstart](/docs/sdk/express/quickstart) to get started. +See the [quickstart](/docs/quickstarts/express) to get started. {/* TODO: Remove callout when Node SDK is removed from docs */} diff --git a/docs/sdk/go/other-examples.mdx b/docs/references/go/other-examples.mdx similarity index 100% rename from docs/sdk/go/other-examples.mdx rename to docs/references/go/other-examples.mdx diff --git a/docs/sdk/go/quickstart.mdx b/docs/references/go/overview.mdx similarity index 96% rename from docs/sdk/go/quickstart.mdx rename to docs/references/go/overview.mdx index 56b3dc3146..5c4322405b 100644 --- a/docs/sdk/go/quickstart.mdx +++ b/docs/references/go/overview.mdx @@ -117,4 +117,4 @@ for _, resource := range list.$Resource$s { } ``` -For more usage details, see the [examples](/docs/sdk/go/other-examples) or the library's [README file](https://github.com/clerk/clerk-sdk-go/tree/v2). +For more usage details, see the [examples](/docs/references/go/other-examples) or the library's [README file](https://github.com/clerk/clerk-sdk-go/tree/v2). diff --git a/docs/sdk/go/verifying-sessions.mdx b/docs/references/go/verifying-sessions.mdx similarity index 100% rename from docs/sdk/go/verifying-sessions.mdx rename to docs/references/go/verifying-sessions.mdx diff --git a/docs/sdk/ios/get-token.mdx b/docs/references/ios/get-token.mdx similarity index 100% rename from docs/sdk/ios/get-token.mdx rename to docs/references/ios/get-token.mdx diff --git a/docs/sdk/ios/methods.mdx b/docs/references/ios/overview.mdx similarity index 92% rename from docs/sdk/ios/methods.mdx rename to docs/references/ios/overview.mdx index 1e05b991d2..8370e1a2a2 100644 --- a/docs/sdk/ios/methods.mdx +++ b/docs/references/ios/overview.mdx @@ -8,7 +8,7 @@ description: Learn how to integrate Clerk into your iOS application using the Cl The Clerk iOS SDK is the recommended method for integrating Clerk into your iOS application. -See [the quickstart](/docs/sdk/ios/quickstart) to get started. +See [the quickstart](/docs/quickstarts/ios) to get started. ## SDK Reference diff --git a/docs/sdk/ios/sign-in-with-apple.mdx b/docs/references/ios/sign-in-with-apple.mdx similarity index 100% rename from docs/sdk/ios/sign-in-with-apple.mdx rename to docs/references/ios/sign-in-with-apple.mdx diff --git a/docs/references/javascript/clerk/clerk.mdx b/docs/references/javascript/clerk/clerk.mdx index 22ce58d341..a576657395 100644 --- a/docs/references/javascript/clerk/clerk.mdx +++ b/docs/references/javascript/clerk/clerk.mdx @@ -334,7 +334,7 @@ Only one of the two properties are allowed to be set at a time. Initializes the `Clerk` object and loads all necessary environment configuration and instance settings from the [Frontend API](/docs/reference/frontend-api){{ target: '_blank' }}. -You must call this method before using the `Clerk` object in your code. Refer to the [quickstart guide](/docs/references/javascript/quickstart) for more information. +You must call this method before using the `Clerk` object in your code. Refer to the [quickstart guide](/docs/quickstarts/javascript) for more information. ```typescript function load(options?: ClerkOptions): Promise diff --git a/docs/references/javascript/clerk/organization-methods.mdx b/docs/references/javascript/clerk/organization-methods.mdx index 08971df778..396c41dcb6 100644 --- a/docs/references/javascript/clerk/organization-methods.mdx +++ b/docs/references/javascript/clerk/organization-methods.mdx @@ -7,7 +7,7 @@ These methods on the [`Clerk`](/docs/references/javascript/clerk/clerk) class al The following examples assume: -- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) ## `getOrganization()` diff --git a/docs/references/javascript/clerk/waitlist-methods.mdx b/docs/references/javascript/clerk/waitlist-methods.mdx index c173dfdd1b..8e6c47e302 100644 --- a/docs/references/javascript/clerk/waitlist-methods.mdx +++ b/docs/references/javascript/clerk/waitlist-methods.mdx @@ -7,7 +7,7 @@ These methods on the [`Clerk`](/docs/references/javascript/clerk/clerk) class al The following example assumes: -- You followed the [quickstart](/docs/references/javascript/quickstart) to add Clerk to your JavaScript app. +- You followed the [quickstart](/docs/quickstarts/javascript) to add Clerk to your JavaScript app. - You set your sign-up mode to [**Waitlist**](docs/authentication/configuration/restrictions#waitlist). ## `joinWaitlist()` diff --git a/docs/references/javascript/organization-invitation.mdx b/docs/references/javascript/organization-invitation.mdx index 01205119bb..9fe22c0ade 100644 --- a/docs/references/javascript/organization-invitation.mdx +++ b/docs/references/javascript/organization-invitation.mdx @@ -83,7 +83,7 @@ The following example demonstrates how to revoke an organization invitation. It It assumes: -- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) ```js {{ filename: 'main.js', mark: [22, 23] }} diff --git a/docs/references/javascript/organization/domains.mdx b/docs/references/javascript/organization/domains.mdx index 6e3e529119..14e3d21c88 100644 --- a/docs/references/javascript/organization/domains.mdx +++ b/docs/references/javascript/organization/domains.mdx @@ -7,7 +7,7 @@ These methods on the [`Organization`](/docs/references/javascript/organization/o The following examples assume: -- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) - you have [enabled **Verified domains** for your organization](/docs/organizations/verified-domains) diff --git a/docs/references/javascript/organization/invitations.mdx b/docs/references/javascript/organization/invitations.mdx index 03dbd663eb..09e1f11898 100644 --- a/docs/references/javascript/organization/invitations.mdx +++ b/docs/references/javascript/organization/invitations.mdx @@ -7,7 +7,7 @@ These methods on the [`Organization`](/docs/references/javascript/organization/o The following examples assume: -- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) ## `getInvitations()` diff --git a/docs/references/javascript/organization/membership-request.mdx b/docs/references/javascript/organization/membership-request.mdx index 2c91ad8f9f..ae3c474c4d 100644 --- a/docs/references/javascript/organization/membership-request.mdx +++ b/docs/references/javascript/organization/membership-request.mdx @@ -7,7 +7,7 @@ These methods on the [`Organization`](/docs/references/javascript/organization/o The following examples assume: -- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) - you have [enabled **Verified domains** and **Automatic suggestion** for your organization](/docs/organizations/verified-domains) diff --git a/docs/references/javascript/organization/organization.mdx b/docs/references/javascript/organization/organization.mdx index 6cd4f908dc..24b8b112aa 100644 --- a/docs/references/javascript/organization/organization.mdx +++ b/docs/references/javascript/organization/organization.mdx @@ -7,7 +7,7 @@ The `Organization` object holds information about an organization, as well as me The following examples assume: -- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application - you have [enabled the Organizations feature in the Clerk Dashboard](/docs/organizations/overview#enable-organizations-in-your-application) ## Properties diff --git a/docs/references/javascript/overview.mdx b/docs/references/javascript/overview.mdx index 5d9ab4f5da..289ee7529c 100644 --- a/docs/references/javascript/overview.mdx +++ b/docs/references/javascript/overview.mdx @@ -5,11 +5,11 @@ description: Clerk's JavaScript SDK is a foundational library for building user ClerkJS is our foundational JavaScript library for building user management and authentication. It enables you to register, sign in, verify and manage users for your application using highly customizable flows. -While we typically recommend using one of our framework SDK's, such as [Clerk React](/docs/sdk/react/quickstart) or [Clerk Next.js](/docs/sdk/nextjs/quickstart), having the ability to use the underlying ClerkJS package provides more freedom to use Clerk how you best see fit. +While we typically recommend using one of our framework SDK's, such as [Clerk React](/docs/quickstarts/react) or [Clerk Next.js](/docs/quickstarts/nextjs), having the ability to use the underlying ClerkJS package provides more freedom to use Clerk how you best see fit. ## Installation -Follow the instructions in the [ClerkJS quickstart](/docs/references/javascript/quickstart) to add ClerkJS to your project. +Follow the instructions in the [ClerkJS quickstart](/docs/quickstarts/javascript) to add ClerkJS to your project. ## Usage diff --git a/docs/references/javascript/user/create-metadata.mdx b/docs/references/javascript/user/create-metadata.mdx index c4173cccdb..8080f26df5 100644 --- a/docs/references/javascript/user/create-metadata.mdx +++ b/docs/references/javascript/user/create-metadata.mdx @@ -5,7 +5,7 @@ description: Explore methods on the User object that help you create data for th These methods on the [`User`](/docs/references/javascript/user/user) object help you create data for the user, such as `createEmailAddress()` and `createPhoneNumber()`. -The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. ## `createEmailAddress()` diff --git a/docs/references/javascript/user/password-management.mdx b/docs/references/javascript/user/password-management.mdx index 9864e099ba..1e911c499f 100644 --- a/docs/references/javascript/user/password-management.mdx +++ b/docs/references/javascript/user/password-management.mdx @@ -5,7 +5,7 @@ description: Explore methods on the User object that help you manage a user's pa These methods on the [`User`](/docs/references/javascript/user/user) object help you manage a user's password. -The following examples assume that you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application. +The following examples assume that you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application. ## `updatePassword()` diff --git a/docs/references/javascript/user/totp.mdx b/docs/references/javascript/user/totp.mdx index 2052dee594..15346bae17 100644 --- a/docs/references/javascript/user/totp.mdx +++ b/docs/references/javascript/user/totp.mdx @@ -146,7 +146,7 @@ The following example demonstrates how to use the TOTP methods to create and ver The following example assumes: -- you have followed the [quickstart](/docs/references/javascript/quickstart) in order to add Clerk to your JavaScript application +- you have followed the [quickstart](/docs/quickstarts/javascript) in order to add Clerk to your JavaScript application - you have [enabled **authenticator application** and **backup codes** as multi-factor strategies in the Clerk Dashboard](/docs/authentication/configuration/sign-up-sign-in-options#authentication-strategies) diff --git a/docs/sdk/nextjs/auth.mdx b/docs/references/nextjs/auth.mdx similarity index 95% rename from docs/sdk/nextjs/auth.mdx rename to docs/references/nextjs/auth.mdx index 2955e28486..000e1468f8 100644 --- a/docs/sdk/nextjs/auth.mdx +++ b/docs/references/nextjs/auth.mdx @@ -7,7 +7,7 @@ The `auth()` helper returns the [`Auth`](/docs/references/backend/types/auth-obj - Only available for App Router. - Only works on the server-side, such as in Server Components, Route Handlers, and Server Actions. -- Requires [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) to be configured. +- Requires [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) to be configured. ## `auth.protect()` @@ -86,7 +86,7 @@ The `auth()` helper returns the `redirectToSignIn()` method, which you can use t ### Example -The following example shows how to use `redirectToSignIn()` to redirect the user to the sign-in page if they are not authenticated. It's also common to use `redirectToSignIn()` in `clerkMiddleware()` to protect entire routes; see [the `clerkMiddleware()` docs](/docs/sdk/nextjs/clerk-middleware) for more information. +The following example shows how to use `redirectToSignIn()` to redirect the user to the sign-in page if they are not authenticated. It's also common to use `redirectToSignIn()` in `clerkMiddleware()` to protect entire routes; see [the `clerkMiddleware()` docs](/docs/references/nextjs/clerk-middleware) for more information. ```tsx {{ filename: 'app/page.tsx' }} import { auth } from '@clerk/nextjs/server' @@ -118,7 +118,7 @@ export default async function Page() { ## Use `auth()` in API routes -See detailed examples in the [dedicated guide](/docs/sdk/nextjs/read-session-data). +See detailed examples in the [dedicated guide](/docs/references/nextjs/read-session-data). ## Use `auth()` to check roles and permissions diff --git a/docs/sdk/nextjs/build-clerk-props.mdx b/docs/references/nextjs/build-clerk-props.mdx similarity index 100% rename from docs/sdk/nextjs/build-clerk-props.mdx rename to docs/references/nextjs/build-clerk-props.mdx diff --git a/docs/sdk/nextjs/clerk-middleware.mdx b/docs/references/nextjs/clerk-middleware.mdx similarity index 98% rename from docs/sdk/nextjs/clerk-middleware.mdx rename to docs/references/nextjs/clerk-middleware.mdx index 816b8f96a7..7dcdf3152c 100644 --- a/docs/sdk/nextjs/clerk-middleware.mdx +++ b/docs/references/nextjs/clerk-middleware.mdx @@ -341,7 +341,7 @@ The `clerkMiddleware()` function accepts an optional object. The following optio - `organizationSyncOptions?` - [OrganizationSyncOptions](#organization-sync-options) | undefined - Used to activate a specific [organization](/docs/organizations/overview) or [personal account](/docs/organizations/organization-workspaces#organization-workspaces-in-the-clerk-dashboard:~:text=Personal%20account) based on URL path parameters. If there's a mismatch between the active organization in the session (e.g., as reported by [`auth()`](/docs/sdk/nextjs/auth)) and the organization indicated by the URL, the middleware will attempt to activate the organization specified in the URL. + Used to activate a specific [organization](/docs/organizations/overview) or [personal account](/docs/organizations/organization-workspaces#organization-workspaces-in-the-clerk-dashboard:~:text=Personal%20account) based on URL path parameters. If there's a mismatch between the active organization in the session (e.g., as reported by [`auth()`](/docs/references/nextjs/auth)) and the organization indicated by the URL, the middleware will attempt to activate the organization specified in the URL. --- @@ -400,7 +400,7 @@ export default clerkMiddleware( > [!NOTE] > Dynamic keys are not accessible on the client-side. -The following options, known as "Dynamic Keys," are shared to the Next.js application server through `clerkMiddleware`, enabling access by server-side helpers like [`auth()`](/docs/sdk/nextjs/auth): +The following options, known as "Dynamic Keys," are shared to the Next.js application server through `clerkMiddleware`, enabling access by server-side helpers like [`auth()`](/docs/references/nextjs/auth): - `signUpUrl` - `signInUrl` diff --git a/docs/sdk/nextjs/current-user.mdx b/docs/references/nextjs/current-user.mdx similarity index 100% rename from docs/sdk/nextjs/current-user.mdx rename to docs/references/nextjs/current-user.mdx diff --git a/docs/sdk/nextjs/custom-signup-signin-pages.mdx b/docs/references/nextjs/custom-signup-signin-pages.mdx similarity index 96% rename from docs/sdk/nextjs/custom-signup-signin-pages.mdx rename to docs/references/nextjs/custom-signup-signin-pages.mdx index 4bf04b985b..6b971df480 100644 --- a/docs/sdk/nextjs/custom-signup-signin-pages.mdx +++ b/docs/references/nextjs/custom-signup-signin-pages.mdx @@ -11,7 +11,7 @@ If the prebuilt components don't meet your specific needs or if you require more > Watch the video version of this guide on the Clerk YouTube channel → [YouTube (4 minutes)](https://youtu.be/fsuHLafTYyg). > [!NOTE] -> Just getting started with Clerk and Next.js? See the [quickstart tutorial](/docs/sdk/nextjs/quickstart)! +> Just getting started with Clerk and Next.js? See the [quickstart tutorial](/docs/quickstarts/nextjs)! ## Build a sign-up page @@ -102,7 +102,7 @@ If the prebuilt components don't meet your specific needs or if you require more ## Next steps - - [Read user and session data](/docs/sdk/nextjs/read-session-data) + - [Read user and session data](/docs/references/nextjs/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js application. --- @@ -112,7 +112,7 @@ If the prebuilt components don't meet your specific needs or if you require more --- - - [Next.js SDK Reference](/docs/sdk/nextjs/methods) + - [Next.js SDK Reference](/docs/references/nextjs/overview) - Learn more about additional Next.js methods. --- diff --git a/docs/sdk/nextjs/get-auth.mdx b/docs/references/nextjs/get-auth.mdx similarity index 96% rename from docs/sdk/nextjs/get-auth.mdx rename to docs/references/nextjs/get-auth.mdx index 8ba2b5791a..1b96d951ca 100644 --- a/docs/sdk/nextjs/get-auth.mdx +++ b/docs/references/nextjs/get-auth.mdx @@ -6,7 +6,7 @@ description: The getAuth() helper retrieves authentication state from the reques The `getAuth()` helper retrieves authentication state from the request object. > [!NOTE] -> If you are using App Router, use the [`auth()` helper](/docs/sdk/nextjs/auth) instead. +> If you are using App Router, use the [`auth()` helper](/docs/references/nextjs/auth) instead. ## Parameters diff --git a/docs/sdk/nextjs/methods.mdx b/docs/references/nextjs/overview.mdx similarity index 81% rename from docs/sdk/nextjs/methods.mdx rename to docs/references/nextjs/overview.mdx index 463f426390..2e1913309c 100644 --- a/docs/sdk/nextjs/methods.mdx +++ b/docs/references/nextjs/overview.mdx @@ -7,7 +7,7 @@ The Clerk Next.js SDK is the recommended method for integrating Clerk into your ## Client-side helpers -Because the Next.js SDK is built on top of the Clerk React SDK, you can use the hooks that the React SDK provides. These hooks give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/sdk/react/methods). +Because the Next.js SDK is built on top of the Clerk React SDK, you can use the hooks that the React SDK provides. These hooks give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/references/react/overview). @@ -17,17 +17,17 @@ Because the Next.js SDK is built on top of the Clerk React SDK, you can use the Clerk provides first-class support for the [Next.js App Router](https://nextjs.org/docs/app). The following references show how to integrate Clerk features into apps using the latest App Router and React Server Components features. -- [`auth()`](/docs/sdk/nextjs/auth) -- [`currentUser()`](/docs/sdk/nextjs/current-user) -- [Route Handlers](/docs/sdk/nextjs/route-handlers) -- [Server Actions](/docs/sdk/nextjs/server-actions) +- [`auth()`](/docs/references/nextjs/auth) +- [`currentUser()`](/docs/references/nextjs/current-user) +- [Route Handlers](/docs/references/nextjs/route-handlers) +- [Server Actions](/docs/references/nextjs/server-actions) ### Pages router Clerk continues to provide drop-in support for the Next.js Pages Router. In addition to the main Clerk integration, the following references are available for apps using Pages Router. -- [`getAuth()`](/docs/sdk/nextjs/get-auth) -- [`buildClerkProps()`](/docs/sdk/nextjs/build-clerk-props) +- [`getAuth()`](/docs/references/nextjs/get-auth) +- [`buildClerkProps()`](/docs/references/nextjs/build-clerk-props) ## `Auth` object @@ -35,7 +35,7 @@ Both `auth()` (App Router) and `getAuth()` (Pages Router) return an `Auth` objec ## `clerkMiddleware()` -The `clerkMiddleware()` helper integrates Clerk authentication into your Next.js application through middleware. It allows you to integrate authorization into both the client and server of your application. You can learn more [here](/docs/sdk/nextjs/clerk-middleware). +The `clerkMiddleware()` helper integrates Clerk authentication into your Next.js application through middleware. It allows you to integrate authorization into both the client and server of your application. You can learn more [here](/docs/references/nextjs/clerk-middleware). ## Demo repositories diff --git a/docs/sdk/nextjs/read-session-data.mdx b/docs/references/nextjs/read-session-data.mdx similarity index 84% rename from docs/sdk/nextjs/read-session-data.mdx rename to docs/references/nextjs/read-session-data.mdx index fbe61ad2dd..8fceb5fe56 100644 --- a/docs/sdk/nextjs/read-session-data.mdx +++ b/docs/references/nextjs/read-session-data.mdx @@ -9,7 +9,7 @@ Clerk provides a set of [hooks and helpers](/docs/references/nextjs/overview#cli ### App Router -[`auth()`](/docs/sdk/nextjs/auth) and [`currentUser()`](/docs/sdk/nextjs/current-user) are App Router-specific helpers that you can use inside of your Route Handlers, Middleware, Server Components, and Server Actions. +[`auth()`](/docs/references/nextjs/auth) and [`currentUser()`](/docs/references/nextjs/current-user) are App Router-specific helpers that you can use inside of your Route Handlers, Middleware, Server Components, and Server Actions. The `auth()` helper will return the [`Auth`](/docs/references/backend/types/auth-object) object of the currently active user. Now that request data is available in the global scope through Next.js's `headers()` and `cookies()` methods, passing the request object to Clerk is no longer required. @@ -43,7 +43,7 @@ Under the hood, `currentUser()` uses the [`clerkClient`](/docs/references/backen - A Route Handler can use the [`auth()`](/docs/sdk/nextjs/auth) helper to return information about the user or their authentication state, or to control access to some or all of the Route Handler. The `auth()` helper does require [Middleware](/docs/sdk/nextjs/clerk-middleware). + A Route Handler can use the [`auth()`](/docs/references/nextjs/auth) helper to return information about the user or their authentication state, or to control access to some or all of the Route Handler. The `auth()` helper does require [Middleware](/docs/references/nextjs/clerk-middleware). ```tsx {{ filename: 'app/api/user/route.tsx' }} import { NextResponse } from 'next/server' @@ -66,7 +66,7 @@ Under the hood, `currentUser()` uses the [`clerkClient`](/docs/references/backen - A Route Handler can use the [`auth()`](/docs/sdk/nextjs/auth) helper to return information about the user or their authentication state, or to control access to some or all of the Route Handler. The `auth()` helper does require [Middleware](/docs/sdk/nextjs/clerk-middleware). + A Route Handler can use the [`auth()`](/docs/references/nextjs/auth) helper to return information about the user or their authentication state, or to control access to some or all of the Route Handler. The `auth()` helper does require [Middleware](/docs/references/nextjs/clerk-middleware). In this example, the `auth()` helper is used to validate an authenticated user and the `currentUser()` helper is used to access the `Backend User` object for the authenticated user. @@ -97,7 +97,7 @@ Under the hood, `currentUser()` uses the [`clerkClient`](/docs/references/backen - For Next.js applications using the Pages Router, you can retrieve information about the user and their authentication state, or control access to some or all of your API routes by using the [`getAuth()`](/docs/sdk/nextjs/get-auth) helper. The `getAuth()` helper does require [Middleware](/docs/sdk/nextjs/clerk-middleware). + For Next.js applications using the Pages Router, you can retrieve information about the user and their authentication state, or control access to some or all of your API routes by using the [`getAuth()`](/docs/references/nextjs/get-auth) helper. The `getAuth()` helper does require [Middleware](/docs/references/nextjs/clerk-middleware). ```tsx {{ filename: 'pages/api/auth.ts' }} import type { NextApiRequest, NextApiResponse } from 'next' @@ -118,7 +118,7 @@ Under the hood, `currentUser()` uses the [`clerkClient`](/docs/references/backen - For Next.js applications using the Pages Router, you can retrieve information about the user and their authentication state, or control access to some or all of your API routes by using the `getAuth()` helper. The `getAuth()` helper does require [Middleware](/docs/sdk/nextjs/clerk-middleware). + For Next.js applications using the Pages Router, you can retrieve information about the user and their authentication state, or control access to some or all of your API routes by using the `getAuth()` helper. The `getAuth()` helper does require [Middleware](/docs/references/nextjs/clerk-middleware). In some cases, you may need the full `User` object. For example, if you want to access the user's email address address or name, you can use the [`clerkClient`](/docs/references/backend/overview) helper to get the full `User` object. @@ -190,7 +190,7 @@ Under the hood, `currentUser()` uses the [`clerkClient`](/docs/references/backen ### `useAuth` -The [`useAuth`](/docs/sdk/react/use-auth) hook is a convenient way to access the current auth state. This hook provides the minimal information needed for data-loading and helper methods to manage the current active session. +The [`useAuth`](/docs/references/react/use-auth) hook is a convenient way to access the current auth state. This hook provides the minimal information needed for data-loading and helper methods to manage the current active session. ```tsx {{ filename: 'example.tsx' }} 'use client' @@ -214,7 +214,7 @@ export default function Example() { ### `useUser` -The [`useUser`](/docs/sdk/react/use-user) hook is a convenient way to access the current user data where you need it. This hook provides the user data and helper methods to manage the current active session. +The [`useUser`](/docs/references/react/use-user) hook is a convenient way to access the current user data where you need it. This hook provides the user data and helper methods to manage the current active session. ```tsx {{ filename: 'example.tsx' }} 'use client' diff --git a/docs/sdk/nextjs/rendering-modes.mdx b/docs/references/nextjs/rendering-modes.mdx similarity index 100% rename from docs/sdk/nextjs/rendering-modes.mdx rename to docs/references/nextjs/rendering-modes.mdx diff --git a/docs/sdk/nextjs/route-handlers.mdx b/docs/references/nextjs/route-handlers.mdx similarity index 93% rename from docs/sdk/nextjs/route-handlers.mdx rename to docs/references/nextjs/route-handlers.mdx index e48bd1eb16..fea9f74abc 100644 --- a/docs/sdk/nextjs/route-handlers.mdx +++ b/docs/references/nextjs/route-handlers.mdx @@ -7,7 +7,7 @@ Clerk provides helpers that allow you to protect your Route Handlers, fetch the ## Protect your Route Handlers -If you aren't protecting your Route Handler using [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware), you can protect your Route Handler in two ways: +If you aren't protecting your Route Handler using [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware), you can protect your Route Handler in two ways: - Use [`auth.protect()`](/docs/references/nextjs/auth#protect) if you want Clerk to return a `404` error when there is no signed in user. - Use [`auth().userId`](/docs/references/nextjs/auth#retrieving-user-id) if you want to customize the behavior or error message. @@ -71,7 +71,7 @@ export async function GET() { ## Retrieve the current user -In some cases, you might need the current user in your Route Handler. Clerk provides an asynchronous helper called [`currentUser()`](/docs/sdk/nextjs/current-user) to retrieve the current [`Backend User`](/docs/references/backend/types/backend-user) object. +In some cases, you might need the current user in your Route Handler. Clerk provides an asynchronous helper called [`currentUser()`](/docs/references/nextjs/current-user) to retrieve the current [`Backend User`](/docs/references/backend/types/backend-user) object. ```ts {{ filename: 'app/api/route.ts' }} import { NextResponse } from 'next/server' diff --git a/docs/sdk/nextjs/server-actions.mdx b/docs/references/nextjs/server-actions.mdx similarity index 93% rename from docs/sdk/nextjs/server-actions.mdx rename to docs/references/nextjs/server-actions.mdx index c914b65963..8278292bc5 100644 --- a/docs/sdk/nextjs/server-actions.mdx +++ b/docs/references/nextjs/server-actions.mdx @@ -11,7 +11,7 @@ The following guide provides examples for using Server Actions in Server Compone ### Protect your Server Actions -You can use the [`auth()`](/docs/sdk/nextjs/auth) helper to protect your server actions. This helper will return the current user's ID if they are signed in, or `null` if they are not. +You can use the [`auth()`](/docs/references/nextjs/auth) helper to protect your server actions. This helper will return the current user's ID if they are signed in, or `null` if they are not. ```tsx {{ filename: 'actions.ts' }} import { auth } from '@clerk/nextjs/server' @@ -40,7 +40,7 @@ export default function AddToCart() { ### Accessing the current user -Current user data is important for data enrichment. You can use the [`currentUser()`](/docs/sdk/nextjs/current-user) helper to fetch the current user's data in your server actions. +Current user data is important for data enrichment. You can use the [`currentUser()`](/docs/references/nextjs/current-user) helper to fetch the current user's data in your server actions. ```tsx {{ filename: 'app/page.tsx' }} import { currentUser } from '@clerk/nextjs/server' diff --git a/docs/sdk/nextjs/trpc.mdx b/docs/references/nextjs/trpc.mdx similarity index 97% rename from docs/sdk/nextjs/trpc.mdx rename to docs/references/nextjs/trpc.mdx index 96b34bfb03..af24bae573 100644 --- a/docs/sdk/nextjs/trpc.mdx +++ b/docs/references/nextjs/trpc.mdx @@ -31,7 +31,7 @@ description: Learn how to integrate Clerk into your Next.js Pages Router applica Clerk's [`Auth`](/docs/references/backend/types/auth-object) object includes important authentication information like the current user's session ID, user ID, and organization ID. It also contains methods to check for the current user's permissions and to retrieve their session token. - To add Clerk's authentication context (`Auth` object) to your tRPC server, create a context file that will be used to create the context for every tRPC query sent to the server. This context file will use the [`getAuth()`](/docs/sdk/nextjs/get-auth) helper from Clerk to access the user's `Auth` object. + To add Clerk's authentication context (`Auth` object) to your tRPC server, create a context file that will be used to create the context for every tRPC query sent to the server. This context file will use the [`getAuth()`](/docs/references/nextjs/get-auth) helper from Clerk to access the user's `Auth` object. ```ts {{ filename: 'src/server/context.ts' }} import * as trpc from '@trpc/server' diff --git a/docs/sdk/nodejs/methods.mdx b/docs/references/nodejs/available-methods.mdx similarity index 100% rename from docs/sdk/nodejs/methods.mdx rename to docs/references/nodejs/available-methods.mdx diff --git a/docs/sdk/nodejs/quickstart.mdx b/docs/references/nodejs/overview.mdx similarity index 95% rename from docs/sdk/nodejs/quickstart.mdx rename to docs/references/nodejs/overview.mdx index 4ab8234237..2b21bfe02e 100644 --- a/docs/sdk/nodejs/quickstart.mdx +++ b/docs/references/nodejs/overview.mdx @@ -11,7 +11,7 @@ description: Learn how to integrate Node.js into your Clerk application. ### Create a Clerk application - You need to create a Clerk application in the Clerk Dashboard before you can set up Clerk Node.js. For more information, see the [setup guide](/docs/getting-started). + You need to create a Clerk application in the Clerk Dashboard before you can set up Clerk Node.js. For more information, see the [setup guide](/docs/quickstarts/setup-clerk). ### Install `@clerk/clerk-sdk-node` @@ -45,7 +45,7 @@ description: Learn how to integrate Node.js into your Clerk application. ## Available methods -All resource operations are mounted as sub-APIs on the `clerkClient` object. To access the resource operations, [you must first instantiate a `clerkClient` instance](/docs/sdk/nodejs/methods). +All resource operations are mounted as sub-APIs on the `clerkClient` object. To access the resource operations, [you must first instantiate a `clerkClient` instance](/docs/references/nodejs/available-methods). ## Multi-session applications diff --git a/docs/sdk/nuxt/clerk-middleware.mdx b/docs/references/nuxt/clerk-middleware.mdx similarity index 99% rename from docs/sdk/nuxt/clerk-middleware.mdx rename to docs/references/nuxt/clerk-middleware.mdx index 44c76890ea..e3bfb8f5a0 100644 --- a/docs/sdk/nuxt/clerk-middleware.mdx +++ b/docs/references/nuxt/clerk-middleware.mdx @@ -6,7 +6,7 @@ description: The clerkMiddleware() helper allows you to protect your Nuxt applic The `clerkMiddleware()` helper allows you to protect your Nuxt application **on the server-side**. It can be used to validate a user's authentication status or authorization status. > [!NOTE] -> To learn how to protect pages, see the [dedicated guide](/docs/sdk/nuxt/protect-pages). +> To learn how to protect pages, see the [dedicated guide](/docs/references/nuxt/protect-pages). ## Configure `clerkMiddleware()` diff --git a/docs/sdk/nuxt/methods.mdx b/docs/references/nuxt/overview.mdx similarity index 76% rename from docs/sdk/nuxt/methods.mdx rename to docs/references/nuxt/overview.mdx index 2964f4ffbe..34f56daac9 100644 --- a/docs/sdk/nuxt/methods.mdx +++ b/docs/references/nuxt/overview.mdx @@ -3,16 +3,16 @@ title: Clerk Nuxt SDK description: Learn how to integrate Clerk into your Nuxt application using the Clerk Nuxt SDK. --- -The Nuxt SDK is built on top of the [Vue SDK](/docs/sdk/vue/methods), and is the recommended method for integrating Clerk into your Nuxt application. +The Nuxt SDK is built on top of the [Vue SDK](/docs/references/vue/overview), and is the recommended method for integrating Clerk into your Nuxt application. ## Guides -- [Read session and user data](/docs/sdk/nuxt/read-session-data) -- [Protect pages](/docs/sdk/nuxt/protect-pages) +- [Read session and user data](/docs/references/nuxt/read-session-data) +- [Protect pages](/docs/references/nuxt/protect-pages) ## Client-side helpers -Because the Nuxt SDK is built on top of the Clerk Vue SDK, you can use the composables that the Vue SDK provides. These composables give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [Vue SDK reference](/docs/sdk/vue/methods). +Because the Nuxt SDK is built on top of the Clerk Vue SDK, you can use the composables that the Vue SDK provides. These composables give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [Vue SDK reference](/docs/references/vue/overview). @@ -22,7 +22,7 @@ The `Auth` object is available at `event.context.auth` in your [event handlers]( ## `clerkMiddleware()` -The `clerkMiddleware()` helper integrates Clerk authentication and authorization into your Nuxt application through middleware. [Learn more](/docs/sdk/nuxt/clerk-middleware). +The `clerkMiddleware()` helper integrates Clerk authentication and authorization into your Nuxt application through middleware. [Learn more](/docs/references/nuxt/clerk-middleware). ## `clerkClient()` diff --git a/docs/sdk/nuxt/protect-pages.mdx b/docs/references/nuxt/protect-pages.mdx similarity index 100% rename from docs/sdk/nuxt/protect-pages.mdx rename to docs/references/nuxt/protect-pages.mdx diff --git a/docs/sdk/nuxt/read-session-data.mdx b/docs/references/nuxt/read-session-data.mdx similarity index 100% rename from docs/sdk/nuxt/read-session-data.mdx rename to docs/references/nuxt/read-session-data.mdx diff --git a/docs/references/overview.mdx b/docs/references/overview.mdx index ff8f0dfe92..be1073a7e6 100644 --- a/docs/references/overview.mdx +++ b/docs/references/overview.mdx @@ -6,13 +6,13 @@ description: Learn about the Clerk and community SDK's available for integrating ## Build with Clerk SDKs - - [Next.js](/docs/sdk/nextjs/methods) + - [Next.js](/docs/references/nextjs/overview) - Clerk's Next.js SDK has prebuilt components, React hooks, and helpers to make user authentication easier. - {} --- - - [React](/docs/sdk/react/quickstart) + - [React](/docs/quickstarts/react) - Clerk React is the recommended way to integrate Clerk into your React application. - {} @@ -24,43 +24,43 @@ description: Learn about the Clerk and community SDK's available for integrating --- - - [Node.js](/docs/sdk/nodejs/quickstart) + - [Node.js](/docs/references/nodejs/overview) - Clerk Node SDK is the recommend way to integrate Clerk into your Node / Express application. - {} --- - - [React Native / Expo](/docs/sdk/expo/quickstart) + - [React Native / Expo](/docs/quickstarts/expo) - Clerk Expo is the recommended way to integrate Clerk into your React Native application. - {} --- - - [Remix](/docs/sdk/remix/clerk-app) + - [Remix](/docs/references/remix/clerk-app) - Clerk's Remix SDK has prebuilt components, React hooks, and helpers to make user authentication easier. - {} --- - - [Astro](/docs/sdk/astro/methods) + - [Astro](/docs/references/astro/overview) - Easily add secure and SSR-friendly authentication to your Astro application with Clerk. - {} --- - - [TanStack Start (Beta)](/docs/sdk/tanstack-start/quickstart) + - [TanStack Start (Beta)](/docs/quickstarts/tanstack-start) - Easily add secure and SSR-friendly authentication to your TanStack Start application with Clerk. - ![](data:image/webp;base64,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) --- - - [Go](/docs/sdk/go/quickstart) + - [Go](/docs/references/go/overview) - Clerk Go SDK is a wrapper around our Backend API written in Golang. - {} --- - - [Ruby](/docs/sdk/ruby/quickstart) + - [Ruby](/docs/references/ruby/overview) - Clerk Ruby is the recommended way to integrate Clerk into your Ruby application. - {} diff --git a/docs/sdk/react-router/custom-signup-signin-pages.mdx b/docs/references/react-router/custom-signup-signin-pages.mdx similarity index 97% rename from docs/sdk/react-router/custom-signup-signin-pages.mdx rename to docs/references/react-router/custom-signup-signin-pages.mdx index c6d419a53d..5a445e7093 100644 --- a/docs/sdk/react-router/custom-signup-signin-pages.mdx +++ b/docs/references/react-router/custom-signup-signin-pages.mdx @@ -3,7 +3,7 @@ title: Build your own sign-up and sign-in pages for your React Router app with C description: Learn how to add custom sign-up and sign-in pages to your React Router app with Clerk's prebuilt components. --- -This guide shows you how to use the [``](/docs/components/authentication/sign-in) and [``](/docs/components/authentication/sign-up) components with the [React Router Splat route](https://reactrouter.com/start/framework/routing#splats) to build custom sign-up and sign-in pages for your React Router app. See the [quickstart tutorial](/docs/sdk/react-router/quickstart) for a step-by-step guide. +This guide shows you how to use the [``](/docs/components/authentication/sign-in) and [``](/docs/components/authentication/sign-up) components with the [React Router Splat route](https://reactrouter.com/start/framework/routing#splats) to build custom sign-up and sign-in pages for your React Router app. See the [quickstart tutorial](/docs/quickstarts/react-router) for a step-by-step guide. If the prebuilt components don't meet your specific needs or if you require more control over the logic, you can rebuild the existing Clerk flows using the Clerk API. For more information, see the [custom flow guides](/docs/custom-flows/overview). diff --git a/docs/sdk/react-router/get-auth.mdx b/docs/references/react-router/get-auth.mdx similarity index 100% rename from docs/sdk/react-router/get-auth.mdx rename to docs/references/react-router/get-auth.mdx diff --git a/docs/sdk/react-router/library-mode.mdx b/docs/references/react-router/library-mode.mdx similarity index 94% rename from docs/sdk/react-router/library-mode.mdx rename to docs/references/react-router/library-mode.mdx index 3baafa1577..4d04824993 100644 --- a/docs/sdk/react-router/library-mode.mdx +++ b/docs/references/react-router/library-mode.mdx @@ -27,12 +27,12 @@ description: Learn how to use Clerk with React Router in library mode to add aut - Protect your pages -React Router can be used as a framework or as a standalone library. This guide explains how to add React Router authentication to an existing React application using library mode. To use React Router as a framework instead, see the [React Router quickstart](/docs/sdk/react-router/quickstart). +React Router can be used as a framework or as a standalone library. This guide explains how to add React Router authentication to an existing React application using library mode. To use React Router as a framework instead, see the [React Router quickstart](/docs/quickstarts/react-router). ## Install `@clerk/react-router` - Clerk's [React Router SDK](/docs/sdk/react-router/methods) provides prebuilt components, hooks, and stores to make it easy to integrate authentication and user management in your React Router app. + Clerk's [React Router SDK](/docs/references/react-router/overview) provides prebuilt components, hooks, and stores to make it easy to integrate authentication and user management in your React Router app. Run the following command to install the SDK: diff --git a/docs/sdk/react-router/methods.mdx b/docs/references/react-router/overview.mdx similarity index 77% rename from docs/sdk/react-router/methods.mdx rename to docs/references/react-router/overview.mdx index 430f31563f..f2172fd371 100644 --- a/docs/sdk/react-router/methods.mdx +++ b/docs/references/react-router/overview.mdx @@ -6,11 +6,11 @@ description: Learn how to integrate Clerk into your React Router application usi > [!WARNING] > Due to an active [issue with React Router](https://github.com/remix-run/react-router/issues/12475), Clerk and React Router currently requires using Node.js 22.11 or lower. -The Clerk React Router SDK is built on top of the [React SDK](/docs/sdk/react/methods) and is the recommended method for integrating Clerk into your React Router application. +The Clerk React Router SDK is built on top of the [React SDK](/docs/references/react/overview) and is the recommended method for integrating Clerk into your React Router application. ## Client-side helpers -The React Router SDK provides access to all of Clerk React's hooks which give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/sdk/react/methods). +The React Router SDK provides access to all of Clerk React's hooks which give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/references/react/overview). @@ -18,8 +18,8 @@ The React Router SDK provides access to all of Clerk React's hooks which give yo The following references show how to integrate Clerk features into applications using React Router server functions and API routes. -- [`getAuth()`](/docs/sdk/react-router/get-auth) -- [`rootAuthLoader()`](/docs/sdk/react-router/root-auth-loader) +- [`getAuth()`](/docs/references/react-router/get-auth) +- [`rootAuthLoader()`](/docs/references/react-router/root-auth-loader) ### `Auth` object @@ -29,5 +29,5 @@ The `getAuth()` method returns an `Auth` object. This JavaScript object contains React Router can be integrated with Clerk in two ways: -- As a framework (recommended): Configure your app using [Clerk's React Router SDK](/docs/sdk/react-router/quickstart) -- As a library: Manually integrate React Router into your React + Vite app using [library mode](/docs/sdk/react-router/library-mode) +- As a framework (recommended): Configure your app using [Clerk's React Router SDK](/docs/quickstarts/react-router) +- As a library: Manually integrate React Router into your React + Vite app using [library mode](/docs/references/react-router/library-mode) diff --git a/docs/sdk/react-router/read-session-data.mdx b/docs/references/react-router/read-session-data.mdx similarity index 67% rename from docs/sdk/react-router/read-session-data.mdx rename to docs/references/react-router/read-session-data.mdx index 844605502a..23398a1e38 100644 --- a/docs/sdk/react-router/read-session-data.mdx +++ b/docs/references/react-router/read-session-data.mdx @@ -7,7 +7,7 @@ Clerk provides a set of [hooks and helpers](/docs/references/react-router/overvi ## Server-side -To access active session and user data on the server-side, use the `getAuth()` helper. See the [reference documentation](/docs/sdk/react-router/get-auth) for more information, including code examples. +To access active session and user data on the server-side, use the `getAuth()` helper. See the [reference documentation](/docs/references/react-router/get-auth) for more information, including code examples. ## Client-side @@ -15,7 +15,7 @@ To access active session and user data on the client-side, use Clerk's `useAuth( ### `useAuth()` -The [`useAuth()`](/docs/sdk/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes, as shown in the following example: +The [`useAuth()`](/docs/references/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes, as shown in the following example: ```tsx {{ filename: 'app/routes/use-auth.tsx' }} import { useAuth } from '@clerk/react-router' @@ -35,7 +35,7 @@ export default function UseAuthPage() { ### `useUser()` -The [`useUser()`](/docs/sdk/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. +The [`useUser()`](/docs/references/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. ```tsx {{ filename: 'app/routes/use-user.tsx' }} import { useUser } from '@clerk/react-router' diff --git a/docs/sdk/react-router/root-auth-loader.mdx b/docs/references/react-router/root-auth-loader.mdx similarity index 100% rename from docs/sdk/react-router/root-auth-loader.mdx rename to docs/references/react-router/root-auth-loader.mdx diff --git a/docs/sdk/react/methods.mdx b/docs/references/react/overview.mdx similarity index 75% rename from docs/sdk/react/methods.mdx rename to docs/references/react/overview.mdx index 8f55dc3231..c35327c780 100644 --- a/docs/sdk/react/methods.mdx +++ b/docs/references/react/overview.mdx @@ -22,12 +22,12 @@ Clerk offers framework-specific SDKs that are customized to provide the better d | Framework | Package | Docs | | - | - | - | -| Next.js | `@clerk/nextjs` | [Next.js SDK](/docs/sdk/nextjs/methods) | -| React Router | `@clerk/clerk-react-router` | [React Router SDK](/docs/sdk/react-router/methods) | -| Remix | `@clerk/remix` | [Remix SDK](/docs/sdk/remix/clerk-app) | -| Astro | `@clerk/astro` | [Astro SDK](/docs/sdk/astro/methods) | -| Tanstack Start | `@clerk/tanstack-start` | [Tanstack Start SDK](/docs/sdk/tanstack-start/methods) | +| Next.js | `@clerk/nextjs` | [Next.js SDK](/docs/references/nextjs/overview) | +| React Router | `@clerk/clerk-react-router` | [React Router SDK](/docs/references/react-router/overview) | +| Remix | `@clerk/remix` | [Remix SDK](/docs/references/remix/clerk-app) | +| Astro | `@clerk/astro` | [Astro SDK](/docs/references/astro/overview) | +| Tanstack Start | `@clerk/tanstack-start` | [Tanstack Start SDK](/docs/references/tanstack-start/overview) | ## Set up Clerk React -Before you can add Clerk to your React application, you must create a Clerk app in the Clerk Dashboard. To get started, follow the [setup guide](/docs/getting-started). Then, follow the [quickstart guide](/docs/sdk/react/quickstart) to set up the React SDK in your app. +Before you can add Clerk to your React application, you must create a Clerk app in the Clerk Dashboard. To get started, follow the [setup guide](/docs/quickstarts/setup-clerk). Then, follow the [quickstart guide](/docs/quickstarts/react) to set up the React SDK in your app. diff --git a/docs/sdk/react/use-auth.mdx b/docs/references/react/use-auth.mdx similarity index 88% rename from docs/sdk/react/use-auth.mdx rename to docs/references/react/use-auth.mdx index e8cc203c23..f63c648a5f 100644 --- a/docs/sdk/react/use-auth.mdx +++ b/docs/references/react/use-auth.mdx @@ -78,7 +78,7 @@ The `useAuth()` hook provides access to the current user's authentication state ## How to use the `useAuth()` hook > [!NOTE] -> For Next.js applications, it's recommended to use the [`auth()`](/docs/sdk/nextjs/auth) helper instead of `useAuth()`. Since `auth()` must be used in Server Components, you'll need to pass auth data to Client Components as needed. If you prefer `useAuth()`, you must pass the `dynamic` prop to ``, but be aware this switches the app to dynamic rendering. Learn more [here](/docs/sdk/nextjs/rendering-modes). +> For Next.js applications, it's recommended to use the [`auth()`](/docs/references/nextjs/auth) helper instead of `useAuth()`. Since `auth()` must be used in Server Components, you'll need to pass auth data to Client Components as needed. If you prefer `useAuth()`, you must pass the `dynamic` prop to ``, but be aware this switches the app to dynamic rendering. Learn more [here](/docs/references/nextjs/rendering-modes). The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource. diff --git a/docs/sdk/react/use-clerk.mdx b/docs/references/react/use-clerk.mdx similarity index 100% rename from docs/sdk/react/use-clerk.mdx rename to docs/references/react/use-clerk.mdx diff --git a/docs/sdk/react/use-organization-list.mdx b/docs/references/react/use-organization-list.mdx similarity index 100% rename from docs/sdk/react/use-organization-list.mdx rename to docs/references/react/use-organization-list.mdx diff --git a/docs/sdk/react/use-organization.mdx b/docs/references/react/use-organization.mdx similarity index 100% rename from docs/sdk/react/use-organization.mdx rename to docs/references/react/use-organization.mdx diff --git a/docs/sdk/react/use-reverification.mdx b/docs/references/react/use-reverification.mdx similarity index 100% rename from docs/sdk/react/use-reverification.mdx rename to docs/references/react/use-reverification.mdx diff --git a/docs/sdk/react/use-session-list.mdx b/docs/references/react/use-session-list.mdx similarity index 100% rename from docs/sdk/react/use-session-list.mdx rename to docs/references/react/use-session-list.mdx diff --git a/docs/sdk/react/use-session.mdx b/docs/references/react/use-session.mdx similarity index 100% rename from docs/sdk/react/use-session.mdx rename to docs/references/react/use-session.mdx diff --git a/docs/sdk/react/use-sign-in.mdx b/docs/references/react/use-sign-in.mdx similarity index 100% rename from docs/sdk/react/use-sign-in.mdx rename to docs/references/react/use-sign-in.mdx diff --git a/docs/sdk/react/use-sign-up.mdx b/docs/references/react/use-sign-up.mdx similarity index 100% rename from docs/sdk/react/use-sign-up.mdx rename to docs/references/react/use-sign-up.mdx diff --git a/docs/sdk/react/use-user.mdx b/docs/references/react/use-user.mdx similarity index 100% rename from docs/sdk/react/use-user.mdx rename to docs/references/react/use-user.mdx diff --git a/docs/sdk/redwood/quickstart.mdx b/docs/references/redwood/overview.mdx similarity index 100% rename from docs/sdk/redwood/quickstart.mdx rename to docs/references/redwood/overview.mdx diff --git a/docs/sdk/remix/clerk-app.mdx b/docs/references/remix/clerk-app.mdx similarity index 100% rename from docs/sdk/remix/clerk-app.mdx rename to docs/references/remix/clerk-app.mdx diff --git a/docs/sdk/remix/custom-signup-signin-pages.mdx b/docs/references/remix/custom-signup-signin-pages.mdx similarity index 96% rename from docs/sdk/remix/custom-signup-signin-pages.mdx rename to docs/references/remix/custom-signup-signin-pages.mdx index adb5e1e8f3..3157c9702e 100644 --- a/docs/sdk/remix/custom-signup-signin-pages.mdx +++ b/docs/references/remix/custom-signup-signin-pages.mdx @@ -10,7 +10,7 @@ If Clerk's prebuilt components don't meet your specific needs or if you require The functionality of the components are controlled by the instance settings you specify in the [Clerk Dashboard](https://dashboard.clerk.com). > [!NOTE] -> Just getting started with Clerk and Remix? See the [quickstart tutorial](/docs/sdk/remix/quickstart)! +> Just getting started with Clerk and Remix? See the [quickstart tutorial](/docs/quickstarts/remix)! ## Build your sign-up page @@ -102,6 +102,6 @@ The functionality of the components are controlled by the instance settings you ## Next steps - - [Read user and session data](/docs/sdk/remix/read-session-data) + - [Read user and session data](/docs/references/remix/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Remix application. diff --git a/docs/sdk/remix/read-session-data.mdx b/docs/references/remix/read-session-data.mdx similarity index 79% rename from docs/sdk/remix/read-session-data.mdx rename to docs/references/remix/read-session-data.mdx index 43fd0533fd..a65cf9403a 100644 --- a/docs/sdk/remix/read-session-data.mdx +++ b/docs/references/remix/read-session-data.mdx @@ -9,7 +9,7 @@ Clerk provides a set of [hooks and helpers](/docs/references/nextjs/overview#cli ### `getAuth()` -The [`getAuth()`](/docs/sdk/nextjs/get-auth){{ target: '_blank' }} helper allows you to access the [`Auth` object](/docs/references/backend/types/auth-object){{ target: '_blank' }}, which includes the current user's `userId`. You can use the `userId` to protect your routes or get the user's data. +The [`getAuth()`](/docs/references/nextjs/get-auth){{ target: '_blank' }} helper allows you to access the [`Auth` object](/docs/references/backend/types/auth-object){{ target: '_blank' }}, which includes the current user's `userId`. You can use the `userId` to protect your routes or get the user's data. In the following example, the `userId` is passed to the Backend SDK's [`getUser()`](/docs/references/backend/user/get-user){{ target: '_blank' }} method to get the user's full `User` object. For information on how to use the Backend SDK, see the [Backend SDK documentation](/docs/references/backend/overview){{ target: '_blank' }}. @@ -71,7 +71,7 @@ In the following example, the `userId` is passed to the Backend SDK's [`getUser( ### `useAuth()` -The [`useAuth()`](/docs/sdk/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes. +The [`useAuth()`](/docs/references/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes. ```tsx {{ filename: 'routes/example.tsx' }} import { useAuth } from '@clerk/remix' @@ -94,7 +94,7 @@ export default function Example() { ### `useUser()` -The [`useUser()`](/docs/sdk/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. +The [`useUser()`](/docs/references/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. ```tsx {{ filename: 'routes/example.tsx' }} import { useUser } from '@clerk/remix' diff --git a/docs/sdk/remix/spa-mode.mdx b/docs/references/remix/spa-mode.mdx similarity index 99% rename from docs/sdk/remix/spa-mode.mdx rename to docs/references/remix/spa-mode.mdx index 4757b6f462..c0c6de3a04 100644 --- a/docs/sdk/remix/spa-mode.mdx +++ b/docs/references/remix/spa-mode.mdx @@ -22,7 +22,7 @@ description: Clerk supports Remix SPA mode out-of-the-box. > [!NOTE] > This guide explains how to use Clerk with [Remix in SPA mode](https://remix.run/docs/en/main/guides/spa-mode). -> If you are using Remix with SSR, follow the [Remix quickstart](/docs/sdk/remix/quickstart). +> If you are using Remix with SSR, follow the [Remix quickstart](/docs/quickstarts/remix). ## Install `@clerk/remix` diff --git a/docs/sdk/ruby/methods.mdx b/docs/references/ruby/available-methods.mdx similarity index 100% rename from docs/sdk/ruby/methods.mdx rename to docs/references/ruby/available-methods.mdx diff --git a/docs/sdk/ruby/quickstart.mdx b/docs/references/ruby/overview.mdx similarity index 98% rename from docs/sdk/ruby/quickstart.mdx rename to docs/references/ruby/overview.mdx index 8f757fe5c5..fb9b3491f7 100644 --- a/docs/sdk/ruby/quickstart.mdx +++ b/docs/references/ruby/overview.mdx @@ -6,7 +6,7 @@ description: Learn how to integrate Ruby into your Clerk application. ## Create a Clerk application - You need to create a Clerk application in the Clerk Dashboard before you can set up Clerk Ruby. For more information, see the [setup guide](/docs/getting-started). + You need to create a Clerk application in the Clerk Dashboard before you can set up Clerk Ruby. For more information, see the [setup guide](/docs/quickstarts/setup-clerk). ## Install Ruby diff --git a/docs/sdk/ruby/rack-rails.mdx b/docs/references/ruby/rack-rails.mdx similarity index 100% rename from docs/sdk/ruby/rack-rails.mdx rename to docs/references/ruby/rack-rails.mdx diff --git a/docs/references/sdk/backend-only.mdx b/docs/references/sdk/backend-only.mdx index b94d33d4d1..e8c13906bf 100644 --- a/docs/references/sdk/backend-only.mdx +++ b/docs/references/sdk/backend-only.mdx @@ -116,7 +116,7 @@ You can manually create a wrapper library around the [BAPI OpenAPI](https://cler ``` > [!TIP] - > See the Next.js [`getAuth()`](/docs/sdk/nextjs/get-auth) reference to see how it's implemented. + > See the Next.js [`getAuth()`](/docs/references/nextjs/get-auth) reference to see how it's implemented. ### Create a `requireAuth` helper diff --git a/docs/references/sdk/conventions.mdx b/docs/references/sdk/conventions.mdx index e4819f4e62..2a63295009 100644 --- a/docs/references/sdk/conventions.mdx +++ b/docs/references/sdk/conventions.mdx @@ -96,7 +96,7 @@ When only defining a [main entry point](https://nodejs.org/api/packages.html#mai Use [subpath exports](https://nodejs.org/api/packages.html#subpath-exports) to provide API boundaries, enable more efficient code-splitting, and split code between client & server. -Here's how the [`@clerk/astro`](/docs/sdk/astro/methods) package is using subpath exports: +Here's how the [`@clerk/astro`](/docs/references/astro/overview) package is using subpath exports: - `@clerk/astro/react` - Import Clerk's prebuilt React components - `@clerk/astro/client` - Access to useful stores like `$authStore` diff --git a/docs/sdk/tanstack-start/create-clerk-handler.mdx b/docs/references/tanstack-start/create-clerk-handler.mdx similarity index 100% rename from docs/sdk/tanstack-start/create-clerk-handler.mdx rename to docs/references/tanstack-start/create-clerk-handler.mdx diff --git a/docs/sdk/tanstack-start/custom-signup-signin-pages.mdx b/docs/references/tanstack-start/custom-signup-signin-pages.mdx similarity index 95% rename from docs/sdk/tanstack-start/custom-signup-signin-pages.mdx rename to docs/references/tanstack-start/custom-signup-signin-pages.mdx index d67fbcf549..3abd5ac433 100644 --- a/docs/sdk/tanstack-start/custom-signup-signin-pages.mdx +++ b/docs/references/tanstack-start/custom-signup-signin-pages.mdx @@ -8,7 +8,7 @@ This guide shows you how to use the [``](/docs/components/authenticati If Clerk's prebuilt components don't meet your specific needs or if you require more control over the logic, you can rebuild the existing Clerk flows using the Clerk API. For more information, see the [custom flow guides](/docs/custom-flows/overview). > [!NOTE] -> Just getting started with Clerk and TanStack Start? See the [quickstart tutorial](/docs/sdk/tanstack-start/quickstart)! +> Just getting started with Clerk and TanStack Start? See the [quickstart tutorial](/docs/quickstarts/tanstack-start)! ## Build a sign-up page @@ -80,6 +80,6 @@ If Clerk's prebuilt components don't meet your specific needs or if you require ## Next steps - - [Read user and session data](/docs/sdk/tanstack-start/read-session-data) + - [Read user and session data](/docs/references/tanstack-start/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your TanStack Start application. diff --git a/docs/sdk/tanstack-start/get-auth.mdx b/docs/references/tanstack-start/get-auth.mdx similarity index 100% rename from docs/sdk/tanstack-start/get-auth.mdx rename to docs/references/tanstack-start/get-auth.mdx diff --git a/docs/sdk/tanstack-start/methods.mdx b/docs/references/tanstack-start/overview.mdx similarity index 68% rename from docs/sdk/tanstack-start/methods.mdx rename to docs/references/tanstack-start/overview.mdx index 73bfdba127..f112908324 100644 --- a/docs/sdk/tanstack-start/methods.mdx +++ b/docs/references/tanstack-start/overview.mdx @@ -3,16 +3,16 @@ title: Clerk TanStack Start SDK description: Learn how to integrate Clerk into your TanStack Start application using the Clerk TanStack Start SDK. --- -The Clerk TanStack Start SDK is built on top of the [React SDK](/docs/sdk/react/methods) and is the recommended method for integrating Clerk into your TanStack Start application. +The Clerk TanStack Start SDK is built on top of the [React SDK](/docs/references/react/overview) and is the recommended method for integrating Clerk into your TanStack Start application. ## Guides -- [Read session and user data](/docs/sdk/tanstack-start/read-session-data) -- [Add custom sign up and sign in pages](/docs/sdk/tanstack-start/custom-signup-signin-pages) +- [Read session and user data](/docs/references/tanstack-start/read-session-data) +- [Add custom sign up and sign in pages](/docs/references/tanstack-start/custom-signup-signin-pages) ## Client-side helpers -The TanStack Start SDK is a wrapper around Clerk React, so you can use the hooks that Clerk React provides. These hooks give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object, and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/sdk/react/methods). +The TanStack Start SDK is a wrapper around Clerk React, so you can use the hooks that Clerk React provides. These hooks give you access to the [`Clerk`](/docs/references/javascript/clerk/clerk) object, and a set of useful helper methods for signing in and signing up. Learn more in the [React SDK reference](/docs/references/react/overview). @@ -20,7 +20,7 @@ The TanStack Start SDK is a wrapper around Clerk React, so you can use the hooks The following references show how to integrate Clerk features into applications using TanStack Start server functions and API routes. -- [`getAuth()`](/docs/sdk/tanstack-start/get-auth) +- [`getAuth()`](/docs/references/tanstack-start/get-auth) ### `Auth` object diff --git a/docs/sdk/tanstack-start/read-session-data.mdx b/docs/references/tanstack-start/read-session-data.mdx similarity index 70% rename from docs/sdk/tanstack-start/read-session-data.mdx rename to docs/references/tanstack-start/read-session-data.mdx index 655e154cff..689fd176ea 100644 --- a/docs/sdk/tanstack-start/read-session-data.mdx +++ b/docs/references/tanstack-start/read-session-data.mdx @@ -7,7 +7,7 @@ Clerk provides a set of [hooks and helpers](/docs/references/tanstack-start/over ## Server-side -To access active session and user data on the server-side, use the `getAuth()` helper. See the [reference documentation](/docs/sdk/tanstack-start/get-auth) for more information, including code examples. +To access active session and user data on the server-side, use the `getAuth()` helper. See the [reference documentation](/docs/references/tanstack-start/get-auth) for more information, including code examples. ## Client-side @@ -15,7 +15,7 @@ To access active session and user data on the client-side, use Clerk's `useAuth( ### `useAuth()` -The [`useAuth()`](/docs/sdk/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes, as shown in the following example: +The [`useAuth()`](/docs/references/react/use-auth){{ target: '_blank' }} hook provides information about the current auth state, as well as helper methods to manage the current active session. The hook returns `userId`, which can be used to protect your routes, as shown in the following example: ```tsx {{ filename: 'routes/example.tsx' }} import { useAuth } from '@clerk/tanstack-start' @@ -43,7 +43,7 @@ function Example() { ### `useUser()` -The [`useUser()`](/docs/sdk/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. +The [`useUser()`](/docs/references/react/use-user){{ target: '_blank' }} hook provides the current user's [`User`](/docs/references/javascript/user/user){{ target: '_blank' }} object, which holds all of the information for a user of your application and provides a set of methods to manage their account. ```tsx {{ filename: 'routes/example.tsx' }} import { useUser } from '@clerk/tanstack-start' diff --git a/docs/sdk/vue/migrating-from-vue-community-sdk.mdx b/docs/references/vue/migrating-from-vue-community-sdk.mdx similarity index 100% rename from docs/sdk/vue/migrating-from-vue-community-sdk.mdx rename to docs/references/vue/migrating-from-vue-community-sdk.mdx diff --git a/docs/sdk/vue/methods.mdx b/docs/references/vue/overview.mdx similarity index 85% rename from docs/sdk/vue/methods.mdx rename to docs/references/vue/overview.mdx index 54eebb3788..4f6ff740aa 100644 --- a/docs/sdk/vue/methods.mdx +++ b/docs/references/vue/overview.mdx @@ -20,8 +20,8 @@ Clerk offers framework-specific SDKs that are customized to provide the better d | Framework | Package | Docs | | - | - | - | -| Nuxt | `@clerk/nuxt` | [Nuxt SDK](/docs/sdk/nuxt/methods) | +| Nuxt | `@clerk/nuxt` | [Nuxt SDK](/docs/references/nuxt/overview) | ## Set up Clerk Vue -Before you can add Clerk to your Vue application, you must create a Clerk app in the Clerk Dashboard. To get started, follow the [setup guide](/docs/getting-started). Then, follow the [quickstart guide](/docs/sdk/vue/quickstart) to set up the Vue SDK in your app. +Before you can add Clerk to your Vue application, you must create a Clerk app in the Clerk Dashboard. To get started, follow the [setup guide](/docs/quickstarts/setup-clerk). Then, follow the [quickstart guide](/docs/quickstarts/vue) to set up the Vue SDK in your app. diff --git a/docs/sdk/vue/use-auth.mdx b/docs/references/vue/use-auth.mdx similarity index 100% rename from docs/sdk/vue/use-auth.mdx rename to docs/references/vue/use-auth.mdx diff --git a/docs/sdk/vue/use-clerk.mdx b/docs/references/vue/use-clerk.mdx similarity index 100% rename from docs/sdk/vue/use-clerk.mdx rename to docs/references/vue/use-clerk.mdx diff --git a/docs/sdk/vue/use-organization.mdx b/docs/references/vue/use-organization.mdx similarity index 100% rename from docs/sdk/vue/use-organization.mdx rename to docs/references/vue/use-organization.mdx diff --git a/docs/sdk/vue/use-session-list.mdx b/docs/references/vue/use-session-list.mdx similarity index 100% rename from docs/sdk/vue/use-session-list.mdx rename to docs/references/vue/use-session-list.mdx diff --git a/docs/sdk/vue/use-session.mdx b/docs/references/vue/use-session.mdx similarity index 100% rename from docs/sdk/vue/use-session.mdx rename to docs/references/vue/use-session.mdx diff --git a/docs/sdk/vue/use-sign-in.mdx b/docs/references/vue/use-sign-in.mdx similarity index 100% rename from docs/sdk/vue/use-sign-in.mdx rename to docs/references/vue/use-sign-in.mdx diff --git a/docs/sdk/vue/use-sign-up.mdx b/docs/references/vue/use-sign-up.mdx similarity index 100% rename from docs/sdk/vue/use-sign-up.mdx rename to docs/references/vue/use-sign-up.mdx diff --git a/docs/sdk/vue/use-user.mdx b/docs/references/vue/use-user.mdx similarity index 100% rename from docs/sdk/vue/use-user.mdx rename to docs/references/vue/use-user.mdx diff --git a/docs/troubleshooting/create-a-minimal-reproduction.mdx b/docs/troubleshooting/create-a-minimal-reproduction.mdx index afc6e8bad9..7018ee20f3 100644 --- a/docs/troubleshooting/create-a-minimal-reproduction.mdx +++ b/docs/troubleshooting/create-a-minimal-reproduction.mdx @@ -38,11 +38,11 @@ The best way to create a minimal reproduction is to start fresh, with a minimal ### Create a Clerk application - Create a new Clerk application through the Clerk Dashboard. You can follow the [setup guide](/docs/getting-started) to help you get started. + Create a new Clerk application through the Clerk Dashboard. You can follow the [setup guide](/docs/quickstarts/setup-clerk) to help you get started. ### Set the environment variables - Set the environment variables in your Clerk application. You can find instructions on how to do so in the appropriate [quickstart guide](/docs/quickstarts). + Set the environment variables in your Clerk application. You can find instructions on how to do so in the appropriate [quickstart guide](/docs/quickstarts/overview). ### Run the app diff --git a/docs/troubleshooting/overview.mdx b/docs/troubleshooting/overview.mdx index e12de87f6b..291ed6b8db 100644 --- a/docs/troubleshooting/overview.mdx +++ b/docs/troubleshooting/overview.mdx @@ -7,7 +7,7 @@ We hope that our documentation is thorough and transparent enough that you won't Refer to the [Backend API](/docs/reference/backend-api){{ target: '_blank' }} and [Frontend API](/docs/reference/frontend-api){{ target: '_blank' }} reference docs for questions about object structures, requests, and responses. -Are you looking for a place to get started? See the [quickstarts](/docs/quickstarts). +Are you looking for a place to get started? See the [quickstarts](/docs/quickstarts/overview). ## Discord community diff --git a/docs/upgrade-guides/core-2/nextjs.mdx b/docs/upgrade-guides/core-2/nextjs.mdx index ce8ea8d6b9..f666a62f43 100644 --- a/docs/upgrade-guides/core-2/nextjs.mdx +++ b/docs/upgrade-guides/core-2/nextjs.mdx @@ -96,7 +96,7 @@ The new version ships with improved design and UX across all of Clerk's [UI comp ### New Middleware architecture -User and customer feedback about `authMiddleware()` has been clear in that Middleware logic was a often friction point. As such, in v5 you will find a completely new Middleware helper called [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) that should alleviate the issues folks had with `authMiddleware()`. +User and customer feedback about `authMiddleware()` has been clear in that Middleware logic was a often friction point. As such, in v5 you will find a completely new Middleware helper called [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) that should alleviate the issues folks had with `authMiddleware()`. The primary change from the previous `authMiddleware()` is that `clerkMiddleware()` does not protect any routes by default, instead requiring the developer to add routes they would like to be protected by auth. This is a substantial contrast to the previous `authMiddleware()`, which protected all routes by default, requiring the developer to add exceptions. The API was also substantially simplified, and it has become easier to combine with other Middleware helpers smoothly as well. @@ -132,7 +132,7 @@ A couple things to note here: - With `clerkMiddleware`, you're defining the routes you want **to be protected**, rather than the routes you don't want to be protected. - The `auth.protect()` helper is used extensively here. See its [reference doc](/docs/references/nextjs/auth#protect) for more info. -See the [`clerkMiddleware()`](/docs/sdk/nextjs/clerk-middleware) docs for more information and detailed usage examples. +See the [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware) docs for more information and detailed usage examples. #### Migrating to `clerkMiddleware()` @@ -158,7 +158,7 @@ export const config = { } ``` -Of course, in most cases you'll have a more complicated setup than this. You can find some examples below for how to migrate a few common use cases. Be sure to review the [`clerkMiddleware()` documentation](/docs/sdk/nextjs/clerk-middleware) if your specific use case is not mentioned. +Of course, in most cases you'll have a more complicated setup than this. You can find some examples below for how to migrate a few common use cases. Be sure to review the [`clerkMiddleware()` documentation](/docs/references/nextjs/clerk-middleware) if your specific use case is not mentioned. If you are using the `@clerk/nextjs/app-beta` import anywhere, it should use `@clerk/nextjs` instead. The `app-beta` import has been removed as our App Router support is stable. - Make this change carefully as some behavior may have changed between our beta and stable releases. You can refer to [our documentation](/docs/sdk/nextjs/quickstart) and/or [approuter example](https://github.com/clerk/clerk-nextjs-app-quickstart) for up-to-date usage. + Make this change carefully as some behavior may have changed between our beta and stable releases. You can refer to [our documentation](/docs/quickstarts/nextjs) and/or [approuter example](https://github.com/clerk/clerk-nextjs-app-quickstart) for up-to-date usage. The `@clerk/nextjs` import will work with both App Router and Pages Router. @@ -1111,7 +1111,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithSession` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `WithSession` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js export const WithSession = ({ children }) => { @@ -1124,7 +1124,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithClerk` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `WithClerk` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js export const WithClerk = ({ children }) => { @@ -1137,7 +1137,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithUser` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `WithUser` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js export const WithUser = ({ children }) => { @@ -1150,7 +1150,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withClerk` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `withClerk` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js function withClerk(Component, displayName) { @@ -1171,7 +1171,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withSession` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `withSession` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js function withSession(Component, displayName) { @@ -1192,7 +1192,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withUser` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `withUser` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js function withUser(Component, displayName) { diff --git a/docs/upgrade-guides/core-2/react.mdx b/docs/upgrade-guides/core-2/react.mdx index e360df5cea..7ae6d2ed9d 100644 --- a/docs/upgrade-guides/core-2/react.mdx +++ b/docs/upgrade-guides/core-2/react.mdx @@ -607,7 +607,7 @@ As part of this major version, a number of previously deprecated props, argument - Any place where `useOrganizations` is used should be switched to [`useOrganizationList`](/docs/sdk/react/use-organization-list) or [`useOrganization`](/docs/sdk/react/use-organization) instead. The return signature has also changed, so take note of this when making the upgrade. + Any place where `useOrganizations` is used should be switched to [`useOrganizationList`](/docs/references/react/use-organization-list) or [`useOrganization`](/docs/references/react/use-organization) instead. The return signature has also changed, so take note of this when making the upgrade. ```js {{ prettier: false }} // before: useOrganizations return values @@ -640,7 +640,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithSession` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `WithSession` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js export const WithSession = ({ children }) => { @@ -653,7 +653,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithClerk` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `WithClerk` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js export const WithClerk = ({ children }) => { @@ -666,7 +666,7 @@ As part of this major version, a number of previously deprecated props, argument - The `WithUser` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `WithUser` higher order component has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js export const WithUser = ({ children }) => { @@ -679,7 +679,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withClerk` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `withClerk` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js function withClerk(Component, displayName) { @@ -700,7 +700,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withSession` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `withSession` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js function withSession(Component, displayName) { @@ -721,7 +721,7 @@ As part of this major version, a number of previously deprecated props, argument - The `withUser` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/sdk/react/methods). An example of how to do so is below: + The `withUser` higher order function has been removed. If you would still like to use this function in the way its implemented, it can be created quickly using Clerk's [custom hooks](/docs/references/react/overview). An example of how to do so is below: ```js function withUser(Component, displayName) { diff --git a/docs/upgrade-guides/nextjs/v6.mdx b/docs/upgrade-guides/nextjs/v6.mdx index 498bb9af95..5ce8ade59f 100644 --- a/docs/upgrade-guides/nextjs/v6.mdx +++ b/docs/upgrade-guides/nextjs/v6.mdx @@ -110,7 +110,7 @@ export default function RootLayout({ children }) { } ``` -Note that this isn't recommended, and in most cases you should use `auth()` to access auth data at request time instead. For more information, see the guide on [Next.js rendering modes and Clerk](/docs/sdk/nextjs/rendering-modes). +Note that this isn't recommended, and in most cases you should use `auth()` to access auth data at request time instead. For more information, see the guide on [Next.js rendering modes and Clerk](/docs/references/nextjs/rendering-modes). ## Removed deprecated APIs diff --git a/docs/users/metadata.mdx b/docs/users/metadata.mdx index 63f02e4573..211bce1488 100644 --- a/docs/users/metadata.mdx +++ b/docs/users/metadata.mdx @@ -279,7 +279,7 @@ Public metadata is accessible by both the frontend and the backend, but can only There are multiple ways to retrieve public metadata. -On the frontend, it's available on the [`User`](/docs/references/javascript/user/user) object which can be accessed using the [`useUser()`](/docs/sdk/react/use-user) hook. +On the frontend, it's available on the [`User`](/docs/references/javascript/user/user) object which can be accessed using the [`useUser()`](/docs/references/react/use-user) hook. On the backend, it's available on the [Backend `User`](/docs/references/backend/types/backend-user) object which can be accessed using the JavaScript Backend SDK's [`getUser()`](/docs/references/backend/user/get-user) method. It can also be attached to a session token, and the `sessionClaims` of the session token can be retrieved on the [`Auth`](/docs/references/backend/types/auth-object) object. If you need to retrieve public metadata frequently in the backend, the best option is to attach it to the session token and retrieve it from the session token. See the [guide on customizing your session token](/docs/backend-requests/making/custom-session-token). @@ -510,6 +510,6 @@ The following examples demonstrate how to update `unsafeMetadata` using [the Bac There are multiple ways to retrieve unsafe metadata. -On the frontend, it is available on the [`User`](/docs/references/javascript/user/user) object, which you can access by using the [`useUser()`](/docs/sdk/react/use-user) hook. +On the frontend, it is available on the [`User`](/docs/references/javascript/user/user) object, which you can access by using the [`useUser()`](/docs/references/react/use-user) hook. On the backend, it's available on the [Backend `User`](/docs/references/backend/types/backend-user) object which can be accessed using the JavaScript Backend SDK's [`getUser()`](/docs/references/backend/user/get-user) method. It can also be attached to a session token, and the `sessionClaims` of the session token can be retrieved on the [`Auth`](/docs/references/backend/types/auth-object) object. If you need to retrieve unsafe metadata frequently in the backend, the best option is to attach it to the session token and retrieve it from the session token. See the [guide on customizing your session token](/docs/backend-requests/making/custom-session-token). diff --git a/docs/users/overview.mdx b/docs/users/overview.mdx index 4b84ac4940..c1302f5653 100644 --- a/docs/users/overview.mdx +++ b/docs/users/overview.mdx @@ -21,7 +21,7 @@ For more information on the `User` object, such as helper methods for retrieving Clerk provides the prebuilt components [``](/docs/components/user/user-button) and [``](/docs/components/user/user-profile) in order to help your users manage their profile data. -If you are using React, the [React SDK](/docs/sdk/react/use-user) provides hooks to help manage user authentication and profile data. +If you are using React, the [React SDK](/docs/references/react/use-user) provides hooks to help manage user authentication and profile data. If the prebuilt components don't meet your specific needs or if you require more control over the logic, you can use React hooks and JavaScript methods to [rebuild existing Clerk flows](/docs/custom-flows/overview). diff --git a/docs/users/user-impersonation.mdx b/docs/users/user-impersonation.mdx index fafbcb4405..c41c9e76ea 100644 --- a/docs/users/user-impersonation.mdx +++ b/docs/users/user-impersonation.mdx @@ -79,7 +79,7 @@ To detect impersonated sessions in the frontend, the `actor` object contains the - You can use the [`useAuth()`](/docs/sdk/react/use-auth) hook to get access to the authentication context, which includes the `actor` object. + You can use the [`useAuth()`](/docs/references/react/use-auth) hook to get access to the authentication context, which includes the `actor` object. ```jsx import { useAuth } from '@clerk/nextjs/server' @@ -127,7 +127,7 @@ To detect impersonated sessions in the frontend, the `actor` object contains the - The Next.js [`auth()`](/docs/sdk/nextjs/auth) helper provides the `actor` object in the authentication context. + The Next.js [`auth()`](/docs/references/nextjs/auth) helper provides the `actor` object in the authentication context. ```jsx import { auth } from '@clerk/nextjs/server' diff --git a/docs/users/web3.mdx b/docs/users/web3.mdx index 60055819f4..a823fee5ae 100644 --- a/docs/users/web3.mdx +++ b/docs/users/web3.mdx @@ -7,13 +7,13 @@ Learn how to use Clerk to quickly and easily add secure authentication and user ## Before you start -You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/) and configure the application to use **Sign in with Metamask**, **Sign in with Coinbase Wallet** or **Sign in with OKX Wallet**. For more information on how to set up a Clerk application, see the [setup guide](/docs/getting-started). To enable Metamask, Coinbase Wallet, or OKX Wallet authentication, see the [dedicated guide](/docs/authentication/configuration/sign-up-sign-in-options#web3-authentication). +You need to create a Clerk application in the [Clerk Dashboard](https://dashboard.clerk.com/) and configure the application to use **Sign in with Metamask**, **Sign in with Coinbase Wallet** or **Sign in with OKX Wallet**. For more information on how to set up a Clerk application, see the [setup guide](/docs/quickstarts/setup-clerk). To enable Metamask, Coinbase Wallet, or OKX Wallet authentication, see the [dedicated guide](/docs/authentication/configuration/sign-up-sign-in-options#web3-authentication). Ensure that you've installed the [Metamask](https://metamask.io/download/), [Coinbase Wallet](https://www.coinbase.com/wallet/downloads), or [OKX Wallet](https://www.okx.com/help/section/faq-web3-wallet) plugins for a seamless sign-in experience. ## Creating a new Next.js app -Once you have a Clerk application set up in the dashboard, it's time to create a Next.js application. Clerk provides a detailed guide on how to [create a new Next.js app with Clerk](/docs/sdk/nextjs/quickstart). +Once you have a Clerk application set up in the dashboard, it's time to create a Next.js application. Clerk provides a detailed guide on how to [create a new Next.js app with Clerk](/docs/quickstarts/nextjs). ## Accessing the Web3 address from the frontend @@ -21,7 +21,7 @@ At this point, your Next.js application should be integrated with Clerk and conf After signing in with your Web3 provider, you'll be presented with the Next.js default start screen. Let's modify the start screen to display a user's primary Web3 address on the page. -In this example, the [`User`](/docs/references/javascript/user/user) object for the current user can be accessed through the [`useUser()`](/docs/sdk/react/use-user) hook. The user's primary Web3 address can then be retrieved from the `User` object. +In this example, the [`User`](/docs/references/javascript/user/user) object for the current user can be accessed through the [`useUser()`](/docs/references/react/use-user) hook. The user's primary Web3 address can then be retrieved from the `User` object. ```jsx {{ filename: 'pages/index.js' }} import { SignIn, SignOutButton, UserButton, useUser } from '@clerk/nextjs' @@ -114,6 +114,6 @@ Now that you have Web3 authentication in a new Next.js application, and you know --- - - [Next.js SDK Reference](/docs/sdk/nextjs/methods) + - [Next.js SDK Reference](/docs/references/nextjs/overview) - Learn more about additional Next.js methods. diff --git a/docs/webhooks/sync-data.mdx b/docs/webhooks/sync-data.mdx index 4b5c059c2f..a7024f6bf3 100644 --- a/docs/webhooks/sync-data.mdx +++ b/docs/webhooks/sync-data.mdx @@ -74,7 +74,7 @@ These steps apply to any Clerk event. To make the setup process easier, it's rec ## Set the webhook route as public in your Middleware - Incoming webhook events don't contain auth information. They come from an external source and aren't signed in or out, so the route must be public to allow access. If you're using `clerkMiddleware()`, ensure that the `/api/webhooks(.*)` route is set as public. For information on configuring routes, see the [`clerkMiddleware()` guide](/docs/sdk/nextjs/clerk-middleware). + Incoming webhook events don't contain auth information. They come from an external source and aren't signed in or out, so the route must be public to allow access. If you're using `clerkMiddleware()`, ensure that the `/api/webhooks(.*)` route is set as public. For information on configuring routes, see the [`clerkMiddleware()` guide](/docs/references/nextjs/clerk-middleware). ## Install `svix` From bed4bc727f7a649366fa799c4f18b4c6f1dc9760 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Sat, 11 Jan 2025 03:58:44 +0800 Subject: [PATCH 23/82] Add selectable property to manifest schema --- docs/manifest.json | 4315 ++++++++++++++++++------------------- docs/manifest.schema.json | 7 +- 2 files changed, 2150 insertions(+), 2172 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 81d277a6dd..b143770e2e 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -79,13 +79,204 @@ ] }, { - "title": "SDKs", + "title": "UI Components", "collapse": true, + "icon": "box", + "items": [ + [ + { + "title": "Overview", + "href": "/docs/components/overview" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/clerk-provider" + }, + { + "title": "Authentication Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/sign-in" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/sign-up" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/google-one-tap" + } + ] + ] + }, + { + "title": "User Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/user/user-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/user/user-profile" + } + ] + ] + }, + { + "title": "Organization Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/create-organization" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/organization-profile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/organization-switcher" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/organization-list" + } + ] + ] + }, + { + "title": "Waitlist Component", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/waitlist" + } + ] + ] + }, + { + "title": "Control Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/authenticate-with-callback" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/clerk-loaded" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/clerk-loading" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/protect" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/multi-session" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-signin" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-signup" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-userprofile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-organizationprofile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-createorganization" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/signed-in" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/signed-out" + } + ] + ] + }, + { + "title": "Unstyled Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-in-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-in-with-metamask" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-up-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-out-button" + } + ] + ] + } + ] + ] + } + ], + [ + { + "title": "Clerk SDKs", + "selectable": true, "items": [ [ { "title": "Next.js", - "collapse": true, "icon": "nextjs", "items": [ [ @@ -194,7 +385,6 @@ }, { "title": "React", - "collapse": true, "icon": "react", "items": [ [ @@ -268,327 +458,303 @@ ] }, { - "title": "Chrome Extension", - "collapse": true, - "icon": "chrome", + "title": "JavaScript", + "icon": "javascript", "items": [ [ { "title": "Quickstart", - "href": "/docs/quickstarts/chrome-extension" + "href": "/docs/quickstarts/javascript", + "icon": "javascript" }, { - "title": "Available Methods", - "href": "/docs/references/chrome-extension/overview" + "title": "Overview", + "href": "/docs/references/javascript/overview" }, { - "title": "Guides", - "collapse": false, + "title": "Clerk", + "collapse": true, "items": [ [ { - "title": "Add React Router", - "href": "/docs/references/chrome-extension/add-react-router" + "title": "Clerk class", + "href": "/docs/references/javascript/clerk/clerk" }, { - "title": "Sync auth status between your Chrome Extension and web app", - "href": "/docs/references/chrome-extension/sync-host" + "title": "Organization methods", + "href": "/docs/references/javascript/clerk/organization-methods" }, { - "title": "`createClerkClient()`", - "href": "/docs/references/chrome-extension/create-clerk-client" + "title": "Waitlist methods", + "href": "/docs/references/javascript/clerk/waitlist-methods" }, { - "title": "Configure a consistent CRX ID", - "href": "/docs/references/chrome-extension/configure-consistent-crx-id" + "title": "Redirect methods", + "href": "/docs/references/javascript/clerk/redirect-methods" + }, + { + "title": "BuildURLs", + "href": "/docs/references/javascript/clerk/build-urls" + }, + { + "title": "Handle navigation", + "href": "/docs/references/javascript/clerk/handle-navigation" + }, + { + "title": "Session methods", + "href": "/docs/references/javascript/clerk/session-methods" } ] ] - } - ] - ] - }, - { - "title": "Expo", - "collapse": true, - "icon": "expo", - "items": [ - [ - { - "title": "Quickstart", - "href": "/docs/quickstarts/expo" - }, - { - "title": "Available Methods", - "href": "/docs/references/expo/overview" }, { - "title": "Hooks", - "items": [ + "title": "User", + "collapse": true, + "items": [ [ { - "title": "useLocalCredentials()", - "href": "/docs/references/expo/use-local-credentials" + "title": "User object", + "href": "/docs/references/javascript/user/user" }, { - "title": "useOAuth()", - "href": "/docs/references/expo/use-oauth" - } - ] - ] - }, - { - "title": "Guides", - "items": [ - [ - { - "title": "Read session and user data", - "href": "/docs/references/expo/read-session-user-data" + "title": "TOTP methods", + "href": "/docs/references/javascript/user/totp" }, { - "title": "Use biometrics with local credentials", - "href": "/docs/references/expo/local-credentials" + "title": "Password management methods", + "href": "/docs/references/javascript/user/password-management" }, { - "title": "Offline support", - "href": "/docs/references/expo/offline-support" + "title": "Create metadata methods", + "href": "/docs/references/javascript/user/create-metadata" } ] ] }, { - "title": "Web support", + "title": "Organization", "collapse": true, "items": [ [ { - "title": "Overview", - "href": "/docs/references/expo/web-support/overview" + "title": "Organization object", + "href": "/docs/references/javascript/organization/organization" }, { - "title": "Add custom sign-up and sign-in pages", - "href": "/docs/references/expo/web-support/custom-signup-signin-pages" + "title": "Membership methods", + "href": "/docs/references/javascript/organization/members" + }, + { + "title": "Invitation methods", + "href": "/docs/references/javascript/organization/invitations" + }, + { + "title": "Domain methods", + "href": "/docs/references/javascript/organization/domains" + }, + { + "title": "Membership request methods", + "href": "/docs/references/javascript/organization/membership-request" } ] ] - } - ] - ] - }, - { - "title": "iOS", - "tag": "(Beta)", - "collapse": true, - "icon": "apple", - "items": [ - [ - { - "title": "Quickstart", - "href": "/docs/quickstarts/ios" }, { - "title": "Available Methods", - "href": "/docs/references/ios/overview" + "title": "Organization Invitation", + "href": "/docs/references/javascript/organization-invitation" }, { - "title": "`getToken()`", - "href": "/docs/references/ios/get-token" + "title": "Organization Membership", + "href": "/docs/references/javascript/organization-membership" }, { - "title": "Guides", - "items": [ - [ - { - "title": "Sign in with Apple", - "href": "/docs/references/ios/sign-in-with-apple" - } - ] - ] - } - ] - ] - }, - { - "title": "Node.js", - "tag": "(Deprecated)", - "collapse": true, - "icon": "nodejs", - "items": [ - [ - { - "title": "Quickstart & Available Methods", - "href": "/docs/references/nodejs/overview" + "title": "Organization Domain", + "href": "/docs/references/javascript/organization-domain" }, { - "title": "Available methods", - "href": "/docs/references/nodejs/available-methods" + "title": "Organization Membership Request", + "href": "/docs/references/javascript/organization-membership-request" }, { - "title": "Connect/Express Middleware", - "href": "/docs/backend-requests/handling/nodejs" - } - ] - ] - }, - { - "title": "Express", - "collapse": true, - "icon": "expressjs", - "items": [ - [ + "title": "Session", + "href": "/docs/references/javascript/session" + }, { - "title": "Quickstart", - "href": "/docs/quickstarts/express" + "title": "SessionWithActivities", + "href": "/docs/references/javascript/session-with-activities" }, { - "title": "Available Methods", - "href": "/docs/references/express/overview" - } - ] - ] - }, - { - "title": "Fastify", - "collapse": true, - "icon": "fastify", - "items": [ - [ + "title": "Client", + "href": "/docs/references/javascript/client" + }, { - "title": "Quickstart", - "href": "/docs/quickstarts/fastify" - } - ] - ] - }, - { - "title": "React Router", - "collapse": true, - "icon": "react-router", - "tag": "(Beta)", - "items": [ - [ + "title": "ExternalAccount", + "href": "/docs/references/javascript/external-account" + }, { - "title": "Quickstart", - "href": "/docs/quickstarts/react-router" + "title": "Email Address", + "href": "/docs/references/javascript/email-address" }, { - "title": "Available Methods", - "href": "/docs/references/react-router/overview" + "title": "Phone Number", + "href": "/docs/references/javascript/phone-number" }, { - "title": "Guides", + "title": "Sign In", + "collapse": true, "items": [ [ { - "title": "Read session and user data", - "href": "/docs/references/react-router/read-session-data" + "title": "Sign In", + "href": "/docs/references/javascript/sign-in/sign-in" }, { - "title": "Add custom sign up and sign in pages", - "href": "/docs/references/react-router/custom-signup-signin-pages" + "title": "First Factor", + "href": "/docs/references/javascript/sign-in/first-factor" }, { - "title": "Library mode", - "href": "/docs/references/react-router/library-mode" + "title": "Second Factor", + "href": "/docs/references/javascript/sign-in/second-factor" + }, + { + "title": "AuthenticateWith", + "href": "/docs/references/javascript/sign-in/authenticate-with" } ] ] }, { - "title": "General references", + "title": "Sign Up", + "collapse": true, "items": [ [ { - "title": "`rootAuthLoader()`", - "wrap": false, - "href": "/docs/references/react-router/root-auth-loader" + "title": "Sign Up", + "href": "/docs/references/javascript/sign-up/sign-up" }, { - "title": "`getAuth()`", - "href": "/docs/references/react-router/get-auth" + "title": "AuthenticateWith", + "href": "/docs/references/javascript/sign-up/authenticate-with" + }, + { + "title": "Verification", + "href": "/docs/references/javascript/sign-up/verification" + }, + { + "title": "Email Verification", + "href": "/docs/references/javascript/sign-up/email-verification" + }, + { + "title": "Phone Verification", + "href": "/docs/references/javascript/sign-up/phone-verification" + }, + { + "title": "Web3 Verification", + "href": "/docs/references/javascript/sign-up/web3-verification" } ] ] - } - ] - ] - }, - { - "title": "Remix", - "collapse": true, - "icon": "remix", - "items": [ - [ - { - "title": "Quickstart", - "href": "/docs/quickstarts/remix" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/references/remix/clerk-app" - }, - { - "title": "SPA Mode", - "wrap": false, - "href": "/docs/references/remix/spa-mode" }, { - "title": "Add custom sign up and sign in pages", - "wrap": true, - "href": "/docs/references/remix/custom-signup-signin-pages" + "title": "Web3 Wallet", + "collapse": true, + "items": [ + [ + { + "title": "Web3 Wallet", + "href": "/docs/references/javascript/web3-wallet/web3-wallet" + }, + { + "title": "Verification", + "href": "/docs/references/javascript/web3-wallet/verification" + } + ] + ] }, { - "title": "Read session and user data", - "wrap": true, - "href": "/docs/references/remix/read-session-data" - } - ] - ] - }, - { - "title": "TanStack Start", - "collapse": true, - "icon": "tanstack", - "tag": "(Beta)", - "items": [ - [ - { - "title": "Quickstart", - "href": "/docs/quickstarts/tanstack-start" - }, - { - "title": "Available Methods", - "href": "/docs/references/tanstack-start/overview" - }, - { - "title": "General references", + "title": "Types", + "collapse": true, "items": [ [ { - "title": "`getAuth()`", - "href": "/docs/references/tanstack-start/get-auth" + "title": "Overview", + "href": "/docs/references/javascript/types/overview" }, { - "title": "`createClerkHandler()`", - "href": "/docs/references/tanstack-start/create-clerk-handler" - } - ] - ] - }, - { - "title": "Guides", - "items": [ - [ + "title": "ClerkAPIError", + "href": "/docs/references/javascript/types/clerk-api-error" + }, { - "title": "Add custom sign up and sign in pages", - "href": "/docs/references/tanstack-start/custom-signup-signin-pages", - "wrap": true + "title": "ClerkPaginatedResponse", + "href": "/docs/references/javascript/types/clerk-paginated-response" }, { - "title": "Read session and user data", - "href": "/docs/references/tanstack-start/read-session-data", - "wrap": true + "title": "CustomPage", + "href": "/docs/references/javascript/types/custom-page" + }, + { + "title": "EmailLinkError", + "href": "/docs/references/javascript/types/email-link-error" + }, + { + "title": "DeletedObject", + "href": "/docs/references/javascript/types/deleted-object" + }, + { + "title": "Metadata types", + "href": "/docs/references/javascript/types/metadata" + }, + { + "title": "OAuth types", + "href": "/docs/references/javascript/types/oauth" + }, + { + "title": "PasskeyResource", + "href": "/docs/references/javascript/types/passkey-resource" + }, + { + "title": "PublicUserData", + "href": "/docs/references/javascript/types/public-user-data" + }, + { + "title": "SessionStatus", + "href": "/docs/references/javascript/types/session-status" + }, + { + "title": "SessionVerification", + "href": "/docs/references/javascript/types/session-verification" + }, + { + "title": "SignInFirstFactor", + "href": "/docs/references/javascript/types/sign-in-first-factor" + }, + { + "title": "SignInSecondFactor", + "href": "/docs/references/javascript/types/sign-in-second-factor" + }, + { + "title": "SignInRedirectOptions", + "href": "/docs/references/javascript/types/sign-in-redirect-options" + }, + { + "title": "SignUpRedirectOptions", + "href": "/docs/references/javascript/types/sign-up-redirect-options" + }, + { + "title": "SignInInitialValues", + "href": "/docs/references/javascript/types/sign-in-initial-values" + }, + { + "title": "SignUpInitialValues", + "href": "/docs/references/javascript/types/sign-up-initial-values" + }, + { + "title": "RedirectOptions", + "href": "/docs/references/javascript/types/redirect-options" + }, + { + "title": "Verification", + "href": "/docs/references/javascript/types/verification" } ] ] @@ -597,141 +763,104 @@ ] }, { - "title": "Go", - "collapse": true, - "icon": "go", + "title": "Chrome Extension", + "icon": "chrome", "items": [ [ { - "title": "Quickstart & Available Methods", - "href": "/docs/references/go/overview" - }, - { - "title": "Verifying sessions", - "href": "/docs/references/go/verifying-sessions" + "title": "Quickstart", + "href": "/docs/quickstarts/chrome-extension" }, { - "title": "Use Clerk Go for Backend API Operations", - "href": "/docs/references/go/other-examples" + "title": "Available Methods", + "href": "/docs/references/chrome-extension/overview" }, { - "title": "Go SDK repository", - "href": "https://github.com/clerk/clerk-sdk-go" + "title": "Guides", + "collapse": false, + "items": [ + [ + { + "title": "Add React Router", + "href": "/docs/references/chrome-extension/add-react-router" + }, + { + "title": "Sync auth status between your Chrome Extension and web app", + "href": "/docs/references/chrome-extension/sync-host" + }, + { + "title": "`createClerkClient()`", + "href": "/docs/references/chrome-extension/create-clerk-client" + }, + { + "title": "Configure a consistent CRX ID", + "href": "/docs/references/chrome-extension/configure-consistent-crx-id" + } + ] + ] } ] ] }, { - "title": "Astro", - "collapse": true, - "icon": "astro", + "title": "Expo", + "icon": "expo", "items": [ [ { "title": "Quickstart", - "href": "/docs/quickstarts/astro" + "href": "/docs/quickstarts/expo" }, { "title": "Available Methods", - "href": "/docs/references/astro/overview" - }, - { - "title": "UI Frameworks", - "items": [ - [ - { - "title": "Use Clerk with Astro and React", - "href": "/docs/references/astro/react" - } - ] - ] + "href": "/docs/references/expo/overview" }, { - "title": "Guides", + "title": "Hooks", "items": [ [ { - "title": "Migrating from community SDK", - "href": "/docs/references/astro/migrating-from-astro-community-sdk" - }, - { - "title": "Read session and user data", - "wrap": false, - "href": "/docs/references/astro/read-session-data" + "title": "useLocalCredentials()", + "href": "/docs/references/expo/use-local-credentials" }, { - "title": "Hybrid rendering", - "wrap": false, - "href": "/docs/references/astro/hybrid-rendering" + "title": "useOAuth()", + "href": "/docs/references/expo/use-oauth" } ] ] }, { - "title": "General references", + "title": "Guides", "items": [ [ { - "title": "`clerkMiddleware()`", - "wrap": false, - "href": "/docs/references/astro/clerk-middleware" + "title": "Read session and user data", + "href": "/docs/references/expo/read-session-user-data" }, { - "title": "Locals", - "wrap": false, - "href": "/docs/references/astro/locals" + "title": "Use biometrics with local credentials", + "href": "/docs/references/expo/local-credentials" }, { - "title": "Endpoints", - "wrap": false, - "href": "/docs/references/astro/endpoints" + "title": "Offline support", + "href": "/docs/references/expo/offline-support" } ] ] }, { - "title": "Client-side helpers", + "title": "Web support", + "collapse": true, "items": [ [ { - "title": "`$authStore`", - "wrap": false, - "href": "/docs/references/astro/auth-store" - }, - { - "title": "`$clerkStore`", - "wrap": false, - "href": "/docs/references/astro/clerk-store" - }, - { - "title": "`$userStore`", - "wrap": false, - "href": "/docs/references/astro/user-store" - }, - { - "title": "`$signInStore`", - "wrap": false, - "href": "/docs/references/astro/sign-in-store" - }, - { - "title": "`$signUpStore`", - "wrap": false, - "href": "/docs/references/astro/sign-up-store" - }, - { - "title": "`$sessionStore`", - "wrap": false, - "href": "/docs/references/astro/session-store" - }, - { - "title": "`$sessionListStore`", - "wrap": false, - "href": "/docs/references/astro/session-list-store" + "title": "Overview", + "href": "/docs/references/expo/web-support/overview" }, { - "title": "`$organizationStore`", - "wrap": false, - "href": "/docs/references/astro/organization-store" + "title": "Add custom sign-up and sign-in pages", + "href": "/docs/references/expo/web-support/custom-signup-signin-pages" } ] ] @@ -740,110 +869,131 @@ ] }, { - "title": "Nuxt", - "collapse": true, - "icon": "nuxt", + "title": "iOS", + "tag": "(Beta)", + "icon": "apple", "items": [ [ { - "title": "Nuxt", - "href": "/docs/quickstarts/nuxt" + "title": "Quickstart", + "href": "/docs/quickstarts/ios" + }, + { + "title": "Available Methods", + "href": "/docs/references/ios/overview" + }, + { + "title": "`getToken()`", + "href": "/docs/references/ios/get-token" }, - { "title": "Available Methods", "href": "/docs/references/nuxt/overview" }, { "title": "Guides", "items": [ [ { - "title": "Read session and user data", - "wrap": false, - "href": "/docs/references/nuxt/read-session-data" - }, - { - "title": "Protect pages", - "wrap": false, - "href": "/docs/references/nuxt/protect-pages" + "title": "Sign in with Apple", + "href": "/docs/references/ios/sign-in-with-apple" } ] ] + } + ] + ] + }, + { + "title": "Node.js", + "tag": "(Deprecated)", + "icon": "nodejs", + "items": [ + [ + { + "title": "Quickstart & Available Methods", + "href": "/docs/references/nodejs/overview" }, { - "title": "General references", - "items": [ - [ - { - "title": "`clerkMiddleware()`", - "wrap": false, - "href": "/docs/references/nuxt/clerk-middleware" - } - ] - ] + "title": "Available methods", + "href": "/docs/references/nodejs/available-methods" + }, + { + "title": "Connect/Express Middleware", + "href": "/docs/backend-requests/handling/nodejs" } ] ] }, { - "title": "Vue", - "collapse": true, - "icon": "vue", + "title": "Express", + "icon": "expressjs", "items": [ [ - { "title": "Quickstart", "href": "/docs/quickstarts/vue" }, - { "title": "Available Methods", "href": "/docs/references/vue/overview" }, + { + "title": "Quickstart", + "href": "/docs/quickstarts/express" + }, + { + "title": "Available Methods", + "href": "/docs/references/express/overview" + } + ] + ] + }, + { + "title": "Fastify", + "icon": "fastify", + "items": [ + [ + { + "title": "Quickstart", + "href": "/docs/quickstarts/fastify" + } + ] + ] + }, + { + "title": "React Router", + "icon": "react-router", + "tag": "(Beta)", + "items": [ + [ + { + "title": "Quickstart", + "href": "/docs/quickstarts/react-router" + }, + { + "title": "Available Methods", + "href": "/docs/references/react-router/overview" + }, { "title": "Guides", "items": [ [ { - "title": "Migrating from community SDK", - "href": "/docs/references/vue/migrating-from-vue-community-sdk" + "title": "Read session and user data", + "href": "/docs/references/react-router/read-session-data" + }, + { + "title": "Add custom sign up and sign in pages", + "href": "/docs/references/react-router/custom-signup-signin-pages" + }, + { + "title": "Library mode", + "href": "/docs/references/react-router/library-mode" } ] ] }, { - "title": "Client-side helpers", + "title": "General references", "items": [ [ { - "title": "`useUser()`", - "wrap": false, - "href": "/docs/references/vue/use-user" - }, - { - "title": "`useClerk()`", - "wrap": false, - "href": "/docs/references/vue/use-clerk" - }, - { - "title": "`useAuth()`", - "wrap": false, - "href": "/docs/references/vue/use-auth" - }, - { - "title": "`useSignIn()`", - "wrap": false, - "href": "/docs/references/vue/use-sign-in" - }, - { - "title": "`useSignUp`", - "wrap": false, - "href": "/docs/references/vue/use-sign-up" - }, - { - "title": "`useSession()`", - "wrap": false, - "href": "/docs/references/vue/use-session" - }, - { - "title": "`useSessionList()`", + "title": "`rootAuthLoader()`", "wrap": false, - "href": "/docs/references/vue/use-session-list" + "href": "/docs/references/react-router/root-auth-loader" }, { - "title": "`useOrganization()`", - "wrap": false, - "href": "/docs/references/vue/use-organization" + "title": "`getAuth()`", + "href": "/docs/references/react-router/get-auth" } ] ] @@ -852,863 +1002,865 @@ ] }, { - "title": "Ruby / Rails", - "collapse": true, - "icon": "ruby", + "title": "Remix", + "icon": "remix", "items": [ [ { "title": "Quickstart", - "href": "/docs/references/ruby/overview" + "href": "/docs/quickstarts/remix" }, { - "title": "Available Methods", - "href": "/docs/references/ruby/available-methods" + "title": "``", + "wrap": false, + "href": "/docs/references/remix/clerk-app" }, { - "title": "Rack/Rails integration", - "href": "/docs/references/ruby/rack-rails" + "title": "SPA Mode", + "wrap": false, + "href": "/docs/references/remix/spa-mode" }, { - "title": "Ruby SDK repository", - "href": "https://github.com/clerk/clerk-sdk-ruby" + "title": "Add custom sign up and sign in pages", + "wrap": true, + "href": "/docs/references/remix/custom-signup-signin-pages" + }, + { + "title": "Read session and user data", + "wrap": true, + "href": "/docs/references/remix/read-session-data" } ] ] }, { - "title": "Python", - "icon": "python", - "href": "https://github.com/clerk/clerk-sdk-python/blob/main/README.md", - "target": "_blank" - }, - { - "title": "Community SDKs", - "collapse": true, + "title": "TanStack Start", + "icon": "tanstack", + "tag": "(Beta)", "items": [ [ { - "title": "Redwood", - "collapse": true, - "icon": "redwood", + "title": "Quickstart", + "href": "/docs/quickstarts/tanstack-start" + }, + { + "title": "Available Methods", + "href": "/docs/references/tanstack-start/overview" + }, + { + "title": "General references", "items": [ [ { - "title": "Overview", - "href": "/docs/references/redwood/overview" + "title": "`getAuth()`", + "href": "/docs/references/tanstack-start/get-auth" }, { - "title": "Redwood", - "href": "https://redwoodjs.com/docs/auth/clerk", - "icon": "redwood" + "title": "`createClerkHandler()`", + "href": "/docs/references/tanstack-start/create-clerk-handler" } ] ] }, { - "title": "Svelte", - "href": "https://github.com/markjaquith/clerk-sveltekit", - "icon": "svelte" - }, - { - "title": "Vue", - "href": "https://vue-clerk.vercel.app", - "icon": "vue" - }, + "title": "Guides", + "items": [ + [ + { + "title": "Add custom sign up and sign in pages", + "href": "/docs/references/tanstack-start/custom-signup-signin-pages", + "wrap": true + }, + { + "title": "Read session and user data", + "href": "/docs/references/tanstack-start/read-session-data", + "wrap": true + } + ] + ] + } + ] + ] + }, + { + "title": "Go", + "icon": "go", + "items": [ + [ { - "title": "Elysia", - "href": "https://github.com/wobsoriano/elysia-clerk", - "icon": "elysia" + "title": "Quickstart & Available Methods", + "href": "/docs/references/go/overview" }, { - "title": "Rust", - "href": "https://github.com/cincinnati-ventures/clerk-rs", - "icon": "rust" + "title": "Verifying sessions", + "href": "/docs/references/go/verifying-sessions" }, { - "title": "Hono", - "href": "https://github.com/honojs/middleware/tree/main/packages/clerk-auth", - "icon": "hono" + "title": "Use Clerk Go for Backend API Operations", + "href": "/docs/references/go/other-examples" }, { - "title": "C#", - "href": "https://github.com/Hawxy/Clerk.Net", - "icon": "c-sharp" - }, - { - "title": "Koa", - "href": "https://github.com/dimkl/clerk-koa/blob/main/README.md", - "icon": "koa" - }, - { - "title": "Angular", - "href": "https://github.com/anagstef/ngx-clerk?tab=readme-ov-file#ngx-clerk", - "icon": "angular" - }, - { - "title": "SolidJS", - "href": "https://github.com/spirit-led-software/clerk-solidjs", - "icon": "solid" + "title": "Go SDK repository", + "href": "https://github.com/clerk/clerk-sdk-go" } ] ] - } - ] - ] - }, - { - "title": "UI Components", - "collapse": true, - "icon": "box", - "items": [ - [ - { - "title": "Overview", - "href": "/docs/components/overview" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/clerk-provider" }, { - "title": "Authentication Components", + "title": "Astro", + "icon": "astro", "items": [ [ { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/sign-in" + "title": "Quickstart", + "href": "/docs/quickstarts/astro" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/sign-up" + "title": "Available Methods", + "href": "/docs/references/astro/overview" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/google-one-tap" - } - ] - ] - }, - { - "title": "User Components", - "items": [ - [ + "title": "UI Frameworks", + "items": [ + [ + { + "title": "Use Clerk with Astro and React", + "href": "/docs/references/astro/react" + } + ] + ] + }, { - "title": "``", - "wrap": false, - "href": "/docs/components/user/user-button" + "title": "Guides", + "items": [ + [ + { + "title": "Migrating from community SDK", + "href": "/docs/references/astro/migrating-from-astro-community-sdk" + }, + { + "title": "Read session and user data", + "wrap": false, + "href": "/docs/references/astro/read-session-data" + }, + { + "title": "Hybrid rendering", + "wrap": false, + "href": "/docs/references/astro/hybrid-rendering" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/user/user-profile" + "title": "General references", + "items": [ + [ + { + "title": "`clerkMiddleware()`", + "wrap": false, + "href": "/docs/references/astro/clerk-middleware" + }, + { + "title": "Locals", + "wrap": false, + "href": "/docs/references/astro/locals" + }, + { + "title": "Endpoints", + "wrap": false, + "href": "/docs/references/astro/endpoints" + } + ] + ] + }, + { + "title": "Client-side helpers", + "items": [ + [ + { + "title": "`$authStore`", + "wrap": false, + "href": "/docs/references/astro/auth-store" + }, + { + "title": "`$clerkStore`", + "wrap": false, + "href": "/docs/references/astro/clerk-store" + }, + { + "title": "`$userStore`", + "wrap": false, + "href": "/docs/references/astro/user-store" + }, + { + "title": "`$signInStore`", + "wrap": false, + "href": "/docs/references/astro/sign-in-store" + }, + { + "title": "`$signUpStore`", + "wrap": false, + "href": "/docs/references/astro/sign-up-store" + }, + { + "title": "`$sessionStore`", + "wrap": false, + "href": "/docs/references/astro/session-store" + }, + { + "title": "`$sessionListStore`", + "wrap": false, + "href": "/docs/references/astro/session-list-store" + }, + { + "title": "`$organizationStore`", + "wrap": false, + "href": "/docs/references/astro/organization-store" + } + ] + ] } ] ] }, { - "title": "Organization Components", + "title": "Nuxt", + "icon": "nuxt", "items": [ [ { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/create-organization" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-profile" + "title": "Nuxt", + "href": "/docs/quickstarts/nuxt" }, + { "title": "Available Methods", "href": "/docs/references/nuxt/overview" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-switcher" + "title": "Guides", + "items": [ + [ + { + "title": "Read session and user data", + "wrap": false, + "href": "/docs/references/nuxt/read-session-data" + }, + { + "title": "Protect pages", + "wrap": false, + "href": "/docs/references/nuxt/protect-pages" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-list" - } - ] - ] - }, - { - "title": "Waitlist Component", - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/waitlist" + "title": "General references", + "items": [ + [ + { + "title": "`clerkMiddleware()`", + "wrap": false, + "href": "/docs/references/nuxt/clerk-middleware" + } + ] + ] } ] ] }, { - "title": "Control Components", + "title": "Vue", + "icon": "vue", "items": [ [ + { "title": "Quickstart", "href": "/docs/quickstarts/vue" }, + { "title": "Available Methods", "href": "/docs/references/vue/overview" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/authenticate-with-callback" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/clerk-loaded" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/clerk-loading" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/protect" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/multi-session" + "title": "Guides", + "items": [ + [ + { + "title": "Migrating from community SDK", + "href": "/docs/references/vue/migrating-from-vue-community-sdk" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-signin" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-signup" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-userprofile" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-organizationprofile" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-createorganization" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/signed-in" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/signed-out" + "title": "Client-side helpers", + "items": [ + [ + { + "title": "`useUser()`", + "wrap": false, + "href": "/docs/references/vue/use-user" + }, + { + "title": "`useClerk()`", + "wrap": false, + "href": "/docs/references/vue/use-clerk" + }, + { + "title": "`useAuth()`", + "wrap": false, + "href": "/docs/references/vue/use-auth" + }, + { + "title": "`useSignIn()`", + "wrap": false, + "href": "/docs/references/vue/use-sign-in" + }, + { + "title": "`useSignUp`", + "wrap": false, + "href": "/docs/references/vue/use-sign-up" + }, + { + "title": "`useSession()`", + "wrap": false, + "href": "/docs/references/vue/use-session" + }, + { + "title": "`useSessionList()`", + "wrap": false, + "href": "/docs/references/vue/use-session-list" + }, + { + "title": "`useOrganization()`", + "wrap": false, + "href": "/docs/references/vue/use-organization" + } + ] + ] } ] ] }, { - "title": "Unstyled Components", + "title": "Ruby / Rails", + "icon": "ruby", "items": [ [ { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-in-button" + "title": "Quickstart", + "href": "/docs/references/ruby/overview" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-in-with-metamask" + "title": "Available Methods", + "href": "/docs/references/ruby/available-methods" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-up-button" + "title": "Rack/Rails integration", + "href": "/docs/references/ruby/rack-rails" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-out-button" + "title": "Ruby SDK repository", + "href": "https://github.com/clerk/clerk-sdk-ruby" } ] ] - } - ] - ] - } - ], - [ - { - "title": "Configuration", - "items": [ - [ + }, { - "title": "Sign-up & Sign-in", - "collapse": true, + "title": "Python", + "icon": "python", + "href": "https://github.com/clerk/clerk-sdk-python/blob/main/README.md", + "target": "_blank" + }, + { + "title": "JS Backend SDK", + "icon": "clerk", "items": [ [ { "title": "Overview", - "href": "/docs/authentication/overview" + "href": "/docs/references/backend/overview" }, { - "title": "Configuration", + "title": "User", + "collapse": true, "items": [ [ { - "title": "Sign-up and sign-in options", - "href": "/docs/authentication/configuration/sign-up-sign-in-options" + "title": "`getUserList()`", + "wrap": false, + "href": "/docs/references/backend/user/get-user-list" }, { - "title": "Session options", - "href": "/docs/authentication/configuration/session-options" + "title": "`getUser()`", + "wrap": false, + "href": "/docs/references/backend/user/get-user" }, { - "title": "Email & SMS templates", - "href": "/docs/authentication/configuration/email-sms-templates" + "title": "`getCount()`", + "wrap": false, + "href": "/docs/references/backend/user/get-count" }, { - "title": "Restrictions", - "href": "/docs/authentication/configuration/restrictions" + "title": "`getOrganizationMembershipList()`", + "wrap": false, + "href": "/docs/references/backend/user/get-organization-membership-list" }, { - "title": "Legal compliance", - "href": "/docs/authentication/configuration/legal-compliance" + "title": "`getUserOAuthAccessToken()`", + "wrap": false, + "href": "/docs/references/backend/user/get-user-oauth-access-token" + }, + { + "title": "`createUser()`", + "wrap": false, + "href": "/docs/references/backend/user/create-user" + }, + { + "title": "`verifyPassword()`", + "wrap": false, + "href": "/docs/references/backend/user/verify-password" + }, + { + "title": "`banUser()`", + "wrap": false, + "href": "/docs/references/backend/user/ban-user" + }, + { + "title": "`unbanUser()`", + "wrap": false, + "href": "/docs/references/backend/user/unban-user" + }, + { + "title": "`lockUser()`", + "wrap": false, + "href": "/docs/references/backend/user/lock-user" + }, + { + "title": "`unlockUser()`", + "wrap": false, + "href": "/docs/references/backend/user/unlock-user" + }, + { + "title": "`updateUser()`", + "wrap": false, + "href": "/docs/references/backend/user/update-user" + }, + { + "title": "`updateUserProfileImage()`", + "wrap": false, + "href": "/docs/references/backend/user/update-user-profile-image" + }, + { + "title": "`updateUserMetadata()`", + "wrap": false, + "href": "/docs/references/backend/user/update-user-metadata" + }, + { + "title": "`deleteUser()`", + "wrap": false, + "href": "/docs/references/backend/user/delete-user" + }, + { + "title": "`disableUserMFA()`", + "wrap": false, + "href": "/docs/references/backend/user/disable-user-mfa" + }, + { + "title": "`verifyTOTP()`", + "wrap": false, + "href": "/docs/references/backend/user/verify-totp" + }, + { + "title": "`deleteUserProfileImage()`", + "wrap": false, + "href": "/docs/references/backend/user/delete-user-profile-image" } ] ] }, { - "title": "Social Connections", + "title": "Organization", + "collapse": true, "items": [ [ { - "title": "Overview", - "href": "/docs/authentication/social-connections/overview" + "title": "`getOrganization()`", + "wrap": false, + "href": "/docs/references/backend/organization/get-organization" }, { - "title": "Social connections (OAuth)", - "href": "/docs/authentication/social-connections/oauth" + "title": "`getOrganizationList()`", + "wrap": false, + "href": "/docs/references/backend/organization/get-organization-list" }, { - "title": "Account linking", - "href": "/docs/authentication/social-connections/account-linking" + "title": "`getOrganizationMembershipList()`", + "wrap": false, + "href": "/docs/references/backend/organization/get-organization-membership-list" }, { - "title": "Custom provider", - "href": "/docs/authentication/social-connections/custom-provider" + "title": "`getOrganizationInvitationList()`", + "wrap": false, + "href": "/docs/references/backend/organization/get-organization-invitation-list" }, { - "title": "Google", - "href": "/docs/authentication/social-connections/google" + "title": "`createOrganization()`", + "wrap": false, + "href": "/docs/references/backend/organization/create-organization" }, { - "title": "Facebook", - "href": "/docs/authentication/social-connections/facebook" + "title": "`createOrganizationMembership()`", + "wrap": false, + "href": "/docs/references/backend/organization/create-organization-membership" }, { - "title": "Microsoft", - "href": "/docs/authentication/social-connections/microsoft" + "title": "`createOrganizationInvitation()`", + "wrap": false, + "href": "/docs/references/backend/organization/create-organization-invitation" }, { - "title": "See all", - "collapse": true, - "items": [ - [ - { - "title": "Apple", - "href": "/docs/authentication/social-connections/apple" - }, - { - "title": "Atlassian", - "href": "/docs/authentication/social-connections/atlassian" - }, - { - "title": "Bitbucket", - "href": "/docs/authentication/social-connections/bitbucket" - }, - { - "title": "Box", - "href": "/docs/authentication/social-connections/box" - }, - { - "title": "Coinbase", - "href": "/docs/authentication/social-connections/coinbase" - }, - { - "title": "Discord", - "href": "/docs/authentication/social-connections/discord" - }, - { - "title": "Dropbox", - "href": "/docs/authentication/social-connections/dropbox" - }, - { - "title": "GitHub", - "href": "/docs/authentication/social-connections/github" - }, - { - "title": "GitLab", - "href": "/docs/authentication/social-connections/gitlab" - }, - { - "title": "HubSpot", - "href": "/docs/authentication/social-connections/hubspot" - }, - { - "title": "Hugging Face", - "href": "/docs/authentication/social-connections/huggingface" - }, - { - "title": "Line", - "href": "/docs/authentication/social-connections/line" - }, - { - "title": "Linear", - "href": "/docs/authentication/social-connections/linear" - }, - { - "title": "LinkedIn (Deprecated)", - "href": "/docs/authentication/social-connections/linkedin" - }, - { - "title": "LinkedIn", - "href": "/docs/authentication/social-connections/linkedin-oidc" - }, - { - "title": "Notion", - "href": "/docs/authentication/social-connections/notion" - }, - { - "title": "Slack", - "href": "/docs/authentication/social-connections/slack" - }, - { - "title": "Spotify", - "href": "/docs/authentication/social-connections/spotify" - }, - { - "title": "TikTok", - "href": "/docs/authentication/social-connections/tiktok" - }, - { - "title": "Twitter v1", - "href": "/docs/authentication/social-connections/twitter" - }, - { - "title": "X/Twitter v2", - "href": "/docs/authentication/social-connections/x-twitter" - }, - { - "title": "Xero", - "href": "/docs/authentication/social-connections/xero" - } - ] - ] + "title": "`updateOrganization()`", + "wrap": false, + "href": "/docs/references/backend/organization/update-organization" + }, + { + "title": "`updateOrganizationLogo()`", + "wrap": false, + "href": "/docs/references/backend/organization/update-organization-logo" + }, + { + "title": "`updateOrganizationMembership()`", + "wrap": false, + "href": "/docs/references/backend/organization/update-organization-membership" + }, + { + "title": "`updateOrganizationMetadata()`", + "wrap": false, + "href": "/docs/references/backend/organization/update-organization-metadata" + }, + { + "title": "`updateOrganizationMembershipMetadata()`", + "wrap": false, + "href": "/docs/references/backend/organization/update-organization-membership-metadata" + }, + { + "title": "`deleteOrganization()`", + "wrap": false, + "href": "/docs/references/backend/organization/delete-organization" + }, + { + "title": "`deleteOrganizationMembership()`", + "wrap": false, + "href": "/docs/references/backend/organization/delete-organization-membership" + }, + { + "title": "`revokeOrganizationInvitation()`", + "wrap": false, + "href": "/docs/references/backend/organization/revoke-organization-invitation" } ] ] }, { - "title": "Enterprise Connections", + "title": "Allowlist Identifiers", + "collapse": true, "items": [ [ { - "title": "Overview", - "href": "/docs/authentication/enterprise-connections/overview" + "title": "`getAllowlistIdentifierList()`", + "wrap": false, + "href": "/docs/references/backend/allowlist/get-allowlist-identifier-list" }, { - "title": "Authentication flows", - "href": "/docs/authentication/enterprise-connections/authentication-flows" + "title": "`createAllowlistIdentifier()`", + "wrap": false, + "href": "/docs/references/backend/allowlist/create-allowlist-identifier" }, { - "title": "Account linking", - "href": "/docs/authentication/enterprise-connections/account-linking" + "title": "`deleteAllowlistIdentifier()`", + "wrap": false, + "href": "/docs/references/backend/allowlist/delete-allowlist-identifier" + } + ] + ] + }, + { + "title": "Sessions", + "collapse": true, + "items": [ + [ + { + "title": "`getSession()`", + "wrap": false, + "href": "/docs/references/backend/sessions/get-session" }, { - "title": "Just-in-Time account provisioning", - "href": "/docs/authentication/enterprise-connections/jit-provisioning" + "title": "`getSessionList()`", + "wrap": false, + "href": "/docs/references/backend/sessions/get-session-list" }, { - "title": "EASIE", - "items": [ - [ - { - "title": "Microsoft", - "href": "/docs/authentication/enterprise-connections/easie/microsoft" - }, - { - "title": "Google", - "href": "/docs/authentication/enterprise-connections/easie/google" - } - ] - ] + "title": "`getToken()`", + "wrap": false, + "href": "/docs/references/backend/sessions/get-token" }, { - "title": "SAML", - "items": [ - [ - { - "title": "Azure", - "href": "/docs/authentication/enterprise-connections/saml/azure" - }, - { - "title": "Google", - "href": "/docs/authentication/enterprise-connections/saml/google" - }, - { - "title": "Okta", - "href": "/docs/authentication/enterprise-connections/saml/okta" - }, - { - "title": "Custom provider", - "href": "/docs/authentication/enterprise-connections/saml/custom-provider" - } - ] - ] + "title": "`verifySession()`", + "wrap": false, + "href": "/docs/references/backend/sessions/verify-session" }, { - "title": "OIDC", - "items": [ - [ - { - "title": "Custom provider", - "href": "/docs/authentication/enterprise-connections/oidc/custom-provider" - } - ] - ] + "title": "`revokeSession()`", + "wrap": false, + "href": "/docs/references/backend/sessions/revoke-session" } ] ] }, { - "title": "Web3", + "title": "Client", + "collapse": true, "items": [ [ { - "title": "Coinbase Wallet", - "href": "/docs/authentication/web3/coinbase-wallet" + "title": "`getClient()`", + "wrap": false, + "href": "/docs/references/backend/client/get-client" }, { - "title": "MetaMask", - "href": "/docs/authentication/web3/metamask" + "title": "`getClientList()`", + "wrap": false, + "href": "/docs/references/backend/client/get-client-list" }, { - "title": "OKX Wallet", - "href": "/docs/authentication/web3/okx-wallet" + "title": "`verifyClient()`", + "wrap": false, + "href": "/docs/references/backend/client/verify-client" } ] ] - } - ] - ] - }, - { - "title": "Users", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/users/overview" - }, - { - "title": "Metadata", - "href": "/docs/users/metadata" }, { "title": "Invitations", - "href": "/docs/users/invitations" - }, - { - "title": "User impersonation", - "href": "/docs/users/user-impersonation" - }, - { - "title": "Create users", - "href": "/docs/users/creating-users" - }, - { - "title": "Delete users", - "href": "/docs/users/deleting-users" - }, - { - "title": "Guides", + "collapse": true, "items": [ [ { - "title": "Web3 authentication", - "href": "/docs/users/web3" + "title": "`getInvitationList()`", + "wrap": false, + "href": "/docs/references/backend/invitations/get-invitation-list" + }, + { + "title": "`createInvitation()`", + "wrap": false, + "href": "/docs/references/backend/invitations/create-invitation" + }, + { + "title": "`revokeInvitation()`", + "wrap": false, + "href": "/docs/references/backend/invitations/revoke-invitation" } ] ] - } - ] - ] - }, - { - "title": "Organizations, Roles, and Permissions", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/organizations/overview" - }, - { - "title": "Roles and permissions", - "href": "/docs/organizations/roles-permissions" - }, - { - "title": "Verified domains", - "href": "/docs/organizations/verified-domains" - }, - { - "title": "Manage SSO", - "href": "/docs/organizations/manage-sso" }, { - "title": "Guides", + "title": "Redirect Urls", + "collapse": true, "items": [ [ { - "title": "Create roles and assign permissions", - "href": "/docs/organizations/create-roles-permissions" - }, - { - "title": "Verify the active user’s permissions", - "href": "/docs/organizations/verify-user-permissions" - }, - { - "title": "Reassign the default role", - "href": "/docs/organizations/default-role" + "title": "`getRedirectUrl()`", + "wrap": false, + "href": "/docs/references/backend/redirect-urls/get-redirect-url" }, { - "title": "Reassign the creator role", - "href": "/docs/organizations/creator-role" + "title": "`getRedirectUrlList()`", + "wrap": false, + "href": "/docs/references/backend/redirect-urls/get-redirect-url-list" }, { - "title": "Organization workspaces", - "href": "/docs/organizations/organization-workspaces" + "title": "`createRedirectUrl()`", + "wrap": false, + "href": "/docs/references/backend/redirect-urls/create-redirect-url" }, { - "title": "Create organizations on behalf of users", - "href": "/docs/organizations/create-orgs-for-users" + "title": "`deleteRedirectUrl()`", + "wrap": false, + "href": "/docs/references/backend/redirect-urls/delete-redirect-url" } ] ] }, { - "title": "Building custom flows", + "title": "Email addresses", + "collapse": true, "items": [ [ { - "title": "Using metadata", - "href": "/docs/organizations/metadata" - }, - { - "title": "Create an organization", - "href": "/docs/organizations/creating-organizations" - }, - { - "title": "Update an organization", - "href": "/docs/organizations/updating-organizations" - }, - { - "title": "Invite users to an organization", - "href": "/docs/organizations/inviting-users" - }, - { - "title": "Accept organization invitations", - "href": "/docs/organizations/accept-organization-invitations" - }, - { - "title": "Manage member roles", - "href": "/docs/organizations/managing-roles" + "title": "`getEmailAddress()`", + "wrap": false, + "href": "/docs/references/backend/email-addresses/get-email-address" }, { - "title": "View a user's organization memberships", - "href": "/docs/organizations/viewing-memberships" + "title": "`createEmailAddress()`", + "wrap": false, + "href": "/docs/references/backend/email-addresses/create-email-address" }, { - "title": "Manage membership requests", - "href": "/docs/organizations/manage-membership-requests" + "title": "`updateEmailAddress()`", + "wrap": false, + "href": "/docs/references/backend/email-addresses/update-email-address" }, { - "title": "Switch between organizations", - "href": "/docs/organizations/custom-organization-switcher" + "title": "`deleteEmailAddress()`", + "wrap": false, + "href": "/docs/references/backend/email-addresses/delete-email-address" } ] ] - } - ] - ] - }, - { - "title": "Backend Requests", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/backend-requests/overview" }, { - "title": "Making requests", + "title": "Phone numbers", + "collapse": true, "items": [ [ { - "title": "Same-Origin Requests", - "href": "/docs/backend-requests/making/same-origin" + "title": "`getPhoneNumber()`", + "wrap": false, + "href": "/docs/references/backend/phone-numbers/get-phone-number" }, { - "title": "Cross-Origin Requests", - "href": "/docs/backend-requests/making/cross-origin" + "title": "`createPhoneNumber()`", + "wrap": false, + "href": "/docs/references/backend/phone-numbers/create-phone-number" }, { - "title": "Customize your session token", - "href": "/docs/backend-requests/making/custom-session-token" + "title": "`updatePhoneNumber()`", + "wrap": false, + "href": "/docs/references/backend/phone-numbers/update-phone-number" }, { - "title": "JWT templates", - "href": "/docs/backend-requests/making/jwt-templates" + "title": "`deletePhoneNumber()`", + "wrap": false, + "href": "/docs/references/backend/phone-numbers/delete-phone-number" } ] ] }, { - "title": "Handling requests", + "title": "SAML connections", + "collapse": true, "items": [ [ { - "title": "JS Backend SDKs", - "href": "/docs/backend-requests/handling/js-backend-sdks" + "title": "`getSamlConnectionList()`", + "wrap": false, + "href": "/docs/references/backend/saml-connections/get-saml-connection-list" }, { - "title": "Go", - "href": "/docs/backend-requests/handling/go", - "icon": "go" + "title": "`getSamlConnection()`", + "wrap": false, + "href": "/docs/references/backend/saml-connections/get-saml-connection" }, { - "title": "Ruby / Rails", - "href": "/docs/backend-requests/handling/ruby-rails", - "icon": "ruby" + "title": "`createSamlConnection()`", + "wrap": false, + "href": "/docs/references/backend/saml-connections/create-saml-connection" }, { - "title": "Manual JWT Verification", - "href": "/docs/backend-requests/handling/manual-jwt" + "title": "`updateSamlConnection()`", + "wrap": false, + "href": "/docs/references/backend/saml-connections/update-saml-connection" }, { - "title": "Node.js (Deprecated)", - "href": "/docs/backend-requests/handling/nodejs" + "title": "`deleteSamlConnection()`", + "wrap": false, + "href": "/docs/references/backend/saml-connections/delete-saml-connection" } ] ] }, { - "title": "Versioning", + "title": "Sign-in tokens", + "collapse": true, "items": [ [ { - "title": "Overview", - "href": "/docs/backend-requests/versioning/overview" + "title": "`createSignInToken()`", + "wrap": false, + "href": "/docs/references/backend/sign-in-tokens/create-sign-in-token" }, { - "title": "Available versions", - "href": "/docs/backend-requests/versioning/available-versions" + "title": "`revokeSignInToken()`", + "wrap": false, + "href": "/docs/references/backend/sign-in-tokens/revoke-sign-in-token" } ] ] }, { - "title": "Resources", + "title": "Testing Tokens", + "collapse": true, "items": [ [ { - "title": "Session tokens", - "href": "/docs/backend-requests/resources/session-tokens" - }, - { - "title": "Rate limits", - "href": "/docs/backend-requests/resources/rate-limits" + "title": "`createTestingToken()`", + "wrap": false, + "href": "/docs/references/backend/testing-tokens/create-testing-token" } ] ] - } - ] - ] - }, - { - "title": "Webhooks", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/webhooks/overview" - }, - { - "title": "Sync Clerk data to your application with webhooks", - "href": "/docs/webhooks/sync-data" }, { - "title": "Handling webhooks with Inngest", - "href": "/docs/webhooks/inngest" + "title": "`authenticateRequest()`", + "wrap": false, + "href": "/docs/references/backend/authenticate-request" }, { - "title": "Send webhooks to Loops", - "href": "/docs/webhooks/loops" + "title": "`verifyToken()`", + "wrap": false, + "href": "/docs/references/backend/verify-token" }, { - "title": "Debug your webhooks", - "href": "/docs/webhooks/debug-your-webhooks" - } - ] - ] - } - ] - ] - } - ], - [ - { - "title": "Customization", - "items": [ - [ - { - "title": "Account Portal", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/customization/account-portal/overview" - }, - { - "title": "Getting started", - "href": "/docs/customization/account-portal/getting-started" - }, - { - "title": "Advanced Usage", + "title": "Types", + "collapse": true, "items": [ [ { - "title": "Direct links", - "href": "/docs/customization/account-portal/direct-links" + "title": "`Auth` object", + "href": "/docs/references/backend/types/auth-object" }, { - "title": "Disable Account Portal", - "href": "/docs/customization/account-portal/disable-account-portal" + "title": "Backend `AllowlistIdentifier` object", + "href": "/docs/references/backend/types/backend-allowlist-identifier" + }, + { + "title": "Backend `Client` object", + "href": "/docs/references/backend/types/backend-client" + }, + { + "title": "Backend `Invitation` object", + "href": "/docs/references/backend/types/backend-invitation" + }, + { + "title": "Backend `Organization` object", + "href": "/docs/references/backend/types/backend-organization" + }, + { + "title": "Backend `OrganizationInvitation` object", + "href": "/docs/references/backend/types/backend-organization-invitation" + }, + { + "title": "Backend `OrganizationMembership` object", + "href": "/docs/references/backend/types/backend-organization-membership" + }, + { + "title": "Backend `Session` object", + "href": "/docs/references/backend/types/backend-session" + }, + { + "title": "Backend `RedirectURL` object", + "href": "/docs/references/backend/types/backend-redirect-url" + }, + { + "title": "Backend `User` object", + "href": "/docs/references/backend/types/backend-user" + }, + { + "title": "`PaginatedResourceResponse`", + "href": "/docs/references/backend/types/paginated-resource-response" } ] ] @@ -1717,132 +1869,118 @@ ] }, { - "title": "Appearance Prop", - "collapse": true, + "title": "SDK Development", + "icon": "code-bracket", "items": [ [ { "title": "Overview", - "href": "/docs/customization/overview" + "href": "/docs/references/sdk/overview" }, { - "title": "Layout", - "href": "/docs/customization/layout" + "title": "Terminology", + "href": "/docs/references/sdk/terminology" }, { - "title": "Themes", - "href": "/docs/customization/themes" + "title": "Philosophy", + "href": "/docs/references/sdk/philosophy" }, { - "title": "Variables", - "href": "/docs/customization/variables" - } - ] - ] - }, - { - "title": "Localization", - "href": "/docs/customization/localization" - }, - { - "title": "Custom Pages", - "collapse": true, - "items": [ - [ - { - "title": "``", - "href": "/docs/customization/user-profile" + "title": "Conventions", + "href": "/docs/references/sdk/conventions" }, { - "title": "``", - "href": "/docs/customization/organization-profile" - } - ] - ] - }, - { - "title": "Custom Menu Items", - "collapse": true, - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/customization/user-button" - } - ] - ] - }, - { - "title": "Elements", - "tag": "(Beta)", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/customization/elements/overview" + "title": "SDK Types", + "href": "/docs/references/sdk/types" }, { "title": "Guides", "items": [ [ { - "title": "Build a sign-in flow", - "href": "/docs/customization/elements/guides/sign-in" + "title": "Frontend-only", + "href": "/docs/references/sdk/frontend-only" }, { - "title": "Build a sign-up flow", - "href": "/docs/customization/elements/guides/sign-up" + "title": "Backend-only", + "href": "/docs/references/sdk/backend-only" }, { - "title": "Styling", - "href": "/docs/customization/elements/guides/styling" + "title": "Fullstack", + "href": "/docs/references/sdk/fullstack" } ] ] - }, + } + ] + ] + }, + { + "title": "Community SDKs", + "items": [ + [ { - "title": "Examples", + "title": "Redwood", + "collapse": true, + "icon": "redwood", "items": [ [ { - "title": "Sign-in", - "href": "/docs/customization/elements/examples/sign-in" - }, - { - "title": "Sign-up", - "href": "/docs/customization/elements/examples/sign-up" - }, - { - "title": "Primitives", - "href": "/docs/customization/elements/examples/primitives" + "title": "Overview", + "href": "/docs/references/redwood/overview" }, { - "title": "shadcn/ui", - "href": "/docs/customization/elements/examples/shadcn-ui" + "title": "Redwood", + "href": "https://redwoodjs.com/docs/auth/clerk", + "icon": "redwood" } ] ] }, { - "title": "Component Reference", - "items": [ - [ - { - "title": "Common", - "href": "/docs/customization/elements/reference/common" - }, - { - "title": "Sign-in", - "href": "/docs/customization/elements/reference/sign-in" - }, - { - "title": "Sign-up", - "href": "/docs/customization/elements/reference/sign-up" - } - ] - ] + "title": "Svelte", + "href": "https://github.com/markjaquith/clerk-sveltekit", + "icon": "svelte" + }, + { + "title": "Vue", + "href": "https://vue-clerk.vercel.app", + "icon": "vue" + }, + { + "title": "Elysia", + "href": "https://github.com/wobsoriano/elysia-clerk", + "icon": "elysia" + }, + { + "title": "Rust", + "href": "https://github.com/cincinnati-ventures/clerk-rs", + "icon": "rust" + }, + { + "title": "Hono", + "href": "https://github.com/honojs/middleware/tree/main/packages/clerk-auth", + "icon": "hono" + }, + { + "title": "C#", + "href": "https://github.com/Hawxy/Clerk.Net", + "icon": "c-sharp" + }, + { + "title": "Koa", + "href": "https://github.com/dimkl/clerk-koa/blob/main/README.md", + "icon": "koa" + }, + { + "title": "Angular", + "href": "https://github.com/anagstef/ngx-clerk?tab=readme-ov-file#ngx-clerk", + "icon": "angular" + }, + { + "title": "SolidJS", + "href": "https://github.com/spirit-led-software/clerk-solidjs", + "icon": "solid" } ] ] @@ -1853,290 +1991,170 @@ ], [ { - "title": "Development", + "title": "Configuration", "items": [ [ { - "title": "Testing", + "title": "Sign-up & Sign-in", "collapse": true, "items": [ [ { "title": "Overview", - "href": "/docs/testing/overview" - }, - { - "title": "Test Emails and Phones", - "href": "/docs/testing/test-emails-and-phones" + "href": "/docs/authentication/overview" }, { - "title": "Testing Frameworks", + "title": "Configuration", "items": [ [ { - "title": "Playwright", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/testing/playwright/overview" - }, - { - "title": "Test helpers", - "href": "/docs/testing/playwright/test-helpers" - }, - { - "title": "Test authenticated flows", - "href": "/docs/testing/playwright/test-authenticated-flows" - } - ] - ] + "title": "Sign-up and sign-in options", + "href": "/docs/authentication/configuration/sign-up-sign-in-options" }, { - "title": "Cypress", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/testing/cypress/overview" - }, - { - "title": "Custom commands", - "href": "/docs/testing/cypress/custom-commands" - }, - { - "title": "Test Account Portal", - "href": "/docs/testing/cypress/test-account-portal" - } - ] - ] + "title": "Session options", + "href": "/docs/authentication/configuration/session-options" }, { - "title": "Postman or Insomnia", - "href": "/docs/testing/postman-or-insomnia" - } - ] - ] - } - ] - ] - }, - { - "title": "Errors", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/errors/overview" - }, - { - "title": "Actor tokens", - "href": "/docs/errors/actor-tokens" - }, - { - "title": "Allowlist identifiers", - "href": "/docs/errors/allowlist-identifiers" - }, - { - "title": "Application", - "href": "/docs/errors/application" - }, - { - "title": "Authentication", - "href": "/docs/errors/authentication" - }, - { - "title": "Backup codes", - "href": "/docs/errors/backup-codes" - }, - { - "title": "Billing", - "href": "/docs/errors/billing" - }, - { - "title": "Billing accounts", - "href": "/docs/errors/billing-accounts" - }, - { - "title": "Blocklist identifiers", - "href": "/docs/errors/blocklist-identifiers" - }, - { - "title": "Clients", - "href": "/docs/errors/clients" - }, - { - "title": "Cookie", - "href": "/docs/errors/cookie" - }, - { - "title": "Deprecation", - "href": "/docs/errors/deprecation" - }, - { - "title": "Domains", - "href": "/docs/errors/domains" - }, - { - "title": "Entitlements", - "href": "/docs/errors/entitlements" - }, - { - "title": "Features", - "href": "/docs/errors/features" - }, - { - "title": "Forms", - "href": "/docs/errors/forms" - }, - { - "title": "Identifications", - "href": "/docs/errors/identifications" - }, - { - "title": "Passkeys", - "href": "/docs/errors/passkeys" - }, - { - "title": "Rate Limits", - "href": "/docs/errors/rate-limits" - }, - { - "title": "Sign-in", - "href": "/docs/errors/sign-in" - }, - { - "title": "Sign-up", - "href": "/docs/errors/sign-up" - }, - { - "title": "Sign-in-tokens", - "href": "/docs/errors/sign-in-tokens" - } - ] - ] - }, - { - "title": "Troubleshooting", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/troubleshooting/overview" - }, - { - "title": "Email Deliverability", - "href": "/docs/troubleshooting/email-deliverability" - }, - { - "title": "Script Loading", - "href": "/docs/troubleshooting/script-loading" - }, - { - "title": "Help & Support", - "items": [ - [ - { - "title": "Create a minimal reproduction", - "href": "/docs/troubleshooting/create-a-minimal-reproduction" + "title": "Email & SMS templates", + "href": "/docs/authentication/configuration/email-sms-templates" }, { - "title": "Community Discord", - "href": "https://clerk.com/discord" + "title": "Restrictions", + "href": "/docs/authentication/configuration/restrictions" }, { - "title": "Contact Support", - "href": "/support", - "target": "_blank" + "title": "Legal compliance", + "href": "/docs/authentication/configuration/legal-compliance" } ] ] - } - ] - ] - }, - { - "title": "Upgrade Guides", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/upgrade-guides/overview" - }, - { - "title": "Long term support policy", - "href": "/docs/upgrade-guides/long-term-support" - }, - { - "title": "Clerk SDK versioning", - "href": "/docs/upgrade-guides/sdk-versioning" - }, - { - "title": "Upgrading to @clerk/nextjs v6", - "href": "/docs/upgrade-guides/nextjs/v6" }, { - "title": "Upgrading to Core 2", + "title": "Social Connections", "items": [ [ { "title": "Overview", - "href": "/docs/upgrade-guides/core-2/overview" + "href": "/docs/authentication/social-connections/overview" }, { - "title": "Component redesign", - "href": "/docs/upgrade-guides/core-2/component-redesign" + "title": "Social connections (OAuth)", + "href": "/docs/authentication/social-connections/oauth" }, { - "title": "SDK Guides", + "title": "Account linking", + "href": "/docs/authentication/social-connections/account-linking" + }, + { + "title": "Custom provider", + "href": "/docs/authentication/social-connections/custom-provider" + }, + { + "title": "Google", + "href": "/docs/authentication/social-connections/google" + }, + { + "title": "Facebook", + "href": "/docs/authentication/social-connections/facebook" + }, + { + "title": "Microsoft", + "href": "/docs/authentication/social-connections/microsoft" + }, + { + "title": "See all", "collapse": true, "items": [ [ { - "title": "Next.js", - "href": "/docs/upgrade-guides/core-2/nextjs", - "icon": "nextjs" + "title": "Apple", + "href": "/docs/authentication/social-connections/apple" }, { - "title": "Remix", - "href": "/docs/upgrade-guides/core-2/remix", - "icon": "remix" + "title": "Atlassian", + "href": "/docs/authentication/social-connections/atlassian" }, { - "title": "Expo", - "href": "/docs/upgrade-guides/core-2/expo" + "title": "Bitbucket", + "href": "/docs/authentication/social-connections/bitbucket" }, { - "title": "Fastify", - "href": "/docs/upgrade-guides/core-2/fastify" + "title": "Box", + "href": "/docs/authentication/social-connections/box" }, { - "title": "React", - "href": "/docs/upgrade-guides/core-2/react", - "icon": "react" + "title": "Coinbase", + "href": "/docs/authentication/social-connections/coinbase" }, { - "title": "Node", - "href": "/docs/upgrade-guides/core-2/node" + "title": "Discord", + "href": "/docs/authentication/social-connections/discord" }, { - "title": "Backend", - "href": "/docs/upgrade-guides/core-2/backend" + "title": "Dropbox", + "href": "/docs/authentication/social-connections/dropbox" }, { - "title": "Chrome Extension", - "href": "/docs/upgrade-guides/core-2/chrome-extension" + "title": "GitHub", + "href": "/docs/authentication/social-connections/github" }, { - "title": "JavaScript", - "href": "/docs/upgrade-guides/core-2/javascript", - "icon": "javascript" - } + "title": "GitLab", + "href": "/docs/authentication/social-connections/gitlab" + }, + { + "title": "HubSpot", + "href": "/docs/authentication/social-connections/hubspot" + }, + { + "title": "Hugging Face", + "href": "/docs/authentication/social-connections/huggingface" + }, + { + "title": "Line", + "href": "/docs/authentication/social-connections/line" + }, + { + "title": "Linear", + "href": "/docs/authentication/social-connections/linear" + }, + { + "title": "LinkedIn (Deprecated)", + "href": "/docs/authentication/social-connections/linkedin" + }, + { + "title": "LinkedIn", + "href": "/docs/authentication/social-connections/linkedin-oidc" + }, + { + "title": "Notion", + "href": "/docs/authentication/social-connections/notion" + }, + { + "title": "Slack", + "href": "/docs/authentication/social-connections/slack" + }, + { + "title": "Spotify", + "href": "/docs/authentication/social-connections/spotify" + }, + { + "title": "TikTok", + "href": "/docs/authentication/social-connections/tiktok" + }, + { + "title": "Twitter v1", + "href": "/docs/authentication/social-connections/twitter" + }, + { + "title": "X/Twitter v2", + "href": "/docs/authentication/social-connections/x-twitter" + }, + { + "title": "Xero", + "href": "/docs/authentication/social-connections/xero" + } ] ] } @@ -2144,42 +2162,135 @@ ] }, { - "title": "Upgrading to Core 1", + "title": "Enterprise Connections", "items": [ [ { "title": "Overview", - "href": "/docs/upgrade-guides/upgrading-from-v2-to-v3" + "href": "/docs/authentication/enterprise-connections/overview" + }, + { + "title": "Authentication flows", + "href": "/docs/authentication/enterprise-connections/authentication-flows" + }, + { + "title": "Account linking", + "href": "/docs/authentication/enterprise-connections/account-linking" + }, + { + "title": "Just-in-Time account provisioning", + "href": "/docs/authentication/enterprise-connections/jit-provisioning" + }, + { + "title": "EASIE", + "items": [ + [ + { + "title": "Microsoft", + "href": "/docs/authentication/enterprise-connections/easie/microsoft" + }, + { + "title": "Google", + "href": "/docs/authentication/enterprise-connections/easie/google" + } + ] + ] + }, + { + "title": "SAML", + "items": [ + [ + { + "title": "Azure", + "href": "/docs/authentication/enterprise-connections/saml/azure" + }, + { + "title": "Google", + "href": "/docs/authentication/enterprise-connections/saml/google" + }, + { + "title": "Okta", + "href": "/docs/authentication/enterprise-connections/saml/okta" + }, + { + "title": "Custom provider", + "href": "/docs/authentication/enterprise-connections/saml/custom-provider" + } + ] + ] + }, + { + "title": "OIDC", + "items": [ + [ + { + "title": "Custom provider", + "href": "/docs/authentication/enterprise-connections/oidc/custom-provider" + } + ] + ] } ] ] }, { - "title": "Upgrading from Node to Express SDK", + "title": "Web3", "items": [ [ { - "title": "Overview", - "href": "/docs/upgrade-guides/node-to-express" + "title": "Coinbase Wallet", + "href": "/docs/authentication/web3/coinbase-wallet" + }, + { + "title": "MetaMask", + "href": "/docs/authentication/web3/metamask" + }, + { + "title": "OKX Wallet", + "href": "/docs/authentication/web3/okx-wallet" } ] ] + } + ] + ] + }, + { + "title": "Users", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/users/overview" }, { - "title": "Dashboard", + "title": "Metadata", + "href": "/docs/users/metadata" + }, + { + "title": "Invitations", + "href": "/docs/users/invitations" + }, + { + "title": "User impersonation", + "href": "/docs/users/user-impersonation" + }, + { + "title": "Create users", + "href": "/docs/users/creating-users" + }, + { + "title": "Delete users", + "href": "/docs/users/deleting-users" + }, + { + "title": "Guides", "items": [ [ { - "title": "API Key Changes", - "href": "/docs/upgrade-guides/api-keys" - }, - { - "title": "URL-based session syncing", - "href": "/docs/upgrade-guides/url-based-session-syncing" - }, - { - "title": "Progressive Sign up", - "href": "/docs/upgrade-guides/progressive-sign-up" + "title": "Web3 authentication", + "href": "/docs/users/web3" } ] ] @@ -2188,186 +2299,190 @@ ] }, { - "title": "Deployments & Migrations", + "title": "Organizations, Roles, and Permissions", "collapse": true, "items": [ [ { - "title": "Instances / Environments", - "href": "/docs/deployments/environments" + "title": "Overview", + "href": "/docs/organizations/overview" }, { - "title": "Clerk environment variables", - "href": "/docs/deployments/clerk-environment-variables" + "title": "Roles and permissions", + "href": "/docs/organizations/roles-permissions" }, { - "title": "Deployment", + "title": "Verified domains", + "href": "/docs/organizations/verified-domains" + }, + { + "title": "Manage SSO", + "href": "/docs/organizations/manage-sso" + }, + { + "title": "Guides", "items": [ [ { - "title": "Deploy to production", - "href": "/docs/deployments/overview" - }, - { - "title": "Deploy to Vercel", - "href": "/docs/deployments/deploy-to-vercel" - }, - { - "title": "Deploy behind a proxy", - "href": "/docs/deployments/deploy-behind-a-proxy" - }, - { - "title": "Set up a staging environment", - "href": "/docs/deployments/set-up-staging" + "title": "Create roles and assign permissions", + "href": "/docs/organizations/create-roles-permissions" }, { - "title": "Deploy a Chrome Extension to production", - "href": "/docs/deployments/deploy-chrome-extension" + "title": "Verify the active user’s permissions", + "href": "/docs/organizations/verify-user-permissions" }, { - "title": "Deploy an Expo app to production", - "href": "/docs/deployments/deploy-expo" + "title": "Reassign the default role", + "href": "/docs/organizations/default-role" }, { - "title": "Deploy an Astro app to production", - "href": "/docs/deployments/deploy-astro" + "title": "Reassign the creator role", + "href": "/docs/organizations/creator-role" }, { - "title": "Set up a preview environment", - "href": "/docs/deployments/set-up-preview-environment" + "title": "Organization workspaces", + "href": "/docs/organizations/organization-workspaces" }, { - "title": "Changing domains", - "href": "/docs/deployments/changing-domains" + "title": "Create organizations on behalf of users", + "href": "/docs/organizations/create-orgs-for-users" } ] ] }, { - "title": "Migrations", + "title": "Building custom flows", "items": [ [ { - "title": "Migrate to Clerk", - "href": "/docs/deployments/migrate-overview" + "title": "Using metadata", + "href": "/docs/organizations/metadata" }, { - "title": "Migrate from Firebase", - "href": "/docs/deployments/migrate-from-firebase" + "title": "Create an organization", + "href": "/docs/organizations/creating-organizations" }, { - "title": "Migrate from Cognito", - "href": "/docs/deployments/migrate-from-cognito" + "title": "Update an organization", + "href": "/docs/organizations/updating-organizations" }, { - "title": "Exporting user data", - "href": "/docs/deployments/exporting-users" - } - ] - ] - }, - { - "title": "Cookie Information", - "items": [ - [ + "title": "Invite users to an organization", + "href": "/docs/organizations/inviting-users" + }, { - "title": "Clerk Cookie Information", - "href": "/docs/deployments/clerk-cookies" + "title": "Accept organization invitations", + "href": "/docs/organizations/accept-organization-invitations" + }, + { + "title": "Manage member roles", + "href": "/docs/organizations/managing-roles" + }, + { + "title": "View a user's organization memberships", + "href": "/docs/organizations/viewing-memberships" + }, + { + "title": "Manage membership requests", + "href": "/docs/organizations/manage-membership-requests" + }, + { + "title": "Switch between organizations", + "href": "/docs/organizations/custom-organization-switcher" } ] ] } ] ] - } - ] - ] - } - ], - [ - { - "title": "Advanced", - "items": [ - [ - { - "title": "How Clerk works", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/how-clerk-works/overview" - }, - { - "title": "Cookies", - "href": "/docs/how-clerk-works/cookies" - }, - { - "title": "Tokens & signatures", - "href": "/docs/how-clerk-works/tokens-signatures" - } - ] - ] }, { - "title": "Integrations", + "title": "Backend Requests", "collapse": true, "items": [ [ { "title": "Overview", - "href": "/docs/integrations/overview" + "href": "/docs/backend-requests/overview" }, { - "title": "Databases", + "title": "Making requests", "items": [ [ { - "title": "Convex", - "href": "/docs/integrations/databases/convex" + "title": "Same-Origin Requests", + "href": "/docs/backend-requests/making/same-origin" }, { - "title": "Fauna", - "href": "/docs/integrations/databases/fauna" + "title": "Cross-Origin Requests", + "href": "/docs/backend-requests/making/cross-origin" }, { - "title": "Firebase", - "href": "/docs/integrations/databases/firebase" + "title": "Customize your session token", + "href": "/docs/backend-requests/making/custom-session-token" }, { - "title": "Grafbase", - "href": "/docs/integrations/databases/grafbase" + "title": "JWT templates", + "href": "/docs/backend-requests/making/jwt-templates" + } + ] + ] + }, + { + "title": "Handling requests", + "items": [ + [ + { + "title": "JS Backend SDKs", + "href": "/docs/backend-requests/handling/js-backend-sdks" }, { - "title": "Hasura", - "href": "/docs/integrations/databases/hasura" + "title": "Go", + "href": "/docs/backend-requests/handling/go", + "icon": "go" }, { - "title": "InstantDB", - "href": "/docs/integrations/databases/instantdb" + "title": "Ruby / Rails", + "href": "/docs/backend-requests/handling/ruby-rails", + "icon": "ruby" }, { - "title": "Nhost", - "href": "/docs/integrations/databases/nhost" + "title": "Manual JWT Verification", + "href": "/docs/backend-requests/handling/manual-jwt" }, { - "title": "Supabase", - "href": "/docs/integrations/databases/supabase" + "title": "Node.js (Deprecated)", + "href": "/docs/backend-requests/handling/nodejs" + } + ] + ] + }, + { + "title": "Versioning", + "items": [ + [ + { + "title": "Overview", + "href": "/docs/backend-requests/versioning/overview" }, { - "title": "Neon", - "href": "/docs/integrations/databases/neon" + "title": "Available versions", + "href": "/docs/backend-requests/versioning/available-versions" } ] ] }, { - "title": "Analytics", + "title": "Resources", "items": [ [ { - "title": "Google Analytics", - "href": "/docs/integrations/analytics/google-analytics" + "title": "Session tokens", + "href": "/docs/backend-requests/resources/session-tokens" + }, + { + "title": "Rate limits", + "href": "/docs/backend-requests/resources/rate-limits" } ] ] @@ -2376,93 +2491,66 @@ ] }, { - "title": "Advanced Usage", + "title": "Webhooks", "collapse": true, "items": [ [ { - "title": "Clerk as an OAuth2 Provider", - "href": "/docs/advanced-usage/clerk-idp" + "title": "Overview", + "href": "/docs/webhooks/overview" }, { - "title": "Authentication across different domains", - "href": "/docs/advanced-usage/satellite-domains" + "title": "Sync Clerk data to your application with webhooks", + "href": "/docs/webhooks/sync-data" }, { - "title": "Proxying the Clerk Frontend API", - "href": "/docs/advanced-usage/using-proxies" + "title": "Handling webhooks with Inngest", + "href": "/docs/webhooks/inngest" + }, + { + "title": "Send webhooks to Loops", + "href": "/docs/webhooks/loops" + }, + { + "title": "Debug your webhooks", + "href": "/docs/webhooks/debug-your-webhooks" } ] ] - }, + } + ] + ] + } + ], + [ + { + "title": "Customization", + "items": [ + [ { - "title": "Security & Privacy", + "title": "Account Portal", "collapse": true, "items": [ [ { "title": "Overview", - "href": "/docs/security/overview" - }, - { - "title": "Vulnerability disclosure policy", - "href": "/docs/security/vulnerability-disclosure-policy" - }, - { - "title": "XSS leak protection", - "href": "/docs/security/xss-leak-protection" - }, - { - "title": "CSRF protection", - "href": "/docs/security/csrf-protection" - }, - { - "title": "CSP Headers", - "href": "/docs/security/clerk-csp" - }, - { - "title": "Fixation protection", - "href": "/docs/security/fixation-protection" - }, - { - "title": "Password protection and rules", - "href": "/docs/security/password-protection" + "href": "/docs/customization/account-portal/overview" }, { - "title": "Clerk Telemetry", - "href": "/docs/telemetry" + "title": "Getting started", + "href": "/docs/customization/account-portal/getting-started" }, { - "title": "Protect accounts from attacks", + "title": "Advanced Usage", "items": [ [ { - "title": "Brute force attacks and locking user accounts", - "href": "/docs/security/user-lock-guide" - }, - { - "title": "Protect sign ups from bots", - "href": "/docs/security/bot-protection" - }, - { - "title": "Customize max sign-in attempts and duration of of user lockout", - "href": "/docs/security/customize-user-lockout" - }, - { - "title": "Unlock accounts from the Clerk Dashboard", - "href": "/docs/security/unlock-user-accounts" - }, - { - "title": "Programmatically lock and unlock accounts", - "href": "/docs/security/programmatically-lock-user-accounts" - }, - { - "title": "Protect email link sign-ins and sign-ups", - "href": "/docs/security/email-link-protection" + "title": "Direct links", + "href": "/docs/customization/account-portal/direct-links" }, { - "title": "Unauthorized sign-in", - "href": "/docs/security/unauthorized-sign-in" + "title": "Disable Account Portal", + "href": "/docs/customization/account-portal/disable-account-portal" } ] ] @@ -2471,104 +2559,129 @@ ] }, { - "title": "Custom Flows", + "title": "Appearance Prop", "collapse": true, "items": [ [ { "title": "Overview", - "href": "/docs/custom-flows/overview" + "href": "/docs/customization/overview" }, { - "title": "Error handling", - "href": "/docs/custom-flows/error-handling" + "title": "Layout", + "href": "/docs/customization/layout" }, { - "title": "Authentication", - "items": [ - [ - { - "title": "Email & password", - "href": "/docs/custom-flows/email-password" - }, - { - "title": "Email / SMS OTP", - "href": "/docs/custom-flows/email-sms-otp" - }, - { - "title": "Email links", - "href": "/docs/custom-flows/email-links" - }, - { - "title": "Email & password + MFA", - "href": "/docs/custom-flows/email-password-mfa" - }, - { - "title": "Passkeys", - "href": "/docs/custom-flows/passkeys" - }, - { - "title": "Google One Tap", - "href": "/docs/custom-flows/google-one-tap" - }, + "title": "Themes", + "href": "/docs/customization/themes" + }, + { + "title": "Variables", + "href": "/docs/customization/variables" + } + ] + ] + }, + { + "title": "Localization", + "href": "/docs/customization/localization" + }, + { + "title": "Custom Pages", + "collapse": true, + "items": [ + [ + { + "title": "``", + "href": "/docs/customization/user-profile" + }, + { + "title": "``", + "href": "/docs/customization/organization-profile" + } + ] + ] + }, + { + "title": "Custom Menu Items", + "collapse": true, + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/customization/user-button" + } + ] + ] + }, + { + "title": "Elements", + "tag": "(Beta)", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/customization/elements/overview" + }, + { + "title": "Guides", + "items": [ + [ { - "title": "OAuth connections", - "href": "/docs/custom-flows/oauth-connections" + "title": "Build a sign-in flow", + "href": "/docs/customization/elements/guides/sign-in" }, { - "title": "Enterprise connections", - "href": "/docs/custom-flows/enterprise-connections" + "title": "Build a sign-up flow", + "href": "/docs/customization/elements/guides/sign-up" }, { - "title": "Sign out", - "href": "/docs/custom-flows/sign-out" - }, + "title": "Styling", + "href": "/docs/customization/elements/guides/styling" + } + ] + ] + }, + { + "title": "Examples", + "items": [ + [ { - "title": "Sign-up with application invitations", - "href": "/docs/custom-flows/invitations" + "title": "Sign-in", + "href": "/docs/customization/elements/examples/sign-in" }, { - "title": "Embedded email links", - "href": "/docs/custom-flows/embedded-email-links" + "title": "Sign-up", + "href": "/docs/customization/elements/examples/sign-up" }, { - "title": "Multi-session applications", - "href": "/docs/custom-flows/multi-session-applications" + "title": "Primitives", + "href": "/docs/customization/elements/examples/primitives" }, { - "title": "Bot sign-up protection", - "href": "/docs/custom-flows/bot-sign-up-protection" + "title": "shadcn/ui", + "href": "/docs/customization/elements/examples/shadcn-ui" } ] ] }, { - "title": "Account updates", + "title": "Component Reference", "items": [ [ { - "title": "Forgot password", - "href": "/docs/custom-flows/forgot-password" - }, - { - "title": "User impersonation", - "href": "/docs/custom-flows/user-impersonation" - }, - { - "title": "Add email", - "href": "/docs/custom-flows/add-email" - }, - { - "title": "Add phone", - "href": "/docs/custom-flows/add-phone" + "title": "Common", + "href": "/docs/customization/elements/reference/common" }, { - "title": "Manage SMS-based MFA", - "href": "/docs/custom-flows/manage-sms-based-mfa" + "title": "Sign-in", + "href": "/docs/customization/elements/reference/sign-in" }, { - "title": "Manage TOTP-based MFA", - "href": "/docs/custom-flows/manage-totp-based-mfa" + "title": "Sign-up", + "href": "/docs/customization/elements/reference/sign-up" } ] ] @@ -2582,814 +2695,616 @@ ], [ { - "title": "SDK References", + "title": "Development", "items": [ [ { - "title": "JavaScript", + "title": "Testing", "collapse": true, - "icon": "javascript", "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/javascript", - "icon": "javascript" + "title": "Overview", + "href": "/docs/testing/overview" }, { - "title": "Overview", - "href": "/docs/references/javascript/overview" + "title": "Test Emails and Phones", + "href": "/docs/testing/test-emails-and-phones" }, { - "title": "Clerk", - "collapse": true, + "title": "Testing Frameworks", "items": [ [ { - "title": "Clerk class", - "href": "/docs/references/javascript/clerk/clerk" - }, - { - "title": "Organization methods", - "href": "/docs/references/javascript/clerk/organization-methods" - }, - { - "title": "Waitlist methods", - "href": "/docs/references/javascript/clerk/waitlist-methods" - }, - { - "title": "Redirect methods", - "href": "/docs/references/javascript/clerk/redirect-methods" - }, - { - "title": "BuildURLs", - "href": "/docs/references/javascript/clerk/build-urls" + "title": "Playwright", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/testing/playwright/overview" + }, + { + "title": "Test helpers", + "href": "/docs/testing/playwright/test-helpers" + }, + { + "title": "Test authenticated flows", + "href": "/docs/testing/playwright/test-authenticated-flows" + } + ] + ] }, { - "title": "Handle navigation", - "href": "/docs/references/javascript/clerk/handle-navigation" + "title": "Cypress", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/testing/cypress/overview" + }, + { + "title": "Custom commands", + "href": "/docs/testing/cypress/custom-commands" + }, + { + "title": "Test Account Portal", + "href": "/docs/testing/cypress/test-account-portal" + } + ] + ] }, { - "title": "Session methods", - "href": "/docs/references/javascript/clerk/session-methods" + "title": "Postman or Insomnia", + "href": "/docs/testing/postman-or-insomnia" } ] ] + } + ] + ] + }, + { + "title": "Errors", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/errors/overview" }, { - "title": "User", - "collapse": true, - "items": [ - [ - { - "title": "User object", - "href": "/docs/references/javascript/user/user" - }, - { - "title": "TOTP methods", - "href": "/docs/references/javascript/user/totp" - }, - { - "title": "Password management methods", - "href": "/docs/references/javascript/user/password-management" - }, - { - "title": "Create metadata methods", - "href": "/docs/references/javascript/user/create-metadata" - } - ] - ] + "title": "Actor tokens", + "href": "/docs/errors/actor-tokens" }, { - "title": "Organization", - "collapse": true, - "items": [ - [ - { - "title": "Organization object", - "href": "/docs/references/javascript/organization/organization" - }, - { - "title": "Membership methods", - "href": "/docs/references/javascript/organization/members" - }, - { - "title": "Invitation methods", - "href": "/docs/references/javascript/organization/invitations" - }, - { - "title": "Domain methods", - "href": "/docs/references/javascript/organization/domains" - }, - { - "title": "Membership request methods", - "href": "/docs/references/javascript/organization/membership-request" - } - ] - ] + "title": "Allowlist identifiers", + "href": "/docs/errors/allowlist-identifiers" }, { - "title": "Organization Invitation", - "href": "/docs/references/javascript/organization-invitation" + "title": "Application", + "href": "/docs/errors/application" }, { - "title": "Organization Membership", - "href": "/docs/references/javascript/organization-membership" + "title": "Authentication", + "href": "/docs/errors/authentication" }, { - "title": "Organization Domain", - "href": "/docs/references/javascript/organization-domain" + "title": "Backup codes", + "href": "/docs/errors/backup-codes" }, { - "title": "Organization Membership Request", - "href": "/docs/references/javascript/organization-membership-request" + "title": "Billing", + "href": "/docs/errors/billing" }, { - "title": "Session", - "href": "/docs/references/javascript/session" + "title": "Billing accounts", + "href": "/docs/errors/billing-accounts" }, { - "title": "SessionWithActivities", - "href": "/docs/references/javascript/session-with-activities" + "title": "Blocklist identifiers", + "href": "/docs/errors/blocklist-identifiers" }, { - "title": "Client", - "href": "/docs/references/javascript/client" + "title": "Clients", + "href": "/docs/errors/clients" }, { - "title": "ExternalAccount", - "href": "/docs/references/javascript/external-account" + "title": "Cookie", + "href": "/docs/errors/cookie" }, { - "title": "Email Address", - "href": "/docs/references/javascript/email-address" + "title": "Deprecation", + "href": "/docs/errors/deprecation" }, { - "title": "Phone Number", - "href": "/docs/references/javascript/phone-number" + "title": "Domains", + "href": "/docs/errors/domains" }, { - "title": "Sign In", - "collapse": true, - "items": [ - [ - { - "title": "Sign In", - "href": "/docs/references/javascript/sign-in/sign-in" - }, - { - "title": "First Factor", - "href": "/docs/references/javascript/sign-in/first-factor" - }, - { - "title": "Second Factor", - "href": "/docs/references/javascript/sign-in/second-factor" - }, - { - "title": "AuthenticateWith", - "href": "/docs/references/javascript/sign-in/authenticate-with" - } - ] - ] + "title": "Entitlements", + "href": "/docs/errors/entitlements" }, { - "title": "Sign Up", - "collapse": true, - "items": [ - [ - { - "title": "Sign Up", - "href": "/docs/references/javascript/sign-up/sign-up" - }, - { - "title": "AuthenticateWith", - "href": "/docs/references/javascript/sign-up/authenticate-with" - }, - { - "title": "Verification", - "href": "/docs/references/javascript/sign-up/verification" - }, - { - "title": "Email Verification", - "href": "/docs/references/javascript/sign-up/email-verification" - }, - { - "title": "Phone Verification", - "href": "/docs/references/javascript/sign-up/phone-verification" - }, - { - "title": "Web3 Verification", - "href": "/docs/references/javascript/sign-up/web3-verification" - } - ] - ] + "title": "Features", + "href": "/docs/errors/features" }, { - "title": "Web3 Wallet", - "collapse": true, - "items": [ - [ - { - "title": "Web3 Wallet", - "href": "/docs/references/javascript/web3-wallet/web3-wallet" - }, - { - "title": "Verification", - "href": "/docs/references/javascript/web3-wallet/verification" - } - ] - ] + "title": "Forms", + "href": "/docs/errors/forms" }, { - "title": "Types", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/references/javascript/types/overview" - }, - { - "title": "ClerkAPIError", - "href": "/docs/references/javascript/types/clerk-api-error" - }, - { - "title": "ClerkPaginatedResponse", - "href": "/docs/references/javascript/types/clerk-paginated-response" - }, - { - "title": "CustomPage", - "href": "/docs/references/javascript/types/custom-page" - }, - { - "title": "EmailLinkError", - "href": "/docs/references/javascript/types/email-link-error" - }, - { - "title": "DeletedObject", - "href": "/docs/references/javascript/types/deleted-object" - }, - { - "title": "Metadata types", - "href": "/docs/references/javascript/types/metadata" - }, - { - "title": "OAuth types", - "href": "/docs/references/javascript/types/oauth" - }, - { - "title": "PasskeyResource", - "href": "/docs/references/javascript/types/passkey-resource" - }, - { - "title": "PublicUserData", - "href": "/docs/references/javascript/types/public-user-data" - }, - { - "title": "SessionStatus", - "href": "/docs/references/javascript/types/session-status" - }, - { - "title": "SessionVerification", - "href": "/docs/references/javascript/types/session-verification" - }, - { - "title": "SignInFirstFactor", - "href": "/docs/references/javascript/types/sign-in-first-factor" - }, - { - "title": "SignInSecondFactor", - "href": "/docs/references/javascript/types/sign-in-second-factor" - }, - { - "title": "SignInRedirectOptions", - "href": "/docs/references/javascript/types/sign-in-redirect-options" - }, - { - "title": "SignUpRedirectOptions", - "href": "/docs/references/javascript/types/sign-up-redirect-options" - }, - { - "title": "SignInInitialValues", - "href": "/docs/references/javascript/types/sign-in-initial-values" - }, - { - "title": "SignUpInitialValues", - "href": "/docs/references/javascript/types/sign-up-initial-values" - }, - { - "title": "RedirectOptions", - "href": "/docs/references/javascript/types/redirect-options" - }, - { - "title": "Verification", - "href": "/docs/references/javascript/types/verification" - } - ] - ] + "title": "Identifications", + "href": "/docs/errors/identifications" + }, + { + "title": "Passkeys", + "href": "/docs/errors/passkeys" + }, + { + "title": "Rate Limits", + "href": "/docs/errors/rate-limits" + }, + { + "title": "Sign-in", + "href": "/docs/errors/sign-in" + }, + { + "title": "Sign-up", + "href": "/docs/errors/sign-up" + }, + { + "title": "Sign-in-tokens", + "href": "/docs/errors/sign-in-tokens" } ] ] }, { - "title": "JS Backend SDK", + "title": "Troubleshooting", "collapse": true, - "icon": "clerk", "items": [ [ { "title": "Overview", - "href": "/docs/references/backend/overview" + "href": "/docs/troubleshooting/overview" }, { - "title": "User", - "collapse": true, + "title": "Email Deliverability", + "href": "/docs/troubleshooting/email-deliverability" + }, + { + "title": "Script Loading", + "href": "/docs/troubleshooting/script-loading" + }, + { + "title": "Help & Support", "items": [ [ { - "title": "`getUserList()`", - "wrap": false, - "href": "/docs/references/backend/user/get-user-list" - }, - { - "title": "`getUser()`", - "wrap": false, - "href": "/docs/references/backend/user/get-user" - }, - { - "title": "`getCount()`", - "wrap": false, - "href": "/docs/references/backend/user/get-count" - }, - { - "title": "`getOrganizationMembershipList()`", - "wrap": false, - "href": "/docs/references/backend/user/get-organization-membership-list" - }, - { - "title": "`getUserOAuthAccessToken()`", - "wrap": false, - "href": "/docs/references/backend/user/get-user-oauth-access-token" - }, - { - "title": "`createUser()`", - "wrap": false, - "href": "/docs/references/backend/user/create-user" - }, - { - "title": "`verifyPassword()`", - "wrap": false, - "href": "/docs/references/backend/user/verify-password" - }, - { - "title": "`banUser()`", - "wrap": false, - "href": "/docs/references/backend/user/ban-user" - }, - { - "title": "`unbanUser()`", - "wrap": false, - "href": "/docs/references/backend/user/unban-user" - }, - { - "title": "`lockUser()`", - "wrap": false, - "href": "/docs/references/backend/user/lock-user" - }, - { - "title": "`unlockUser()`", - "wrap": false, - "href": "/docs/references/backend/user/unlock-user" - }, - { - "title": "`updateUser()`", - "wrap": false, - "href": "/docs/references/backend/user/update-user" - }, - { - "title": "`updateUserProfileImage()`", - "wrap": false, - "href": "/docs/references/backend/user/update-user-profile-image" - }, - { - "title": "`updateUserMetadata()`", - "wrap": false, - "href": "/docs/references/backend/user/update-user-metadata" - }, - { - "title": "`deleteUser()`", - "wrap": false, - "href": "/docs/references/backend/user/delete-user" - }, - { - "title": "`disableUserMFA()`", - "wrap": false, - "href": "/docs/references/backend/user/disable-user-mfa" + "title": "Create a minimal reproduction", + "href": "/docs/troubleshooting/create-a-minimal-reproduction" }, { - "title": "`verifyTOTP()`", - "wrap": false, - "href": "/docs/references/backend/user/verify-totp" + "title": "Community Discord", + "href": "https://clerk.com/discord" }, { - "title": "`deleteUserProfileImage()`", - "wrap": false, - "href": "/docs/references/backend/user/delete-user-profile-image" + "title": "Contact Support", + "href": "/support", + "target": "_blank" } ] ] + } + ] + ] + }, + { + "title": "Upgrade Guides", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/upgrade-guides/overview" }, { - "title": "Organization", - "collapse": true, + "title": "Long term support policy", + "href": "/docs/upgrade-guides/long-term-support" + }, + { + "title": "Clerk SDK versioning", + "href": "/docs/upgrade-guides/sdk-versioning" + }, + { + "title": "Upgrading to @clerk/nextjs v6", + "href": "/docs/upgrade-guides/nextjs/v6" + }, + { + "title": "Upgrading to Core 2", "items": [ [ { - "title": "`getOrganization()`", - "wrap": false, - "href": "/docs/references/backend/organization/get-organization" - }, - { - "title": "`getOrganizationList()`", - "wrap": false, - "href": "/docs/references/backend/organization/get-organization-list" - }, - { - "title": "`getOrganizationMembershipList()`", - "wrap": false, - "href": "/docs/references/backend/organization/get-organization-membership-list" - }, - { - "title": "`getOrganizationInvitationList()`", - "wrap": false, - "href": "/docs/references/backend/organization/get-organization-invitation-list" - }, - { - "title": "`createOrganization()`", - "wrap": false, - "href": "/docs/references/backend/organization/create-organization" - }, - { - "title": "`createOrganizationMembership()`", - "wrap": false, - "href": "/docs/references/backend/organization/create-organization-membership" - }, - { - "title": "`createOrganizationInvitation()`", - "wrap": false, - "href": "/docs/references/backend/organization/create-organization-invitation" - }, - { - "title": "`updateOrganization()`", - "wrap": false, - "href": "/docs/references/backend/organization/update-organization" - }, - { - "title": "`updateOrganizationLogo()`", - "wrap": false, - "href": "/docs/references/backend/organization/update-organization-logo" - }, - { - "title": "`updateOrganizationMembership()`", - "wrap": false, - "href": "/docs/references/backend/organization/update-organization-membership" - }, - { - "title": "`updateOrganizationMetadata()`", - "wrap": false, - "href": "/docs/references/backend/organization/update-organization-metadata" - }, - { - "title": "`updateOrganizationMembershipMetadata()`", - "wrap": false, - "href": "/docs/references/backend/organization/update-organization-membership-metadata" - }, - { - "title": "`deleteOrganization()`", - "wrap": false, - "href": "/docs/references/backend/organization/delete-organization" + "title": "Overview", + "href": "/docs/upgrade-guides/core-2/overview" }, { - "title": "`deleteOrganizationMembership()`", - "wrap": false, - "href": "/docs/references/backend/organization/delete-organization-membership" + "title": "Component redesign", + "href": "/docs/upgrade-guides/core-2/component-redesign" }, { - "title": "`revokeOrganizationInvitation()`", - "wrap": false, - "href": "/docs/references/backend/organization/revoke-organization-invitation" + "title": "SDK Guides", + "collapse": true, + "items": [ + [ + { + "title": "Next.js", + "href": "/docs/upgrade-guides/core-2/nextjs", + "icon": "nextjs" + }, + { + "title": "Remix", + "href": "/docs/upgrade-guides/core-2/remix", + "icon": "remix" + }, + { + "title": "Expo", + "href": "/docs/upgrade-guides/core-2/expo" + }, + { + "title": "Fastify", + "href": "/docs/upgrade-guides/core-2/fastify" + }, + { + "title": "React", + "href": "/docs/upgrade-guides/core-2/react", + "icon": "react" + }, + { + "title": "Node", + "href": "/docs/upgrade-guides/core-2/node" + }, + { + "title": "Backend", + "href": "/docs/upgrade-guides/core-2/backend" + }, + { + "title": "Chrome Extension", + "href": "/docs/upgrade-guides/core-2/chrome-extension" + }, + { + "title": "JavaScript", + "href": "/docs/upgrade-guides/core-2/javascript", + "icon": "javascript" + } + ] + ] } ] ] }, { - "title": "Allowlist Identifiers", - "collapse": true, + "title": "Upgrading to Core 1", "items": [ [ { - "title": "`getAllowlistIdentifierList()`", - "wrap": false, - "href": "/docs/references/backend/allowlist/get-allowlist-identifier-list" - }, - { - "title": "`createAllowlistIdentifier()`", - "wrap": false, - "href": "/docs/references/backend/allowlist/create-allowlist-identifier" - }, - { - "title": "`deleteAllowlistIdentifier()`", - "wrap": false, - "href": "/docs/references/backend/allowlist/delete-allowlist-identifier" + "title": "Overview", + "href": "/docs/upgrade-guides/upgrading-from-v2-to-v3" } ] ] }, { - "title": "Sessions", - "collapse": true, + "title": "Upgrading from Node to Express SDK", "items": [ [ { - "title": "`getSession()`", - "wrap": false, - "href": "/docs/references/backend/sessions/get-session" - }, - { - "title": "`getSessionList()`", - "wrap": false, - "href": "/docs/references/backend/sessions/get-session-list" - }, - { - "title": "`getToken()`", - "wrap": false, - "href": "/docs/references/backend/sessions/get-token" - }, - { - "title": "`verifySession()`", - "wrap": false, - "href": "/docs/references/backend/sessions/verify-session" - }, - { - "title": "`revokeSession()`", - "wrap": false, - "href": "/docs/references/backend/sessions/revoke-session" + "title": "Overview", + "href": "/docs/upgrade-guides/node-to-express" } ] ] }, { - "title": "Client", - "collapse": true, + "title": "Dashboard", "items": [ [ { - "title": "`getClient()`", - "wrap": false, - "href": "/docs/references/backend/client/get-client" + "title": "API Key Changes", + "href": "/docs/upgrade-guides/api-keys" }, { - "title": "`getClientList()`", - "wrap": false, - "href": "/docs/references/backend/client/get-client-list" + "title": "URL-based session syncing", + "href": "/docs/upgrade-guides/url-based-session-syncing" }, { - "title": "`verifyClient()`", - "wrap": false, - "href": "/docs/references/backend/client/verify-client" + "title": "Progressive Sign up", + "href": "/docs/upgrade-guides/progressive-sign-up" } ] ] + } + ] + ] + }, + { + "title": "Deployments & Migrations", + "collapse": true, + "items": [ + [ + { + "title": "Instances / Environments", + "href": "/docs/deployments/environments" }, { - "title": "Invitations", - "collapse": true, + "title": "Clerk environment variables", + "href": "/docs/deployments/clerk-environment-variables" + }, + { + "title": "Deployment", "items": [ [ { - "title": "`getInvitationList()`", - "wrap": false, - "href": "/docs/references/backend/invitations/get-invitation-list" + "title": "Deploy to production", + "href": "/docs/deployments/overview" }, { - "title": "`createInvitation()`", - "wrap": false, - "href": "/docs/references/backend/invitations/create-invitation" + "title": "Deploy to Vercel", + "href": "/docs/deployments/deploy-to-vercel" }, { - "title": "`revokeInvitation()`", - "wrap": false, - "href": "/docs/references/backend/invitations/revoke-invitation" - } - ] - ] - }, - { - "title": "Redirect Urls", - "collapse": true, - "items": [ - [ + "title": "Deploy behind a proxy", + "href": "/docs/deployments/deploy-behind-a-proxy" + }, { - "title": "`getRedirectUrl()`", - "wrap": false, - "href": "/docs/references/backend/redirect-urls/get-redirect-url" + "title": "Set up a staging environment", + "href": "/docs/deployments/set-up-staging" }, { - "title": "`getRedirectUrlList()`", - "wrap": false, - "href": "/docs/references/backend/redirect-urls/get-redirect-url-list" + "title": "Deploy a Chrome Extension to production", + "href": "/docs/deployments/deploy-chrome-extension" }, { - "title": "`createRedirectUrl()`", - "wrap": false, - "href": "/docs/references/backend/redirect-urls/create-redirect-url" + "title": "Deploy an Expo app to production", + "href": "/docs/deployments/deploy-expo" }, { - "title": "`deleteRedirectUrl()`", - "wrap": false, - "href": "/docs/references/backend/redirect-urls/delete-redirect-url" + "title": "Deploy an Astro app to production", + "href": "/docs/deployments/deploy-astro" + }, + { + "title": "Set up a preview environment", + "href": "/docs/deployments/set-up-preview-environment" + }, + { + "title": "Changing domains", + "href": "/docs/deployments/changing-domains" } ] ] }, { - "title": "Email addresses", - "collapse": true, + "title": "Migrations", "items": [ [ { - "title": "`getEmailAddress()`", - "wrap": false, - "href": "/docs/references/backend/email-addresses/get-email-address" + "title": "Migrate to Clerk", + "href": "/docs/deployments/migrate-overview" }, { - "title": "`createEmailAddress()`", - "wrap": false, - "href": "/docs/references/backend/email-addresses/create-email-address" + "title": "Migrate from Firebase", + "href": "/docs/deployments/migrate-from-firebase" }, { - "title": "`updateEmailAddress()`", - "wrap": false, - "href": "/docs/references/backend/email-addresses/update-email-address" + "title": "Migrate from Cognito", + "href": "/docs/deployments/migrate-from-cognito" }, { - "title": "`deleteEmailAddress()`", - "wrap": false, - "href": "/docs/references/backend/email-addresses/delete-email-address" + "title": "Exporting user data", + "href": "/docs/deployments/exporting-users" } ] ] }, { - "title": "Phone numbers", - "collapse": true, + "title": "Cookie Information", "items": [ [ { - "title": "`getPhoneNumber()`", - "wrap": false, - "href": "/docs/references/backend/phone-numbers/get-phone-number" - }, - { - "title": "`createPhoneNumber()`", - "wrap": false, - "href": "/docs/references/backend/phone-numbers/create-phone-number" - }, - { - "title": "`updatePhoneNumber()`", - "wrap": false, - "href": "/docs/references/backend/phone-numbers/update-phone-number" - }, - { - "title": "`deletePhoneNumber()`", - "wrap": false, - "href": "/docs/references/backend/phone-numbers/delete-phone-number" + "title": "Clerk Cookie Information", + "href": "/docs/deployments/clerk-cookies" } ] ] + } + ] + ] + } + ] + ] + } + ], + [ + { + "title": "Advanced", + "items": [ + [ + { + "title": "How Clerk works", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/how-clerk-works/overview" }, { - "title": "SAML connections", - "collapse": true, + "title": "Cookies", + "href": "/docs/how-clerk-works/cookies" + }, + { + "title": "Tokens & signatures", + "href": "/docs/how-clerk-works/tokens-signatures" + } + ] + ] + }, + { + "title": "Integrations", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/integrations/overview" + }, + { + "title": "Databases", "items": [ [ { - "title": "`getSamlConnectionList()`", - "wrap": false, - "href": "/docs/references/backend/saml-connections/get-saml-connection-list" + "title": "Convex", + "href": "/docs/integrations/databases/convex" + }, + { + "title": "Fauna", + "href": "/docs/integrations/databases/fauna" + }, + { + "title": "Firebase", + "href": "/docs/integrations/databases/firebase" + }, + { + "title": "Grafbase", + "href": "/docs/integrations/databases/grafbase" + }, + { + "title": "Hasura", + "href": "/docs/integrations/databases/hasura" }, { - "title": "`getSamlConnection()`", - "wrap": false, - "href": "/docs/references/backend/saml-connections/get-saml-connection" + "title": "InstantDB", + "href": "/docs/integrations/databases/instantdb" }, { - "title": "`createSamlConnection()`", - "wrap": false, - "href": "/docs/references/backend/saml-connections/create-saml-connection" + "title": "Nhost", + "href": "/docs/integrations/databases/nhost" }, { - "title": "`updateSamlConnection()`", - "wrap": false, - "href": "/docs/references/backend/saml-connections/update-saml-connection" + "title": "Supabase", + "href": "/docs/integrations/databases/supabase" }, { - "title": "`deleteSamlConnection()`", - "wrap": false, - "href": "/docs/references/backend/saml-connections/delete-saml-connection" + "title": "Neon", + "href": "/docs/integrations/databases/neon" } ] ] }, { - "title": "Sign-in tokens", - "collapse": true, + "title": "Analytics", "items": [ [ { - "title": "`createSignInToken()`", - "wrap": false, - "href": "/docs/references/backend/sign-in-tokens/create-sign-in-token" - }, - { - "title": "`revokeSignInToken()`", - "wrap": false, - "href": "/docs/references/backend/sign-in-tokens/revoke-sign-in-token" + "title": "Google Analytics", + "href": "/docs/integrations/analytics/google-analytics" } ] ] + } + ] + ] + }, + { + "title": "Advanced Usage", + "collapse": true, + "items": [ + [ + { + "title": "Clerk as an OAuth2 Provider", + "href": "/docs/advanced-usage/clerk-idp" }, { - "title": "Testing Tokens", - "collapse": true, - "items": [ - [ - { - "title": "`createTestingToken()`", - "wrap": false, - "href": "/docs/references/backend/testing-tokens/create-testing-token" - } - ] - ] + "title": "Authentication across different domains", + "href": "/docs/advanced-usage/satellite-domains" }, { - "title": "`authenticateRequest()`", - "wrap": false, - "href": "/docs/references/backend/authenticate-request" + "title": "Proxying the Clerk Frontend API", + "href": "/docs/advanced-usage/using-proxies" + } + ] + ] + }, + { + "title": "Security & Privacy", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/security/overview" }, { - "title": "`verifyToken()`", - "wrap": false, - "href": "/docs/references/backend/verify-token" + "title": "Vulnerability disclosure policy", + "href": "/docs/security/vulnerability-disclosure-policy" }, { - "title": "Types", - "collapse": true, + "title": "XSS leak protection", + "href": "/docs/security/xss-leak-protection" + }, + { + "title": "CSRF protection", + "href": "/docs/security/csrf-protection" + }, + { + "title": "CSP Headers", + "href": "/docs/security/clerk-csp" + }, + { + "title": "Fixation protection", + "href": "/docs/security/fixation-protection" + }, + { + "title": "Password protection and rules", + "href": "/docs/security/password-protection" + }, + { + "title": "Clerk Telemetry", + "href": "/docs/telemetry" + }, + { + "title": "Protect accounts from attacks", "items": [ [ { - "title": "`Auth` object", - "href": "/docs/references/backend/types/auth-object" - }, - { - "title": "Backend `AllowlistIdentifier` object", - "href": "/docs/references/backend/types/backend-allowlist-identifier" - }, - { - "title": "Backend `Client` object", - "href": "/docs/references/backend/types/backend-client" - }, - { - "title": "Backend `Invitation` object", - "href": "/docs/references/backend/types/backend-invitation" - }, - { - "title": "Backend `Organization` object", - "href": "/docs/references/backend/types/backend-organization" + "title": "Brute force attacks and locking user accounts", + "href": "/docs/security/user-lock-guide" }, { - "title": "Backend `OrganizationInvitation` object", - "href": "/docs/references/backend/types/backend-organization-invitation" + "title": "Protect sign ups from bots", + "href": "/docs/security/bot-protection" }, { - "title": "Backend `OrganizationMembership` object", - "href": "/docs/references/backend/types/backend-organization-membership" + "title": "Customize max sign-in attempts and duration of of user lockout", + "href": "/docs/security/customize-user-lockout" }, { - "title": "Backend `Session` object", - "href": "/docs/references/backend/types/backend-session" + "title": "Unlock accounts from the Clerk Dashboard", + "href": "/docs/security/unlock-user-accounts" }, { - "title": "Backend `RedirectURL` object", - "href": "/docs/references/backend/types/backend-redirect-url" + "title": "Programmatically lock and unlock accounts", + "href": "/docs/security/programmatically-lock-user-accounts" }, { - "title": "Backend `User` object", - "href": "/docs/references/backend/types/backend-user" + "title": "Protect email link sign-ins and sign-ups", + "href": "/docs/security/email-link-protection" }, { - "title": "`PaginatedResourceResponse`", - "href": "/docs/references/backend/types/paginated-resource-response" + "title": "Unauthorized sign-in", + "href": "/docs/security/unauthorized-sign-in" } ] ] @@ -3398,46 +3313,104 @@ ] }, { - "title": "SDK Development", + "title": "Custom Flows", "collapse": true, - "icon": "code-bracket", "items": [ [ { "title": "Overview", - "href": "/docs/references/sdk/overview" - }, - { - "title": "Terminology", - "href": "/docs/references/sdk/terminology" - }, - { - "title": "Philosophy", - "href": "/docs/references/sdk/philosophy" + "href": "/docs/custom-flows/overview" }, { - "title": "Conventions", - "href": "/docs/references/sdk/conventions" + "title": "Error handling", + "href": "/docs/custom-flows/error-handling" }, { - "title": "SDK Types", - "href": "/docs/references/sdk/types" + "title": "Authentication", + "items": [ + [ + { + "title": "Email & password", + "href": "/docs/custom-flows/email-password" + }, + { + "title": "Email / SMS OTP", + "href": "/docs/custom-flows/email-sms-otp" + }, + { + "title": "Email links", + "href": "/docs/custom-flows/email-links" + }, + { + "title": "Email & password + MFA", + "href": "/docs/custom-flows/email-password-mfa" + }, + { + "title": "Passkeys", + "href": "/docs/custom-flows/passkeys" + }, + { + "title": "Google One Tap", + "href": "/docs/custom-flows/google-one-tap" + }, + { + "title": "OAuth connections", + "href": "/docs/custom-flows/oauth-connections" + }, + { + "title": "Enterprise connections", + "href": "/docs/custom-flows/enterprise-connections" + }, + { + "title": "Sign out", + "href": "/docs/custom-flows/sign-out" + }, + { + "title": "Sign-up with application invitations", + "href": "/docs/custom-flows/invitations" + }, + { + "title": "Embedded email links", + "href": "/docs/custom-flows/embedded-email-links" + }, + { + "title": "Multi-session applications", + "href": "/docs/custom-flows/multi-session-applications" + }, + { + "title": "Bot sign-up protection", + "href": "/docs/custom-flows/bot-sign-up-protection" + } + ] + ] }, { - "title": "Guides", + "title": "Account updates", "items": [ [ { - "title": "Frontend-only", - "href": "/docs/references/sdk/frontend-only" + "title": "Forgot password", + "href": "/docs/custom-flows/forgot-password" }, { - "title": "Backend-only", - "href": "/docs/references/sdk/backend-only" + "title": "User impersonation", + "href": "/docs/custom-flows/user-impersonation" }, { - "title": "Fullstack", - "href": "/docs/references/sdk/fullstack" + "title": "Add email", + "href": "/docs/custom-flows/add-email" + }, + { + "title": "Add phone", + "href": "/docs/custom-flows/add-phone" + }, + { + "title": "Manage SMS-based MFA", + "href": "/docs/custom-flows/manage-sms-based-mfa" + }, + { + "title": "Manage TOTP-based MFA", + "href": "/docs/custom-flows/manage-totp-based-mfa" } ] ] diff --git a/docs/manifest.schema.json b/docs/manifest.schema.json index 3773be9eef..dacf6e39d4 100644 --- a/docs/manifest.schema.json +++ b/docs/manifest.schema.json @@ -83,6 +83,10 @@ }, "icon": { "$ref": "#/$defs/icon" + }, + "selectable": { + "type": "boolean", + "default": false } } }, @@ -140,7 +144,8 @@ "vue", "x", "expo", - "nuxt" + "nuxt", + "fastify" ] } } From d754879ba46bc4107282c9e9699a053fccbdf902 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Mon, 13 Jan 2025 10:40:31 +0200 Subject: [PATCH 24/82] feat: Update nextjs quickstart for keyless (#1870) --- docs/quickstarts/nextjs.mdx | 444 +++++++++++++++++++++++------------- 1 file changed, 291 insertions(+), 153 deletions(-) diff --git a/docs/quickstarts/nextjs.mdx b/docs/quickstarts/nextjs.mdx index 1c6e51bce7..e4bd979479 100644 --- a/docs/quickstarts/nextjs.mdx +++ b/docs/quickstarts/nextjs.mdx @@ -24,159 +24,297 @@ description: Add authentication and user management to your Next.js app with Cle - Add `` and Clerk components - - ## Install `@clerk/nextjs` - - Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. - - Run the following command to install the SDK: - - - ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs - ``` - - ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs - ``` - - ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs - ``` - - - ## Set your Clerk API keys - - - - - - - - Add the following keys to your `.env.local` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. - - - - 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys){{ track: 'exp_create_account_nextjs_quickstart' }} page. - 1. In the **Quick Copy** section, copy your Clerk Publishable and Secret Keys. - 1. Paste your keys into your `.env.local` file. - - The final result should resemble the following: - - - - ```env {{ filename: '.env.local' }} - NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} - CLERK_SECRET_KEY={{secret}} - ``` - - ## Add `clerkMiddleware()` to your app - - [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: - - 1. Create a `middleware.ts` file. - - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. - 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: - - ```tsx {{ filename: 'middleware.ts' }} - import { clerkMiddleware } from '@clerk/nextjs/server' - - export default clerkMiddleware() - - export const config = { - matcher: [ - // Skip Next.js internals and all static files, unless found in search params - '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', - // Always run for API routes - '/(api|trpc)(.*)', - ], - } - ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. - - ## Add `` and Clerk components to your app - - - - You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#what-are-control-components). Create a header using the following components: - - - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. - - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. - - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. - - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in). - - Select your preferred router to learn how to make this data available across your entire app: - - - ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import './globals.css' - - export default function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - - -

- - - - - - -
-
{children}
- - - - ) - } - ``` - - ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} - import '@/styles/globals.css' - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import type { AppProps } from 'next/app' - - function MyApp({ Component, pageProps }: AppProps) { - return ( - - - - - - - - - - ) - } - - export default MyApp - ``` - - - ## Create your first user - - Run your project with the following command: - - - ```bash {{ filename: 'terminal' }} - npm run dev - ``` - - ```bash {{ filename: 'terminal' }} - yarn dev - ``` - - ```bash {{ filename: 'terminal' }} - pnpm dev - ``` - - - Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. - + + + + ## Install `@clerk/nextjs` + + Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + + Run the following command to install the SDK: + + + ```bash {{ filename: 'terminal' }} + npm install @clerk/nextjs + ``` + + ```bash {{ filename: 'terminal' }} + yarn add @clerk/nextjs + ``` + + ```bash {{ filename: 'terminal' }} + pnpm add @clerk/nextjs + ``` + + + ## Set your Clerk API keys + + + + + + + + Add the following keys to your `.env.local` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. + + + + 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys){{ track: 'exp_create_account_nextjs_quickstart' }} page. + 1. In the **Quick Copy** section, copy your Clerk Publishable and Secret Keys. + 1. Paste your keys into your `.env.local` file. + + The final result should resemble the following: + + + + ```env {{ filename: '.env.local' }} + NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} + CLERK_SECRET_KEY={{secret}} + ``` + + ## Add `clerkMiddleware()` to your app + + [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + + 1. Create a `middleware.ts` file. + - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. + - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. + 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: + + ```tsx {{ filename: 'middleware.ts' }} + import { clerkMiddleware } from '@clerk/nextjs/server' + + export default clerkMiddleware() + + export const config = { + matcher: [ + // Skip Next.js internals and all static files, unless found in search params + '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', + // Always run for API routes + '/(api|trpc)(.*)', + ], + } + ``` + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. + + ## Add `` and Clerk components to your app + + + + You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#what-are-control-components). Create a header using the following components: + + - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. + - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. + - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. + - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in). + + Select your preferred router to learn how to make this data available across your entire app: + + + ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import './globals.css' + + export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + + +
+ + + + + + +
+
{children}
+ + +
+ ) + } + ``` + + ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} + import '@/styles/globals.css' + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import type { AppProps } from 'next/app' + + function MyApp({ Component, pageProps }: AppProps) { + return ( + + + + + + + + + + ) + } + + export default MyApp + ``` +
+ + ## Create your first user + + Run your project with the following command: + + + ```bash {{ filename: 'terminal' }} + npm run dev + ``` + + ```bash {{ filename: 'terminal' }} + yarn dev + ``` + + ```bash {{ filename: 'terminal' }} + pnpm dev + ``` + + + Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. +
+
+ + + > [!IMPORTANT] + > [Keyless is currently on beta](/docs/keyless). If you would like to enable this feature set this environment variable `NEXT_PUBLIC_CLERK_ENABLE_KEYLESS=true`. + + + ## Install `@clerk/nextjs` + + Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + + Run the following command to install the SDK: + + + ```bash {{ filename: 'terminal' }} + npm install @clerk/nextjs + ``` + + ```bash {{ filename: 'terminal' }} + yarn add @clerk/nextjs + ``` + + ```bash {{ filename: 'terminal' }} + pnpm add @clerk/nextjs + ``` + + + ## Add `clerkMiddleware()` to your app + + [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + + 1. Create a `middleware.ts` file. + - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. + - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. + 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: + + ```tsx {{ filename: 'middleware.ts' }} + import { clerkMiddleware } from '@clerk/nextjs/server' + + export default clerkMiddleware() + + export const config = { + matcher: [ + // Skip Next.js internals and all static files, unless found in search params + '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', + // Always run for API routes + '/(api|trpc)(.*)', + ], + } + ``` + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. + + ## Add `` and Clerk components to your app + + + + You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#what-are-control-components). Create a header using the following components: + + - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. + - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. + - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. + - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in). + + Select your preferred router to learn how to make this data available across your entire app: + + + ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import './globals.css' + + export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + + +
+ + + + + + +
+
{children}
+ + +
+ ) + } + ``` + + ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} + import '@/styles/globals.css' + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import type { AppProps } from 'next/app' + + function MyApp({ Component, pageProps }: AppProps) { + return ( + + + + + + + + + + ) + } + + export default MyApp + ``` +
+ + ## Create your first user + + Run your project with the following command: + + + ```bash {{ filename: 'terminal' }} + npm run dev + ``` + + ```bash {{ filename: 'terminal' }} + yarn dev + ``` + + ```bash {{ filename: 'terminal' }} + pnpm dev + ``` + + + Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. +
+
+
## Next steps From 61b6397c1230415bcfc8e3eda97b3cbd0df60591 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Mon, 13 Jan 2025 10:47:46 +0200 Subject: [PATCH 25/82] Add keyless to manifest --- docs/manifest.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/manifest.json b/docs/manifest.json index ddee60a42e..2987f51011 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1021,6 +1021,11 @@ "title": "Development", "items": [ [ + { + "title": "Keyless", + "tag": "(Beta)", + "href": "/docs/keyless" + }, { "title": "Multi-tenant architecture", "href": "/docs/guides/multi-tenant-architecture" From be8237875f77189d8849a01e9403943f6b883ce3 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Mon, 13 Jan 2025 10:52:16 +0200 Subject: [PATCH 26/82] add link to nextjs quickstart --- docs/keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index d2188826de..1c16d8f23c 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -6,7 +6,7 @@ description: Develop locally without requiring a Clerk account. **Keyless Mode** allows you to try out Clerk in your local development environment without having to sign up for a Clerk account. > [!WARNING] -> Keyless mode is only available in Next.js projects when developing locally. If you attempt to build your project for production, Clerk will throw an error. +> Keyless mode is only available in [Next.js](/docs/quickstarts/nextjs) projects when developing locally. If you attempt to build your project for production, Clerk will throw an error. ## How does it work? From 5c88ce5351212c647e3462c146ad1ff61d7e70e0 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Tue, 14 Jan 2025 00:03:39 +0800 Subject: [PATCH 27/82] Clean up for drop down filter view --- docs/manifest.json | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index b143770e2e..9e1b508d28 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -464,8 +464,7 @@ [ { "title": "Quickstart", - "href": "/docs/quickstarts/javascript", - "icon": "javascript" + "href": "/docs/quickstarts/javascript" }, { "title": "Overview", @@ -1229,7 +1228,7 @@ "items": [ [ { - "title": "Nuxt", + "title": "Quickstart", "href": "/docs/quickstarts/nuxt" }, { "title": "Available Methods", "href": "/docs/references/nuxt/overview" }, @@ -1360,8 +1359,15 @@ { "title": "Python", "icon": "python", - "href": "https://github.com/clerk/clerk-sdk-python/blob/main/README.md", - "target": "_blank" + "items": [ + [ + { + "title": "Quickstart", + "href": "https://github.com/clerk/clerk-sdk-python/blob/main/README.md", + "target": "_blank" + } + ] + ] }, { "title": "JS Backend SDK", @@ -1369,7 +1375,7 @@ "items": [ [ { - "title": "Overview", + "title": "Quickstart", "href": "/docs/references/backend/overview" }, { From 63251eedcf686d9a6029fc5f227c4d4b33bbb058 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Tue, 14 Jan 2025 02:01:20 +0800 Subject: [PATCH 28/82] remove wrapping as it messes up the styles --- docs/manifest.json | 119 +-------------------------------------------- 1 file changed, 2 insertions(+), 117 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 9e1b508d28..fecfe931ea 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -317,7 +317,6 @@ [ { "title": "`clerkMiddleware()`", - "wrap": false, "href": "/docs/references/nextjs/clerk-middleware" } ] @@ -329,12 +328,10 @@ [ { "title": "`auth()`", - "wrap": false, "href": "/docs/references/nextjs/auth" }, { "title": "`currentUser()`", - "wrap": false, "href": "/docs/references/nextjs/current-user" }, { @@ -354,12 +351,10 @@ [ { "title": "`getAuth()`", - "wrap": false, "href": "/docs/references/nextjs/get-auth" }, { "title": "`buildClerkProps()`", - "wrap": false, "href": "/docs/references/nextjs/build-clerk-props" } ] @@ -402,53 +397,43 @@ [ { "title": "`useUser()`", - "wrap": false, "href": "/docs/references/react/use-user" }, { "title": "`useClerk()`", - "wrap": false, "href": "/docs/references/react/use-clerk" }, { "title": "`useAuth()`", - "wrap": false, "href": "/docs/references/react/use-auth" }, { "title": "`useSignIn()`", - "wrap": false, "href": "/docs/references/react/use-sign-in" }, { "title": "`useSignUp()`", - "wrap": false, "href": "/docs/references/react/use-sign-up" }, { "title": "`useSession()`", - "wrap": false, "href": "/docs/references/react/use-session" }, { "title": "`useSessionList()`", - "wrap": false, "href": "/docs/references/react/use-session-list" }, { "title": "`useOrganization()`", - "wrap": false, "href": "/docs/references/react/use-organization" }, { "title": "`useOrganizationList()`", - "wrap": false, "href": "/docs/references/react/use-organization-list" }, { "title": "`useReverification()`", "tag": "(Beta)", - "wrap": false, "href": "/docs/references/react/use-reverification" } ] @@ -987,7 +972,6 @@ [ { "title": "`rootAuthLoader()`", - "wrap": false, "href": "/docs/references/react-router/root-auth-loader" }, { @@ -1011,22 +995,18 @@ }, { "title": "``", - "wrap": false, "href": "/docs/references/remix/clerk-app" }, { "title": "SPA Mode", - "wrap": false, "href": "/docs/references/remix/spa-mode" }, { "title": "Add custom sign up and sign in pages", - "wrap": true, "href": "/docs/references/remix/custom-signup-signin-pages" }, { "title": "Read session and user data", - "wrap": true, "href": "/docs/references/remix/read-session-data" } ] @@ -1067,13 +1047,11 @@ [ { "title": "Add custom sign up and sign in pages", - "href": "/docs/references/tanstack-start/custom-signup-signin-pages", - "wrap": true + "href": "/docs/references/tanstack-start/custom-signup-signin-pages" }, { "title": "Read session and user data", - "href": "/docs/references/tanstack-start/read-session-data", - "wrap": true + "href": "/docs/references/tanstack-start/read-session-data" } ] ] @@ -1139,12 +1117,10 @@ }, { "title": "Read session and user data", - "wrap": false, "href": "/docs/references/astro/read-session-data" }, { "title": "Hybrid rendering", - "wrap": false, "href": "/docs/references/astro/hybrid-rendering" } ] @@ -1156,17 +1132,14 @@ [ { "title": "`clerkMiddleware()`", - "wrap": false, "href": "/docs/references/astro/clerk-middleware" }, { "title": "Locals", - "wrap": false, "href": "/docs/references/astro/locals" }, { "title": "Endpoints", - "wrap": false, "href": "/docs/references/astro/endpoints" } ] @@ -1178,42 +1151,34 @@ [ { "title": "`$authStore`", - "wrap": false, "href": "/docs/references/astro/auth-store" }, { "title": "`$clerkStore`", - "wrap": false, "href": "/docs/references/astro/clerk-store" }, { "title": "`$userStore`", - "wrap": false, "href": "/docs/references/astro/user-store" }, { "title": "`$signInStore`", - "wrap": false, "href": "/docs/references/astro/sign-in-store" }, { "title": "`$signUpStore`", - "wrap": false, "href": "/docs/references/astro/sign-up-store" }, { "title": "`$sessionStore`", - "wrap": false, "href": "/docs/references/astro/session-store" }, { "title": "`$sessionListStore`", - "wrap": false, "href": "/docs/references/astro/session-list-store" }, { "title": "`$organizationStore`", - "wrap": false, "href": "/docs/references/astro/organization-store" } ] @@ -1238,12 +1203,10 @@ [ { "title": "Read session and user data", - "wrap": false, "href": "/docs/references/nuxt/read-session-data" }, { "title": "Protect pages", - "wrap": false, "href": "/docs/references/nuxt/protect-pages" } ] @@ -1255,7 +1218,6 @@ [ { "title": "`clerkMiddleware()`", - "wrap": false, "href": "/docs/references/nuxt/clerk-middleware" } ] @@ -1288,42 +1250,34 @@ [ { "title": "`useUser()`", - "wrap": false, "href": "/docs/references/vue/use-user" }, { "title": "`useClerk()`", - "wrap": false, "href": "/docs/references/vue/use-clerk" }, { "title": "`useAuth()`", - "wrap": false, "href": "/docs/references/vue/use-auth" }, { "title": "`useSignIn()`", - "wrap": false, "href": "/docs/references/vue/use-sign-in" }, { "title": "`useSignUp`", - "wrap": false, "href": "/docs/references/vue/use-sign-up" }, { "title": "`useSession()`", - "wrap": false, "href": "/docs/references/vue/use-session" }, { "title": "`useSessionList()`", - "wrap": false, "href": "/docs/references/vue/use-session-list" }, { "title": "`useOrganization()`", - "wrap": false, "href": "/docs/references/vue/use-organization" } ] @@ -1385,92 +1339,74 @@ [ { "title": "`getUserList()`", - "wrap": false, "href": "/docs/references/backend/user/get-user-list" }, { "title": "`getUser()`", - "wrap": false, "href": "/docs/references/backend/user/get-user" }, { "title": "`getCount()`", - "wrap": false, "href": "/docs/references/backend/user/get-count" }, { "title": "`getOrganizationMembershipList()`", - "wrap": false, "href": "/docs/references/backend/user/get-organization-membership-list" }, { "title": "`getUserOAuthAccessToken()`", - "wrap": false, "href": "/docs/references/backend/user/get-user-oauth-access-token" }, { "title": "`createUser()`", - "wrap": false, "href": "/docs/references/backend/user/create-user" }, { "title": "`verifyPassword()`", - "wrap": false, "href": "/docs/references/backend/user/verify-password" }, { "title": "`banUser()`", - "wrap": false, "href": "/docs/references/backend/user/ban-user" }, { "title": "`unbanUser()`", - "wrap": false, "href": "/docs/references/backend/user/unban-user" }, { "title": "`lockUser()`", - "wrap": false, "href": "/docs/references/backend/user/lock-user" }, { "title": "`unlockUser()`", - "wrap": false, "href": "/docs/references/backend/user/unlock-user" }, { "title": "`updateUser()`", - "wrap": false, "href": "/docs/references/backend/user/update-user" }, { "title": "`updateUserProfileImage()`", - "wrap": false, "href": "/docs/references/backend/user/update-user-profile-image" }, { "title": "`updateUserMetadata()`", - "wrap": false, "href": "/docs/references/backend/user/update-user-metadata" }, { "title": "`deleteUser()`", - "wrap": false, "href": "/docs/references/backend/user/delete-user" }, { "title": "`disableUserMFA()`", - "wrap": false, "href": "/docs/references/backend/user/disable-user-mfa" }, { "title": "`verifyTOTP()`", - "wrap": false, "href": "/docs/references/backend/user/verify-totp" }, { "title": "`deleteUserProfileImage()`", - "wrap": false, "href": "/docs/references/backend/user/delete-user-profile-image" } ] @@ -1483,77 +1419,62 @@ [ { "title": "`getOrganization()`", - "wrap": false, "href": "/docs/references/backend/organization/get-organization" }, { "title": "`getOrganizationList()`", - "wrap": false, "href": "/docs/references/backend/organization/get-organization-list" }, { "title": "`getOrganizationMembershipList()`", - "wrap": false, "href": "/docs/references/backend/organization/get-organization-membership-list" }, { "title": "`getOrganizationInvitationList()`", - "wrap": false, "href": "/docs/references/backend/organization/get-organization-invitation-list" }, { "title": "`createOrganization()`", - "wrap": false, "href": "/docs/references/backend/organization/create-organization" }, { "title": "`createOrganizationMembership()`", - "wrap": false, "href": "/docs/references/backend/organization/create-organization-membership" }, { "title": "`createOrganizationInvitation()`", - "wrap": false, "href": "/docs/references/backend/organization/create-organization-invitation" }, { "title": "`updateOrganization()`", - "wrap": false, "href": "/docs/references/backend/organization/update-organization" }, { "title": "`updateOrganizationLogo()`", - "wrap": false, "href": "/docs/references/backend/organization/update-organization-logo" }, { "title": "`updateOrganizationMembership()`", - "wrap": false, "href": "/docs/references/backend/organization/update-organization-membership" }, { "title": "`updateOrganizationMetadata()`", - "wrap": false, "href": "/docs/references/backend/organization/update-organization-metadata" }, { "title": "`updateOrganizationMembershipMetadata()`", - "wrap": false, "href": "/docs/references/backend/organization/update-organization-membership-metadata" }, { "title": "`deleteOrganization()`", - "wrap": false, "href": "/docs/references/backend/organization/delete-organization" }, { "title": "`deleteOrganizationMembership()`", - "wrap": false, "href": "/docs/references/backend/organization/delete-organization-membership" }, { "title": "`revokeOrganizationInvitation()`", - "wrap": false, "href": "/docs/references/backend/organization/revoke-organization-invitation" } ] @@ -1566,17 +1487,14 @@ [ { "title": "`getAllowlistIdentifierList()`", - "wrap": false, "href": "/docs/references/backend/allowlist/get-allowlist-identifier-list" }, { "title": "`createAllowlistIdentifier()`", - "wrap": false, "href": "/docs/references/backend/allowlist/create-allowlist-identifier" }, { "title": "`deleteAllowlistIdentifier()`", - "wrap": false, "href": "/docs/references/backend/allowlist/delete-allowlist-identifier" } ] @@ -1589,27 +1507,22 @@ [ { "title": "`getSession()`", - "wrap": false, "href": "/docs/references/backend/sessions/get-session" }, { "title": "`getSessionList()`", - "wrap": false, "href": "/docs/references/backend/sessions/get-session-list" }, { "title": "`getToken()`", - "wrap": false, "href": "/docs/references/backend/sessions/get-token" }, { "title": "`verifySession()`", - "wrap": false, "href": "/docs/references/backend/sessions/verify-session" }, { "title": "`revokeSession()`", - "wrap": false, "href": "/docs/references/backend/sessions/revoke-session" } ] @@ -1622,17 +1535,14 @@ [ { "title": "`getClient()`", - "wrap": false, "href": "/docs/references/backend/client/get-client" }, { "title": "`getClientList()`", - "wrap": false, "href": "/docs/references/backend/client/get-client-list" }, { "title": "`verifyClient()`", - "wrap": false, "href": "/docs/references/backend/client/verify-client" } ] @@ -1645,17 +1555,14 @@ [ { "title": "`getInvitationList()`", - "wrap": false, "href": "/docs/references/backend/invitations/get-invitation-list" }, { "title": "`createInvitation()`", - "wrap": false, "href": "/docs/references/backend/invitations/create-invitation" }, { "title": "`revokeInvitation()`", - "wrap": false, "href": "/docs/references/backend/invitations/revoke-invitation" } ] @@ -1668,22 +1575,18 @@ [ { "title": "`getRedirectUrl()`", - "wrap": false, "href": "/docs/references/backend/redirect-urls/get-redirect-url" }, { "title": "`getRedirectUrlList()`", - "wrap": false, "href": "/docs/references/backend/redirect-urls/get-redirect-url-list" }, { "title": "`createRedirectUrl()`", - "wrap": false, "href": "/docs/references/backend/redirect-urls/create-redirect-url" }, { "title": "`deleteRedirectUrl()`", - "wrap": false, "href": "/docs/references/backend/redirect-urls/delete-redirect-url" } ] @@ -1696,22 +1599,18 @@ [ { "title": "`getEmailAddress()`", - "wrap": false, "href": "/docs/references/backend/email-addresses/get-email-address" }, { "title": "`createEmailAddress()`", - "wrap": false, "href": "/docs/references/backend/email-addresses/create-email-address" }, { "title": "`updateEmailAddress()`", - "wrap": false, "href": "/docs/references/backend/email-addresses/update-email-address" }, { "title": "`deleteEmailAddress()`", - "wrap": false, "href": "/docs/references/backend/email-addresses/delete-email-address" } ] @@ -1724,22 +1623,18 @@ [ { "title": "`getPhoneNumber()`", - "wrap": false, "href": "/docs/references/backend/phone-numbers/get-phone-number" }, { "title": "`createPhoneNumber()`", - "wrap": false, "href": "/docs/references/backend/phone-numbers/create-phone-number" }, { "title": "`updatePhoneNumber()`", - "wrap": false, "href": "/docs/references/backend/phone-numbers/update-phone-number" }, { "title": "`deletePhoneNumber()`", - "wrap": false, "href": "/docs/references/backend/phone-numbers/delete-phone-number" } ] @@ -1752,27 +1647,22 @@ [ { "title": "`getSamlConnectionList()`", - "wrap": false, "href": "/docs/references/backend/saml-connections/get-saml-connection-list" }, { "title": "`getSamlConnection()`", - "wrap": false, "href": "/docs/references/backend/saml-connections/get-saml-connection" }, { "title": "`createSamlConnection()`", - "wrap": false, "href": "/docs/references/backend/saml-connections/create-saml-connection" }, { "title": "`updateSamlConnection()`", - "wrap": false, "href": "/docs/references/backend/saml-connections/update-saml-connection" }, { "title": "`deleteSamlConnection()`", - "wrap": false, "href": "/docs/references/backend/saml-connections/delete-saml-connection" } ] @@ -1785,12 +1675,10 @@ [ { "title": "`createSignInToken()`", - "wrap": false, "href": "/docs/references/backend/sign-in-tokens/create-sign-in-token" }, { "title": "`revokeSignInToken()`", - "wrap": false, "href": "/docs/references/backend/sign-in-tokens/revoke-sign-in-token" } ] @@ -1803,7 +1691,6 @@ [ { "title": "`createTestingToken()`", - "wrap": false, "href": "/docs/references/backend/testing-tokens/create-testing-token" } ] @@ -1811,12 +1698,10 @@ }, { "title": "`authenticateRequest()`", - "wrap": false, "href": "/docs/references/backend/authenticate-request" }, { "title": "`verifyToken()`", - "wrap": false, "href": "/docs/references/backend/verify-token" }, { From 9b24ade93ba49752be8b17e23cc3101fedfd4a34 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Tue, 14 Jan 2025 03:14:37 +0800 Subject: [PATCH 29/82] make title singular since it only shows one SDK's guides at a time --- docs/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/manifest.json b/docs/manifest.json index fecfe931ea..fe551a5226 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -271,7 +271,7 @@ ], [ { - "title": "Clerk SDKs", + "title": "Clerk SDK", "selectable": true, "items": [ [ From d118e4ea2a9a06e379b40d0b242bc846f4ddf8f0 Mon Sep 17 00:00:00 2001 From: vi Date: Mon, 13 Jan 2025 16:29:30 -0500 Subject: [PATCH 30/82] edit --- docs/keyless-mode.mdx | 68 ++++++++++++++++++++++++ docs/keyless.mdx | 43 --------------- docs/manifest.json | 4 +- docs/quickstarts/nextjs.mdx | 4 +- public/images/keyless/keyless-toast.png | Bin 392220 -> 0 bytes 5 files changed, 72 insertions(+), 47 deletions(-) create mode 100644 docs/keyless-mode.mdx delete mode 100644 docs/keyless.mdx delete mode 100644 public/images/keyless/keyless-toast.png diff --git a/docs/keyless-mode.mdx b/docs/keyless-mode.mdx new file mode 100644 index 0000000000..5ce17236b7 --- /dev/null +++ b/docs/keyless-mode.mdx @@ -0,0 +1,68 @@ +--- +title: Keyless Mode (Beta) +description: Learn how to use Keyless Mode to prototype and test Clerk's authentication features locally without creating an account or managing API keys. +--- + +Keyless Mode allows you to quickly prototype and test Clerk's authentication features in your **local Next.js development environment** without creating a Clerk account. + +## How Keyless Mode works + +When no valid [Clerk keys](/docs/deployments/clerk-environment-variables#clerk-publishable-and-secret-keys) are detected, the Clerk SDK automatically: + +1. Generates temporary API keys from Clerk +1. Creates an instance with [default configuration](#default-configuration-for-development-instances) +1. Stores keys in a `.clerk` directory which is added to `.gitignore`. Do not commit this folder to your repository. Deleting the `.clerk` folder removes the instance. +1. Shows a **Clerk is in keyless mode** button to manage your instance + +## Enable Keyless Mode + +1. Create a [Next.js](/docs/quickstarts/nextjs) project. +1. Set `NEXT_PUBLIC_CLERK_ENABLE_KEYLESS` to `true` in your `.env.local` file. + ```env {{ filename: '.env.local' }} + NEXT_PUBLIC_CLERK_ENABLE_KEYLESS=true + ``` + +Keyless Mode activates automatically when no API keys are present. + +## Default configuration for development instances + +Development instances start with these preset configurations: + +- **Authentication**: Email and password are required, Google and GitHub sign-in are enabled +- **Verification**: Email verification is required +- **Password reset**: Enabled +- **MFA**: Disabled +- **Appearance**: Default theme + +> [!NOTE] +> These settings cannot be modified until you claim your instance. + +## Claim your instance and disable Keyless Mode + +To customize your instance and disable Keyless Mode: + +1. In your application running on localhost, select **Claim keys** in the bottom-right corner. This opens the **Claim Your Application** page. +1. On the **Claim Your Application** page, complete the form by entering your application name and selecting an organization, then select **Claim application**. +1. Copy your new API keys to your `.env.local` file: + ```env {{ filename: '.env.local' }} + NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} + CLERK_SECRET_KEY={{secret}} + ``` + ``` + ``` +1. Select **Go to application**. You'll be redirected your application's **Overview** page. + +> [!IMPORTANT] +> After claiming your instance, you must add the keys to your `.env.local` file to fully disable Keyless Mode. Without this step, you'll continue to see warnings that your instance is claimed but not properly configured. + +## Limitations + +- Works only with **Next.js projects in local development** +- Development instances can't be customized without claiming +- Production builds require proper Clerk keys + +## Feedback and Support + +Keyless Mode is currently available only for [Next.js](/docs/quickstarts/nextjs). For other frameworks, [sign up](https://dashboard.clerk.com/sign-up) to get your API keys. + +For questions or feedback, contact [Clerk Support](https://clerk.com/contact/support). diff --git a/docs/keyless.mdx b/docs/keyless.mdx deleted file mode 100644 index 1c16d8f23c..0000000000 --- a/docs/keyless.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Keyless Mode -description: Develop locally without requiring a Clerk account. ---- - -**Keyless Mode** allows you to try out Clerk in your local development environment without having to sign up for a Clerk account. - -> [!WARNING] -> Keyless mode is only available in [Next.js](/docs/quickstarts/nextjs) projects when developing locally. If you attempt to build your project for production, Clerk will throw an error. - -## How does it work? - -If Clerk's SDK doesn't detect valid [Clerk keys](TODO) in your environment, it will automatically fetch a set of keys for you. These keys are associated with a Clerk development instance that has a default configuration. When running locally in Keyless Mode, you'll see a UI toast indicating that you're running in this special mode with a link to claim your instance by signing up for a Clerk account, or signing in if you already have one. - -Keys are written to a file in a `.clerk` directory in your project. The Clerk SDK will try to add this directory to your `.gitignore` file to prevent keys from being committed to your repository. - -### Default configuration - -Clerk development instances have the following default configuration: - -- **Authentication**: Email and password, Sign-in with Google, Sign-in with GitHub -- **Verification**: Email verification is required -- **Password reset**: Password reset is enabled -- **MFA**: MFA is disabled -- **Appearance**: Default appearance - -When using Clerk in Keyless Mode, you're not able to make configuration changes to your instance. To make changes, [claim your instance](#claiming-keys). - -## Keyless Mode support - -Keyless mode works with Clerk's SDKs for [Next.js](/docs/quickstarts/nextjs). If you're using a different framework or SDK, you'll need to manually configure Clerk keys in your environment. Visit the [Clerk Dashboard](https://dashboard.clerk.com/sign-up) to create an account, create an instance, and get your keys. - -## Claiming keys - -When you're ready to make configuration changes to your instance, you can claim the automatically generated keys. To do this, click the "Claim keys" button in the Clerk toolbar on your local application. - -![Claim keys modal](/docs/images/keyless/keyless-toast.png) - -You'll then be prompted to sign up for a Clerk account, or sign in if you already have one. After authenticating, give your application a name and the keys will be associated with your account. You'll need to copy and paste the keys into your `.env` file to persist them in your project. This will disable Keyless Mode. If you don't add keys to your environment, you'll see a warning to let you know the instance has been claimed, but keys haven't been set. - -## Feedback - -If you have any feedback or questions about Keyless Mode, please reach out to [Clerk Support](https://clerk.com/contact/support). diff --git a/docs/manifest.json b/docs/manifest.json index 2987f51011..d9f87329f2 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1022,9 +1022,9 @@ "items": [ [ { - "title": "Keyless", + "title": "Keyless Mode (beta)", "tag": "(Beta)", - "href": "/docs/keyless" + "href": "/docs/guides/keyless-mode" }, { "title": "Multi-tenant architecture", diff --git a/docs/quickstarts/nextjs.mdx b/docs/quickstarts/nextjs.mdx index e4bd979479..b673211f4c 100644 --- a/docs/quickstarts/nextjs.mdx +++ b/docs/quickstarts/nextjs.mdx @@ -24,7 +24,7 @@ description: Add authentication and user management to your Next.js app with Cle - Add `` and Clerk components - + ## Install `@clerk/nextjs` @@ -183,7 +183,7 @@ description: Add authentication and user management to your Next.js app with Cle > [!IMPORTANT] - > [Keyless is currently on beta](/docs/keyless). If you would like to enable this feature set this environment variable `NEXT_PUBLIC_CLERK_ENABLE_KEYLESS=true`. + > [Keyless Mode](/docs/keyless-mode) is currently in beta. To enable this feature, set this environment variable `NEXT_PUBLIC_CLERK_ENABLE_KEYLESS=true` in your `.env.local` file. ## Install `@clerk/nextjs` diff --git a/public/images/keyless/keyless-toast.png b/public/images/keyless/keyless-toast.png deleted file mode 100644 index e55e21cc8d024c1fa664e28b2790e48092ad380b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392220 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

FOo#dDqLTXc;H8HI>{_?|+nNg@2irVQ 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 XjP~wLo`lpRw2zUVxo)+#W90t;Mlr;n From 0f72fed75e8dffa827689c6163c7f72a58e05911 Mon Sep 17 00:00:00 2001 From: vi Date: Mon, 13 Jan 2025 16:47:35 -0500 Subject: [PATCH 31/82] remove backticks --- docs/keyless-mode.mdx | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/keyless-mode.mdx b/docs/keyless-mode.mdx index 5ce17236b7..d743cdb3fb 100644 --- a/docs/keyless-mode.mdx +++ b/docs/keyless-mode.mdx @@ -48,8 +48,6 @@ To customize your instance and disable Keyless Mode: NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} CLERK_SECRET_KEY={{secret}} ``` - ``` - ``` 1. Select **Go to application**. You'll be redirected your application's **Overview** page. > [!IMPORTANT] From 49bd5778d22a5b564e20386068d5c170e6cdadce Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Tue, 14 Jan 2025 21:18:22 +0800 Subject: [PATCH 32/82] run prettier --- docs/quickstarts/setup-clerk.mdx | 86 ++++++++++++++++---------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/docs/quickstarts/setup-clerk.mdx b/docs/quickstarts/setup-clerk.mdx index 3631ed0597..546b997da9 100644 --- a/docs/quickstarts/setup-clerk.mdx +++ b/docs/quickstarts/setup-clerk.mdx @@ -30,68 +30,68 @@ Before you can start integrating Clerk into your application, you need to create Now that your application is created in the Clerk Dashboard, you can integrate it into your codebase. To integrate Clerk into your application, use one of our [quickstarts](/docs/quickstarts/overview): - - [Next.js](/docs/quickstarts/nextjs) - - Easily add secure, beautiful, and fast authentication to Next.js with Clerk. - - {} + - [Next.js](/docs/quickstarts/nextjs) + - Easily add secure, beautiful, and fast authentication to Next.js with Clerk. + - {} - --- + --- - - [React](/docs/quickstarts/react) - - Get started installing and initializing Clerk in a new React + Vite app. - - {} + - [React](/docs/quickstarts/react) + - Get started installing and initializing Clerk in a new React + Vite app. + - {} - --- + --- - - [Remix](/docs/quickstarts/remix) - - Easily add secure, edge- and SSR-friendly authentication to Remix with Clerk. - - {} + - [Remix](/docs/quickstarts/remix) + - Easily add secure, edge- and SSR-friendly authentication to Remix with Clerk. + - {} - --- + --- - - [RedwoodJS](/docs/references/redwood/overview) - - Grow your RedwoodJS application with Clerk user management and authentication. - - {} + - [RedwoodJS](/docs/references/redwood/overview) + - Grow your RedwoodJS application with Clerk user management and authentication. + - {} - --- + --- - - [React Native / Expo](/docs/quickstarts/expo) - - Use Clerk with Expo to authenticate users in your React Native application. - - {} + - [React Native / Expo](/docs/quickstarts/expo) + - Use Clerk with Expo to authenticate users in your React Native application. + - {} - --- + --- - - [Astro](/docs/quickstarts/astro) - - Easily add secure and SSR-friendly authentication to your Astro application with Clerk. - - {} + - [Astro](/docs/quickstarts/astro) + - Easily add secure and SSR-friendly authentication to your Astro application with Clerk. + - {} - --- + --- - - [iOS](/docs/quickstarts/ios) - - Use the Clerk iOS SDK to authenticate users in your native Apple applications. - - {} + - [iOS](/docs/quickstarts/ios) + - Use the Clerk iOS SDK to authenticate users in your native Apple applications. + - {} - --- + --- - - [TanStack Start](/docs/quickstarts/tanstack-start) - - Easily add secure and SSR-friendly authentication to your TanStack Start application with Clerk. - - ![](data:image/webp;base64,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) + - [TanStack Start](/docs/quickstarts/tanstack-start) + - Easily add secure and SSR-friendly authentication to your TanStack Start application with Clerk. + - ![](data:image/webp;base64,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) - --- + --- - - [React Router](/docs/quickstarts/react-router) - - Easily add secure, edge- and SSR-friendly authentication to React Router with Clerk. - - {} + - [React Router](/docs/quickstarts/react-router) + - Easily add secure, edge- and SSR-friendly authentication to React Router with Clerk. + - {} - --- + --- - - [Nuxt](/docs/quickstarts/nuxt) - - Easily add secure, beautiful, and fast authentication to Nuxt with Clerk. - - {} + - [Nuxt](/docs/quickstarts/nuxt) + - Easily add secure, beautiful, and fast authentication to Nuxt with Clerk. + - {} - --- + --- - - [Vue](/docs/quickstarts/vue) - - Get started installing and initializing Clerk in a new Vue + Vite app. - - {} + - [Vue](/docs/quickstarts/vue) + - Get started installing and initializing Clerk in a new Vue + Vite app. + - {} From 3077feca4f24de3644619597be3b29491c8b729b Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Tue, 14 Jan 2025 21:37:25 +0800 Subject: [PATCH 33/82] Fix up `Chrome Extension` being collapsible inside a selectable section --- docs/manifest.json | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/manifest.json b/docs/manifest.json index f39ed6e2de..1691ceab2d 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -698,7 +698,6 @@ }, { "title": "Chrome Extension", - "collapse": true, "icon": "chrome", "items": [ [ From 6cc82f9ad0b59666e6da28ebb24a10a26959377d Mon Sep 17 00:00:00 2001 From: victoria Date: Tue, 14 Jan 2025 12:50:11 -0500 Subject: [PATCH 34/82] Update docs/keyless-mode.mdx --- docs/keyless-mode.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/keyless-mode.mdx b/docs/keyless-mode.mdx index d743cdb3fb..a728ab5561 100644 --- a/docs/keyless-mode.mdx +++ b/docs/keyless-mode.mdx @@ -1,5 +1,5 @@ --- -title: Keyless Mode (Beta) +title: Keyless Mode (beta) description: Learn how to use Keyless Mode to prototype and test Clerk's authentication features locally without creating an account or managing API keys. --- From 33a9de0b671d0bc31e8aca31df2c88901a371e03 Mon Sep 17 00:00:00 2001 From: vi Date: Tue, 14 Jan 2025 13:29:48 -0500 Subject: [PATCH 35/82] fix --- docs/keyless-mode.mdx | 2 +- docs/manifest.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/keyless-mode.mdx b/docs/keyless-mode.mdx index a728ab5561..8d866904e4 100644 --- a/docs/keyless-mode.mdx +++ b/docs/keyless-mode.mdx @@ -7,7 +7,7 @@ Keyless Mode allows you to quickly prototype and test Clerk's authentication fea ## How Keyless Mode works -When no valid [Clerk keys](/docs/deployments/clerk-environment-variables#clerk-publishable-and-secret-keys) are detected, the Clerk SDK automatically: +When no [Clerk keys](/docs/deployments/clerk-environment-variables#clerk-publishable-and-secret-keys) are detected, the Clerk SDK automatically: 1. Generates temporary API keys from Clerk 1. Creates an instance with [default configuration](#default-configuration-for-development-instances) diff --git a/docs/manifest.json b/docs/manifest.json index d9f87329f2..22efe535d2 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1022,9 +1022,9 @@ "items": [ [ { - "title": "Keyless Mode (beta)", + "title": "Keyless Mode", "tag": "(Beta)", - "href": "/docs/guides/keyless-mode" + "href": "/docs/keyless-mode" }, { "title": "Multi-tenant architecture", From d305f85c3cf9f8236d707319813f1119b3c23d19 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Wed, 15 Jan 2025 14:29:14 +0200 Subject: [PATCH 36/82] chore: Replace env with npm tag --- docs/quickstarts/nextjs.mdx | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/docs/quickstarts/nextjs.mdx b/docs/quickstarts/nextjs.mdx index b673211f4c..ede80bebab 100644 --- a/docs/quickstarts/nextjs.mdx +++ b/docs/quickstarts/nextjs.mdx @@ -182,11 +182,8 @@ description: Add authentication and user management to your Next.js app with Cle - > [!IMPORTANT] - > [Keyless Mode](/docs/keyless-mode) is currently in beta. To enable this feature, set this environment variable `NEXT_PUBLIC_CLERK_ENABLE_KEYLESS=true` in your `.env.local` file. - - ## Install `@clerk/nextjs` + ## Install `@clerk/nextjs` with support for [Keyless](/docs/keyless-mode). Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. @@ -194,15 +191,15 @@ description: Add authentication and user management to your Next.js app with Cle ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs + npm install @clerk/nextjs@keyless ``` ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs + yarn add @clerk/nextjs@keyless ``` ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs + pnpm add @clerk/nextjs@keyless ``` From a842ec69bec44a772009820900336b073a0d1942 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Wed, 15 Jan 2025 14:34:23 +0200 Subject: [PATCH 37/82] chore: Replace opting in with opting out --- docs/keyless-mode.mdx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/keyless-mode.mdx b/docs/keyless-mode.mdx index 8d866904e4..02a5328850 100644 --- a/docs/keyless-mode.mdx +++ b/docs/keyless-mode.mdx @@ -14,13 +14,12 @@ When no [Clerk keys](/docs/deployments/clerk-environment-variables#clerk-publish 1. Stores keys in a `.clerk` directory which is added to `.gitignore`. Do not commit this folder to your repository. Deleting the `.clerk` folder removes the instance. 1. Shows a **Clerk is in keyless mode** button to manage your instance -## Enable Keyless Mode +## How do I opt-out? -1. Create a [Next.js](/docs/quickstarts/nextjs) project. -1. Set `NEXT_PUBLIC_CLERK_ENABLE_KEYLESS` to `true` in your `.env.local` file. - ```env {{ filename: '.env.local' }} - NEXT_PUBLIC_CLERK_ENABLE_KEYLESS=true - ``` +Set `NEXT_PUBLIC_CLERK_KEYLESS_DISABLED` in your `.env.local` file. +```env {{ filename: '.env.local' }} +NEXT_PUBLIC_CLERK_KEYLESS_DISABLED=1 +``` Keyless Mode activates automatically when no API keys are present. From 0717fab9195fc385cf3de839d27cedbbb65d2c7d Mon Sep 17 00:00:00 2001 From: panteliselef Date: Wed, 15 Jan 2025 14:36:41 +0200 Subject: [PATCH 38/82] chore: Remove duplicate line --- docs/keyless-mode.mdx | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/keyless-mode.mdx b/docs/keyless-mode.mdx index 02a5328850..478a9824f6 100644 --- a/docs/keyless-mode.mdx +++ b/docs/keyless-mode.mdx @@ -21,8 +21,6 @@ Set `NEXT_PUBLIC_CLERK_KEYLESS_DISABLED` in your `.env.local` file. NEXT_PUBLIC_CLERK_KEYLESS_DISABLED=1 ``` -Keyless Mode activates automatically when no API keys are present. - ## Default configuration for development instances Development instances start with these preset configurations: From 24a9b8f2b72ec9a810a4493478d8fd6a280aa087 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Wed, 15 Jan 2025 14:37:22 +0200 Subject: [PATCH 39/82] formatting --- docs/keyless-mode.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/keyless-mode.mdx b/docs/keyless-mode.mdx index 478a9824f6..ba5ac8cd94 100644 --- a/docs/keyless-mode.mdx +++ b/docs/keyless-mode.mdx @@ -17,6 +17,7 @@ When no [Clerk keys](/docs/deployments/clerk-environment-variables#clerk-publish ## How do I opt-out? Set `NEXT_PUBLIC_CLERK_KEYLESS_DISABLED` in your `.env.local` file. + ```env {{ filename: '.env.local' }} NEXT_PUBLIC_CLERK_KEYLESS_DISABLED=1 ``` From a128a0e10880ef5d52dfa7e4e085767beef69b06 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Wed, 15 Jan 2025 11:17:49 -0500 Subject: [PATCH 40/82] change keyless slug --- docs/{keyless-mode.mdx => keyless.mdx} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/{keyless-mode.mdx => keyless.mdx} (99%) diff --git a/docs/keyless-mode.mdx b/docs/keyless.mdx similarity index 99% rename from docs/keyless-mode.mdx rename to docs/keyless.mdx index ba5ac8cd94..91901f1d11 100644 --- a/docs/keyless-mode.mdx +++ b/docs/keyless.mdx @@ -1,5 +1,5 @@ --- -title: Keyless Mode (beta) +title: Keyless Mode description: Learn how to use Keyless Mode to prototype and test Clerk's authentication features locally without creating an account or managing API keys. --- From 9118b5704397f96aa99db8148546b4ba6c63ce8f Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Wed, 15 Jan 2025 11:27:38 -0500 Subject: [PATCH 41/82] split out keyless quickstart --- docs/nextjs-keyless.mdx | 195 +++++++++++++++ docs/quickstarts/nextjs.mdx | 463 +++++++++++++----------------------- 2 files changed, 359 insertions(+), 299 deletions(-) create mode 100644 docs/nextjs-keyless.mdx diff --git a/docs/nextjs-keyless.mdx b/docs/nextjs-keyless.mdx new file mode 100644 index 0000000000..71b5608c2e --- /dev/null +++ b/docs/nextjs-keyless.mdx @@ -0,0 +1,195 @@ +--- +title: Next.js Keyless Quickstart +description: Add authentication and user management to your Next.js app with Clerk. +--- + + + - Install `@clerk/nextjs@keyless` + - Add `clerkMiddleware()` + - Add `` and Clerk components + + + + ## Install `@clerk/nextjs@keyless` with support for [Keyless](/docs/keyless). + + Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + + Run the following command to install the SDK: + + + ```bash {{ filename: 'terminal' }} + npm install @clerk/nextjs@keyless + ``` + + ```bash {{ filename: 'terminal' }} + yarn add @clerk/nextjs@keyless + ``` + + ```bash {{ filename: 'terminal' }} + pnpm add @clerk/nextjs@keyless + ``` + + + ## Add `clerkMiddleware()` to your app + + [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + + 1. Create a `middleware.ts` file. + - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. + - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. + 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: + + ```tsx {{ filename: 'middleware.ts' }} + import { clerkMiddleware } from '@clerk/nextjs/server' + + export default clerkMiddleware() + + export const config = { + matcher: [ + // Skip Next.js internals and all static files, unless found in search params + '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', + // Always run for API routes + '/(api|trpc)(.*)', + ], + } + ``` + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. + + ## Add `` and Clerk components to your app + + + + You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#what-are-control-components). Create a header using the following components: + + - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. + - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. + - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. + - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in). + + Select your preferred router to learn how to make this data available across your entire app: + + + ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import './globals.css' + + export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + + +

+ + + + + + +
+
{children}
+ + + + ) + } + ``` + + ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} + import '@/styles/globals.css' + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import type { AppProps } from 'next/app' + + function MyApp({ Component, pageProps }: AppProps) { + return ( + + + + + + + + + + ) + } + + export default MyApp + ``` + + + ## Create your first user + + Run your project with the following command: + + + ```bash {{ filename: 'terminal' }} + npm run dev + ``` + + ```bash {{ filename: 'terminal' }} + yarn dev + ``` + + ```bash {{ filename: 'terminal' }} + pnpm dev + ``` + + + Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. + + +## Next steps + + + - [Protect routes using Clerk Middleware](/docs/references/nextjs/clerk-middleware) + - Learn how to protect specific routes from unauthenticated users. + + --- + + - [Create custom sign-up and sign-in pages](/docs/references/nextjs/custom-signup-signin-pages) + - Learn how add custom sign-up and sign-in pages with Clerk components. + + --- + + - [Read user and session data](/docs/references/nextjs/read-session-data) + - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. + + --- + + - [Client-side helpers](/docs/references/nextjs/overview#client-side-helpers) + - Learn more about Next.js client-side helpers and how to use them. + + --- + + - [Next.js SDK Reference](/docs/references/nextjs/overview) + - Learn more about additional Next.js methods. + + --- + + - [Deploy to Production](/docs/deployments/overview) + - Learn how to deploy your Clerk app to production. + + --- + + - [Deploy to Vercel](/docs/deployments/deploy-to-vercel) + - Learn how to deploy your Clerk app to production on Vercel. + + --- + + - [Clerk + Next.js App Router Quickstart Repo](https://github.com/clerk/clerk-nextjs-app-quickstart) + - The official companion repo for Clerk's Next.js Quickstart using App Router. + + --- + + - [Clerk + Next.js Pages Router Quickstart Repo](https://github.com/clerk/clerk-nextjs-pages-quickstart) + - The official companion repo for Clerk's Next.js Quickstart using Pages Router. + diff --git a/docs/quickstarts/nextjs.mdx b/docs/quickstarts/nextjs.mdx index ede80bebab..f785c4e6d8 100644 --- a/docs/quickstarts/nextjs.mdx +++ b/docs/quickstarts/nextjs.mdx @@ -6,17 +6,17 @@ description: Add authentication and user management to your Next.js app with Cle - Install `@clerk/nextjs` - Set your Clerk API keys @@ -24,294 +24,159 @@ description: Add authentication and user management to your Next.js app with Cle - Add `` and Clerk components - - - - ## Install `@clerk/nextjs` - - Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. - - Run the following command to install the SDK: - - - ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs - ``` - - ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs - ``` - - ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs - ``` - - - ## Set your Clerk API keys - - - - - - - - Add the following keys to your `.env.local` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. - - - - 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys){{ track: 'exp_create_account_nextjs_quickstart' }} page. - 1. In the **Quick Copy** section, copy your Clerk Publishable and Secret Keys. - 1. Paste your keys into your `.env.local` file. - - The final result should resemble the following: - - - - ```env {{ filename: '.env.local' }} - NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} - CLERK_SECRET_KEY={{secret}} - ``` - - ## Add `clerkMiddleware()` to your app - - [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: - - 1. Create a `middleware.ts` file. - - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. - 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: - - ```tsx {{ filename: 'middleware.ts' }} - import { clerkMiddleware } from '@clerk/nextjs/server' - - export default clerkMiddleware() - - export const config = { - matcher: [ - // Skip Next.js internals and all static files, unless found in search params - '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', - // Always run for API routes - '/(api|trpc)(.*)', - ], - } - ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. - - ## Add `` and Clerk components to your app - - - - You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#what-are-control-components). Create a header using the following components: - - - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. - - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. - - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. - - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in). - - Select your preferred router to learn how to make this data available across your entire app: - - - ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import './globals.css' - - export default function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - - -
- - - - - - -
-
{children}
- - -
- ) - } - ``` - - ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} - import '@/styles/globals.css' - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import type { AppProps } from 'next/app' - - function MyApp({ Component, pageProps }: AppProps) { - return ( - - - - - - - - - - ) - } - - export default MyApp - ``` -
- - ## Create your first user - - Run your project with the following command: - - - ```bash {{ filename: 'terminal' }} - npm run dev - ``` - - ```bash {{ filename: 'terminal' }} - yarn dev - ``` - - ```bash {{ filename: 'terminal' }} - pnpm dev - ``` - - - Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. -
-
- - - - ## Install `@clerk/nextjs` with support for [Keyless](/docs/keyless-mode). - - Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. - - Run the following command to install the SDK: - - - ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs@keyless - ``` - - ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs@keyless - ``` - - ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs@keyless - ``` - - - ## Add `clerkMiddleware()` to your app - - [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: - - 1. Create a `middleware.ts` file. - - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. - 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: - - ```tsx {{ filename: 'middleware.ts' }} - import { clerkMiddleware } from '@clerk/nextjs/server' - - export default clerkMiddleware() - - export const config = { - matcher: [ - // Skip Next.js internals and all static files, unless found in search params - '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', - // Always run for API routes - '/(api|trpc)(.*)', - ], - } - ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. - - ## Add `` and Clerk components to your app - - - - You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#what-are-control-components). Create a header using the following components: - - - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. - - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. - - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. - - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in). - - Select your preferred router to learn how to make this data available across your entire app: - - - ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import './globals.css' - - export default function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - - -
- - - - - - -
-
{children}
- - -
- ) - } - ``` - - ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} - import '@/styles/globals.css' - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import type { AppProps } from 'next/app' - - function MyApp({ Component, pageProps }: AppProps) { - return ( - - - - - - - - - - ) - } - - export default MyApp - ``` -
- - ## Create your first user - - Run your project with the following command: - - - ```bash {{ filename: 'terminal' }} - npm run dev - ``` - - ```bash {{ filename: 'terminal' }} - yarn dev - ``` - - ```bash {{ filename: 'terminal' }} - pnpm dev - ``` - - - Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. -
-
-
+ + ## Install `@clerk/nextjs` + + Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + + Run the following command to install the SDK: + + + ```bash {{ filename: 'terminal' }} + npm install @clerk/nextjs + ``` + + ```bash {{ filename: 'terminal' }} + yarn add @clerk/nextjs + ``` + + ```bash {{ filename: 'terminal' }} + pnpm add @clerk/nextjs + ``` + + + ## Set your Clerk API keys + + + + + + + + Add the following keys to your `.env.local` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. + + + + 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys){{ track: 'exp_create_account_nextjs_quickstart' }} page. + 1. In the **Quick Copy** section, copy your Clerk Publishable and Secret Keys. + 1. Paste your keys into your `.env.local` file. + + The final result should resemble the following: + + + + ```env {{ filename: '.env.local' }} + NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} + CLERK_SECRET_KEY={{secret}} + ``` + + ## Add `clerkMiddleware()` to your app + + [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + + 1. Create a `middleware.ts` file. + - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. + - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. + 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: + + ```tsx {{ filename: 'middleware.ts' }} + import { clerkMiddleware } from '@clerk/nextjs/server' + + export default clerkMiddleware() + + export const config = { + matcher: [ + // Skip Next.js internals and all static files, unless found in search params + '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', + // Always run for API routes + '/(api|trpc)(.*)', + ], + } + ``` + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. + + ## Add `` and Clerk components to your app + + + + You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#what-are-control-components). Create a header using the following components: + + - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. + - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. + - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. + - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in). + + Select your preferred router to learn how to make this data available across your entire app: + + + ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import './globals.css' + + export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + + +
+ + + + + + +
+
{children}
+ + +
+ ) + } + ``` + + ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} + import '@/styles/globals.css' + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import type { AppProps } from 'next/app' + + function MyApp({ Component, pageProps }: AppProps) { + return ( + + + + + + + + + + ) + } + + export default MyApp + ``` +
+ + ## Create your first user + + Run your project with the following command: + + + ```bash {{ filename: 'terminal' }} + npm run dev + ``` + + ```bash {{ filename: 'terminal' }} + yarn dev + ``` + + ```bash {{ filename: 'terminal' }} + pnpm dev + ``` + + + Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. +
## Next steps From 1d3c3be3e5b25e49cbf088927698210d39109368 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Wed, 15 Jan 2025 11:31:31 -0500 Subject: [PATCH 42/82] link to keyless quickstart --- docs/keyless.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 91901f1d11..3aeb9384e0 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -5,13 +5,15 @@ description: Learn how to use Keyless Mode to prototype and test Clerk's authent Keyless Mode allows you to quickly prototype and test Clerk's authentication features in your **local Next.js development environment** without creating a Clerk account. +See [Next.js Keyless Quickstart](/docs/nextjs-keyless) for a step-by-step guide to get started with Keyless Mode. + ## How Keyless Mode works When no [Clerk keys](/docs/deployments/clerk-environment-variables#clerk-publishable-and-secret-keys) are detected, the Clerk SDK automatically: 1. Generates temporary API keys from Clerk 1. Creates an instance with [default configuration](#default-configuration-for-development-instances) -1. Stores keys in a `.clerk` directory which is added to `.gitignore`. Do not commit this folder to your repository. Deleting the `.clerk` folder removes the instance. +1. Stores keys in a `.clerk` directory which is added to `.gitignore`. Do not commit this folder to your repository. Deleting the `.clerk` folder will cause new temporary keys to generated for a new instance. 1. Shows a **Clerk is in keyless mode** button to manage your instance ## How do I opt-out? From df340b824620d592d8e55d141d3503d35344be87 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Thu, 16 Jan 2025 02:30:40 +0800 Subject: [PATCH 43/82] Update title to reflect page has both quickstart and methods in it --- docs/manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 1691ceab2d..cbb36ab8fd 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1279,7 +1279,7 @@ "items": [ [ { - "title": "Quickstart", + "title": "Quickstart & Available Methods", "href": "/docs/references/backend/overview" }, { @@ -1767,7 +1767,7 @@ "items": [ [ { - "title": "Overview", + "title": "Quickstart", "href": "/docs/references/redwood/overview" }, { From b99b7aa7ed811f86180a66bb5a94e1df6450f4bb Mon Sep 17 00:00:00 2001 From: Alexis Aguilar <98043211+alexisintech@users.noreply.github.com> Date: Wed, 15 Jan 2025 15:51:36 -0500 Subject: [PATCH 44/82] lint nextjs quickstart --- docs/quickstarts/nextjs.mdx | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/quickstarts/nextjs.mdx b/docs/quickstarts/nextjs.mdx index f785c4e6d8..1c6e51bce7 100644 --- a/docs/quickstarts/nextjs.mdx +++ b/docs/quickstarts/nextjs.mdx @@ -6,17 +6,17 @@ description: Add authentication and user management to your Next.js app with Cle - Install `@clerk/nextjs` - Set your Clerk API keys From 01f51934583dbf9806c3ef2c82992a6cb49b8582 Mon Sep 17 00:00:00 2001 From: Alexis Aguilar <98043211+alexisintech@users.noreply.github.com> Date: Wed, 15 Jan 2025 16:12:00 -0500 Subject: [PATCH 45/82] code review --- docs/keyless.mdx | 29 +++++++++++++++-------------- docs/nextjs-keyless.mdx | 20 ++++++++++---------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 3aeb9384e0..4007d40901 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -3,18 +3,18 @@ title: Keyless Mode description: Learn how to use Keyless Mode to prototype and test Clerk's authentication features locally without creating an account or managing API keys. --- -Keyless Mode allows you to quickly prototype and test Clerk's authentication features in your **local Next.js development environment** without creating a Clerk account. +Keyless Mode allows you to quickly prototype and test Clerk's authentication features in your **local development environment** without creating a Clerk account. -See [Next.js Keyless Quickstart](/docs/nextjs-keyless) for a step-by-step guide to get started with Keyless Mode. +Keyless Mode is currently available only for the Next.js SDK. See the [step-by-step tutorial](/docs/references/nextjs/keyless) to get started. ## How Keyless Mode works -When no [Clerk keys](/docs/deployments/clerk-environment-variables#clerk-publishable-and-secret-keys) are detected, the Clerk SDK automatically: +When no [Clerk API keys](/docs/deployments/clerk-environment-variables#clerk-publishable-and-secret-keys) are detected, the Clerk SDK automatically: -1. Generates temporary API keys from Clerk -1. Creates an instance with [default configuration](#default-configuration-for-development-instances) -1. Stores keys in a `.clerk` directory which is added to `.gitignore`. Do not commit this folder to your repository. Deleting the `.clerk` folder will cause new temporary keys to generated for a new instance. -1. Shows a **Clerk is in keyless mode** button to manage your instance +1. Generates temporary API keys from Clerk. +1. Creates a development instance with [default configurations](#default-configuration-for-development-instances). +1. Stores keys in a `.clerk` directory, which is added to `.gitignore`. Do not commit the `.clerk` folder to your repository. Deleting this folder will cause new temporary keys to be generated for a new instance. +1. Shows a **Clerk is in keyless mode** button to manage your instance. ## How do I opt-out? @@ -35,14 +35,15 @@ Development instances start with these preset configurations: - **Appearance**: Default theme > [!NOTE] -> These settings cannot be modified until you claim your instance. +> These settings cannot be modified until you [claim your instance](#claim-your-instance-and-disable-keyless-mode). ## Claim your instance and disable Keyless Mode -To customize your instance and disable Keyless Mode: +To claim your instance and disable Keyless Mode: -1. In your application running on localhost, select **Claim keys** in the bottom-right corner. This opens the **Claim Your Application** page. -1. On the **Claim Your Application** page, complete the form by entering your application name and selecting an organization, then select **Claim application**. +1. Run your application in local development (e.g. `npm run dev` or `yarn dev`). +1. In the bottom-right of your application, select **Claim keys**. This opens the **Claim Your Application** page. +1. On the **Claim Your Application** page, complete the form by entering your application name and selecting an organization. Then select **Claim application**. 1. Copy your new API keys to your `.env.local` file: ```env {{ filename: '.env.local' }} NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} @@ -55,9 +56,9 @@ To customize your instance and disable Keyless Mode: ## Limitations -- Works only with **Next.js projects in local development** -- Development instances can't be customized without claiming -- Production builds require proper Clerk keys +- Works only with **Next.js projects in local development**. +- Development instances can't be customized without [being claimed](#claim-your-instance-and-disable-keyless-mode). +- Production builds require Clerk API keys of a [claimed instance](#claim-your-instance-and-disable-keyless-mode). ## Feedback and Support diff --git a/docs/nextjs-keyless.mdx b/docs/nextjs-keyless.mdx index 71b5608c2e..0917f5dfe4 100644 --- a/docs/nextjs-keyless.mdx +++ b/docs/nextjs-keyless.mdx @@ -1,17 +1,17 @@ --- title: Next.js Keyless Quickstart -description: Add authentication and user management to your Next.js app with Clerk. +description: Add authentication and user management to your Next.js app with Clerk's Keyless Mode. --- - Install `@clerk/nextjs@keyless` - Add `clerkMiddleware()` @@ -19,11 +19,11 @@ description: Add authentication and user management to your Next.js app with Cle - ## Install `@clerk/nextjs@keyless` with support for [Keyless](/docs/keyless). + ## Install `@clerk/nextjs@keyless` - Clerk's [Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + Keyless Mode allows you to quickly prototype and test Clerk's authentication features in your **local development environment** without creating a Clerk account. - Run the following command to install the SDK: + Run the following command to install the [Next.js SDK](/docs/references/nextjs/overview) with Keyless Mode enabled: ```bash {{ filename: 'terminal' }} From d3b65f2513726c7228d5c355db43507ed87f32cc Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Fri, 17 Jan 2025 02:11:40 +0800 Subject: [PATCH 46/82] move the Clerk SDK docs up the very top of the sidebar --- docs/manifest.json | 765 +++++++++++++++++++++++---------------------- 1 file changed, 388 insertions(+), 377 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 4ab6746f3c..2e04e0dedb 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -3,268 +3,60 @@ "navigation": [ [ { - "title": "Home", - "href": "/docs", - "icon": "home" - }, - { - "title": "Getting Started", - "href": "/docs/quickstarts/setup-clerk", - "icon": "checkmark-circle" - }, - { - "title": "UI Components", - "collapse": true, - "icon": "box", + "title": "Clerk SDK", + "selectable": true, "items": [ [ { - "title": "Overview", - "href": "/docs/components/overview" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/clerk-provider" - }, - { - "title": "Authentication Components", - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/sign-in" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/sign-up" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/google-one-tap" - } - ] - ] - }, - { - "title": "User Components", - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/user/user-button" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/user/user-profile" - } - ] - ] - }, - { - "title": "Organization Components", - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/create-organization" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-profile" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-switcher" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-list" - } - ] - ] - }, - { - "title": "Waitlist Component", - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/waitlist" - } - ] - ] - }, - { - "title": "Control Components", + "title": "Next.js", + "icon": "nextjs", "items": [ [ { - "title": "``", - "wrap": false, - "href": "/docs/components/control/authenticate-with-callback" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/clerk-loaded" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/clerk-loading" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/protect" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/multi-session" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-signin" + "title": "Quickstart", + "href": "/docs/quickstarts/nextjs" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-signup" + "title": "Read session and user data", + "href": "/docs/references/nextjs/read-session-data" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-userprofile" + "title": "Add custom sign-up and sign-in pages", + "href": "/docs/references/nextjs/custom-signup-signin-pages" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-organizationprofile" + "title": "Add custom onboarding", + "href": "/docs/references/nextjs/add-onboarding-flow" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-createorganization" + "title": "Set up a waitlist", + "href": "/docs/references/nextjs/waitlist" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/signed-in" + "title": "Role Based Access Control", + "href": "/docs/references/nextjs/basic-rbac" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/signed-out" - } - ] - ] - }, - { - "title": "Unstyled Components", - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-in-button" + "title": "Rendering modes", + "href": "/docs/references/nextjs/rendering-modes" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-in-with-metamask" + "title": "Migrate from Auth.js", + "href": "/docs/references/nextjs/authjs-migration" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-up-button" + "title": "tRPC", + "href": "/docs/references/nextjs/trpc" }, { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-out-button" - } - ] - ] - } - ] - ] - } - ], - [ - { - "title": "Clerk SDK", - "selectable": true, - "items": [ - [ - { - "title": "Next.js", - "icon": "nextjs", - "items": [ - [ - { - "title": "Quickstart", - "href": "/docs/quickstarts/nextjs" - }, - { - "title": "Available Methods", - "href": "/docs/references/nextjs/overview" - }, - { - "title": "Guides", + "title": "General references", + "collapse": true, "items": [ [ { - "title": "Read session and user data", - "href": "/docs/references/nextjs/read-session-data" + "title": "Available Methods", + "href": "/docs/references/nextjs/overview" }, - { - "title": "Add custom sign-up and sign-in pages", - "href": "/docs/references/nextjs/custom-signup-signin-pages" - }, - { - "title": "Add custom onboarding", - "href": "/docs/references/nextjs/add-onboarding-flow" - }, - { - "title": "Set up a waitlist", - "href": "/docs/references/nextjs/waitlist" - }, - { - "title": "Role Based Access Control", - "href": "/docs/references/nextjs/basic-rbac" - }, - { - "title": "Rendering modes", - "href": "/docs/references/nextjs/rendering-modes" - }, - { - "title": "Migrate from Auth.js", - "href": "/docs/references/nextjs/authjs-migration" - }, - { - "title": "tRPC", - "href": "/docs/references/nextjs/trpc" - } - ] - ] - }, - { - "title": "General references", - "items": [ - [ { "title": "`clerkMiddleware()`", "href": "/docs/references/nextjs/clerk-middleware" @@ -274,6 +66,7 @@ }, { "title": "App Router References", + "collapse": true, "items": [ [ { @@ -297,6 +90,7 @@ }, { "title": "Pages Router References", + "collapse": true, "items": [ [ { @@ -312,6 +106,7 @@ }, { "title": "Demo Repositories", + "collapse": true, "items": [ [ { @@ -338,11 +133,20 @@ "href": "/docs/quickstarts/react" }, { - "title": "Available Methods", - "href": "/docs/references/react/overview" + "title": "References", + "collapse": true, + "items": [ + [ + { + "title": "Available Methods", + "href": "/docs/references/react/overview" + } + ] + ] }, { "title": "Client-side helpers", + "collapse": true, "items": [ [ { @@ -706,29 +510,29 @@ "href": "/docs/quickstarts/chrome-extension" }, { - "title": "Available Methods", - "href": "/docs/references/chrome-extension/overview" + "title": "Add React Router", + "href": "/docs/references/chrome-extension/add-react-router" }, { - "title": "Guides", - "collapse": false, + "title": "Sync auth status between your Chrome Extension and web app", + "href": "/docs/references/chrome-extension/sync-host" + }, + { + "title": "`createClerkClient()`", + "href": "/docs/references/chrome-extension/create-clerk-client" + }, + { + "title": "Configure a consistent CRX ID", + "href": "/docs/references/chrome-extension/configure-consistent-crx-id" + }, + { + "title": "References", + "collapse": true, "items": [ [ { - "title": "Add React Router", - "href": "/docs/references/chrome-extension/add-react-router" - }, - { - "title": "Sync auth status between your Chrome Extension and web app", - "href": "/docs/references/chrome-extension/sync-host" - }, - { - "title": "`createClerkClient()`", - "href": "/docs/references/chrome-extension/create-clerk-client" - }, - { - "title": "Configure a consistent CRX ID", - "href": "/docs/references/chrome-extension/configure-consistent-crx-id" + "title": "Available Methods", + "href": "/docs/references/chrome-extension/overview" } ] ] @@ -746,39 +550,33 @@ "href": "/docs/quickstarts/expo" }, { - "title": "Available Methods", - "href": "/docs/references/expo/overview" + "title": "Read session and user data", + "href": "/docs/references/expo/read-session-user-data" }, { - "title": "Hooks", - "items": [ - [ - { - "title": "useLocalCredentials()", - "href": "/docs/references/expo/use-local-credentials" - }, - { - "title": "useOAuth()", - "href": "/docs/references/expo/use-oauth" - } - ] - ] + "title": "Use biometrics with local credentials", + "href": "/docs/references/expo/local-credentials" }, { - "title": "Guides", + "title": "Offline support", + "href": "/docs/references/expo/offline-support" + }, + { + "title": "References", + "collapse": true, "items": [ [ { - "title": "Read session and user data", - "href": "/docs/references/expo/read-session-user-data" + "title": "Available Methods", + "href": "/docs/references/expo/overview" }, { - "title": "Use biometrics with local credentials", - "href": "/docs/references/expo/local-credentials" + "title": "useLocalCredentials()", + "href": "/docs/references/expo/use-local-credentials" }, { - "title": "Offline support", - "href": "/docs/references/expo/offline-support" + "title": "useOAuth()", + "href": "/docs/references/expo/use-oauth" } ] ] @@ -812,21 +610,22 @@ "title": "Quickstart", "href": "/docs/quickstarts/ios" }, - { - "title": "Available Methods", - "href": "/docs/references/ios/overview" - }, { "title": "`getToken()`", "href": "/docs/references/ios/get-token" }, { - "title": "Guides", + "title": "Sign in with Apple", + "href": "/docs/references/ios/sign-in-with-apple" + }, + { + "title": "References", + "collapse": true, "items": [ [ { - "title": "Sign in with Apple", - "href": "/docs/references/ios/sign-in-with-apple" + "title": "Available Methods", + "href": "/docs/references/ios/overview" } ] ] @@ -844,13 +643,21 @@ "title": "Quickstart & Available Methods", "href": "/docs/references/nodejs/overview" }, - { - "title": "Available methods", - "href": "/docs/references/nodejs/available-methods" - }, { "title": "Connect/Express Middleware", "href": "/docs/backend-requests/handling/nodejs" + }, + { + "title": "References", + "collapse": true, + "items": [ + [ + { + "title": "Available methods", + "href": "/docs/references/nodejs/available-methods" + } + ] + ] } ] ] @@ -865,8 +672,16 @@ "href": "/docs/quickstarts/express" }, { - "title": "Available Methods", - "href": "/docs/references/express/overview" + "title": "References", + "collapse": true, + "items": [ + [ + { + "title": "Available Methods", + "href": "/docs/references/express/overview" + } + ] + ] } ] ] @@ -894,32 +709,25 @@ "href": "/docs/quickstarts/react-router" }, { - "title": "Available Methods", - "href": "/docs/references/react-router/overview" + "title": "Read session and user data", + "href": "/docs/references/react-router/read-session-data" }, { - "title": "Guides", - "items": [ - [ - { - "title": "Read session and user data", - "href": "/docs/references/react-router/read-session-data" - }, - { - "title": "Add custom sign up and sign in pages", - "href": "/docs/references/react-router/custom-signup-signin-pages" - }, - { - "title": "Library mode", - "href": "/docs/references/react-router/library-mode" - } - ] - ] + "title": "Add custom sign up and sign in pages", + "href": "/docs/references/react-router/custom-signup-signin-pages" + }, + { + "title": "Library mode", + "href": "/docs/references/react-router/library-mode" }, { "title": "General references", "items": [ [ + { + "title": "Available Methods", + "href": "/docs/references/react-router/overview" + }, { "title": "`rootAuthLoader()`", "href": "/docs/references/react-router/root-auth-loader" @@ -973,13 +781,22 @@ "href": "/docs/quickstarts/tanstack-start" }, { - "title": "Available Methods", - "href": "/docs/references/tanstack-start/overview" + "title": "Add custom sign up and sign in pages", + "href": "/docs/references/tanstack-start/custom-signup-signin-pages" + }, + { + "title": "Read session and user data", + "href": "/docs/references/tanstack-start/read-session-data" }, { "title": "General references", + "collapse": true, "items": [ [ + { + "title": "Available Methods", + "href": "/docs/references/tanstack-start/overview" + }, { "title": "`getAuth()`", "href": "/docs/references/tanstack-start/get-auth" @@ -990,21 +807,6 @@ } ] ] - }, - { - "title": "Guides", - "items": [ - [ - { - "title": "Add custom sign up and sign in pages", - "href": "/docs/references/tanstack-start/custom-signup-signin-pages" - }, - { - "title": "Read session and user data", - "href": "/docs/references/tanstack-start/read-session-data" - } - ] - ] } ] ] @@ -1043,43 +845,38 @@ "href": "/docs/quickstarts/astro" }, { - "title": "Available Methods", - "href": "/docs/references/astro/overview" + "title": "Migrating from community SDK", + "href": "/docs/references/astro/migrating-from-astro-community-sdk" }, { - "title": "UI Frameworks", - "items": [ - [ - { - "title": "Use Clerk with Astro and React", - "href": "/docs/references/astro/react" - } - ] - ] + "title": "Read session and user data", + "href": "/docs/references/astro/read-session-data" }, { - "title": "Guides", + "title": "Hybrid rendering", + "href": "/docs/references/astro/hybrid-rendering" + }, + { + "title": "UI Frameworks", + "collapse": true, "items": [ [ { - "title": "Migrating from community SDK", - "href": "/docs/references/astro/migrating-from-astro-community-sdk" - }, - { - "title": "Read session and user data", - "href": "/docs/references/astro/read-session-data" - }, - { - "title": "Hybrid rendering", - "href": "/docs/references/astro/hybrid-rendering" + "title": "Use Clerk with Astro and React", + "href": "/docs/references/astro/react" } ] ] }, { "title": "General references", + "collapse": true, "items": [ [ + { + "title": "Available Methods", + "href": "/docs/references/astro/overview" + }, { "title": "`clerkMiddleware()`", "href": "/docs/references/astro/clerk-middleware" @@ -1097,6 +894,7 @@ }, { "title": "Client-side helpers", + "collapse": true, "items": [ [ { @@ -1146,26 +944,23 @@ "title": "Quickstart", "href": "/docs/quickstarts/nuxt" }, - { "title": "Available Methods", "href": "/docs/references/nuxt/overview" }, { - "title": "Guides", - "items": [ - [ - { - "title": "Read session and user data", - "href": "/docs/references/nuxt/read-session-data" - }, - { - "title": "Protect pages", - "href": "/docs/references/nuxt/protect-pages" - } - ] - ] + "title": "Read session and user data", + "href": "/docs/references/nuxt/read-session-data" }, { - "title": "General references", + "title": "Protect pages", + "href": "/docs/references/nuxt/protect-pages" + }, + { + "title": "References", + "collapse": true, "items": [ [ + { + "title": "Available Methods", + "href": "/docs/references/nuxt/overview" + }, { "title": "`clerkMiddleware()`", "href": "/docs/references/nuxt/clerk-middleware" @@ -1181,21 +976,17 @@ "icon": "vue", "items": [ [ - { "title": "Quickstart", "href": "/docs/quickstarts/vue" }, - { "title": "Available Methods", "href": "/docs/references/vue/overview" }, { - "title": "Guides", - "items": [ - [ - { - "title": "Migrating from community SDK", - "href": "/docs/references/vue/migrating-from-vue-community-sdk" - } - ] - ] + "title": "Quickstart", + "href": "/docs/quickstarts/vue" + }, + { + "title": "Migrating from community SDK", + "href": "/docs/references/vue/migrating-from-vue-community-sdk" }, { "title": "Client-side helpers", + "collapse": true, "items": [ [ { @@ -1232,6 +1023,18 @@ } ] ] + }, + { + "title": "References", + "collapse": true, + "items": [ + [ + { + "title": "Available Methods", + "href": "/docs/references/vue/overview" + } + ] + ] } ] ] @@ -1245,10 +1048,6 @@ "title": "Quickstart", "href": "/docs/references/ruby/overview" }, - { - "title": "Available Methods", - "href": "/docs/references/ruby/available-methods" - }, { "title": "Rack/Rails integration", "href": "/docs/references/ruby/rack-rails" @@ -1256,6 +1055,18 @@ { "title": "Ruby SDK repository", "href": "https://github.com/clerk/clerk-sdk-ruby" + }, + { + "title": "References", + "collapse": true, + "items": [ + [ + { + "title": "Available Methods", + "href": "/docs/references/ruby/available-methods" + } + ] + ] } ] ] @@ -1736,6 +1547,7 @@ }, { "title": "Guides", + "collapse": true, "items": [ [ { @@ -1825,6 +1637,201 @@ ] } ], + [ + { + "title": "UI Components", + "items": [ + [ + { + "title": "Overview", + "href": "/docs/components/overview" + }, + { + "title": "``", + "href": "/docs/components/clerk-provider" + }, + { + "title": "Authentication Components", + "collapse": true, + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/sign-in" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/sign-up" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/google-one-tap" + } + ] + ] + }, + { + "title": "User Components", + "collapse": true, + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/user/user-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/user/user-profile" + } + ] + ] + }, + { + "title": "Organization Components", + "collapse": true, + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/create-organization" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/organization-profile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/organization-switcher" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/organization-list" + } + ] + ] + }, + { + "title": "Waitlist Component", + "collapse": true, + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/waitlist" + } + ] + ] + }, + { + "title": "Control Components", + "collapse": true, + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/authenticate-with-callback" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/clerk-loaded" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/clerk-loading" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/protect" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/multi-session" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-signin" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-signup" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-userprofile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-organizationprofile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-createorganization" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/signed-in" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/signed-out" + } + ] + ] + }, + { + "title": "Unstyled Components", + "collapse": true, + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-in-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-in-with-metamask" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-up-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-out-button" + } + ] + ] + } + ] + ] + } + ], [ { "title": "Configuration", @@ -2546,6 +2553,10 @@ "title": "Development", "items": [ [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, { "title": "Multi-tenant architecture", "href": "/docs/guides/multi-tenant-architecture" From 2c09cb0678fa27bd1a6c6acd0629da56708e428a Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Thu, 16 Jan 2025 15:31:21 -0500 Subject: [PATCH 47/82] adjust quickstart --- docs/keyless.mdx | 4 +++ docs/nextjs-keyless.mdx | 69 +++++++++++++++++++++++------------------ 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index 4007d40901..fb50aa2675 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -1,6 +1,10 @@ --- title: Keyless Mode description: Learn how to use Keyless Mode to prototype and test Clerk's authentication features locally without creating an account or managing API keys. +search: false +metadata: + robots: + index: false --- Keyless Mode allows you to quickly prototype and test Clerk's authentication features in your **local development environment** without creating a Clerk account. diff --git a/docs/nextjs-keyless.mdx b/docs/nextjs-keyless.mdx index 0917f5dfe4..222d666bc9 100644 --- a/docs/nextjs-keyless.mdx +++ b/docs/nextjs-keyless.mdx @@ -1,29 +1,33 @@ --- -title: Next.js Keyless Quickstart -description: Add authentication and user management to your Next.js app with Clerk's Keyless Mode. +title: Next.js Quickstart +description: Add authentication and user management to your Next.js app. +search: false +metadata: + robots: + index: false --- - - Install `@clerk/nextjs@keyless` - - Add `clerkMiddleware()` - - Add `` and Clerk components + - How to add Clerk to your Next.js application + - Use Clerk's prebuilt components for user authentication - - ## Install `@clerk/nextjs@keyless` +> [!IMPORTANT] +> You'll need a Next.js application before you start this quickstart guide. Run `npx create-next-app@latest` to create a new Next.js app. - Keyless Mode allows you to quickly prototype and test Clerk's authentication features in your **local development environment** without creating a Clerk account. + + ## Install `@clerk/nextjs` - Run the following command to install the [Next.js SDK](/docs/references/nextjs/overview) with Keyless Mode enabled: + Run the following command to install the [Next.js SDK](/docs/references/nextjs/overview): ```bash {{ filename: 'terminal' }} @@ -66,20 +70,9 @@ description: Add authentication and user management to your Next.js app with Cle ## Add `` and Clerk components to your app - - - You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#what-are-control-components). Create a header using the following components: - - - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. - - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. - - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. - - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in). - - Select your preferred router to learn how to make this data available across your entire app: - ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import { ClerkProvider, SignedIn, SignedOut, UserButton, SignUpButton } from '@clerk/nextjs' import './globals.css' export default function RootLayout({ children }: { children: React.ReactNode }) { @@ -87,9 +80,9 @@ description: Add authentication and user management to your Next.js app with Cle -
+
- + @@ -126,6 +119,15 @@ description: Add authentication and user management to your Next.js app with Cle ``` + + + You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#what-are-control-components). Create a header using the following components: + + - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. + - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. + - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. + - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in). + ## Create your first user Run your project with the following command: @@ -144,7 +146,14 @@ description: Add authentication and user management to your Next.js app with Cle ``` - Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. + 1. Visit your app's homepage at [http://localhost:3000](http://localhost:3000). + 1. Click "Sign up" and authenticate to create your first user. + + ## You did it! + + Congratulations! You've added Clerk to your Next.js app. 🎉 From here, you can continue developing your application. + + To make configuration changes to your Clerk development instance, you can claim the Clerk keys that were generated for you. Claiming will associate these keys with your Clerk account (which you can sign-up for if you don't already have one). ## Next steps From 28ee06e002c72880b3a53ef5c5a504e9957afa5c Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Fri, 17 Jan 2025 23:13:22 +0800 Subject: [PATCH 48/82] introduce "sdk" option to limit a page or a group of pages to show up under on a certain sdk selection --- docs/manifest.json | 78 ++++++++++++++++++++------------------- docs/manifest.schema.json | 40 +++++++++++++++++++- 2 files changed, 80 insertions(+), 38 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 2e04e0dedb..48b2baab36 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -4,12 +4,13 @@ [ { "title": "Clerk SDK", - "selectable": true, + "hideTitle": true, "items": [ [ { "title": "Next.js", - "icon": "nextjs", + "hideTitle": true, + "sdk": ["nextjs"], "items": [ [ { @@ -125,7 +126,8 @@ }, { "title": "React", - "icon": "react", + "hideTitle": true, + "sdk":[ "react"], "items": [ [ { @@ -198,7 +200,8 @@ }, { "title": "JavaScript", - "icon": "javascript", + "hideTitle": true, + "sdk": ["javascript-frontend"], "items": [ [ { @@ -502,7 +505,8 @@ }, { "title": "Chrome Extension", - "icon": "chrome", + "hideTitle": true, + "sdk": ["chrome-extension"], "items": [ [ { @@ -542,7 +546,8 @@ }, { "title": "Expo", - "icon": "expo", + "hideTitle": true, + "sdk": ["expo"], "items": [ [ { @@ -602,8 +607,8 @@ }, { "title": "iOS", - "tag": "(Beta)", - "icon": "apple", + "hideTitle": true, + "sdk": ["ios"], "items": [ [ { @@ -635,8 +640,8 @@ }, { "title": "Node.js", - "tag": "(Deprecated)", - "icon": "nodejs", + "hideTitle": true, + "sdk": ["nodejs"], "items": [ [ { @@ -664,7 +669,8 @@ }, { "title": "Express", - "icon": "expressjs", + "hideTitle": true, + "sdk": ["expressjs"], "items": [ [ { @@ -688,7 +694,8 @@ }, { "title": "Fastify", - "icon": "fastify", + "hideTitle": true, + "sdk": ["fastify"], "items": [ [ { @@ -700,8 +707,8 @@ }, { "title": "React Router", - "icon": "react-router", - "tag": "(Beta)", + "hideTitle": true, + "sdk": ["react-router"], "items": [ [ { @@ -744,7 +751,8 @@ }, { "title": "Remix", - "icon": "remix", + "hideTitle": true, + "sdk": ["remix"], "items": [ [ { @@ -772,8 +780,8 @@ }, { "title": "TanStack Start", - "icon": "tanstack", - "tag": "(Beta)", + "hideTitle": true, + "sdk": ["tanstack-start"], "items": [ [ { @@ -813,7 +821,8 @@ }, { "title": "Go", - "icon": "go", + "hideTitle": true, + "sdk": ["go"], "items": [ [ { @@ -837,7 +846,8 @@ }, { "title": "Astro", - "icon": "astro", + "hideTitle": true, + "sdk": ["astro"], "items": [ [ { @@ -937,7 +947,8 @@ }, { "title": "Nuxt", - "icon": "nuxt", + "hideTitle": true, + "sdk": ["nuxt"], "items": [ [ { @@ -973,7 +984,8 @@ }, { "title": "Vue", - "icon": "vue", + "hideTitle": true, + "sdk": ["vue"], "items": [ [ { @@ -1041,7 +1053,8 @@ }, { "title": "Ruby / Rails", - "icon": "ruby", + "hideTitle": true, + "sdk": ["ruby"], "items": [ [ { @@ -1071,22 +1084,10 @@ ] ] }, - { - "title": "Python", - "icon": "python", - "items": [ - [ - { - "title": "Quickstart", - "href": "https://github.com/clerk/clerk-sdk-python/blob/main/README.md", - "target": "_blank" - } - ] - ] - }, { "title": "JS Backend SDK", - "icon": "clerk", + "hideTitle": true, + "sdk": ["javascript-backend"], "items": [ [ { @@ -1522,7 +1523,8 @@ }, { "title": "SDK Development", - "icon": "code-bracket", + "hideTitle": true, + "sdk": ["sdk-development"], "items": [ [ { @@ -1570,6 +1572,8 @@ }, { "title": "Community SDKs", + "hideTitle": true, + "sdk": ["community-sdk"], "items": [ [ { diff --git a/docs/manifest.schema.json b/docs/manifest.schema.json index dacf6e39d4..720cb43ba2 100644 --- a/docs/manifest.schema.json +++ b/docs/manifest.schema.json @@ -55,6 +55,12 @@ "target": { "type": "string", "enum": ["_blank"] + }, + "sdk": { + "type": "array", + "items": { + "$ref": "#/$defs/sdk" + } } } }, @@ -84,9 +90,15 @@ "icon": { "$ref": "#/$defs/icon" }, - "selectable": { + "hideTitle": { "type": "boolean", "default": false + }, + "sdk": { + "type": "array", + "items": { + "$ref": "#/$defs/sdk" + } } } }, @@ -147,6 +159,32 @@ "nuxt", "fastify" ] + }, + "sdk": { + "type": "string", + "enum": [ + "nextjs", + "react", + "javascript-frontend", + "chrome-extension", + "expo", + "ios", + "nodejs", + "expressjs", + "fastify", + "react-router", + "remix", + "tanstack-start", + "go", + "astro", + "nuxt", + "vue", + "ruby", + "python", + "javascript-backend", + "sdk-development", + "community-sdk" + ] } } } From cc4df49fdf46b3dfd5f85619a684b33b3ca265be Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Fri, 17 Jan 2025 13:25:42 -0500 Subject: [PATCH 49/82] simplify further --- docs/nextjs-keyless.mdx | 62 ++++++++--------------------------------- 1 file changed, 12 insertions(+), 50 deletions(-) diff --git a/docs/nextjs-keyless.mdx b/docs/nextjs-keyless.mdx index 222d666bc9..695d0d16da 100644 --- a/docs/nextjs-keyless.mdx +++ b/docs/nextjs-keyless.mdx @@ -22,12 +22,12 @@ icon: "nextjs", > [!IMPORTANT] -> You'll need a Next.js application before you start this quickstart guide. Run `npx create-next-app@latest` to create a new Next.js app. +> You'll need a Next.js application to begin. Run `npx create-next-app@latest` to create one. ## Install `@clerk/nextjs` - Run the following command to install the [Next.js SDK](/docs/references/nextjs/overview): + Run the following command to install the Next.js SDK: ```bash {{ filename: 'terminal' }} @@ -45,8 +45,6 @@ icon: "nextjs", ## Add `clerkMiddleware()` to your app - [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: - 1. Create a `middleware.ts` file. - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. @@ -70,9 +68,12 @@ icon: "nextjs", ## Add `` and Clerk components to your app + 1. Add the `` component to your app's layout. This component provides Clerk's authentication context to your app. + 1. Add Clerk's prebuilt components to create a header with sign-in button. + ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} - import { ClerkProvider, SignedIn, SignedOut, UserButton, SignUpButton } from '@clerk/nextjs' + import { ClerkProvider, SignedIn, SignedOut, UserButton, SignInButton } from '@clerk/nextjs' import './globals.css' export default function RootLayout({ children }: { children: React.ReactNode }) { @@ -82,7 +83,7 @@ icon: "nextjs",
- + @@ -119,16 +120,7 @@ icon: "nextjs", ``` - - - You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#what-are-control-components). Create a header using the following components: - - - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. - - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. - - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. - - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in). - - ## Create your first user + ## Go through the sign-up flow to create your first user Run your project with the following command: @@ -147,13 +139,13 @@ icon: "nextjs", 1. Visit your app's homepage at [http://localhost:3000](http://localhost:3000). - 1. Click "Sign up" and authenticate to create your first user. + 1. Click "Sign in" in the header and authenticate to create your first user. - ## You did it! + ## It's time to build! - Congratulations! You've added Clerk to your Next.js app. 🎉 From here, you can continue developing your application. + You've added Clerk to your Next.js app 🎉. From here, you can continue developing your application. - To make configuration changes to your Clerk development instance, you can claim the Clerk keys that were generated for you. Claiming will associate these keys with your Clerk account (which you can sign-up for if you don't already have one). + To make configuration changes to your Clerk development instance, you can claim the Clerk keys that were generated for you. Claiming will associate these keys with your Clerk account, which you can create if you don't already have one. ## Next steps @@ -171,34 +163,4 @@ icon: "nextjs", - [Read user and session data](/docs/references/nextjs/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. - - --- - - - [Client-side helpers](/docs/references/nextjs/overview#client-side-helpers) - - Learn more about Next.js client-side helpers and how to use them. - - --- - - - [Next.js SDK Reference](/docs/references/nextjs/overview) - - Learn more about additional Next.js methods. - - --- - - - [Deploy to Production](/docs/deployments/overview) - - Learn how to deploy your Clerk app to production. - - --- - - - [Deploy to Vercel](/docs/deployments/deploy-to-vercel) - - Learn how to deploy your Clerk app to production on Vercel. - - --- - - - [Clerk + Next.js App Router Quickstart Repo](https://github.com/clerk/clerk-nextjs-app-quickstart) - - The official companion repo for Clerk's Next.js Quickstart using App Router. - - --- - - - [Clerk + Next.js Pages Router Quickstart Repo](https://github.com/clerk/clerk-nextjs-pages-quickstart) - - The official companion repo for Clerk's Next.js Quickstart using Pages Router. From 204615400eb5b68c1e05f59051d930815d04a866 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Fri, 17 Jan 2025 13:56:01 -0500 Subject: [PATCH 50/82] remove reference to env file --- docs/nextjs-keyless.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/nextjs-keyless.mdx b/docs/nextjs-keyless.mdx index 695d0d16da..f25afb865a 100644 --- a/docs/nextjs-keyless.mdx +++ b/docs/nextjs-keyless.mdx @@ -47,7 +47,7 @@ icon: "nextjs", 1. Create a `middleware.ts` file. - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. + - If you're not using the `/src` directory, create `middleware.ts` in the root directory. 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: ```tsx {{ filename: 'middleware.ts' }} From 60d1775d9cb8d0892ba4928fec5191f21104b1bd Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Tue, 21 Jan 2025 00:01:18 +0800 Subject: [PATCH 51/82] fix manifest.json --- docs/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/manifest.json b/docs/manifest.json index 6a47727550..15f484a2f8 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -56,7 +56,7 @@ { "title": "tRPC", "href": "/docs/references/nextjs/trpc" - } + }, { "title": "General references", "collapse": true, From eebb6ffaa0132e3147b1a86c4022edad1631a4cf Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Tue, 21 Jan 2025 00:02:52 +0800 Subject: [PATCH 52/82] move csharp over the sdk selector --- docs/manifest.json | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 15f484a2f8..03a5b7bfbe 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1164,19 +1164,6 @@ ] ] }, - { - "title": "C#", - "icon": "csharp", - "items": [ - [ - { - "title": "Quickstart", - "href": "https://github.com/clerk/clerk-sdk-csharp/blob/main/README.md", - "target": "_blank" - } - ] - ] - }, { "title": "JS Backend SDK", "hideTitle": true, From 9cb14a8df5fa7df3e860d5037d049b5b932a7bf9 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Tue, 21 Jan 2025 02:45:10 +0800 Subject: [PATCH 53/82] prettier --- docs/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/manifest.json b/docs/manifest.json index 03a5b7bfbe..660c73823d 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -140,7 +140,7 @@ { "title": "React", "hideTitle": true, - "sdk":[ "react"], + "sdk": ["react"], "items": [ [ { From 434ed9ab4067c699849a7bf641366c7d43ff298e Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Mon, 20 Jan 2025 13:47:29 -0500 Subject: [PATCH 54/82] update slug --- docs/{nextjs-keyless.mdx => nextjs-new.mdx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/{nextjs-keyless.mdx => nextjs-new.mdx} (100%) diff --git a/docs/nextjs-keyless.mdx b/docs/nextjs-new.mdx similarity index 100% rename from docs/nextjs-keyless.mdx rename to docs/nextjs-new.mdx From ea30d92105248fa04989536ee7c54c70699afdf9 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Tue, 21 Jan 2025 03:41:29 +0800 Subject: [PATCH 55/82] run prettier --- docs/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/manifest.json b/docs/manifest.json index 660c73823d..f7d9642a37 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1039,7 +1039,7 @@ "collapse": true, "items": [ [ - { + { "title": "Available Methods", "href": "/docs/references/nuxt/overview" }, From 0e6977b2a7af4521cb85b80daf0408f662ec0b1e Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Mon, 20 Jan 2025 16:01:52 -0500 Subject: [PATCH 56/82] use snapshot and remove pages router --- docs/nextjs-new.mdx | 81 +++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 51 deletions(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index f25afb865a..a4a7ca9491 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -24,6 +24,9 @@ icon: "nextjs", > [!IMPORTANT] > You'll need a Next.js application to begin. Run `npx create-next-app@latest` to create one. +> [!WARNING] +> This quickstart is meant for use with Next.js App router. Use [this guide](/docs/quickstarts/nextjs) if you're using the Pages router. + ## Install `@clerk/nextjs` @@ -31,15 +34,15 @@ icon: "nextjs", ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs@keyless + npm install @clerk/nextjs@6.10.0-snapshot.v20250120185339 ``` ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs@keyless + yarn add @clerk/nextjs@6.10.0-snapshot.v20250120185339 ``` ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs@keyless + pnpm add @clerk/nextjs@6.10.0-snapshot.v20250120185339 ``` @@ -71,54 +74,30 @@ icon: "nextjs", 1. Add the `` component to your app's layout. This component provides Clerk's authentication context to your app. 1. Add Clerk's prebuilt components to create a header with sign-in button. - - ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} - import { ClerkProvider, SignedIn, SignedOut, UserButton, SignInButton } from '@clerk/nextjs' - import './globals.css' - - export default function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - - -
- - - - - - -
-
{children}
- - -
- ) - } - ``` - - ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} - import '@/styles/globals.css' - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import type { AppProps } from 'next/app' - - function MyApp({ Component, pageProps }: AppProps) { - return ( - - - - - - - - - - ) - } - - export default MyApp - ``` -
+ ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} + import { ClerkProvider, SignedIn, SignedOut, UserButton, SignInButton } from '@clerk/nextjs' + import './globals.css' + + export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + + +
+ + + + + + +
+
{children}
+ + +
+ ) + } + ``` ## Go through the sign-up flow to create your first user From 2dac5c5df54864617987f179116474f0de3d2a4c Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Mon, 20 Jan 2025 16:49:23 -0500 Subject: [PATCH 57/82] stub in section on unclaimed apps --- docs/keyless.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/keyless.mdx b/docs/keyless.mdx index fb50aa2675..650d15370b 100644 --- a/docs/keyless.mdx +++ b/docs/keyless.mdx @@ -64,6 +64,10 @@ To claim your instance and disable Keyless Mode: - Development instances can't be customized without [being claimed](#claim-your-instance-and-disable-keyless-mode). - Production builds require Clerk API keys of a [claimed instance](#claim-your-instance-and-disable-keyless-mode). +## What happens to unclaimed applications? + +@TODO -- need to add content here. + ## Feedback and Support Keyless Mode is currently available only for [Next.js](/docs/quickstarts/nextjs). For other frameworks, [sign up](https://dashboard.clerk.com/sign-up) to get your API keys. From cf4653fcbb7f275c5500d7bcbfd67729ed230593 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Tue, 21 Jan 2025 11:45:03 -0500 Subject: [PATCH 58/82] update snapshot --- docs/nextjs-new.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index a4a7ca9491..915d2278f7 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -34,15 +34,15 @@ icon: "nextjs", ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs@6.10.0-snapshot.v20250120185339 + npm install @clerk/nextjs@6.10.0-snapshot.v20250121161600 ``` ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs@6.10.0-snapshot.v20250120185339 + yarn add @clerk/nextjs@6.10.0-snapshot.v20250121161600 ``` ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs@6.10.0-snapshot.v20250120185339 + pnpm add @clerk/nextjs@6.10.0-snapshot.v20250121161600 ``` From 4eaf03e6b39f6c997f56ea022a2a47b8d19a1f61 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Tue, 21 Jan 2025 20:48:37 +0200 Subject: [PATCH 59/82] update snapshot --- docs/nextjs-new.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index 915d2278f7..4a94cb3450 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -34,15 +34,15 @@ icon: "nextjs", ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs@6.10.0-snapshot.v20250121161600 + npm install @clerk/nextjs@6.10.0-snapshot.v20250121184427 ``` ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs@6.10.0-snapshot.v20250121161600 + yarn add @clerk/nextjs@6.10.0-snapshot.v20250121184427 ``` ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs@6.10.0-snapshot.v20250121161600 + pnpm add @clerk/nextjs@6.10.0-snapshot.v20250121184427 ``` From 6c87fa82b5e6bdc46fefa35c8b994f9e2454c2a2 Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Tue, 21 Jan 2025 13:52:09 -0500 Subject: [PATCH 60/82] update steps --- docs/nextjs-new.mdx | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index 4a94cb3450..1a9d5c0e28 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -21,13 +21,17 @@ icon: "nextjs", - Use Clerk's prebuilt components for user authentication -> [!IMPORTANT] -> You'll need a Next.js application to begin. Run `npx create-next-app@latest` to create one. + + ## Create a new Next.js application -> [!WARNING] -> This quickstart is meant for use with Next.js App router. Use [this guide](/docs/quickstarts/nextjs) if you're using the Pages router. + Run the following command to create a new Next.js application: + + ```bash {{ filename: 'terminal' }} + npx create-next-app@latest clerk-nextjs-quickstart + ``` + + Accept the default configuration options when prompted. - ## Install `@clerk/nextjs` Run the following command to install the Next.js SDK: @@ -74,15 +78,36 @@ icon: "nextjs", 1. Add the `` component to your app's layout. This component provides Clerk's authentication context to your app. 1. Add Clerk's prebuilt components to create a header with sign-in button. - ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} - import { ClerkProvider, SignedIn, SignedOut, UserButton, SignInButton } from '@clerk/nextjs' + ```tsx {{ filename: 'app/layout.tsx' }} + import type { Metadata } from 'next' + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import { Geist, Geist_Mono } from 'next/font/google' import './globals.css' - export default function RootLayout({ children }: { children: React.ReactNode }) { + const geistSans = Geist({ + variable: '--font-geist-sans', + subsets: ['latin'], + }) + + const geistMono = Geist_Mono({ + variable: '--font-geist-mono', + subsets: ['latin'], + }) + + export const metadata: Metadata = { + title: 'Clerk Next.js Quickstart', + description: 'Generated by create next app', + } + + export default function RootLayout({ + children, + }: Readonly<{ + children: React.ReactNode + }>) { return ( - +
@@ -91,7 +116,7 @@ icon: "nextjs",
-
{children}
+ {children}
From b5a97de51c6999d18a68a5b48bddfc4227ef7157 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Wed, 22 Jan 2025 22:59:46 +0800 Subject: [PATCH 61/82] re-adjust manifest to match main --- docs/manifest.json | 52 +++++++++------------------------------------- 1 file changed, 10 insertions(+), 42 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 0a9b8c363b..c91ab9299c 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -628,39 +628,6 @@ ] ] }, - { - "title": "iOS", - "hideTitle": true, - "sdk": ["ios"], - "items": [ - [ - { - "title": "Quickstart", - "href": "/docs/quickstarts/ios" - }, - { - "title": "`getToken()`", - "href": "/docs/references/ios/get-token" - }, - { - "title": "Sign in with Apple", - "href": "/docs/references/ios/sign-in-with-apple" - }, - { - "title": "References", - "collapse": true, - "items": [ - [ - { - "title": "Available Methods", - "href": "/docs/references/ios/overview" - } - ] - ] - } - ] - ] - }, { "title": "Express", "hideTitle": true, @@ -705,29 +672,30 @@ }, { "title": "iOS", - "tag": "(Beta)", - "icon": "apple", + "hideTitle": true, + "sdk": ["ios"], "items": [ [ { "title": "Quickstart", "href": "/docs/quickstarts/ios" }, - { - "title": "Available Methods", - "href": "/docs/references/ios/overview" - }, { "title": "`getToken()`", "href": "/docs/references/ios/get-token" }, { - "title": "Guides", + "title": "Sign in with Apple", + "href": "/docs/references/ios/sign-in-with-apple" + }, + { + "title": "References", + "collapse": true, "items": [ [ { - "title": "Sign in with Apple", - "href": "/docs/references/ios/sign-in-with-apple" + "title": "Available Methods", + "href": "/docs/references/ios/overview" } ] ] From 20c6922cd77fcab99d70c70e05ddb096d3179f3e Mon Sep 17 00:00:00 2001 From: panteliselef Date: Wed, 22 Jan 2025 18:54:47 +0200 Subject: [PATCH 62/82] update snapshot --- docs/nextjs-new.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index 1a9d5c0e28..27fef1f069 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -38,15 +38,15 @@ icon: "nextjs", ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs@6.10.0-snapshot.v20250121184427 + npm install @clerk/nextjs@6.11.0-snapshot.v20250122165240 ``` ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs@6.10.0-snapshot.v20250121184427 + yarn add @clerk/nextjs@6.11.0-snapshot.v20250122165240 ``` ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs@6.10.0-snapshot.v20250121184427 + pnpm add @clerk/nextjs@6.11.0-snapshot.v20250122165240 ``` From 0d03cb65a4861fed20511bbf8092c150ea120e23 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Thu, 23 Jan 2025 01:24:56 +0800 Subject: [PATCH 63/82] Update docs/quickstarts/setup-clerk.mdx Co-authored-by: Alexis Aguilar <98043211+alexisintech@users.noreply.github.com> --- docs/quickstarts/setup-clerk.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quickstarts/setup-clerk.mdx b/docs/quickstarts/setup-clerk.mdx index 546b997da9..b0cb069ecf 100644 --- a/docs/quickstarts/setup-clerk.mdx +++ b/docs/quickstarts/setup-clerk.mdx @@ -54,7 +54,7 @@ Before you can start integrating Clerk into your application, you need to create --- - - [React Native / Expo](/docs/quickstarts/expo) + - [Expo](/docs/quickstarts/expo) - Use Clerk with Expo to authenticate users in your React Native application. - {} From 6754e0c0f85f0a9f5211b76db1edd32c10c02e16 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Thu, 23 Jan 2025 01:30:45 +0800 Subject: [PATCH 64/82] Add Express, Ruby on Rails and Fastify in to setup-clerk quickstart docs --- docs/quickstarts/setup-clerk.mdx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/quickstarts/setup-clerk.mdx b/docs/quickstarts/setup-clerk.mdx index b0cb069ecf..6007d54a56 100644 --- a/docs/quickstarts/setup-clerk.mdx +++ b/docs/quickstarts/setup-clerk.mdx @@ -93,5 +93,23 @@ Before you can start integrating Clerk into your application, you need to create - [Vue](/docs/quickstarts/vue) - Get started installing and initializing Clerk in a new Vue + Vite app. - {} + + --- + + - [Express](/docs/references/express/overview) + - Quickly add authentication and user management to your Express application. + - {} + + --- + + - [Ruby on Rails](/docs/references/ruby/overview) + - Integrate user management and authentication into your Ruby application. + - {} + + --- + + - [Fastify](/docs/quickstarts/fastify) + - Quickly add authentication and user management to your Fastify application. + - {}
From 235452e559f00022648fc13608a5a4b1119461ca Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Wed, 22 Jan 2025 13:33:27 -0500 Subject: [PATCH 65/82] mark line numbers --- docs/nextjs-new.mdx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index 27fef1f069..e178b9b9c5 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -78,7 +78,10 @@ icon: "nextjs", 1. Add the `` component to your app's layout. This component provides Clerk's authentication context to your app. 1. Add Clerk's prebuilt components to create a header with sign-in button. - ```tsx {{ filename: 'app/layout.tsx' }} + > [!NOTE] + > This is the default `layout.tsx` file generated by Next.js with Clerk's components added. Feel free to copy and paste the whole file into your project. + + ```tsx {{ filename: 'app/layout.tsx', mark: [2, 27, [31, 36], 41] }} import type { Metadata } from 'next' import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' import { Geist, Geist_Mono } from 'next/font/google' @@ -108,7 +111,7 @@ icon: "nextjs", -
+
From d6de1e6129ab916cb06ee1df578c5b83873d950a Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Wed, 22 Jan 2025 15:50:38 -0500 Subject: [PATCH 66/82] fix highlighting, naming --- docs/nextjs-new.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index e178b9b9c5..08e1ad81be 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -27,7 +27,7 @@ icon: "nextjs", Run the following command to create a new Next.js application: ```bash {{ filename: 'terminal' }} - npx create-next-app@latest clerk-nextjs-quickstart + npx create-next-app@latest ``` Accept the default configuration options when prompted. @@ -81,7 +81,7 @@ icon: "nextjs", > [!NOTE] > This is the default `layout.tsx` file generated by Next.js with Clerk's components added. Feel free to copy and paste the whole file into your project. - ```tsx {{ filename: 'app/layout.tsx', mark: [2, 27, [31, 36], 41] }} + ```tsx {{ filename: 'app/layout.tsx', mark: [2, 27, [30, 37], 41] }} import type { Metadata } from 'next' import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' import { Geist, Geist_Mono } from 'next/font/google' From 8e25a747f6a83544dc9fa239ec0be91e4ee9104f Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Wed, 22 Jan 2025 16:40:08 -0500 Subject: [PATCH 67/82] use sign-in and sign-up --- docs/nextjs-new.mdx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index 08e1ad81be..99874903cf 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -81,9 +81,16 @@ icon: "nextjs", > [!NOTE] > This is the default `layout.tsx` file generated by Next.js with Clerk's components added. Feel free to copy and paste the whole file into your project. - ```tsx {{ filename: 'app/layout.tsx', mark: [2, 27, [30, 37], 41] }} + ```tsx {{ filename: 'app/layout.tsx', mark: [[2, 9], 34, [37, 45], 49] }} import type { Metadata } from 'next' - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import { + ClerkProvider, + SignInButton, + SignUpButton, + SignedIn, + SignedOut, + UserButton, + } from '@clerk/nextjs' import { Geist, Geist_Mono } from 'next/font/google' import './globals.css' @@ -111,9 +118,10 @@ icon: "nextjs", -
+
+ From 336f9d3677ab088c5c735e9b14c61aad2531d9a9 Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Wed, 22 Jan 2025 16:55:15 -0500 Subject: [PATCH 68/82] remove example repos --- docs/nextjs-new.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index 99874903cf..0ab3a1af75 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -16,6 +16,7 @@ link: "https://nextjs.org/docs/getting-started/installation", icon: "nextjs", }, ]} +exampleRepo={[]} > - How to add Clerk to your Next.js application - Use Clerk's prebuilt components for user authentication From ba9dbf6bca97367d61f24987a0217f723e7921c6 Mon Sep 17 00:00:00 2001 From: Alexis Aguilar <98043211+alexisintech@users.noreply.github.com> Date: Wed, 22 Jan 2025 17:22:57 -0500 Subject: [PATCH 69/82] alphabetize community sdks --- docs/manifest.json | 67 +++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index c91ab9299c..48431d2622 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1689,62 +1689,57 @@ "items": [ [ { - "title": "Redwood", - "collapse": true, - "icon": "redwood", - "items": [ - [ - { - "title": "Quickstart", - "href": "/docs/references/redwood/overview" - }, - { - "title": "Redwood", - "href": "https://redwoodjs.com/docs/auth/clerk", - "icon": "redwood" - } - ] - ] - }, - { - "title": "Svelte", - "href": "https://github.com/markjaquith/clerk-sveltekit", - "icon": "svelte" + "title": "Angular", + "href": "https://github.com/anagstef/ngx-clerk?tab=readme-ov-file#ngx-clerk", + "icon": "angular" }, { "title": "Elysia", "href": "https://github.com/wobsoriano/elysia-clerk", "icon": "elysia" }, - { - "title": "Rust", - "href": "https://github.com/cincinnati-ventures/clerk-rs", - "icon": "rust" - }, { "title": "Hono", "href": "https://github.com/honojs/middleware/tree/main/packages/clerk-auth", "icon": "hono" }, - { - "title": "C#", - "href": "https://github.com/Hawxy/Clerk.Net", - "icon": "c-sharp" - }, { "title": "Koa", "href": "https://github.com/dimkl/clerk-koa/blob/main/README.md", "icon": "koa" }, - { - "title": "Angular", - "href": "https://github.com/anagstef/ngx-clerk?tab=readme-ov-file#ngx-clerk", - "icon": "angular" - }, { "title": "SolidJS", "href": "https://github.com/spirit-led-software/clerk-solidjs", "icon": "solid" + }, + { + "title": "Svelte", + "href": "https://github.com/markjaquith/clerk-sveltekit", + "icon": "svelte" + }, + { + "title": "Redwood", + "collapse": true, + "icon": "redwood", + "items": [ + [ + { + "title": "Overview", + "href": "/docs/references/redwood/overview" + }, + { + "title": "Redwood", + "href": "https://redwoodjs.com/docs/auth/clerk", + "icon": "redwood" + } + ] + ] + }, + { + "title": "Rust", + "href": "https://github.com/cincinnati-ventures/clerk-rs", + "icon": "rust" } ] ] From 7608aa7d9f0c24ab62da9f7fbf99cc1819a272fb Mon Sep 17 00:00:00 2001 From: panteliselef Date: Thu, 23 Jan 2025 17:37:10 +0200 Subject: [PATCH 70/82] update snapshot --- docs/nextjs-new.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index 0ab3a1af75..010558a93f 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -39,15 +39,15 @@ exampleRepo={[]} ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs@6.11.0-snapshot.v20250122165240 + npm install @clerk/nextjs@6.11.0-snapshot.v20250123153506 ``` ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs@6.11.0-snapshot.v20250122165240 + yarn add @clerk/nextjs@6.11.0-snapshot.v20250123153506 ``` ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs@6.11.0-snapshot.v20250122165240 + pnpm add @clerk/nextjs@6.11.0-snapshot.v20250123153506 ``` From 82e3e51b5267630e8d924be2cc68fc407e144d1d Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Thu, 23 Jan 2025 10:40:56 -0500 Subject: [PATCH 71/82] change to sign-up --- docs/nextjs-new.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index 010558a93f..76fd7bcd03 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -16,7 +16,7 @@ link: "https://nextjs.org/docs/getting-started/installation", icon: "nextjs", }, ]} -exampleRepo={[]} + exampleRepo={[]} > - How to add Clerk to your Next.js application - Use Clerk's prebuilt components for user authentication @@ -155,7 +155,7 @@ exampleRepo={[]} 1. Visit your app's homepage at [http://localhost:3000](http://localhost:3000). - 1. Click "Sign in" in the header and authenticate to create your first user. + 1. Click "Sign up" in the header and authenticate to create your first user. ## It's time to build! From 827644f7127bba1598e8fe1f8b595ef6438cbd2e Mon Sep 17 00:00:00 2001 From: Mike Wickett Date: Thu, 23 Jan 2025 17:30:26 -0500 Subject: [PATCH 72/82] set fixed height on header --- docs/nextjs-new.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index 76fd7bcd03..139fbaa60a 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -119,7 +119,7 @@ icon: "nextjs", -
+
From b41488a1b83271ad6c60f48b5339fd0eb7fd1886 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Fri, 24 Jan 2025 18:51:28 +0200 Subject: [PATCH 73/82] update snapshot --- docs/nextjs-new.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx index 139fbaa60a..d4bfe44a86 100644 --- a/docs/nextjs-new.mdx +++ b/docs/nextjs-new.mdx @@ -39,15 +39,15 @@ icon: "nextjs", ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs@6.11.0-snapshot.v20250123153506 + npm install @clerk/nextjs@6.11.0-snapshot.v20250124164901 ``` ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs@6.11.0-snapshot.v20250123153506 + yarn add @clerk/nextjs@6.11.0-snapshot.v20250124164901 ``` ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs@6.11.0-snapshot.v20250123153506 + pnpm add @clerk/nextjs@6.11.0-snapshot.v20250124164901 ``` From 0c2a2214a08b969ac69fb3961a5e6c4ecec32a19 Mon Sep 17 00:00:00 2001 From: Alexis Aguilar <98043211+alexisintech@users.noreply.github.com> Date: Mon, 27 Jan 2025 19:19:24 -0500 Subject: [PATCH 74/82] sidenav suggestion (#1940) --- docs/manifest.json | 2490 ++++++++++++++++++++++++-------------------- 1 file changed, 1378 insertions(+), 1112 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 4c5d1fdb4d..55021f9c15 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -14,56 +14,26 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/nextjs" - }, - { - "title": "Read session and user data", - "href": "/docs/references/nextjs/read-session-data" - }, - { - "title": "Add a custom sign-in-or-up page", - "href": "/docs/references/nextjs/custom-sign-in-or-up-page" - }, - { - "title": "Add a custom sign-up page", - "href": "/docs/references/nextjs/custom-sign-up-page" - }, - { - "title": "Add custom onboarding", - "href": "/docs/references/nextjs/add-onboarding-flow" - }, - { - "title": "Set up a waitlist", - "href": "/docs/references/nextjs/waitlist" - }, - { - "title": "Role Based Access Control", - "href": "/docs/references/nextjs/basic-rbac" - }, - { - "title": "Rendering modes", - "href": "/docs/references/nextjs/rendering-modes" - }, - { - "title": "Geo blocking", - "href": "/docs/references/nextjs/geo-blocking" - }, - { - "title": "Migrate from Auth.js", - "href": "/docs/references/nextjs/authjs-migration" - }, - { - "title": "tRPC", - "href": "/docs/references/nextjs/trpc" + "title": "Getting started", + "items": [ + [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, + { + "title": "Quickstart", + "href": "/docs/quickstarts/nextjs" + } + ] + ] }, { "title": "General references", - "collapse": true, "items": [ [ { - "title": "Available Methods", + "title": "Overview", "href": "/docs/references/nextjs/overview" }, { @@ -76,7 +46,6 @@ }, { "title": "App Router References", - "collapse": true, "items": [ [ { @@ -102,7 +71,6 @@ }, { "title": "Pages Router References", - "collapse": true, "items": [ [ { @@ -118,9 +86,55 @@ ] ] }, + { + "title": "Guides", + "items": [ + [ + { + "title": "Read session and user data", + "href": "/docs/references/nextjs/read-session-data" + }, + { + "title": "Add a custom sign-in-or-up page", + "href": "/docs/references/nextjs/custom-sign-in-or-up-page" + }, + { + "title": "Add a custom sign-up page", + "href": "/docs/references/nextjs/custom-sign-up-page" + }, + { + "title": "Add custom onboarding", + "href": "/docs/references/nextjs/add-onboarding-flow" + }, + { + "title": "Set up a waitlist", + "href": "/docs/references/nextjs/waitlist" + }, + { + "title": "Role Based Access Control", + "href": "/docs/references/nextjs/basic-rbac" + }, + { + "title": "Rendering modes", + "href": "/docs/references/nextjs/rendering-modes" + }, + { + "title": "Geo blocking", + "href": "/docs/references/nextjs/geo-blocking" + }, + { + "title": "Migrate from Auth.js", + "href": "/docs/references/nextjs/authjs-migration" + }, + { + "title": "tRPC", + "href": "/docs/references/nextjs/trpc" + } + ] + ] + }, { "title": "Demo Repositories", - "collapse": true, "items": [ [ { @@ -144,16 +158,26 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/react" + "title": "Getting started", + "items": [ + [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, + { + "title": "Quickstart", + "href": "/docs/quickstarts/react" + } + ] + ] }, { "title": "References", - "collapse": true, "items": [ [ { - "title": "Available Methods", + "title": "Overview", "href": "/docs/references/react/overview" } ] @@ -161,7 +185,6 @@ }, { "title": "Client-side helpers", - "collapse": true, "items": [ [ { @@ -228,293 +251,311 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/javascript" - }, - { - "title": "Available Methods", - "href": "/docs/references/javascript/overview" - }, - { - "title": "Clerk", - "collapse": true, + "title": "Getting started", "items": [ [ { - "title": "Clerk class", - "href": "/docs/references/javascript/clerk/clerk" - }, - { - "title": "Organization methods", - "href": "/docs/references/javascript/clerk/organization-methods" - }, - { - "title": "Waitlist methods", - "href": "/docs/references/javascript/clerk/waitlist-methods" + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" }, { - "title": "Redirect methods", - "href": "/docs/references/javascript/clerk/redirect-methods" - }, - { - "title": "BuildURLs", - "href": "/docs/references/javascript/clerk/build-urls" - }, - { - "title": "Handle navigation", - "href": "/docs/references/javascript/clerk/handle-navigation" - }, - { - "title": "Session methods", - "href": "/docs/references/javascript/clerk/session-methods" + "title": "Quickstart", + "href": "/docs/quickstarts/javascript" } ] ] }, { - "title": "User", - "collapse": true, + "title": "References", "items": [ [ { - "title": "User object", - "href": "/docs/references/javascript/user/user" - }, - { - "title": "TOTP methods", - "href": "/docs/references/javascript/user/totp" + "title": "Overview", + "href": "/docs/references/javascript/overview" }, { - "title": "Password management methods", - "href": "/docs/references/javascript/user/password-management" + "title": "Clerk", + "collapse": true, + "items": [ + [ + { + "title": "Clerk class", + "href": "/docs/references/javascript/clerk/clerk" + }, + { + "title": "Organization methods", + "href": "/docs/references/javascript/clerk/organization-methods" + }, + { + "title": "Waitlist methods", + "href": "/docs/references/javascript/clerk/waitlist-methods" + }, + { + "title": "Redirect methods", + "href": "/docs/references/javascript/clerk/redirect-methods" + }, + { + "title": "Build URL methods", + "href": "/docs/references/javascript/clerk/build-urls" + }, + { + "title": "Handle navigation", + "href": "/docs/references/javascript/clerk/handle-navigation" + }, + { + "title": "Session methods", + "href": "/docs/references/javascript/clerk/session-methods" + } + ] + ] }, { - "title": "Create metadata methods", - "href": "/docs/references/javascript/user/create-metadata" - } - ] - ] - }, - { - "title": "Organization", - "collapse": true, - "items": [ - [ - { - "title": "Organization object", - "href": "/docs/references/javascript/organization/organization" + "title": "User", + "collapse": true, + "items": [ + [ + { + "title": "User object", + "href": "/docs/references/javascript/user/user" + }, + { + "title": "TOTP methods", + "href": "/docs/references/javascript/user/totp" + }, + { + "title": "Password management methods", + "href": "/docs/references/javascript/user/password-management" + }, + { + "title": "Create metadata methods", + "href": "/docs/references/javascript/user/create-metadata" + } + ] + ] }, { - "title": "Membership methods", - "href": "/docs/references/javascript/organization/members" + "title": "Organization", + "collapse": true, + "items": [ + [ + { + "title": "Organization object", + "href": "/docs/references/javascript/organization/organization" + }, + { + "title": "Membership methods", + "href": "/docs/references/javascript/organization/members" + }, + { + "title": "Invitation methods", + "href": "/docs/references/javascript/organization/invitations" + }, + { + "title": "Domain methods", + "href": "/docs/references/javascript/organization/domains" + }, + { + "title": "Membership request methods", + "href": "/docs/references/javascript/organization/membership-request" + } + ] + ] }, { - "title": "Invitation methods", - "href": "/docs/references/javascript/organization/invitations" + "title": "Session", + "href": "/docs/references/javascript/session" }, { - "title": "Domain methods", - "href": "/docs/references/javascript/organization/domains" + "title": "Client", + "href": "/docs/references/javascript/client" }, - { - "title": "Membership request methods", - "href": "/docs/references/javascript/organization/membership-request" - } - ] - ] - }, - { - "title": "Session", - "href": "/docs/references/javascript/session" - }, - { - "title": "Client", - "href": "/docs/references/javascript/client" - }, - { - "title": "Sign In", - "collapse": true, - "items": [ - [ { "title": "Sign In", - "href": "/docs/references/javascript/sign-in/sign-in" - }, - { - "title": "First Factor", - "href": "/docs/references/javascript/sign-in/first-factor" - }, - { - "title": "Second Factor", - "href": "/docs/references/javascript/sign-in/second-factor" + "collapse": true, + "items": [ + [ + { + "title": "Sign In", + "href": "/docs/references/javascript/sign-in/sign-in" + }, + { + "title": "First Factor", + "href": "/docs/references/javascript/sign-in/first-factor" + }, + { + "title": "Second Factor", + "href": "/docs/references/javascript/sign-in/second-factor" + }, + { + "title": "AuthenticateWith", + "href": "/docs/references/javascript/sign-in/authenticate-with" + } + ] + ] }, - { - "title": "AuthenticateWith", - "href": "/docs/references/javascript/sign-in/authenticate-with" - } - ] - ] - }, - { - "title": "Sign Up", - "collapse": true, - "items": [ - [ { "title": "Sign Up", - "href": "/docs/references/javascript/sign-up/sign-up" - }, - { - "title": "AuthenticateWith", - "href": "/docs/references/javascript/sign-up/authenticate-with" - }, - { - "title": "Verification", - "href": "/docs/references/javascript/sign-up/verification" - }, - { - "title": "Email Verification", - "href": "/docs/references/javascript/sign-up/email-verification" - }, - { - "title": "Phone Verification", - "href": "/docs/references/javascript/sign-up/phone-verification" - }, - { - "title": "Web3 Verification", - "href": "/docs/references/javascript/sign-up/web3-verification" - } - ] - ] - }, - { - "title": "Types", - "collapse": true, - "items": [ - [ - { - "title": "Overview", - "href": "/docs/references/javascript/types/overview" - }, - { - "title": "`ClerkAPIError`", - "href": "/docs/references/javascript/types/clerk-api-error" - }, - { - "title": "`ClerkPaginatedResponse`", - "href": "/docs/references/javascript/types/clerk-paginated-response" - }, - { - "title": "`CustomPage`", - "href": "/docs/references/javascript/types/custom-page" - }, - { - "title": "`EmailAddress`", - "href": "/docs/references/javascript/types/email-address" - }, - { - "title": "`EmailLinkError`", - "href": "/docs/references/javascript/types/email-link-error" - }, - { - "title": "`ExternalAccount`", - "href": "/docs/references/javascript/types/external-account" - }, - { - "title": "`DeletedObject`", - "href": "/docs/references/javascript/types/deleted-object" - }, - { - "title": "Metadata types", - "href": "/docs/references/javascript/types/metadata" - }, - { - "title": "OAuth types", - "href": "/docs/references/javascript/types/oauth" - }, - { - "title": "`OrganizationDomain`", - "href": "/docs/references/javascript/types/organization-domain" - }, - { - "title": "`OrganizationInvitation`", - "href": "/docs/references/javascript/types/organization-invitation" - }, - { - "title": "`OrganizationMembership`", - "href": "/docs/references/javascript/types/organization-membership" + "collapse": true, + "items": [ + [ + { + "title": "Sign Up", + "href": "/docs/references/javascript/sign-up/sign-up" + }, + { + "title": "AuthenticateWith", + "href": "/docs/references/javascript/sign-up/authenticate-with" + }, + { + "title": "Verification", + "href": "/docs/references/javascript/sign-up/verification" + }, + { + "title": "Email Verification", + "href": "/docs/references/javascript/sign-up/email-verification" + }, + { + "title": "Phone Verification", + "href": "/docs/references/javascript/sign-up/phone-verification" + }, + { + "title": "Web3 Verification", + "href": "/docs/references/javascript/sign-up/web3-verification" + } + ] + ] }, { - "title": "`OrganizationMembershipRequest`", - "href": "/docs/references/javascript/types/organization-membership-request" - }, - { - "title": "`OrganizationSuggestion`", - "href": "/docs/references/javascript/types/organization-suggestion" - }, - { - "title": "`PasskeyResource`", - "href": "/docs/references/javascript/types/passkey-resource" - }, - { - "title": "`PhoneNumber`", - "href": "/docs/references/javascript/types/phone-number" - }, - { - "title": "`PublicUserData`", - "href": "/docs/references/javascript/types/public-user-data" - }, - { - "title": "`SessionStatus`", - "href": "/docs/references/javascript/types/session-status" - }, - { - "title": "`SessionVerification`", - "href": "/docs/references/javascript/types/session-verification" - }, - { - "title": "`SessionWithActivities`", - "href": "/docs/references/javascript/types/session-with-activities" - }, - { - "title": "`SetActiveParams`", - "href": "/docs/references/javascript/types/set-active-params" - }, - { - "title": "`SignInFirstFactor`", - "href": "/docs/references/javascript/types/sign-in-first-factor" - }, - { - "title": "`SignInSecondFactor`", - "href": "/docs/references/javascript/types/sign-in-second-factor" - }, - { - "title": "`SignInRedirectOptions`", - "href": "/docs/references/javascript/types/sign-in-redirect-options" - }, - { - "title": "`SignUpRedirectOptions`", - "href": "/docs/references/javascript/types/sign-up-redirect-options" - }, - { - "title": "`SignInInitialValues`", - "href": "/docs/references/javascript/types/sign-in-initial-values" - }, - { - "title": "`SignUpInitialValues`", - "href": "/docs/references/javascript/types/sign-up-initial-values" - }, - { - "title": "`RedirectOptions`", - "href": "/docs/references/javascript/types/redirect-options" - }, - { - "title": "`Verification`", - "href": "/docs/references/javascript/types/verification" - }, - { - "title": "Web3 Wallet", - "href": "/docs/references/javascript/types/web3-wallet" + "title": "Types", + "collapse": true, + "items": [ + [ + { + "title": "Overview", + "href": "/docs/references/javascript/types/overview" + }, + { + "title": "`ClerkAPIError`", + "href": "/docs/references/javascript/types/clerk-api-error" + }, + { + "title": "`ClerkPaginatedResponse`", + "href": "/docs/references/javascript/types/clerk-paginated-response" + }, + { + "title": "`CustomPage`", + "href": "/docs/references/javascript/types/custom-page" + }, + { + "title": "`EmailAddress`", + "href": "/docs/references/javascript/types/email-address" + }, + { + "title": "`EmailLinkError`", + "href": "/docs/references/javascript/types/email-link-error" + }, + { + "title": "`ExternalAccount`", + "href": "/docs/references/javascript/types/external-account" + }, + { + "title": "`DeletedObject`", + "href": "/docs/references/javascript/types/deleted-object" + }, + { + "title": "Metadata types", + "href": "/docs/references/javascript/types/metadata" + }, + { + "title": "OAuth types", + "href": "/docs/references/javascript/types/oauth" + }, + { + "title": "`OrganizationDomain`", + "href": "/docs/references/javascript/types/organization-domain" + }, + { + "title": "`OrganizationInvitation`", + "href": "/docs/references/javascript/types/organization-invitation" + }, + { + "title": "`OrganizationMembership`", + "href": "/docs/references/javascript/types/organization-membership" + }, + { + "title": "`OrganizationMembershipRequest`", + "href": "/docs/references/javascript/types/organization-membership-request" + }, + { + "title": "`OrganizationSuggestion`", + "href": "/docs/references/javascript/types/organization-suggestion" + }, + { + "title": "`PasskeyResource`", + "href": "/docs/references/javascript/types/passkey-resource" + }, + { + "title": "`PhoneNumber`", + "href": "/docs/references/javascript/types/phone-number" + }, + { + "title": "`PublicUserData`", + "href": "/docs/references/javascript/types/public-user-data" + }, + { + "title": "`SessionStatus`", + "href": "/docs/references/javascript/types/session-status" + }, + { + "title": "`SessionVerification`", + "href": "/docs/references/javascript/types/session-verification" + }, + { + "title": "`SessionWithActivities`", + "href": "/docs/references/javascript/types/session-with-activities" + }, + { + "title": "`SetActiveParams`", + "href": "/docs/references/javascript/types/set-active-params" + }, + { + "title": "`SignInFirstFactor`", + "href": "/docs/references/javascript/types/sign-in-first-factor" + }, + { + "title": "`SignInSecondFactor`", + "href": "/docs/references/javascript/types/sign-in-second-factor" + }, + { + "title": "`SignInRedirectOptions`", + "href": "/docs/references/javascript/types/sign-in-redirect-options" + }, + { + "title": "`SignUpRedirectOptions`", + "href": "/docs/references/javascript/types/sign-up-redirect-options" + }, + { + "title": "`SignInInitialValues`", + "href": "/docs/references/javascript/types/sign-in-initial-values" + }, + { + "title": "`SignUpInitialValues`", + "href": "/docs/references/javascript/types/sign-up-initial-values" + }, + { + "title": "`RedirectOptions`", + "href": "/docs/references/javascript/types/redirect-options" + }, + { + "title": "`Verification`", + "href": "/docs/references/javascript/types/verification" + }, + { + "title": "`Web3Wallet`", + "href": "/docs/references/javascript/types/web3-wallet" + } + ] + ] } ] ] @@ -529,8 +570,19 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/astro" + "title": "Getting started", + "items": [ + [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, + { + "title": "Quickstart", + "href": "/docs/quickstarts/astro" + } + ] + ] }, { "title": "Migrating from community SDK", @@ -643,36 +695,53 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/chrome-extension" - }, - { - "title": "Add React Router", - "href": "/docs/references/chrome-extension/add-react-router" - }, - { - "title": "Sync auth status between your Chrome Extension and web app", - "href": "/docs/references/chrome-extension/sync-host" - }, - { - "title": "`createClerkClient()`", - "href": "/docs/references/chrome-extension/create-clerk-client" - }, - { - "title": "Configure a consistent CRX ID", - "href": "/docs/references/chrome-extension/configure-consistent-crx-id" + "title": "Getting started", + "items": [ + [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, + { + "title": "Quickstart", + "href": "/docs/quickstarts/chrome-extension" + } + ] + ] }, { "title": "References", - "collapse": true, "items": [ [ { - "title": "Available Methods", + "title": "Overview", "href": "/docs/references/chrome-extension/overview" } ] ] + }, + { + "title": "Guides", + "items": [ + [ + { + "title": "Add React Router", + "href": "/docs/references/chrome-extension/add-react-router" + }, + { + "title": "Sync auth status between your Chrome Extension and web app", + "href": "/docs/references/chrome-extension/sync-host" + }, + { + "title": "`createClerkClient()`", + "href": "/docs/references/chrome-extension/create-clerk-client" + }, + { + "title": "Configure a consistent CRX ID", + "href": "/docs/references/chrome-extension/configure-consistent-crx-id" + } + ] + ] } ] ] @@ -684,28 +753,26 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/expo" - }, - { - "title": "Read session and user data", - "href": "/docs/references/expo/read-session-user-data" - }, - { - "title": "Use biometrics with local credentials", - "href": "/docs/references/expo/local-credentials" - }, - { - "title": "Offline support", - "href": "/docs/references/expo/offline-support" + "title": "Getting started", + "items": [ + [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, + { + "title": "Quickstart", + "href": "/docs/quickstarts/expo" + } + ] + ] }, { "title": "References", - "collapse": true, "items": [ [ { - "title": "Available Methods", + "title": "Overview", "href": "/docs/references/expo/overview" }, { @@ -719,6 +786,25 @@ ] ] }, + { + "title": "Guides", + "items": [ + [ + { + "title": "Read session and user data", + "href": "/docs/references/expo/read-session-user-data" + }, + { + "title": "Use biometrics with local credentials", + "href": "/docs/references/expo/local-credentials" + }, + { + "title": "Offline support", + "href": "/docs/references/expo/offline-support" + } + ] + ] + }, { "title": "Web support", "collapse": true, @@ -749,16 +835,26 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/express" + "title": "Getting started", + "items": [ + [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, + { + "title": "Quickstart", + "href": "/docs/quickstarts/express" + } + ] + ] }, { "title": "References", - "collapse": true, "items": [ [ { - "title": "Available Methods", + "title": "Overview", "href": "/docs/references/express/overview" } ] @@ -774,12 +870,30 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/fastify" + "title": "Getting started", + "items": [ + [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, + { + "title": "Quickstart", + "href": "/docs/quickstarts/fastify" + } + ] + ] }, { - "title": "Available Methods", - "href": "/docs/references/fastify/overview" + "title": "References", + "items": [ + [ + { + "title": "Overview", + "href": "/docs/references/fastify/overview" + } + ] + ] } ] ] @@ -791,16 +905,34 @@ "items": [ [ { - "title": "Quickstart & Available Methods", - "href": "/docs/references/go/overview" - }, - { - "title": "Verifying sessions", - "href": "/docs/references/go/verifying-sessions" + "title": "Getting started", + "items": [ + [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, + { + "title": "Quickstart", + "href": "/docs/references/go/overview" + } + ] + ] }, { - "title": "Use Clerk Go for Backend API Operations", - "href": "/docs/references/go/other-examples" + "title": "Guides", + "items": [ + [ + { + "title": "Verifying sessions", + "href": "/docs/references/go/verifying-sessions" + }, + { + "title": "Use Clerk Go for Backend API Operations", + "href": "/docs/references/go/other-examples" + } + ] + ] }, { "title": "Go SDK repository", @@ -816,25 +948,42 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/ios" - }, - { - "title": "`getToken()`", - "href": "/docs/references/ios/get-token" - }, - { - "title": "Sign in with Apple", - "href": "/docs/references/ios/sign-in-with-apple" + "title": "Getting started", + "items": [ + [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, + { + "title": "Quickstart", + "href": "/docs/quickstarts/ios" + } + ] + ] }, { "title": "References", - "collapse": true, "items": [ [ { - "title": "Available Methods", + "title": "Overview", "href": "/docs/references/ios/overview" + }, + { + "title": "`getToken()`", + "href": "/docs/references/ios/get-token" + } + ] + ] + }, + { + "title": "Guides", + "items": [ + [ + { + "title": "Sign in with Apple", + "href": "/docs/references/ios/sign-in-with-apple" } ] ] @@ -849,498 +998,640 @@ "items": [ [ { - "title": "Quickstart & Available Methods", - "href": "/docs/references/backend/overview" - }, - { - "title": "User", - "collapse": true, + "title": "Getting started", "items": [ [ { - "title": "`getUserList()`", - "wrap": false, - "href": "/docs/references/backend/user/get-user-list" - }, - { - "title": "`getUser()`", - "wrap": false, - "href": "/docs/references/backend/user/get-user" - }, - { - "title": "`getCount()`", - "wrap": false, - "href": "/docs/references/backend/user/get-count" - }, - { - "title": "`getOrganizationMembershipList()`", - "wrap": false, - "href": "/docs/references/backend/user/get-organization-membership-list" - }, - { - "title": "`getUserOAuthAccessToken()`", - "wrap": false, - "href": "/docs/references/backend/user/get-user-oauth-access-token" - }, - { - "title": "`createUser()`", - "wrap": false, - "href": "/docs/references/backend/user/create-user" - }, - { - "title": "`verifyPassword()`", - "wrap": false, - "href": "/docs/references/backend/user/verify-password" - }, - { - "title": "`banUser()`", - "wrap": false, - "href": "/docs/references/backend/user/ban-user" - }, - { - "title": "`unbanUser()`", - "wrap": false, - "href": "/docs/references/backend/user/unban-user" - }, - { - "title": "`lockUser()`", - "wrap": false, - "href": "/docs/references/backend/user/lock-user" - }, - { - "title": "`unlockUser()`", - "wrap": false, - "href": "/docs/references/backend/user/unlock-user" - }, - { - "title": "`updateUser()`", - "wrap": false, - "href": "/docs/references/backend/user/update-user" - }, - { - "title": "`updateUserProfileImage()`", - "wrap": false, - "href": "/docs/references/backend/user/update-user-profile-image" - }, - { - "title": "`updateUserMetadata()`", - "wrap": false, - "href": "/docs/references/backend/user/update-user-metadata" - }, - { - "title": "`deleteUser()`", - "wrap": false, - "href": "/docs/references/backend/user/delete-user" - }, - { - "title": "`disableUserMFA()`", - "wrap": false, - "href": "/docs/references/backend/user/disable-user-mfa" - }, - { - "title": "`verifyTOTP()`", - "wrap": false, - "href": "/docs/references/backend/user/verify-totp" + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" }, { - "title": "`deleteUserProfileImage()`", - "wrap": false, - "href": "/docs/references/backend/user/delete-user-profile-image" + "title": "Quickstart", + "href": "/docs/references/backend/overview" } ] ] }, { - "title": "Organization", - "collapse": true, + "title": "References", "items": [ [ { - "title": "`getOrganization()`", - "wrap": false, - "href": "/docs/references/backend/organization/get-organization" - }, - { - "title": "`getOrganizationList()`", - "wrap": false, - "href": "/docs/references/backend/organization/get-organization-list" - }, - { - "title": "`getOrganizationMembershipList()`", - "wrap": false, - "href": "/docs/references/backend/organization/get-organization-membership-list" - }, - { - "title": "`getOrganizationInvitationList()`", - "wrap": false, - "href": "/docs/references/backend/organization/get-organization-invitation-list" - }, - { - "title": "`createOrganization()`", - "wrap": false, - "href": "/docs/references/backend/organization/create-organization" - }, - { - "title": "`createOrganizationMembership()`", - "wrap": false, - "href": "/docs/references/backend/organization/create-organization-membership" - }, - { - "title": "`createOrganizationInvitation()`", - "wrap": false, - "href": "/docs/references/backend/organization/create-organization-invitation" - }, - { - "title": "`updateOrganization()`", - "wrap": false, - "href": "/docs/references/backend/organization/update-organization" - }, - { - "title": "`updateOrganizationLogo()`", - "wrap": false, - "href": "/docs/references/backend/organization/update-organization-logo" - }, - { - "title": "`updateOrganizationMembership()`", - "wrap": false, - "href": "/docs/references/backend/organization/update-organization-membership" - }, - { - "title": "`updateOrganizationMetadata()`", - "wrap": false, - "href": "/docs/references/backend/organization/update-organization-metadata" - }, - { - "title": "`updateOrganizationMembershipMetadata()`", - "wrap": false, - "href": "/docs/references/backend/organization/update-organization-membership-metadata" - }, - { - "title": "`deleteOrganization()`", - "wrap": false, - "href": "/docs/references/backend/organization/delete-organization" - }, - { - "title": "`deleteOrganizationMembership()`", - "wrap": false, - "href": "/docs/references/backend/organization/delete-organization-membership" + "title": "User", + "collapse": true, + "items": [ + [ + { + "title": "`getUserList()`", + "wrap": false, + "href": "/docs/references/backend/user/get-user-list" + }, + { + "title": "`getUser()`", + "wrap": false, + "href": "/docs/references/backend/user/get-user" + }, + { + "title": "`getCount()`", + "wrap": false, + "href": "/docs/references/backend/user/get-count" + }, + { + "title": "`getOrganizationMembershipList()`", + "wrap": false, + "href": "/docs/references/backend/user/get-organization-membership-list" + }, + { + "title": "`getUserOAuthAccessToken()`", + "wrap": false, + "href": "/docs/references/backend/user/get-user-oauth-access-token" + }, + { + "title": "`createUser()`", + "wrap": false, + "href": "/docs/references/backend/user/create-user" + }, + { + "title": "`verifyPassword()`", + "wrap": false, + "href": "/docs/references/backend/user/verify-password" + }, + { + "title": "`banUser()`", + "wrap": false, + "href": "/docs/references/backend/user/ban-user" + }, + { + "title": "`unbanUser()`", + "wrap": false, + "href": "/docs/references/backend/user/unban-user" + }, + { + "title": "`lockUser()`", + "wrap": false, + "href": "/docs/references/backend/user/lock-user" + }, + { + "title": "`unlockUser()`", + "wrap": false, + "href": "/docs/references/backend/user/unlock-user" + }, + { + "title": "`updateUser()`", + "wrap": false, + "href": "/docs/references/backend/user/update-user" + }, + { + "title": "`updateUserProfileImage()`", + "wrap": false, + "href": "/docs/references/backend/user/update-user-profile-image" + }, + { + "title": "`updateUserMetadata()`", + "wrap": false, + "href": "/docs/references/backend/user/update-user-metadata" + }, + { + "title": "`deleteUser()`", + "wrap": false, + "href": "/docs/references/backend/user/delete-user" + }, + { + "title": "`disableUserMFA()`", + "wrap": false, + "href": "/docs/references/backend/user/disable-user-mfa" + }, + { + "title": "`verifyTOTP()`", + "wrap": false, + "href": "/docs/references/backend/user/verify-totp" + }, + { + "title": "`deleteUserProfileImage()`", + "wrap": false, + "href": "/docs/references/backend/user/delete-user-profile-image" + } + ] + ] }, { - "title": "`revokeOrganizationInvitation()`", - "wrap": false, - "href": "/docs/references/backend/organization/revoke-organization-invitation" - } - ] - ] - }, - { - "title": "Allowlist Identifiers", - "collapse": true, - "items": [ - [ - { - "title": "`getAllowlistIdentifierList()`", - "wrap": false, - "href": "/docs/references/backend/allowlist/get-allowlist-identifier-list" + "title": "Organization", + "collapse": true, + "items": [ + [ + { + "title": "`getOrganization()`", + "wrap": false, + "href": "/docs/references/backend/organization/get-organization" + }, + { + "title": "`getOrganizationList()`", + "wrap": false, + "href": "/docs/references/backend/organization/get-organization-list" + }, + { + "title": "`getOrganizationMembershipList()`", + "wrap": false, + "href": "/docs/references/backend/organization/get-organization-membership-list" + }, + { + "title": "`getOrganizationInvitationList()`", + "wrap": false, + "href": "/docs/references/backend/organization/get-organization-invitation-list" + }, + { + "title": "`createOrganization()`", + "wrap": false, + "href": "/docs/references/backend/organization/create-organization" + }, + { + "title": "`createOrganizationMembership()`", + "wrap": false, + "href": "/docs/references/backend/organization/create-organization-membership" + }, + { + "title": "`createOrganizationInvitation()`", + "wrap": false, + "href": "/docs/references/backend/organization/create-organization-invitation" + }, + { + "title": "`updateOrganization()`", + "wrap": false, + "href": "/docs/references/backend/organization/update-organization" + }, + { + "title": "`updateOrganizationLogo()`", + "wrap": false, + "href": "/docs/references/backend/organization/update-organization-logo" + }, + { + "title": "`updateOrganizationMembership()`", + "wrap": false, + "href": "/docs/references/backend/organization/update-organization-membership" + }, + { + "title": "`updateOrganizationMetadata()`", + "wrap": false, + "href": "/docs/references/backend/organization/update-organization-metadata" + }, + { + "title": "`updateOrganizationMembershipMetadata()`", + "wrap": false, + "href": "/docs/references/backend/organization/update-organization-membership-metadata" + }, + { + "title": "`deleteOrganization()`", + "wrap": false, + "href": "/docs/references/backend/organization/delete-organization" + }, + { + "title": "`deleteOrganizationMembership()`", + "wrap": false, + "href": "/docs/references/backend/organization/delete-organization-membership" + }, + { + "title": "`revokeOrganizationInvitation()`", + "wrap": false, + "href": "/docs/references/backend/organization/revoke-organization-invitation" + } + ] + ] }, { - "title": "`createAllowlistIdentifier()`", - "wrap": false, - "href": "/docs/references/backend/allowlist/create-allowlist-identifier" + "title": "Allowlist Identifiers", + "collapse": true, + "items": [ + [ + { + "title": "`getAllowlistIdentifierList()`", + "wrap": false, + "href": "/docs/references/backend/allowlist/get-allowlist-identifier-list" + }, + { + "title": "`createAllowlistIdentifier()`", + "wrap": false, + "href": "/docs/references/backend/allowlist/create-allowlist-identifier" + }, + { + "title": "`deleteAllowlistIdentifier()`", + "wrap": false, + "href": "/docs/references/backend/allowlist/delete-allowlist-identifier" + } + ] + ] }, { - "title": "`deleteAllowlistIdentifier()`", - "wrap": false, - "href": "/docs/references/backend/allowlist/delete-allowlist-identifier" - } - ] - ] - }, - { - "title": "Sessions", - "collapse": true, - "items": [ - [ - { - "title": "`getSession()`", - "wrap": false, - "href": "/docs/references/backend/sessions/get-session" + "title": "Sessions", + "collapse": true, + "items": [ + [ + { + "title": "`getSession()`", + "wrap": false, + "href": "/docs/references/backend/sessions/get-session" + }, + { + "title": "`getSessionList()`", + "wrap": false, + "href": "/docs/references/backend/sessions/get-session-list" + }, + { + "title": "`getToken()`", + "wrap": false, + "href": "/docs/references/backend/sessions/get-token" + }, + { + "title": "`verifySession()`", + "wrap": false, + "href": "/docs/references/backend/sessions/verify-session" + }, + { + "title": "`revokeSession()`", + "wrap": false, + "href": "/docs/references/backend/sessions/revoke-session" + } + ] + ] }, { - "title": "`getSessionList()`", - "wrap": false, - "href": "/docs/references/backend/sessions/get-session-list" + "title": "Client", + "collapse": true, + "items": [ + [ + { + "title": "`getClient()`", + "wrap": false, + "href": "/docs/references/backend/client/get-client" + }, + { + "title": "`getClientList()`", + "wrap": false, + "href": "/docs/references/backend/client/get-client-list" + }, + { + "title": "`verifyClient()`", + "wrap": false, + "href": "/docs/references/backend/client/verify-client" + } + ] + ] }, { - "title": "`getToken()`", - "wrap": false, - "href": "/docs/references/backend/sessions/get-token" + "title": "Invitations", + "collapse": true, + "items": [ + [ + { + "title": "`getInvitationList()`", + "wrap": false, + "href": "/docs/references/backend/invitations/get-invitation-list" + }, + { + "title": "`createInvitation()`", + "wrap": false, + "href": "/docs/references/backend/invitations/create-invitation" + }, + { + "title": "`revokeInvitation()`", + "wrap": false, + "href": "/docs/references/backend/invitations/revoke-invitation" + } + ] + ] }, { - "title": "`verifySession()`", - "wrap": false, - "href": "/docs/references/backend/sessions/verify-session" + "title": "Redirect Urls", + "collapse": true, + "items": [ + [ + { + "title": "`getRedirectUrl()`", + "wrap": false, + "href": "/docs/references/backend/redirect-urls/get-redirect-url" + }, + { + "title": "`getRedirectUrlList()`", + "wrap": false, + "href": "/docs/references/backend/redirect-urls/get-redirect-url-list" + }, + { + "title": "`createRedirectUrl()`", + "wrap": false, + "href": "/docs/references/backend/redirect-urls/create-redirect-url" + }, + { + "title": "`deleteRedirectUrl()`", + "wrap": false, + "href": "/docs/references/backend/redirect-urls/delete-redirect-url" + } + ] + ] }, { - "title": "`revokeSession()`", - "wrap": false, - "href": "/docs/references/backend/sessions/revoke-session" - } - ] - ] - }, - { - "title": "Client", - "collapse": true, - "items": [ - [ - { - "title": "`getClient()`", - "wrap": false, - "href": "/docs/references/backend/client/get-client" + "title": "Email addresses", + "collapse": true, + "items": [ + [ + { + "title": "`getEmailAddress()`", + "wrap": false, + "href": "/docs/references/backend/email-addresses/get-email-address" + }, + { + "title": "`createEmailAddress()`", + "wrap": false, + "href": "/docs/references/backend/email-addresses/create-email-address" + }, + { + "title": "`updateEmailAddress()`", + "wrap": false, + "href": "/docs/references/backend/email-addresses/update-email-address" + }, + { + "title": "`deleteEmailAddress()`", + "wrap": false, + "href": "/docs/references/backend/email-addresses/delete-email-address" + } + ] + ] }, { - "title": "`getClientList()`", - "wrap": false, - "href": "/docs/references/backend/client/get-client-list" + "title": "Phone numbers", + "collapse": true, + "items": [ + [ + { + "title": "`getPhoneNumber()`", + "wrap": false, + "href": "/docs/references/backend/phone-numbers/get-phone-number" + }, + { + "title": "`createPhoneNumber()`", + "wrap": false, + "href": "/docs/references/backend/phone-numbers/create-phone-number" + }, + { + "title": "`updatePhoneNumber()`", + "wrap": false, + "href": "/docs/references/backend/phone-numbers/update-phone-number" + }, + { + "title": "`deletePhoneNumber()`", + "wrap": false, + "href": "/docs/references/backend/phone-numbers/delete-phone-number" + } + ] + ] }, { - "title": "`verifyClient()`", - "wrap": false, - "href": "/docs/references/backend/client/verify-client" - } - ] - ] - }, - { - "title": "Invitations", - "collapse": true, - "items": [ - [ - { - "title": "`getInvitationList()`", - "wrap": false, - "href": "/docs/references/backend/invitations/get-invitation-list" + "title": "SAML connections", + "collapse": true, + "items": [ + [ + { + "title": "`getSamlConnectionList()`", + "wrap": false, + "href": "/docs/references/backend/saml-connections/get-saml-connection-list" + }, + { + "title": "`getSamlConnection()`", + "wrap": false, + "href": "/docs/references/backend/saml-connections/get-saml-connection" + }, + { + "title": "`createSamlConnection()`", + "wrap": false, + "href": "/docs/references/backend/saml-connections/create-saml-connection" + }, + { + "title": "`updateSamlConnection()`", + "wrap": false, + "href": "/docs/references/backend/saml-connections/update-saml-connection" + }, + { + "title": "`deleteSamlConnection()`", + "wrap": false, + "href": "/docs/references/backend/saml-connections/delete-saml-connection" + } + ] + ] }, { - "title": "`createInvitation()`", - "wrap": false, - "href": "/docs/references/backend/invitations/create-invitation" + "title": "Sign-in tokens", + "collapse": true, + "items": [ + [ + { + "title": "`createSignInToken()`", + "wrap": false, + "href": "/docs/references/backend/sign-in-tokens/create-sign-in-token" + }, + { + "title": "`revokeSignInToken()`", + "wrap": false, + "href": "/docs/references/backend/sign-in-tokens/revoke-sign-in-token" + } + ] + ] }, { - "title": "`revokeInvitation()`", - "wrap": false, - "href": "/docs/references/backend/invitations/revoke-invitation" - } - ] - ] - }, - { - "title": "Redirect Urls", - "collapse": true, - "items": [ - [ - { - "title": "`getRedirectUrl()`", - "wrap": false, - "href": "/docs/references/backend/redirect-urls/get-redirect-url" + "title": "Testing Tokens", + "collapse": true, + "items": [ + [ + { + "title": "`createTestingToken()`", + "wrap": false, + "href": "/docs/references/backend/testing-tokens/create-testing-token" + } + ] + ] }, { - "title": "`getRedirectUrlList()`", + "title": "`authenticateRequest()`", "wrap": false, - "href": "/docs/references/backend/redirect-urls/get-redirect-url-list" + "href": "/docs/references/backend/authenticate-request" }, { - "title": "`createRedirectUrl()`", + "title": "`verifyToken()`", "wrap": false, - "href": "/docs/references/backend/redirect-urls/create-redirect-url" + "href": "/docs/references/backend/verify-token" }, { - "title": "`deleteRedirectUrl()`", - "wrap": false, - "href": "/docs/references/backend/redirect-urls/delete-redirect-url" + "title": "Types", + "collapse": true, + "items": [ + [ + { + "title": "`Auth` object", + "href": "/docs/references/backend/types/auth-object" + }, + { + "title": "Backend `AllowlistIdentifier` object", + "href": "/docs/references/backend/types/backend-allowlist-identifier" + }, + { + "title": "Backend `Client` object", + "href": "/docs/references/backend/types/backend-client" + }, + { + "title": "Backend `Invitation` object", + "href": "/docs/references/backend/types/backend-invitation" + }, + { + "title": "Backend `Organization` object", + "href": "/docs/references/backend/types/backend-organization" + }, + { + "title": "Backend `OrganizationInvitation` object", + "href": "/docs/references/backend/types/backend-organization-invitation" + }, + { + "title": "Backend `OrganizationMembership` object", + "href": "/docs/references/backend/types/backend-organization-membership" + }, + { + "title": "Backend `Session` object", + "href": "/docs/references/backend/types/backend-session" + }, + { + "title": "Backend `RedirectURL` object", + "href": "/docs/references/backend/types/backend-redirect-url" + }, + { + "title": "Backend `User` object", + "href": "/docs/references/backend/types/backend-user" + }, + { + "title": "`PaginatedResourceResponse`", + "href": "/docs/references/backend/types/paginated-resource-response" + } + ] + ] } ] ] - }, + } + ] + ] + }, + { + "title": "Nuxt", + "hideTitle": true, + "sdk": ["nuxt"], + "items": [ + [ { - "title": "Email addresses", - "collapse": true, + "title": "Getting started", "items": [ [ { - "title": "`getEmailAddress()`", - "wrap": false, - "href": "/docs/references/backend/email-addresses/get-email-address" - }, - { - "title": "`createEmailAddress()`", - "wrap": false, - "href": "/docs/references/backend/email-addresses/create-email-address" - }, - { - "title": "`updateEmailAddress()`", - "wrap": false, - "href": "/docs/references/backend/email-addresses/update-email-address" + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" }, { - "title": "`deleteEmailAddress()`", - "wrap": false, - "href": "/docs/references/backend/email-addresses/delete-email-address" + "title": "Quickstart", + "href": "/docs/quickstarts/nuxt" } ] ] }, { - "title": "Phone numbers", - "collapse": true, + "title": "References", "items": [ [ { - "title": "`getPhoneNumber()`", - "wrap": false, - "href": "/docs/references/backend/phone-numbers/get-phone-number" - }, - { - "title": "`createPhoneNumber()`", - "wrap": false, - "href": "/docs/references/backend/phone-numbers/create-phone-number" - }, - { - "title": "`updatePhoneNumber()`", - "wrap": false, - "href": "/docs/references/backend/phone-numbers/update-phone-number" + "title": "Overview", + "href": "/docs/references/nuxt/overview" }, { - "title": "`deletePhoneNumber()`", + "title": "`clerkMiddleware()`", "wrap": false, - "href": "/docs/references/backend/phone-numbers/delete-phone-number" + "href": "/docs/references/nuxt/clerk-middleware" } ] ] }, { - "title": "SAML connections", - "collapse": true, + "title": "Guides", "items": [ [ { - "title": "`getSamlConnectionList()`", + "title": "Read session and user data", "wrap": false, - "href": "/docs/references/backend/saml-connections/get-saml-connection-list" + "href": "/docs/references/nuxt/read-session-data" }, { - "title": "`getSamlConnection()`", + "title": "Protect pages", "wrap": false, - "href": "/docs/references/backend/saml-connections/get-saml-connection" - }, - { - "title": "`createSamlConnection()`", - "wrap": false, - "href": "/docs/references/backend/saml-connections/create-saml-connection" - }, - { - "title": "`updateSamlConnection()`", - "wrap": false, - "href": "/docs/references/backend/saml-connections/update-saml-connection" - }, - { - "title": "`deleteSamlConnection()`", - "wrap": false, - "href": "/docs/references/backend/saml-connections/delete-saml-connection" + "href": "/docs/references/nuxt/protect-pages" } ] ] - }, + } + ] + ] + }, + { + "title": "React Router", + "hideTitle": true, + "sdk": ["react-router"], + "items": [ + [ { - "title": "Sign-in tokens", - "collapse": true, + "title": "Getting started", "items": [ [ { - "title": "`createSignInToken()`", - "wrap": false, - "href": "/docs/references/backend/sign-in-tokens/create-sign-in-token" + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" }, { - "title": "`revokeSignInToken()`", - "wrap": false, - "href": "/docs/references/backend/sign-in-tokens/revoke-sign-in-token" + "title": "Quickstart", + "href": "/docs/quickstarts/react-router" } ] ] }, { - "title": "Testing Tokens", - "collapse": true, + "title": "References", "items": [ [ { - "title": "`createTestingToken()`", + "title": "Overview", + "href": "/docs/references/react-router/overview" + }, + { + "title": "`rootAuthLoader()`", "wrap": false, - "href": "/docs/references/backend/testing-tokens/create-testing-token" + "href": "/docs/references/react-router/root-auth-loader" + }, + { + "title": "`getAuth()`", + "href": "/docs/references/react-router/get-auth" } ] ] }, { - "title": "`authenticateRequest()`", - "wrap": false, - "href": "/docs/references/backend/authenticate-request" - }, - { - "title": "`verifyToken()`", - "wrap": false, - "href": "/docs/references/backend/verify-token" - }, - { - "title": "Types", - "collapse": true, + "title": "Guides", "items": [ [ { - "title": "`Auth` object", - "href": "/docs/references/backend/types/auth-object" - }, - { - "title": "Backend `AllowlistIdentifier` object", - "href": "/docs/references/backend/types/backend-allowlist-identifier" - }, - { - "title": "Backend `Client` object", - "href": "/docs/references/backend/types/backend-client" + "title": "Read session and user data", + "href": "/docs/references/react-router/read-session-data" }, { - "title": "Backend `Invitation` object", - "href": "/docs/references/backend/types/backend-invitation" + "title": "Add custom sign-in-or-up page", + "href": "/docs/references/react-router/custom-sign-in-or-up-page" }, { - "title": "Backend `Organization` object", - "href": "/docs/references/backend/types/backend-organization" + "title": "Add custom sign-up page", + "href": "/docs/references/react-router/custom-sign-up-page" }, { - "title": "Backend `OrganizationInvitation` object", - "href": "/docs/references/backend/types/backend-organization-invitation" - }, - { - "title": "Backend `OrganizationMembership` object", - "href": "/docs/references/backend/types/backend-organization-membership" - }, - { - "title": "Backend `Session` object", - "href": "/docs/references/backend/types/backend-session" - }, - { - "title": "Backend `RedirectURL` object", - "href": "/docs/references/backend/types/backend-redirect-url" - }, - { - "title": "Backend `User` object", - "href": "/docs/references/backend/types/backend-user" - }, - { - "title": "`PaginatedResourceResponse`", - "href": "/docs/references/backend/types/paginated-resource-response" + "title": "Library mode", + "href": "/docs/references/react-router/library-mode" } ] ] @@ -1349,88 +1640,61 @@ ] }, { - "title": "Nuxt", + "title": "Remix", "hideTitle": true, - "sdk": ["nuxt"], + "sdk": ["remix"], "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/nuxt" - }, - { - "title": "Read session and user data", - "wrap": false, - "href": "/docs/references/nuxt/read-session-data" - }, - { - "title": "Protect pages", - "wrap": false, - "href": "/docs/references/nuxt/protect-pages" - }, - { - "title": "References", - "collapse": true, + "title": "Getting started", "items": [ [ { - "title": "Available Methods", - "href": "/docs/references/nuxt/overview" + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" }, { - "title": "`clerkMiddleware()`", - "wrap": false, - "href": "/docs/references/nuxt/clerk-middleware" + "title": "Quickstart", + "href": "/docs/quickstarts/remix" } ] ] - } - ] - ] - }, - { - "title": "React Router", - "hideTitle": true, - "sdk": ["react-router"], - "items": [ - [ - { - "title": "Quickstart", - "href": "/docs/quickstarts/react-router" - }, - { - "title": "Read session and user data", - "href": "/docs/references/react-router/read-session-data" - }, - { - "title": "Add custom sign-in-or-up page", - "href": "/docs/references/react-router/custom-sign-in-or-up-page" - }, - { - "title": "Add custom sign-up page", - "href": "/docs/references/react-router/custom-sign-up-page" }, { - "title": "Library mode", - "href": "/docs/references/react-router/library-mode" + "title": "References", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/references/remix/clerk-app" + } + ] + ] }, { - "title": "General references", - "collapse": true, + "title": "Guides", "items": [ [ { - "title": "Available Methods", - "href": "/docs/references/react-router/overview" + "title": "SPA Mode", + "wrap": false, + "href": "/docs/references/remix/spa-mode" }, { - "title": "`rootAuthLoader()`", - "wrap": false, - "href": "/docs/references/react-router/root-auth-loader" + "title": "Add custom sign-in-or-up page", + "wrap": true, + "href": "/docs/references/remix/custom-sign-in-or-up-page" }, { - "title": "`getAuth()`", - "href": "/docs/references/react-router/get-auth" + "title": "Add custom sign-up page", + "wrap": true, + "href": "/docs/references/remix/custom-sign-up-page" + }, + { + "title": "Read session and user data", + "wrap": true, + "href": "/docs/references/remix/read-session-data" } ] ] @@ -1438,44 +1702,6 @@ ] ] }, - { - "title": "Remix", - "hideTitle": true, - "sdk": ["remix"], - "items": [ - [ - { - "title": "Quickstart", - "href": "/docs/quickstarts/remix" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/references/remix/clerk-app" - }, - { - "title": "SPA Mode", - "wrap": false, - "href": "/docs/references/remix/spa-mode" - }, - { - "title": "Add custom sign-in-or-up page", - "wrap": true, - "href": "/docs/references/remix/custom-sign-in-or-up-page" - }, - { - "title": "Add custom sign-up page", - "wrap": true, - "href": "/docs/references/remix/custom-sign-up-page" - }, - { - "title": "Read session and user data", - "wrap": true, - "href": "/docs/references/remix/read-session-data" - } - ] - ] - }, { "title": "Ruby / Rails", "hideTitle": true, @@ -1483,28 +1709,45 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/references/ruby/overview" - }, - { - "title": "Rack/Rails integration", - "href": "/docs/references/ruby/rack-rails" - }, - { - "title": "Ruby SDK repository", - "href": "https://github.com/clerk/clerk-sdk-ruby" + "title": "Getting started", + "items": [ + [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, + { + "title": "Quickstart", + "href": "/docs/ruby/overview" + } + ] + ] }, { "title": "References", - "collapse": true, "items": [ [ { - "title": "Available Methods", + "title": "Overview", "href": "/docs/references/ruby/available-methods" } ] ] + }, + { + "title": "Guides", + "items": [ + [ + { + "title": "Rack/Rails integration", + "href": "/docs/references/ruby/rack-rails" + } + ] + ] + }, + { + "title": "Ruby SDK repository", + "href": "https://github.com/clerk/clerk-sdk-ruby" } ] ] @@ -1516,31 +1759,26 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/tanstack-start" - }, - { - "title": "Add custom sign-in-or-up-page", - "href": "/docs/references/tanstack-start/custom-sign-in-or-up-page", - "wrap": true - }, - { - "title": "Add custom sign-up-page", - "href": "/docs/references/tanstack-start/custom-sign-up-page", - "wrap": true - }, - { - "title": "Read session and user data", - "href": "/docs/references/tanstack-start/read-session-data", - "wrap": true + "title": "Getting started", + "items": [ + [ + { + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" + }, + { + "title": "Quickstart", + "href": "/docs/quickstarts/tanstack-start" + } + ] + ] }, { - "title": "General references", - "collapse": true, + "title": "References", "items": [ [ { - "title": "Available Methods", + "title": "Overview", "href": "/docs/references/tanstack-start/overview" }, { @@ -1553,6 +1791,28 @@ } ] ] + }, + { + "title": "Guides", + "items": [ + [ + { + "title": "Add custom sign-in-or-up-page", + "href": "/docs/references/tanstack-start/custom-sign-in-or-up-page", + "wrap": true + }, + { + "title": "Add custom sign-up-page", + "href": "/docs/references/tanstack-start/custom-sign-up-page", + "wrap": true + }, + { + "title": "Read session and user data", + "href": "/docs/references/tanstack-start/read-session-data", + "wrap": true + } + ] + ] } ] ] @@ -1564,69 +1824,85 @@ "items": [ [ { - "title": "Quickstart", - "href": "/docs/quickstarts/vue" - }, - { - "title": "Migrating from community SDK", - "href": "/docs/references/vue/migrating-from-vue-community-sdk" - }, - { - "title": "Client-side helpers", - "collapse": true, + "title": "Getting started", "items": [ [ { - "title": "`useUser()`", - "wrap": false, - "href": "/docs/references/vue/use-user" - }, - { - "title": "`useClerk()`", - "wrap": false, - "href": "/docs/references/vue/use-clerk" - }, - { - "title": "`useAuth()`", - "wrap": false, - "href": "/docs/references/vue/use-auth" - }, - { - "title": "`useSignIn()`", - "wrap": false, - "href": "/docs/references/vue/use-sign-in" - }, - { - "title": "`useSignUp`", - "wrap": false, - "href": "/docs/references/vue/use-sign-up" - }, - { - "title": "`useSession()`", - "wrap": false, - "href": "/docs/references/vue/use-session" - }, - { - "title": "`useSessionList()`", - "wrap": false, - "href": "/docs/references/vue/use-session-list" + "title": "Set up your Clerk account", + "href": "/docs/quickstarts/setup-clerk" }, { - "title": "`useOrganization()`", - "wrap": false, - "href": "/docs/references/vue/use-organization" + "title": "Quickstart", + "href": "/docs/quickstarts/vue" } ] ] }, { "title": "References", - "collapse": true, "items": [ [ { - "title": "Available Methods", + "title": "Overview", "href": "/docs/references/vue/overview" + }, + { + "title": "Client-side helpers", + "items": [ + [ + { + "title": "`useUser()`", + "wrap": false, + "href": "/docs/references/vue/use-user" + }, + { + "title": "`useClerk()`", + "wrap": false, + "href": "/docs/references/vue/use-clerk" + }, + { + "title": "`useAuth()`", + "wrap": false, + "href": "/docs/references/vue/use-auth" + }, + { + "title": "`useSignIn()`", + "wrap": false, + "href": "/docs/references/vue/use-sign-in" + }, + { + "title": "`useSignUp`", + "wrap": false, + "href": "/docs/references/vue/use-sign-up" + }, + { + "title": "`useSession()`", + "wrap": false, + "href": "/docs/references/vue/use-session" + }, + { + "title": "`useSessionList()`", + "wrap": false, + "href": "/docs/references/vue/use-session-list" + }, + { + "title": "`useOrganization()`", + "wrap": false, + "href": "/docs/references/vue/use-organization" + } + ] + ] + } + ] + ] + }, + { + "title": "Guides", + "items": [ + [ + { + "title": "Migrating from community SDK", + "href": "/docs/references/vue/migrating-from-vue-community-sdk" } ] ] @@ -1751,7 +2027,7 @@ ], [ { - "title": "UI Components", + "title": "Clerk Components", "items": [ [ { @@ -1764,188 +2040,188 @@ "href": "/docs/components/clerk-provider" }, { - "title": "Authentication Components", - "collapse": true, - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/sign-in" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/sign-up" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/authentication/google-one-tap" - } - ] - ] - }, - { - "title": "User Components", - "collapse": true, - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/user/user-button" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/user/user-profile" - } - ] - ] - }, - { - "title": "Organization Components", - "collapse": true, - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/create-organization" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-profile" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-switcher" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/organization/organization-list" - } - ] - ] - }, - { - "title": "Waitlist Component", - "collapse": true, - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/waitlist" - } - ] - ] - }, - { - "title": "Control Components", + "title": "UI Components", "collapse": true, "items": [ [ { - "title": "``", - "wrap": false, - "href": "/docs/components/control/authenticate-with-callback" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/clerk-loaded" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/clerk-loading" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/protect" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/multi-session" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-signin" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-signup" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-userprofile" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-organizationprofile" - }, - { - "title": "``", - "wrap": false, - "href": "/docs/components/control/redirect-to-createorganization" + "title": "Authentication Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/sign-in" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/sign-up" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/authentication/google-one-tap" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/signed-in" + "title": "User Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/user/user-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/user/user-profile" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/control/signed-out" - } - ] - ] - }, - { - "title": "Unstyled Components", - "collapse": true, - "items": [ - [ - { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-in-button" + "title": "Organization Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/create-organization" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/organization-profile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/organization-switcher" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/organization/organization-list" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-in-with-metamask" + "title": "Waitlist Component", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/waitlist" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-up-button" + "title": "Control Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/authenticate-with-callback" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/clerk-loaded" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/clerk-loading" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/protect" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/multi-session" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-signin" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-signup" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-userprofile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-organizationprofile" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/redirect-to-createorganization" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/signed-in" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/control/signed-out" + } + ] + ] }, { - "title": "``", - "wrap": false, - "href": "/docs/components/unstyled/sign-out-button" + "title": "Unstyled Components", + "items": [ + [ + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-in-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-in-with-metamask" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-up-button" + }, + { + "title": "``", + "wrap": false, + "href": "/docs/components/unstyled/sign-out-button" + } + ] + ] } ] ] } ] ] - } - ], - [ + }, { "title": "Configuration", "items": [ @@ -2476,9 +2752,7 @@ } ] ] - } - ], - [ + }, { "title": "Customization", "items": [ @@ -2651,17 +2925,11 @@ } ] ] - } - ], - [ + }, { "title": "Development", "items": [ [ - { - "title": "Set up your Clerk account", - "href": "/docs/quickstarts/setup-clerk" - }, { "title": "Multi-tenant architecture", "href": "/docs/guides/multi-tenant-architecture" @@ -3105,9 +3373,7 @@ } ] ] - } - ], - [ + }, { "title": "Advanced", "items": [ From ddb49929b82202ea349548a6b9b773e84257c4bb Mon Sep 17 00:00:00 2001 From: Alexis Aguilar <98043211+alexisintech@users.noreply.github.com> Date: Mon, 27 Jan 2025 19:27:15 -0500 Subject: [PATCH 75/82] fix astro --- docs/manifest.json | 117 ++++++++++++++++++++++----------------------- 1 file changed, 57 insertions(+), 60 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 55021f9c15..2fa3e63519 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -584,39 +584,12 @@ ] ] }, - { - "title": "Migrating from community SDK", - "href": "/docs/references/astro/migrating-from-astro-community-sdk" - }, - { - "title": "Read session and user data", - "wrap": false, - "href": "/docs/references/astro/read-session-data" - }, - { - "title": "Hybrid rendering", - "wrap": false, - "href": "/docs/references/astro/hybrid-rendering" - }, - { - "title": "UI Frameworks", - "collapse": true, - "items": [ - [ - { - "title": "Use Clerk with Astro and React", - "href": "/docs/references/astro/react" - } - ] - ] - }, { "title": "General references", - "collapse": true, "items": [ [ { - "title": "Available Methods", + "title": "Overview", "href": "/docs/references/astro/overview" }, { @@ -633,54 +606,78 @@ "title": "Endpoints", "wrap": false, "href": "/docs/references/astro/endpoints" + }, + { + "title": "Client-side helpers", + "items": [ + [ + { + "title": "`$authStore`", + "wrap": false, + "href": "/docs/references/astro/auth-store" + }, + { + "title": "`$clerkStore`", + "wrap": false, + "href": "/docs/references/astro/clerk-store" + }, + { + "title": "`$userStore`", + "wrap": false, + "href": "/docs/references/astro/user-store" + }, + { + "title": "`$signInStore`", + "wrap": false, + "href": "/docs/references/astro/sign-in-store" + }, + { + "title": "`$signUpStore`", + "wrap": false, + "href": "/docs/references/astro/sign-up-store" + }, + { + "title": "`$sessionStore`", + "wrap": false, + "href": "/docs/references/astro/session-store" + }, + { + "title": "`$sessionListStore`", + "wrap": false, + "href": "/docs/references/astro/session-list-store" + }, + { + "title": "`$organizationStore`", + "wrap": false, + "href": "/docs/references/astro/organization-store" + } + ] + ] } ] ] }, { - "title": "Client-side helpers", - "collapse": true, + "title": "Guides", "items": [ [ { - "title": "`$authStore`", - "wrap": false, - "href": "/docs/references/astro/auth-store" - }, - { - "title": "`$clerkStore`", - "wrap": false, - "href": "/docs/references/astro/clerk-store" - }, - { - "title": "`$userStore`", - "wrap": false, - "href": "/docs/references/astro/user-store" - }, - { - "title": "`$signInStore`", - "wrap": false, - "href": "/docs/references/astro/sign-in-store" - }, - { - "title": "`$signUpStore`", - "wrap": false, - "href": "/docs/references/astro/sign-up-store" + "title": "Migrate from community SDK", + "href": "/docs/references/astro/migrating-from-astro-community-sdk" }, { - "title": "`$sessionStore`", + "title": "Read session and user data", "wrap": false, - "href": "/docs/references/astro/session-store" + "href": "/docs/references/astro/read-session-data" }, { - "title": "`$sessionListStore`", + "title": "Hybrid rendering", "wrap": false, - "href": "/docs/references/astro/session-list-store" + "href": "/docs/references/astro/hybrid-rendering" }, { - "title": "`$organizationStore`", - "wrap": false, - "href": "/docs/references/astro/organization-store" + "title": "Use Clerk with Astro and React", + "href": "/docs/references/astro/react" } ] ] From 9320d44b2ccb7ac25c0e2bd9a7e4275fa8a3f4ba Mon Sep 17 00:00:00 2001 From: Alexis Aguilar <98043211+alexisintech@users.noreply.github.com> Date: Mon, 27 Jan 2025 19:28:26 -0500 Subject: [PATCH 76/82] fix ruby --- docs/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/manifest.json b/docs/manifest.json index 2fa3e63519..9f52465cb5 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1715,7 +1715,7 @@ }, { "title": "Quickstart", - "href": "/docs/ruby/overview" + "href": "/docs/references/ruby/overview" } ] ] From 637169aa45b54640ecaf883db2d6f694651a879a Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Thu, 30 Jan 2025 23:44:08 +0800 Subject: [PATCH 77/82] Bring in new keyless guide --- docs/manifest.json | 7 +- docs/nextjs-new.mdx | 182 ------------------ docs/quickstarts/nextjs-pages-router.mdx | 211 +++++++++++++++++++++ docs/quickstarts/nextjs.mdx | 231 ++++++++++------------- 4 files changed, 317 insertions(+), 314 deletions(-) delete mode 100644 docs/nextjs-new.mdx create mode 100644 docs/quickstarts/nextjs-pages-router.mdx diff --git a/docs/manifest.json b/docs/manifest.json index bdd26e8b05..d6b56f66ed 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -22,8 +22,12 @@ "href": "/docs/quickstarts/setup-clerk" }, { - "title": "Quickstart", + "title": "Quickstart (App)", "href": "/docs/quickstarts/nextjs" + }, + { + "title": "Quickstart (Pages)", + "href": "/docs/quickstarts/nextjs-pages-router" } ] ] @@ -2946,7 +2950,6 @@ [ { "title": "Keyless Mode", - "tag": "(Beta)", "href": "/docs/keyless-mode" }, { diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx deleted file mode 100644 index d4bfe44a86..0000000000 --- a/docs/nextjs-new.mdx +++ /dev/null @@ -1,182 +0,0 @@ ---- -title: Next.js Quickstart -description: Add authentication and user management to your Next.js app. -search: false -metadata: - robots: - index: false ---- - - - - How to add Clerk to your Next.js application - - Use Clerk's prebuilt components for user authentication - - - - ## Create a new Next.js application - - Run the following command to create a new Next.js application: - - ```bash {{ filename: 'terminal' }} - npx create-next-app@latest - ``` - - Accept the default configuration options when prompted. - - ## Install `@clerk/nextjs` - - Run the following command to install the Next.js SDK: - - - ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs@6.11.0-snapshot.v20250124164901 - ``` - - ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs@6.11.0-snapshot.v20250124164901 - ``` - - ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs@6.11.0-snapshot.v20250124164901 - ``` - - - ## Add `clerkMiddleware()` to your app - - 1. Create a `middleware.ts` file. - - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - - If you're not using the `/src` directory, create `middleware.ts` in the root directory. - 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: - - ```tsx {{ filename: 'middleware.ts' }} - import { clerkMiddleware } from '@clerk/nextjs/server' - - export default clerkMiddleware() - - export const config = { - matcher: [ - // Skip Next.js internals and all static files, unless found in search params - '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', - // Always run for API routes - '/(api|trpc)(.*)', - ], - } - ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. - - ## Add `` and Clerk components to your app - - 1. Add the `` component to your app's layout. This component provides Clerk's authentication context to your app. - 1. Add Clerk's prebuilt components to create a header with sign-in button. - - > [!NOTE] - > This is the default `layout.tsx` file generated by Next.js with Clerk's components added. Feel free to copy and paste the whole file into your project. - - ```tsx {{ filename: 'app/layout.tsx', mark: [[2, 9], 34, [37, 45], 49] }} - import type { Metadata } from 'next' - import { - ClerkProvider, - SignInButton, - SignUpButton, - SignedIn, - SignedOut, - UserButton, - } from '@clerk/nextjs' - import { Geist, Geist_Mono } from 'next/font/google' - import './globals.css' - - const geistSans = Geist({ - variable: '--font-geist-sans', - subsets: ['latin'], - }) - - const geistMono = Geist_Mono({ - variable: '--font-geist-mono', - subsets: ['latin'], - }) - - export const metadata: Metadata = { - title: 'Clerk Next.js Quickstart', - description: 'Generated by create next app', - } - - export default function RootLayout({ - children, - }: Readonly<{ - children: React.ReactNode - }>) { - return ( - - - -
- - - - - - - -
- {children} - - -
- ) - } - ``` - - ## Go through the sign-up flow to create your first user - - Run your project with the following command: - - - ```bash {{ filename: 'terminal' }} - npm run dev - ``` - - ```bash {{ filename: 'terminal' }} - yarn dev - ``` - - ```bash {{ filename: 'terminal' }} - pnpm dev - ``` - - - 1. Visit your app's homepage at [http://localhost:3000](http://localhost:3000). - 1. Click "Sign up" in the header and authenticate to create your first user. - - ## It's time to build! - - You've added Clerk to your Next.js app 🎉. From here, you can continue developing your application. - - To make configuration changes to your Clerk development instance, you can claim the Clerk keys that were generated for you. Claiming will associate these keys with your Clerk account, which you can create if you don't already have one. -
- -## Next steps - - - - [Protect routes using Clerk Middleware](/docs/references/nextjs/clerk-middleware) - - Learn how to protect specific routes from unauthenticated users. - - --- - - - [Create custom sign-up and sign-in pages](/docs/references/nextjs/custom-signup-signin-pages) - - Learn how add custom sign-up and sign-in pages with Clerk components. - - --- - - - [Read user and session data](/docs/references/nextjs/read-session-data) - - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. - diff --git a/docs/quickstarts/nextjs-pages-router.mdx b/docs/quickstarts/nextjs-pages-router.mdx new file mode 100644 index 0000000000..d911f70713 --- /dev/null +++ b/docs/quickstarts/nextjs-pages-router.mdx @@ -0,0 +1,211 @@ +--- +title: Next.js Quickstart +description: Add authentication and user management to your Next.js app with Clerk. +--- + + + - Install `@clerk/nextjs` + - Set your Clerk API keys + - Add `clerkMiddleware()` + - Add `` and Clerk components + + + + ## Install `@clerk/nextjs` + + The [Clerk Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + + Run the following command to install the SDK: + + + ```bash {{ filename: 'terminal' }} + npm install @clerk/nextjs + ``` + + ```bash {{ filename: 'terminal' }} + yarn add @clerk/nextjs + ``` + + ```bash {{ filename: 'terminal' }} + pnpm add @clerk/nextjs + ``` + + + ## Set your Clerk API keys + + + + + + + + Add the following keys to your `.env.local` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. + + + + 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys){{ track: 'exp_create_account_nextjs_quickstart' }} page. + 1. In the **Quick Copy** section, copy your Clerk Publishable and Secret Keys. + 1. Paste your keys into your `.env.local` file. + + The final result should resemble the following: + + + + ```env {{ filename: '.env.local' }} + NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} + CLERK_SECRET_KEY={{secret}} + ``` + + ## Add `clerkMiddleware()` to your app + + [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + + 1. Create a `middleware.ts` file. + - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. + - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. + 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: + + ```tsx {{ filename: 'middleware.ts' }} + import { clerkMiddleware } from '@clerk/nextjs/server' + + export default clerkMiddleware() + + export const config = { + matcher: [ + // Skip Next.js internals and all static files, unless found in search params + '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', + // Always run for API routes + '/(api|trpc)(.*)', + ], + } + ``` + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. + + ## Add `` and Clerk components to your app + + + + You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#control-components). Create a header using the following components: + + - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. + - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. + - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. + - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in-or-up). + + Select your preferred router to learn how to make this data available across your entire app: + + + ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import './globals.css' + + export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + + +
+ + + + + + +
+
{children}
+ + +
+ ) + } + ``` + + ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} + import '@/styles/globals.css' + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import type { AppProps } from 'next/app' + + function MyApp({ Component, pageProps }: AppProps) { + return ( + + + + + + + + + + ) + } + + export default MyApp + ``` +
+ + ## Create your first user + + Run your project with the following command: + + + ```bash {{ filename: 'terminal' }} + npm run dev + ``` + + ```bash {{ filename: 'terminal' }} + yarn dev + ``` + + ```bash {{ filename: 'terminal' }} + pnpm dev + ``` + + + Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. +
+ +## Next steps + + + - [Create a custom sign-in or sign-up page](/docs/references/nextjs/custom-sign-in-or-up-page) + - This tutorial gets you started with Clerk's `` component, which uses the Account Portal. If you don't want to use the Account Portal, read this guide about creating a custom authentication page. + + --- + + - [Add custom onboarding to your authentication flow](/docs/references/nextjs/add-onboarding-flow) + - If you need to collect additional information about users that Clerk's Account Portal or prebuilt components don't collect, read this guide about adding a custom onboarding flow to your authentication flow. + + --- + + - [Protect specific routes](/docs/references/nextjs/clerk-middleware) + - This tutorial taught you that by default, `clerkMiddleware()` will not protect any routes. Read this reference doc to learn how to protect specific routes from unauthenticated users. + + --- + + - [Read user and session data](/docs/references/nextjs/read-session-data) + - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. + + --- + + - [Next.js SDK Reference](/docs/references/nextjs/overview) + - Learn more about the Clerk Next.js SDK and how to use it. + + --- + + - [Deploy to Production](/docs/deployments/overview) + - Learn how to deploy your Clerk app to production. + diff --git a/docs/quickstarts/nextjs.mdx b/docs/quickstarts/nextjs.mdx index d911f70713..d4bfe44a86 100644 --- a/docs/quickstarts/nextjs.mdx +++ b/docs/quickstarts/nextjs.mdx @@ -1,82 +1,61 @@ --- title: Next.js Quickstart -description: Add authentication and user management to your Next.js app with Clerk. +description: Add authentication and user management to your Next.js app. +search: false +metadata: + robots: + index: false --- - - Install `@clerk/nextjs` - - Set your Clerk API keys - - Add `clerkMiddleware()` - - Add `` and Clerk components + - How to add Clerk to your Next.js application + - Use Clerk's prebuilt components for user authentication - ## Install `@clerk/nextjs` + ## Create a new Next.js application + + Run the following command to create a new Next.js application: + + ```bash {{ filename: 'terminal' }} + npx create-next-app@latest + ``` - The [Clerk Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + Accept the default configuration options when prompted. - Run the following command to install the SDK: + ## Install `@clerk/nextjs` + + Run the following command to install the Next.js SDK: ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs + npm install @clerk/nextjs@6.11.0-snapshot.v20250124164901 ``` ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs + yarn add @clerk/nextjs@6.11.0-snapshot.v20250124164901 ``` ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs + pnpm add @clerk/nextjs@6.11.0-snapshot.v20250124164901 ``` - ## Set your Clerk API keys - - - - - - - - Add the following keys to your `.env.local` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. - - - - 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys){{ track: 'exp_create_account_nextjs_quickstart' }} page. - 1. In the **Quick Copy** section, copy your Clerk Publishable and Secret Keys. - 1. Paste your keys into your `.env.local` file. - - The final result should resemble the following: - - - - ```env {{ filename: '.env.local' }} - NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} - CLERK_SECRET_KEY={{secret}} - ``` - ## Add `clerkMiddleware()` to your app - [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: - 1. Create a `middleware.ts` file. - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. + - If you're not using the `/src` directory, create `middleware.ts` in the root directory. 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: ```tsx {{ filename: 'middleware.ts' }} @@ -97,67 +76,67 @@ description: Add authentication and user management to your Next.js app with Cle ## Add `` and Clerk components to your app - - - You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#control-components). Create a header using the following components: - - - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. - - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. - - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. - - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in-or-up). - - Select your preferred router to learn how to make this data available across your entire app: - - - ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import './globals.css' - - export default function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - - -
- - - - - - -
-
{children}
- - -
- ) - } - ``` - - ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} - import '@/styles/globals.css' - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import type { AppProps } from 'next/app' - - function MyApp({ Component, pageProps }: AppProps) { - return ( - - - - - - - - - - ) - } - - export default MyApp - ``` -
+ 1. Add the `` component to your app's layout. This component provides Clerk's authentication context to your app. + 1. Add Clerk's prebuilt components to create a header with sign-in button. + + > [!NOTE] + > This is the default `layout.tsx` file generated by Next.js with Clerk's components added. Feel free to copy and paste the whole file into your project. + + ```tsx {{ filename: 'app/layout.tsx', mark: [[2, 9], 34, [37, 45], 49] }} + import type { Metadata } from 'next' + import { + ClerkProvider, + SignInButton, + SignUpButton, + SignedIn, + SignedOut, + UserButton, + } from '@clerk/nextjs' + import { Geist, Geist_Mono } from 'next/font/google' + import './globals.css' + + const geistSans = Geist({ + variable: '--font-geist-sans', + subsets: ['latin'], + }) + + const geistMono = Geist_Mono({ + variable: '--font-geist-mono', + subsets: ['latin'], + }) + + export const metadata: Metadata = { + title: 'Clerk Next.js Quickstart', + description: 'Generated by create next app', + } + + export default function RootLayout({ + children, + }: Readonly<{ + children: React.ReactNode + }>) { + return ( + + + +
+ + + + + + + +
+ {children} + + +
+ ) + } + ``` - ## Create your first user + ## Go through the sign-up flow to create your first user Run your project with the following command: @@ -175,37 +154,29 @@ description: Add authentication and user management to your Next.js app with Cle ``` - Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. + 1. Visit your app's homepage at [http://localhost:3000](http://localhost:3000). + 1. Click "Sign up" in the header and authenticate to create your first user. + + ## It's time to build! + + You've added Clerk to your Next.js app 🎉. From here, you can continue developing your application. + + To make configuration changes to your Clerk development instance, you can claim the Clerk keys that were generated for you. Claiming will associate these keys with your Clerk account, which you can create if you don't already have one.
## Next steps - - [Create a custom sign-in or sign-up page](/docs/references/nextjs/custom-sign-in-or-up-page) - - This tutorial gets you started with Clerk's `` component, which uses the Account Portal. If you don't want to use the Account Portal, read this guide about creating a custom authentication page. + - [Protect routes using Clerk Middleware](/docs/references/nextjs/clerk-middleware) + - Learn how to protect specific routes from unauthenticated users. --- - - [Add custom onboarding to your authentication flow](/docs/references/nextjs/add-onboarding-flow) - - If you need to collect additional information about users that Clerk's Account Portal or prebuilt components don't collect, read this guide about adding a custom onboarding flow to your authentication flow. - - --- - - - [Protect specific routes](/docs/references/nextjs/clerk-middleware) - - This tutorial taught you that by default, `clerkMiddleware()` will not protect any routes. Read this reference doc to learn how to protect specific routes from unauthenticated users. + - [Create custom sign-up and sign-in pages](/docs/references/nextjs/custom-signup-signin-pages) + - Learn how add custom sign-up and sign-in pages with Clerk components. --- - [Read user and session data](/docs/references/nextjs/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. - - --- - - - [Next.js SDK Reference](/docs/references/nextjs/overview) - - Learn more about the Clerk Next.js SDK and how to use it. - - --- - - - [Deploy to Production](/docs/deployments/overview) - - Learn how to deploy your Clerk app to production. From 33f022bb3815ea0ba28e5026b20e05af756e1fbb Mon Sep 17 00:00:00 2001 From: Alexis Aguilar <98043211+alexisintech@users.noreply.github.com> Date: Thu, 30 Jan 2025 11:41:08 -0500 Subject: [PATCH 78/82] docs review --- docs/_partials/nextjs/create-first-user.mdx | 17 ++ docs/_partials/nextjs/next-steps.mdx | 29 +++ docs/keyless.mdx | 75 ------ docs/manifest.json | 7 +- docs/nextjs-new.mdx | 182 --------------- docs/quickstarts/nextjs-pages-router.mdx | 138 +++++++++++ docs/quickstarts/nextjs.mdx | 244 +++++++------------- 7 files changed, 277 insertions(+), 415 deletions(-) create mode 100644 docs/_partials/nextjs/create-first-user.mdx create mode 100644 docs/_partials/nextjs/next-steps.mdx delete mode 100644 docs/keyless.mdx delete mode 100644 docs/nextjs-new.mdx create mode 100644 docs/quickstarts/nextjs-pages-router.mdx diff --git a/docs/_partials/nextjs/create-first-user.mdx b/docs/_partials/nextjs/create-first-user.mdx new file mode 100644 index 0000000000..3e9d2805dd --- /dev/null +++ b/docs/_partials/nextjs/create-first-user.mdx @@ -0,0 +1,17 @@ +1. Run your project with the following command: + + + ```bash {{ filename: 'terminal' }} + npm run dev + ``` + + ```bash {{ filename: 'terminal' }} + yarn dev + ``` + + ```bash {{ filename: 'terminal' }} + pnpm dev + ``` + +1. Visit your app's homepage at [http://localhost:3000](http://localhost:3000). +1. Click "Sign up" in the header and authenticate to create your first user. diff --git a/docs/_partials/nextjs/next-steps.mdx b/docs/_partials/nextjs/next-steps.mdx new file mode 100644 index 0000000000..e741ac119f --- /dev/null +++ b/docs/_partials/nextjs/next-steps.mdx @@ -0,0 +1,29 @@ + + - [Create a custom sign-in or sign-up page](/docs/references/nextjs/custom-sign-in-or-up-page) + - This tutorial gets you started with Clerk's `` component, which uses the Account Portal. If you don't want to use the Account Portal, read this guide about creating a custom authentication page. + + --- + + - [Add custom onboarding to your authentication flow](/docs/references/nextjs/add-onboarding-flow) + - If you need to collect additional information about users that Clerk's Account Portal or prebuilt components don't collect, read this guide about adding a custom onboarding flow to your authentication flow. + + --- + + - [Protect specific routes](/docs/references/nextjs/clerk-middleware) + - This tutorial taught you that by default, `clerkMiddleware()` will not protect any routes. Read this reference doc to learn how to protect specific routes from unauthenticated users. + + --- + + - [Read user and session data](/docs/references/nextjs/read-session-data) + - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. + + --- + + - [Next.js SDK Reference](/docs/references/nextjs/overview) + - Learn more about the Clerk Next.js SDK and how to use it. + + --- + + - [Deploy to Production](/docs/deployments/overview) + - Learn how to deploy your Clerk app to production. + diff --git a/docs/keyless.mdx b/docs/keyless.mdx deleted file mode 100644 index 650d15370b..0000000000 --- a/docs/keyless.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Keyless Mode -description: Learn how to use Keyless Mode to prototype and test Clerk's authentication features locally without creating an account or managing API keys. -search: false -metadata: - robots: - index: false ---- - -Keyless Mode allows you to quickly prototype and test Clerk's authentication features in your **local development environment** without creating a Clerk account. - -Keyless Mode is currently available only for the Next.js SDK. See the [step-by-step tutorial](/docs/references/nextjs/keyless) to get started. - -## How Keyless Mode works - -When no [Clerk API keys](/docs/deployments/clerk-environment-variables#clerk-publishable-and-secret-keys) are detected, the Clerk SDK automatically: - -1. Generates temporary API keys from Clerk. -1. Creates a development instance with [default configurations](#default-configuration-for-development-instances). -1. Stores keys in a `.clerk` directory, which is added to `.gitignore`. Do not commit the `.clerk` folder to your repository. Deleting this folder will cause new temporary keys to be generated for a new instance. -1. Shows a **Clerk is in keyless mode** button to manage your instance. - -## How do I opt-out? - -Set `NEXT_PUBLIC_CLERK_KEYLESS_DISABLED` in your `.env.local` file. - -```env {{ filename: '.env.local' }} -NEXT_PUBLIC_CLERK_KEYLESS_DISABLED=1 -``` - -## Default configuration for development instances - -Development instances start with these preset configurations: - -- **Authentication**: Email and password are required, Google and GitHub sign-in are enabled -- **Verification**: Email verification is required -- **Password reset**: Enabled -- **MFA**: Disabled -- **Appearance**: Default theme - -> [!NOTE] -> These settings cannot be modified until you [claim your instance](#claim-your-instance-and-disable-keyless-mode). - -## Claim your instance and disable Keyless Mode - -To claim your instance and disable Keyless Mode: - -1. Run your application in local development (e.g. `npm run dev` or `yarn dev`). -1. In the bottom-right of your application, select **Claim keys**. This opens the **Claim Your Application** page. -1. On the **Claim Your Application** page, complete the form by entering your application name and selecting an organization. Then select **Claim application**. -1. Copy your new API keys to your `.env.local` file: - ```env {{ filename: '.env.local' }} - NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} - CLERK_SECRET_KEY={{secret}} - ``` -1. Select **Go to application**. You'll be redirected your application's **Overview** page. - -> [!IMPORTANT] -> After claiming your instance, you must add the keys to your `.env.local` file to fully disable Keyless Mode. Without this step, you'll continue to see warnings that your instance is claimed but not properly configured. - -## Limitations - -- Works only with **Next.js projects in local development**. -- Development instances can't be customized without [being claimed](#claim-your-instance-and-disable-keyless-mode). -- Production builds require Clerk API keys of a [claimed instance](#claim-your-instance-and-disable-keyless-mode). - -## What happens to unclaimed applications? - -@TODO -- need to add content here. - -## Feedback and Support - -Keyless Mode is currently available only for [Next.js](/docs/quickstarts/nextjs). For other frameworks, [sign up](https://dashboard.clerk.com/sign-up) to get your API keys. - -For questions or feedback, contact [Clerk Support](https://clerk.com/contact/support). diff --git a/docs/manifest.json b/docs/manifest.json index 0ea811770b..905add5a4c 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -26,10 +26,15 @@ "items": [ [ { - "title": "Next.js", + "title": "Next.js (App Router)", "href": "/docs/quickstarts/nextjs", "icon": "nextjs" }, + { + "title": "Next.js (Pages Router)", + "href": "/docs/quickstarts/nextjs-pages-router", + "icon": "nextjs" + }, { "title": "Astro", "href": "/docs/quickstarts/astro", diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx deleted file mode 100644 index d4bfe44a86..0000000000 --- a/docs/nextjs-new.mdx +++ /dev/null @@ -1,182 +0,0 @@ ---- -title: Next.js Quickstart -description: Add authentication and user management to your Next.js app. -search: false -metadata: - robots: - index: false ---- - - - - How to add Clerk to your Next.js application - - Use Clerk's prebuilt components for user authentication - - - - ## Create a new Next.js application - - Run the following command to create a new Next.js application: - - ```bash {{ filename: 'terminal' }} - npx create-next-app@latest - ``` - - Accept the default configuration options when prompted. - - ## Install `@clerk/nextjs` - - Run the following command to install the Next.js SDK: - - - ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs@6.11.0-snapshot.v20250124164901 - ``` - - ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs@6.11.0-snapshot.v20250124164901 - ``` - - ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs@6.11.0-snapshot.v20250124164901 - ``` - - - ## Add `clerkMiddleware()` to your app - - 1. Create a `middleware.ts` file. - - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - - If you're not using the `/src` directory, create `middleware.ts` in the root directory. - 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: - - ```tsx {{ filename: 'middleware.ts' }} - import { clerkMiddleware } from '@clerk/nextjs/server' - - export default clerkMiddleware() - - export const config = { - matcher: [ - // Skip Next.js internals and all static files, unless found in search params - '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', - // Always run for API routes - '/(api|trpc)(.*)', - ], - } - ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. - - ## Add `` and Clerk components to your app - - 1. Add the `` component to your app's layout. This component provides Clerk's authentication context to your app. - 1. Add Clerk's prebuilt components to create a header with sign-in button. - - > [!NOTE] - > This is the default `layout.tsx` file generated by Next.js with Clerk's components added. Feel free to copy and paste the whole file into your project. - - ```tsx {{ filename: 'app/layout.tsx', mark: [[2, 9], 34, [37, 45], 49] }} - import type { Metadata } from 'next' - import { - ClerkProvider, - SignInButton, - SignUpButton, - SignedIn, - SignedOut, - UserButton, - } from '@clerk/nextjs' - import { Geist, Geist_Mono } from 'next/font/google' - import './globals.css' - - const geistSans = Geist({ - variable: '--font-geist-sans', - subsets: ['latin'], - }) - - const geistMono = Geist_Mono({ - variable: '--font-geist-mono', - subsets: ['latin'], - }) - - export const metadata: Metadata = { - title: 'Clerk Next.js Quickstart', - description: 'Generated by create next app', - } - - export default function RootLayout({ - children, - }: Readonly<{ - children: React.ReactNode - }>) { - return ( - - - -
- - - - - - - -
- {children} - - -
- ) - } - ``` - - ## Go through the sign-up flow to create your first user - - Run your project with the following command: - - - ```bash {{ filename: 'terminal' }} - npm run dev - ``` - - ```bash {{ filename: 'terminal' }} - yarn dev - ``` - - ```bash {{ filename: 'terminal' }} - pnpm dev - ``` - - - 1. Visit your app's homepage at [http://localhost:3000](http://localhost:3000). - 1. Click "Sign up" in the header and authenticate to create your first user. - - ## It's time to build! - - You've added Clerk to your Next.js app 🎉. From here, you can continue developing your application. - - To make configuration changes to your Clerk development instance, you can claim the Clerk keys that were generated for you. Claiming will associate these keys with your Clerk account, which you can create if you don't already have one. -
- -## Next steps - - - - [Protect routes using Clerk Middleware](/docs/references/nextjs/clerk-middleware) - - Learn how to protect specific routes from unauthenticated users. - - --- - - - [Create custom sign-up and sign-in pages](/docs/references/nextjs/custom-signup-signin-pages) - - Learn how add custom sign-up and sign-in pages with Clerk components. - - --- - - - [Read user and session data](/docs/references/nextjs/read-session-data) - - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. - diff --git a/docs/quickstarts/nextjs-pages-router.mdx b/docs/quickstarts/nextjs-pages-router.mdx new file mode 100644 index 0000000000..b96fa945e9 --- /dev/null +++ b/docs/quickstarts/nextjs-pages-router.mdx @@ -0,0 +1,138 @@ +--- +title: Next.js Quickstart (Pages Router) +description: Add authentication and user management to your Next.js app with Clerk. +--- + + + - Install `@clerk/nextjs` + - Set your Clerk API keys + - Add `clerkMiddleware()` + - Add `` and Clerk components + + + + ## Install `@clerk/nextjs` + + The [Clerk Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + + Run the following command to install the SDK: + + + ```bash {{ filename: 'terminal' }} + npm install @clerk/nextjs + ``` + + ```bash {{ filename: 'terminal' }} + yarn add @clerk/nextjs + ``` + + ```bash {{ filename: 'terminal' }} + pnpm add @clerk/nextjs + ``` + + + ## Set your Clerk API keys + + + + + + + + Add the following keys to your `.env.local` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. + + + + 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys){{ track: 'exp_create_account_nextjs_quickstart' }} page. + 1. In the **Quick Copy** section, copy your Clerk Publishable and Secret Keys. + 1. Paste your keys into your `.env.local` file. + + The final result should resemble the following: + + + + ```env {{ filename: '.env.local' }} + NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} + CLERK_SECRET_KEY={{secret}} + ``` + + ## Add `clerkMiddleware()` to your app + + [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + + 1. Create a `middleware.ts` file. + - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. + - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. + 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: + + ```tsx {{ filename: 'middleware.ts' }} + import { clerkMiddleware } from '@clerk/nextjs/server' + + export default clerkMiddleware() + + export const config = { + matcher: [ + // Skip Next.js internals and all static files, unless found in search params + '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', + // Always run for API routes + '/(api|trpc)(.*)', + ], + } + ``` + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. + + ## Add `` and Clerk components to your app + + + + You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#control-components). Create a header using the following components: + + - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. + - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. + - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. + - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in-or-up). + + ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} + import '@/styles/globals.css' + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import type { AppProps } from 'next/app' + + function MyApp({ Component, pageProps }: AppProps) { + return ( + + + + + + + + + + ) + } + + export default MyApp + ``` + + ## Create your first user + + + + +## Next steps + + diff --git a/docs/quickstarts/nextjs.mdx b/docs/quickstarts/nextjs.mdx index d911f70713..e2f69de96d 100644 --- a/docs/quickstarts/nextjs.mdx +++ b/docs/quickstarts/nextjs.mdx @@ -1,82 +1,53 @@ --- -title: Next.js Quickstart -description: Add authentication and user management to your Next.js app with Clerk. +title: Next.js Quickstart (App Router) +description: Add authentication and user management to your Next.js app. +search: false +metadata: + robots: + index: false --- - - - Install `@clerk/nextjs` - - Set your Clerk API keys - - Add `clerkMiddleware()` - - Add `` and Clerk components - +{/* TODO: Do we want an introductory line? Or do we want to leave it blank? We can add some marketing copy like: +Clerk provides a powerful, feature-rich authentication and user management solution for Next.js applications through its official SDK. With just a few lines of code, you can add secure authentication, and user and organization management to your Next.js app. */} + + + For applications using Next.js Pages Router, see the [Pages Router quickstart](/docs/quickstarts/nextjs-pages-router). + - ## Install `@clerk/nextjs` + ## Create a new Next.js application + + Run the following command to [create a new Next.js application](https://nextjs.org/docs/getting-started/installation): + + ```bash {{ filename: 'terminal' }} + npx create-next-app@latest + ``` - The [Clerk Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + ## Install `@clerk/nextjs` - Run the following command to install the SDK: + Run the following command to install the [Next.js SDK](/docs/references/nextjs/overview): ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs + npm install @clerk/nextjs@6.11.0-snapshot.v20250124164901 ``` ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs + yarn add @clerk/nextjs@6.11.0-snapshot.v20250124164901 ``` ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs + pnpm add @clerk/nextjs@6.11.0-snapshot.v20250124164901 ``` - ## Set your Clerk API keys - - - - - - - - Add the following keys to your `.env.local` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. - - - - 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys){{ track: 'exp_create_account_nextjs_quickstart' }} page. - 1. In the **Quick Copy** section, copy your Clerk Publishable and Secret Keys. - 1. Paste your keys into your `.env.local` file. - - The final result should resemble the following: - - - - ```env {{ filename: '.env.local' }} - NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} - CLERK_SECRET_KEY={{secret}} - ``` - ## Add `clerkMiddleware()` to your app - [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + {/* TODO: It looks like we took out the explanation of what clerkMiddleware() is. I think we should be providing context to our users, as a majority of docs do. */} 1. Create a `middleware.ts` file. - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. + - If you're not using the `/src` directory, create `middleware.ts` in the root directory. 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: ```tsx {{ filename: 'middleware.ts' }} @@ -97,115 +68,74 @@ description: Add authentication and user management to your Next.js app with Cle ## Add `` and Clerk components to your app - - - You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#control-components). Create a header using the following components: - - - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. - - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. - - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. - - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in-or-up). - - Select your preferred router to learn how to make this data available across your entire app: - - - ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import './globals.css' - - export default function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - - -
- - - - - - -
-
{children}
- - -
- ) - } - ``` - - ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} - import '@/styles/globals.css' - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import type { AppProps } from 'next/app' - - function MyApp({ Component, pageProps }: AppProps) { - return ( - - - - - - - - - - ) - } - - export default MyApp - ``` -
+ 1. Add the [``](/docs/components/clerk-provider) component to your app's layout. This component provides Clerk's authentication context to your app. + 1. Copy and paste the following file into your `layout.tsx` file. This creates a header with Clerk's [prebuilt components](/docs/components/overview) to allow users to sign in and out. + + ```tsx {{ filename: 'app/layout.tsx', mark: [[2, 9], 34, [37, 45], 49] }} + import type { Metadata } from 'next' + import { + ClerkProvider, + SignInButton, + SignUpButton, + SignedIn, + SignedOut, + UserButton, + } from '@clerk/nextjs' + import { Geist, Geist_Mono } from 'next/font/google' + import './globals.css' + + const geistSans = Geist({ + variable: '--font-geist-sans', + subsets: ['latin'], + }) + + const geistMono = Geist_Mono({ + variable: '--font-geist-mono', + subsets: ['latin'], + }) + + export const metadata: Metadata = { + title: 'Clerk Next.js Quickstart', + description: 'Generated by create next app', + } + + export default function RootLayout({ + children, + }: Readonly<{ + children: React.ReactNode + }>) { + return ( + + + +
+ + + + + + + +
+ {children} + + +
+ ) + } + ``` ## Create your first user - Run your project with the following command: + - - ```bash {{ filename: 'terminal' }} - npm run dev - ``` + ## It's time to build! - ```bash {{ filename: 'terminal' }} - yarn dev - ``` + You've added Clerk to your Next.js app 🎉. From here, you can continue developing your application. - ```bash {{ filename: 'terminal' }} - pnpm dev - ``` - - - Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. + To make configuration changes to your Clerk development instance, claim the Clerk keys that were generated for you by selecting **Claim your application** in the bottom right of your app. Claiming your keys will associate them with your Clerk account.
## Next steps - - - [Create a custom sign-in or sign-up page](/docs/references/nextjs/custom-sign-in-or-up-page) - - This tutorial gets you started with Clerk's `` component, which uses the Account Portal. If you don't want to use the Account Portal, read this guide about creating a custom authentication page. - - --- - - - [Add custom onboarding to your authentication flow](/docs/references/nextjs/add-onboarding-flow) - - If you need to collect additional information about users that Clerk's Account Portal or prebuilt components don't collect, read this guide about adding a custom onboarding flow to your authentication flow. - - --- - - - [Protect specific routes](/docs/references/nextjs/clerk-middleware) - - This tutorial taught you that by default, `clerkMiddleware()` will not protect any routes. Read this reference doc to learn how to protect specific routes from unauthenticated users. - - --- - - - [Read user and session data](/docs/references/nextjs/read-session-data) - - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. - - --- - - - [Next.js SDK Reference](/docs/references/nextjs/overview) - - Learn more about the Clerk Next.js SDK and how to use it. - - --- - - - [Deploy to Production](/docs/deployments/overview) - - Learn how to deploy your Clerk app to production. - + From de7ae88f0f7f5684aa2ece2b5e97bf1fa886eced Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Fri, 31 Jan 2025 01:11:07 +0800 Subject: [PATCH 79/82] Revert "Bring in new keyless guide" This reverts commit 637169aa45b54640ecaf883db2d6f694651a879a. --- docs/manifest.json | 7 +- docs/nextjs-new.mdx | 182 ++++++++++++++++++ docs/quickstarts/nextjs-pages-router.mdx | 211 --------------------- docs/quickstarts/nextjs.mdx | 231 +++++++++++++---------- 4 files changed, 314 insertions(+), 317 deletions(-) create mode 100644 docs/nextjs-new.mdx delete mode 100644 docs/quickstarts/nextjs-pages-router.mdx diff --git a/docs/manifest.json b/docs/manifest.json index d6b56f66ed..bdd26e8b05 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -22,12 +22,8 @@ "href": "/docs/quickstarts/setup-clerk" }, { - "title": "Quickstart (App)", + "title": "Quickstart", "href": "/docs/quickstarts/nextjs" - }, - { - "title": "Quickstart (Pages)", - "href": "/docs/quickstarts/nextjs-pages-router" } ] ] @@ -2950,6 +2946,7 @@ [ { "title": "Keyless Mode", + "tag": "(Beta)", "href": "/docs/keyless-mode" }, { diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx new file mode 100644 index 0000000000..d4bfe44a86 --- /dev/null +++ b/docs/nextjs-new.mdx @@ -0,0 +1,182 @@ +--- +title: Next.js Quickstart +description: Add authentication and user management to your Next.js app. +search: false +metadata: + robots: + index: false +--- + + + - How to add Clerk to your Next.js application + - Use Clerk's prebuilt components for user authentication + + + + ## Create a new Next.js application + + Run the following command to create a new Next.js application: + + ```bash {{ filename: 'terminal' }} + npx create-next-app@latest + ``` + + Accept the default configuration options when prompted. + + ## Install `@clerk/nextjs` + + Run the following command to install the Next.js SDK: + + + ```bash {{ filename: 'terminal' }} + npm install @clerk/nextjs@6.11.0-snapshot.v20250124164901 + ``` + + ```bash {{ filename: 'terminal' }} + yarn add @clerk/nextjs@6.11.0-snapshot.v20250124164901 + ``` + + ```bash {{ filename: 'terminal' }} + pnpm add @clerk/nextjs@6.11.0-snapshot.v20250124164901 + ``` + + + ## Add `clerkMiddleware()` to your app + + 1. Create a `middleware.ts` file. + - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. + - If you're not using the `/src` directory, create `middleware.ts` in the root directory. + 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: + + ```tsx {{ filename: 'middleware.ts' }} + import { clerkMiddleware } from '@clerk/nextjs/server' + + export default clerkMiddleware() + + export const config = { + matcher: [ + // Skip Next.js internals and all static files, unless found in search params + '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', + // Always run for API routes + '/(api|trpc)(.*)', + ], + } + ``` + 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. + + ## Add `` and Clerk components to your app + + 1. Add the `` component to your app's layout. This component provides Clerk's authentication context to your app. + 1. Add Clerk's prebuilt components to create a header with sign-in button. + + > [!NOTE] + > This is the default `layout.tsx` file generated by Next.js with Clerk's components added. Feel free to copy and paste the whole file into your project. + + ```tsx {{ filename: 'app/layout.tsx', mark: [[2, 9], 34, [37, 45], 49] }} + import type { Metadata } from 'next' + import { + ClerkProvider, + SignInButton, + SignUpButton, + SignedIn, + SignedOut, + UserButton, + } from '@clerk/nextjs' + import { Geist, Geist_Mono } from 'next/font/google' + import './globals.css' + + const geistSans = Geist({ + variable: '--font-geist-sans', + subsets: ['latin'], + }) + + const geistMono = Geist_Mono({ + variable: '--font-geist-mono', + subsets: ['latin'], + }) + + export const metadata: Metadata = { + title: 'Clerk Next.js Quickstart', + description: 'Generated by create next app', + } + + export default function RootLayout({ + children, + }: Readonly<{ + children: React.ReactNode + }>) { + return ( + + + +
+ + + + + + + +
+ {children} + + +
+ ) + } + ``` + + ## Go through the sign-up flow to create your first user + + Run your project with the following command: + + + ```bash {{ filename: 'terminal' }} + npm run dev + ``` + + ```bash {{ filename: 'terminal' }} + yarn dev + ``` + + ```bash {{ filename: 'terminal' }} + pnpm dev + ``` + + + 1. Visit your app's homepage at [http://localhost:3000](http://localhost:3000). + 1. Click "Sign up" in the header and authenticate to create your first user. + + ## It's time to build! + + You've added Clerk to your Next.js app 🎉. From here, you can continue developing your application. + + To make configuration changes to your Clerk development instance, you can claim the Clerk keys that were generated for you. Claiming will associate these keys with your Clerk account, which you can create if you don't already have one. +
+ +## Next steps + + + - [Protect routes using Clerk Middleware](/docs/references/nextjs/clerk-middleware) + - Learn how to protect specific routes from unauthenticated users. + + --- + + - [Create custom sign-up and sign-in pages](/docs/references/nextjs/custom-signup-signin-pages) + - Learn how add custom sign-up and sign-in pages with Clerk components. + + --- + + - [Read user and session data](/docs/references/nextjs/read-session-data) + - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. + diff --git a/docs/quickstarts/nextjs-pages-router.mdx b/docs/quickstarts/nextjs-pages-router.mdx deleted file mode 100644 index d911f70713..0000000000 --- a/docs/quickstarts/nextjs-pages-router.mdx +++ /dev/null @@ -1,211 +0,0 @@ ---- -title: Next.js Quickstart -description: Add authentication and user management to your Next.js app with Clerk. ---- - - - - Install `@clerk/nextjs` - - Set your Clerk API keys - - Add `clerkMiddleware()` - - Add `` and Clerk components - - - - ## Install `@clerk/nextjs` - - The [Clerk Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. - - Run the following command to install the SDK: - - - ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs - ``` - - ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs - ``` - - ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs - ``` - - - ## Set your Clerk API keys - - - - - - - - Add the following keys to your `.env.local` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. - - - - 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys){{ track: 'exp_create_account_nextjs_quickstart' }} page. - 1. In the **Quick Copy** section, copy your Clerk Publishable and Secret Keys. - 1. Paste your keys into your `.env.local` file. - - The final result should resemble the following: - - - - ```env {{ filename: '.env.local' }} - NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} - CLERK_SECRET_KEY={{secret}} - ``` - - ## Add `clerkMiddleware()` to your app - - [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: - - 1. Create a `middleware.ts` file. - - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. - 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: - - ```tsx {{ filename: 'middleware.ts' }} - import { clerkMiddleware } from '@clerk/nextjs/server' - - export default clerkMiddleware() - - export const config = { - matcher: [ - // Skip Next.js internals and all static files, unless found in search params - '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', - // Always run for API routes - '/(api|trpc)(.*)', - ], - } - ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. - - ## Add `` and Clerk components to your app - - - - You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#control-components). Create a header using the following components: - - - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. - - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. - - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. - - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in-or-up). - - Select your preferred router to learn how to make this data available across your entire app: - - - ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import './globals.css' - - export default function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - - -
- - - - - - -
-
{children}
- - -
- ) - } - ``` - - ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} - import '@/styles/globals.css' - import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' - import type { AppProps } from 'next/app' - - function MyApp({ Component, pageProps }: AppProps) { - return ( - - - - - - - - - - ) - } - - export default MyApp - ``` -
- - ## Create your first user - - Run your project with the following command: - - - ```bash {{ filename: 'terminal' }} - npm run dev - ``` - - ```bash {{ filename: 'terminal' }} - yarn dev - ``` - - ```bash {{ filename: 'terminal' }} - pnpm dev - ``` - - - Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user. -
- -## Next steps - - - - [Create a custom sign-in or sign-up page](/docs/references/nextjs/custom-sign-in-or-up-page) - - This tutorial gets you started with Clerk's `` component, which uses the Account Portal. If you don't want to use the Account Portal, read this guide about creating a custom authentication page. - - --- - - - [Add custom onboarding to your authentication flow](/docs/references/nextjs/add-onboarding-flow) - - If you need to collect additional information about users that Clerk's Account Portal or prebuilt components don't collect, read this guide about adding a custom onboarding flow to your authentication flow. - - --- - - - [Protect specific routes](/docs/references/nextjs/clerk-middleware) - - This tutorial taught you that by default, `clerkMiddleware()` will not protect any routes. Read this reference doc to learn how to protect specific routes from unauthenticated users. - - --- - - - [Read user and session data](/docs/references/nextjs/read-session-data) - - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. - - --- - - - [Next.js SDK Reference](/docs/references/nextjs/overview) - - Learn more about the Clerk Next.js SDK and how to use it. - - --- - - - [Deploy to Production](/docs/deployments/overview) - - Learn how to deploy your Clerk app to production. - diff --git a/docs/quickstarts/nextjs.mdx b/docs/quickstarts/nextjs.mdx index d4bfe44a86..d911f70713 100644 --- a/docs/quickstarts/nextjs.mdx +++ b/docs/quickstarts/nextjs.mdx @@ -1,61 +1,82 @@ --- title: Next.js Quickstart -description: Add authentication and user management to your Next.js app. -search: false -metadata: - robots: - index: false +description: Add authentication and user management to your Next.js app with Clerk. --- - - How to add Clerk to your Next.js application - - Use Clerk's prebuilt components for user authentication + - Install `@clerk/nextjs` + - Set your Clerk API keys + - Add `clerkMiddleware()` + - Add `` and Clerk components - ## Create a new Next.js application - - Run the following command to create a new Next.js application: - - ```bash {{ filename: 'terminal' }} - npx create-next-app@latest - ``` - - Accept the default configuration options when prompted. - ## Install `@clerk/nextjs` - Run the following command to install the Next.js SDK: + The [Clerk Next.js SDK](/docs/references/nextjs/overview) gives you access to prebuilt components, React hooks, and helpers to make user authentication easier. + + Run the following command to install the SDK: ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs@6.11.0-snapshot.v20250124164901 + npm install @clerk/nextjs ``` ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs@6.11.0-snapshot.v20250124164901 + yarn add @clerk/nextjs ``` ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs@6.11.0-snapshot.v20250124164901 + pnpm add @clerk/nextjs ``` + ## Set your Clerk API keys + + + + + + + + Add the following keys to your `.env.local` file. These keys can always be retrieved from the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys) page in the Clerk Dashboard. + + + + 1. In the Clerk Dashboard, navigate to the [**API keys**](https://dashboard.clerk.com/last-active?path=api-keys){{ track: 'exp_create_account_nextjs_quickstart' }} page. + 1. In the **Quick Copy** section, copy your Clerk Publishable and Secret Keys. + 1. Paste your keys into your `.env.local` file. + + The final result should resemble the following: + + + + ```env {{ filename: '.env.local' }} + NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} + CLERK_SECRET_KEY={{secret}} + ``` + ## Add `clerkMiddleware()` to your app + [`clerkMiddleware()`](/docs/references/nextjs/clerk-middleware#clerk-middleware) grants you access to user authentication state throughout your app, on any route or page. It also allows you to protect specific routes from unauthenticated users. To add `clerkMiddleware()` to your app, follow these steps: + 1. Create a `middleware.ts` file. - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - - If you're not using the `/src` directory, create `middleware.ts` in the root directory. + - If you're not using the `/src` directory, create `middleware.ts` in the root directory alongside `.env.local`. 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: ```tsx {{ filename: 'middleware.ts' }} @@ -76,67 +97,67 @@ icon: "nextjs", ## Add `` and Clerk components to your app - 1. Add the `` component to your app's layout. This component provides Clerk's authentication context to your app. - 1. Add Clerk's prebuilt components to create a header with sign-in button. - - > [!NOTE] - > This is the default `layout.tsx` file generated by Next.js with Clerk's components added. Feel free to copy and paste the whole file into your project. - - ```tsx {{ filename: 'app/layout.tsx', mark: [[2, 9], 34, [37, 45], 49] }} - import type { Metadata } from 'next' - import { - ClerkProvider, - SignInButton, - SignUpButton, - SignedIn, - SignedOut, - UserButton, - } from '@clerk/nextjs' - import { Geist, Geist_Mono } from 'next/font/google' - import './globals.css' - - const geistSans = Geist({ - variable: '--font-geist-sans', - subsets: ['latin'], - }) - - const geistMono = Geist_Mono({ - variable: '--font-geist-mono', - subsets: ['latin'], - }) - - export const metadata: Metadata = { - title: 'Clerk Next.js Quickstart', - description: 'Generated by create next app', - } - - export default function RootLayout({ - children, - }: Readonly<{ - children: React.ReactNode - }>) { - return ( - - - -
- - - - - - - -
- {children} - - -
- ) - } - ``` + + + You can control which content signed-in and signed-out users can see with Clerk's [prebuilt control components](/docs/components/overview#control-components). Create a header using the following components: + + - [``](/docs/components/control/signed-in): Children of this component can only be seen while **signed in**. + - [``](/docs/components/control/signed-out): Children of this component can only be seen while **signed out**. + - [``](/docs/components/user/user-button): Shows the signed-in user's avatar. Selecting it opens a dropdown menu with account management options. + - [``](/docs/components/unstyled/sign-in-button): An unstyled component that links to the sign-in page. In this example, since no props or [environment variables](/docs/deployments/clerk-environment-variables) are set for the sign-in URL, this component links to the [Account Portal sign-in page](/docs/customization/account-portal/overview#sign-in-or-up). + + Select your preferred router to learn how to make this data available across your entire app: + + + ```tsx {{ filename: 'app/layout.tsx', mark: [6, [9, 16], 20] }} + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import './globals.css' + + export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + + +
+ + + + + + +
+
{children}
+ + +
+ ) + } + ``` - ## Go through the sign-up flow to create your first user + ```tsx {{ filename: 'pages/_app.tsx', mark: [[7, 15]] }} + import '@/styles/globals.css' + import { ClerkProvider, SignInButton, SignedIn, SignedOut, UserButton } from '@clerk/nextjs' + import type { AppProps } from 'next/app' + + function MyApp({ Component, pageProps }: AppProps) { + return ( + + + + + + + + + + ) + } + + export default MyApp + ``` +
+ + ## Create your first user Run your project with the following command: @@ -154,29 +175,37 @@ icon: "nextjs", ``` - 1. Visit your app's homepage at [http://localhost:3000](http://localhost:3000). - 1. Click "Sign up" in the header and authenticate to create your first user. - - ## It's time to build! - - You've added Clerk to your Next.js app 🎉. From here, you can continue developing your application. - - To make configuration changes to your Clerk development instance, you can claim the Clerk keys that were generated for you. Claiming will associate these keys with your Clerk account, which you can create if you don't already have one. + Visit your app's homepage at [http://localhost:3000](http://localhost:3000). Sign up to create your first user.
## Next steps - - [Protect routes using Clerk Middleware](/docs/references/nextjs/clerk-middleware) - - Learn how to protect specific routes from unauthenticated users. + - [Create a custom sign-in or sign-up page](/docs/references/nextjs/custom-sign-in-or-up-page) + - This tutorial gets you started with Clerk's `` component, which uses the Account Portal. If you don't want to use the Account Portal, read this guide about creating a custom authentication page. --- - - [Create custom sign-up and sign-in pages](/docs/references/nextjs/custom-signup-signin-pages) - - Learn how add custom sign-up and sign-in pages with Clerk components. + - [Add custom onboarding to your authentication flow](/docs/references/nextjs/add-onboarding-flow) + - If you need to collect additional information about users that Clerk's Account Portal or prebuilt components don't collect, read this guide about adding a custom onboarding flow to your authentication flow. + + --- + + - [Protect specific routes](/docs/references/nextjs/clerk-middleware) + - This tutorial taught you that by default, `clerkMiddleware()` will not protect any routes. Read this reference doc to learn how to protect specific routes from unauthenticated users. --- - [Read user and session data](/docs/references/nextjs/read-session-data) - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. + + --- + + - [Next.js SDK Reference](/docs/references/nextjs/overview) + - Learn more about the Clerk Next.js SDK and how to use it. + + --- + + - [Deploy to Production](/docs/deployments/overview) + - Learn how to deploy your Clerk app to production. From bc5403780370d20bf3ced22122f92baed1c2cba5 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Fri, 31 Jan 2025 01:12:18 +0800 Subject: [PATCH 80/82] Revert "Merge branch 'mw.accountless' into nick/sdk-selection-stage-1" This reverts commit aa33f970730b4d076aa3b7ccf6bd7d2bde10caa5, reversing changes made to 87130cd0acb0024be3422673aedcd74839294088. --- docs/keyless.mdx | 75 ------------------ docs/manifest.json | 5 -- docs/nextjs-new.mdx | 182 -------------------------------------------- 3 files changed, 262 deletions(-) delete mode 100644 docs/keyless.mdx delete mode 100644 docs/nextjs-new.mdx diff --git a/docs/keyless.mdx b/docs/keyless.mdx deleted file mode 100644 index 650d15370b..0000000000 --- a/docs/keyless.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Keyless Mode -description: Learn how to use Keyless Mode to prototype and test Clerk's authentication features locally without creating an account or managing API keys. -search: false -metadata: - robots: - index: false ---- - -Keyless Mode allows you to quickly prototype and test Clerk's authentication features in your **local development environment** without creating a Clerk account. - -Keyless Mode is currently available only for the Next.js SDK. See the [step-by-step tutorial](/docs/references/nextjs/keyless) to get started. - -## How Keyless Mode works - -When no [Clerk API keys](/docs/deployments/clerk-environment-variables#clerk-publishable-and-secret-keys) are detected, the Clerk SDK automatically: - -1. Generates temporary API keys from Clerk. -1. Creates a development instance with [default configurations](#default-configuration-for-development-instances). -1. Stores keys in a `.clerk` directory, which is added to `.gitignore`. Do not commit the `.clerk` folder to your repository. Deleting this folder will cause new temporary keys to be generated for a new instance. -1. Shows a **Clerk is in keyless mode** button to manage your instance. - -## How do I opt-out? - -Set `NEXT_PUBLIC_CLERK_KEYLESS_DISABLED` in your `.env.local` file. - -```env {{ filename: '.env.local' }} -NEXT_PUBLIC_CLERK_KEYLESS_DISABLED=1 -``` - -## Default configuration for development instances - -Development instances start with these preset configurations: - -- **Authentication**: Email and password are required, Google and GitHub sign-in are enabled -- **Verification**: Email verification is required -- **Password reset**: Enabled -- **MFA**: Disabled -- **Appearance**: Default theme - -> [!NOTE] -> These settings cannot be modified until you [claim your instance](#claim-your-instance-and-disable-keyless-mode). - -## Claim your instance and disable Keyless Mode - -To claim your instance and disable Keyless Mode: - -1. Run your application in local development (e.g. `npm run dev` or `yarn dev`). -1. In the bottom-right of your application, select **Claim keys**. This opens the **Claim Your Application** page. -1. On the **Claim Your Application** page, complete the form by entering your application name and selecting an organization. Then select **Claim application**. -1. Copy your new API keys to your `.env.local` file: - ```env {{ filename: '.env.local' }} - NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={{pub_key}} - CLERK_SECRET_KEY={{secret}} - ``` -1. Select **Go to application**. You'll be redirected your application's **Overview** page. - -> [!IMPORTANT] -> After claiming your instance, you must add the keys to your `.env.local` file to fully disable Keyless Mode. Without this step, you'll continue to see warnings that your instance is claimed but not properly configured. - -## Limitations - -- Works only with **Next.js projects in local development**. -- Development instances can't be customized without [being claimed](#claim-your-instance-and-disable-keyless-mode). -- Production builds require Clerk API keys of a [claimed instance](#claim-your-instance-and-disable-keyless-mode). - -## What happens to unclaimed applications? - -@TODO -- need to add content here. - -## Feedback and Support - -Keyless Mode is currently available only for [Next.js](/docs/quickstarts/nextjs). For other frameworks, [sign up](https://dashboard.clerk.com/sign-up) to get your API keys. - -For questions or feedback, contact [Clerk Support](https://clerk.com/contact/support). diff --git a/docs/manifest.json b/docs/manifest.json index bdd26e8b05..e1d3834347 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -2944,11 +2944,6 @@ "title": "Development", "items": [ [ - { - "title": "Keyless Mode", - "tag": "(Beta)", - "href": "/docs/keyless-mode" - }, { "title": "Multi-tenant architecture", "href": "/docs/guides/multi-tenant-architecture" diff --git a/docs/nextjs-new.mdx b/docs/nextjs-new.mdx deleted file mode 100644 index d4bfe44a86..0000000000 --- a/docs/nextjs-new.mdx +++ /dev/null @@ -1,182 +0,0 @@ ---- -title: Next.js Quickstart -description: Add authentication and user management to your Next.js app. -search: false -metadata: - robots: - index: false ---- - - - - How to add Clerk to your Next.js application - - Use Clerk's prebuilt components for user authentication - - - - ## Create a new Next.js application - - Run the following command to create a new Next.js application: - - ```bash {{ filename: 'terminal' }} - npx create-next-app@latest - ``` - - Accept the default configuration options when prompted. - - ## Install `@clerk/nextjs` - - Run the following command to install the Next.js SDK: - - - ```bash {{ filename: 'terminal' }} - npm install @clerk/nextjs@6.11.0-snapshot.v20250124164901 - ``` - - ```bash {{ filename: 'terminal' }} - yarn add @clerk/nextjs@6.11.0-snapshot.v20250124164901 - ``` - - ```bash {{ filename: 'terminal' }} - pnpm add @clerk/nextjs@6.11.0-snapshot.v20250124164901 - ``` - - - ## Add `clerkMiddleware()` to your app - - 1. Create a `middleware.ts` file. - - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. - - If you're not using the `/src` directory, create `middleware.ts` in the root directory. - 1. In your `middleware.ts` file, export the `clerkMiddleware()` helper: - - ```tsx {{ filename: 'middleware.ts' }} - import { clerkMiddleware } from '@clerk/nextjs/server' - - export default clerkMiddleware() - - export const config = { - matcher: [ - // Skip Next.js internals and all static files, unless found in search params - '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', - // Always run for API routes - '/(api|trpc)(.*)', - ], - } - ``` - 1. By default, `clerkMiddleware()` will not protect any routes. All routes are public and you must opt-in to protection for routes. See the [`clerkMiddleware()` reference](/docs/references/nextjs/clerk-middleware) to learn how to require authentication for specific routes. - - ## Add `` and Clerk components to your app - - 1. Add the `` component to your app's layout. This component provides Clerk's authentication context to your app. - 1. Add Clerk's prebuilt components to create a header with sign-in button. - - > [!NOTE] - > This is the default `layout.tsx` file generated by Next.js with Clerk's components added. Feel free to copy and paste the whole file into your project. - - ```tsx {{ filename: 'app/layout.tsx', mark: [[2, 9], 34, [37, 45], 49] }} - import type { Metadata } from 'next' - import { - ClerkProvider, - SignInButton, - SignUpButton, - SignedIn, - SignedOut, - UserButton, - } from '@clerk/nextjs' - import { Geist, Geist_Mono } from 'next/font/google' - import './globals.css' - - const geistSans = Geist({ - variable: '--font-geist-sans', - subsets: ['latin'], - }) - - const geistMono = Geist_Mono({ - variable: '--font-geist-mono', - subsets: ['latin'], - }) - - export const metadata: Metadata = { - title: 'Clerk Next.js Quickstart', - description: 'Generated by create next app', - } - - export default function RootLayout({ - children, - }: Readonly<{ - children: React.ReactNode - }>) { - return ( - - - -
- - - - - - - -
- {children} - - -
- ) - } - ``` - - ## Go through the sign-up flow to create your first user - - Run your project with the following command: - - - ```bash {{ filename: 'terminal' }} - npm run dev - ``` - - ```bash {{ filename: 'terminal' }} - yarn dev - ``` - - ```bash {{ filename: 'terminal' }} - pnpm dev - ``` - - - 1. Visit your app's homepage at [http://localhost:3000](http://localhost:3000). - 1. Click "Sign up" in the header and authenticate to create your first user. - - ## It's time to build! - - You've added Clerk to your Next.js app 🎉. From here, you can continue developing your application. - - To make configuration changes to your Clerk development instance, you can claim the Clerk keys that were generated for you. Claiming will associate these keys with your Clerk account, which you can create if you don't already have one. -
- -## Next steps - - - - [Protect routes using Clerk Middleware](/docs/references/nextjs/clerk-middleware) - - Learn how to protect specific routes from unauthenticated users. - - --- - - - [Create custom sign-up and sign-in pages](/docs/references/nextjs/custom-signup-signin-pages) - - Learn how add custom sign-up and sign-in pages with Clerk components. - - --- - - - [Read user and session data](/docs/references/nextjs/read-session-data) - - Learn how to use Clerk's hooks and helpers to access the active session and user data in your Next.js app. - From e801dbaf617a7f57e4930034b9c3464a77fb2c9b Mon Sep 17 00:00:00 2001 From: Alexis Aguilar <98043211+alexisintech@users.noreply.github.com> Date: Thu, 30 Jan 2025 13:35:26 -0500 Subject: [PATCH 81/82] docs review with colin --- docs/quickstarts/nextjs.mdx | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/docs/quickstarts/nextjs.mdx b/docs/quickstarts/nextjs.mdx index e2f69de96d..c3f02a076d 100644 --- a/docs/quickstarts/nextjs.mdx +++ b/docs/quickstarts/nextjs.mdx @@ -7,12 +7,7 @@ metadata: index: false --- -{/* TODO: Do we want an introductory line? Or do we want to leave it blank? We can add some marketing copy like: -Clerk provides a powerful, feature-rich authentication and user management solution for Next.js applications through its official SDK. With just a few lines of code, you can add secure authentication, and user and organization management to your Next.js app. */} - - - For applications using Next.js Pages Router, see the [Pages Router quickstart](/docs/quickstarts/nextjs-pages-router). - +Clerk provides a powerful, feature-rich authentication and user management solution for Next.js applications through its official SDK. ## Create a new Next.js application @@ -25,7 +20,7 @@ Clerk provides a powerful, feature-rich authentication and user management solut ## Install `@clerk/nextjs` - Run the following command to install the [Next.js SDK](/docs/references/nextjs/overview): + Run the following command to install the Next.js SDK: ```bash {{ filename: 'terminal' }} @@ -43,7 +38,7 @@ Clerk provides a powerful, feature-rich authentication and user management solut ## Add `clerkMiddleware()` to your app - {/* TODO: It looks like we took out the explanation of what clerkMiddleware() is. I think we should be providing context to our users, as a majority of docs do. */} + `clerkMiddleware()` grants you access to user authentication state throughout your app. 1. Create a `middleware.ts` file. - If you're using the `/src` directory, create `middleware.ts` in the `/src` directory. @@ -133,7 +128,7 @@ Clerk provides a powerful, feature-rich authentication and user management solut You've added Clerk to your Next.js app 🎉. From here, you can continue developing your application. - To make configuration changes to your Clerk development instance, claim the Clerk keys that were generated for you by selecting **Claim your application** in the bottom right of your app. Claiming your keys will associate them with your Clerk account. + To make configuration changes to your Clerk development instance, claim the Clerk keys that were generated for you by selecting **Claim your application** in the bottom right of your app. This will associate the application with your Clerk account. ## Next steps From 567725fe45a28e040049dc7cb0d6639bf11fc697 Mon Sep 17 00:00:00 2001 From: Nick Wylynko Date: Mon, 3 Feb 2025 23:39:42 +0800 Subject: [PATCH 82/82] remove nextjs icons --- docs/manifest.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/manifest.json b/docs/manifest.json index 02d38cb3b2..29998763a7 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -23,13 +23,11 @@ }, { "title": "Quickstart (App Router)", - "href": "/docs/quickstarts/nextjs", - "icon": "nextjs" + "href": "/docs/quickstarts/nextjs" }, { "title": "Quickstart (Pages Router)", - "href": "/docs/quickstarts/nextjs-pages-router", - "icon": "nextjs" + "href": "/docs/quickstarts/nextjs-pages-router" } ] ]

)g6Hi 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 z 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 z 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