diff --git a/docs/references/contribute/_category_.json b/docs/references/contribute/_category_.json
new file mode 100644
index 000000000..1b453aa1c
--- /dev/null
+++ b/docs/references/contribute/_category_.json
@@ -0,0 +1,7 @@
+{
+ "label": "Contribute",
+ "customProps": {
+ "isMainCategory": true
+ },
+ "position": 11
+}
diff --git a/docs/references/contribute/introduction.mdx b/docs/references/contribute/introduction.mdx
new file mode 100644
index 000000000..d1a47787d
--- /dev/null
+++ b/docs/references/contribute/introduction.mdx
@@ -0,0 +1,12 @@
+---
+title: Introduction
+hide_title: true
+hide_table_of_contents: true
+sidebar_position: 1
+description: Contribute to SuperTokens
+page_type: sdk-reference
+category: contribute
+---
+
+# Introduction
+
diff --git a/docs/references/contribute/setup.mdx b/docs/references/contribute/setup.mdx
new file mode 100644
index 000000000..66a67b390
--- /dev/null
+++ b/docs/references/contribute/setup.mdx
@@ -0,0 +1,126 @@
+---
+title: Development Setup
+hide_title: true
+hide_table_of_contents: true
+sidebar_position: 2
+description: Setting up repositories for local development
+page_type: sdk-reference
+category: contribute
+---
+
+# Development Setup
+
+## Prerequisites
+
+
+
+
+ - NodeJS (20 or above) and `npm`
+ - Any IDE
+ - [VSCode](https://code.visualstudio.com)
+ - Any equivalent IDE
+
+
+
+
+
+ - Python (3.8 or above)
+ - Any IDE
+ - [PyCharm](https://www.jetbrains.com/pycharm/download) (recommended)
+ - [VSCode](https://code.visualstudio.com)
+ - Any equivalent IDE
+
+
+
+
+
+ - Java 21.0.7
+
+
+
+
+
+## Setup
+
+
+
+
+ - Fork the [supertokens-node](https://github.com/supertokens/supertokens-node) repository
+ - Clone the forked repository
+ - Install dependencies: `npm i -d`
+ - Enable pre-commit hooks: `npm run set-up-hooks`
+
+
+
+
+
+ - Fork the [supertokens-python](https://github.com/supertokens/supertokens-python) repository
+ - Clone the forked repository
+ - Create a virtual environment for the project and activate it
+ - Install dependencies: `make dev-install`
+ - Enable pre-commit hooks: `make set-up-hooks`
+
+
+
+
+
+ - Fork the [supertokens-core](https://github.com/supertokens/supertokens-core) repository
+ - Clone the [supertokens-root](https://github.com/supertokens/supertokens-root) repository in the same parent directory
+ ```
+ - parent_directory
+ - supertokens-core
+ - supertokens-root
+ ```
+ - Navigate to the `supertoken-root` repository
+ - Open the `modules.txt` file in an editor
+ - The modules.txt file contains the core, plugin-interface, the type of plugin and their branches(versions)
+ - By default the `master` branch is used but you can change the branch depending on which version you want to modify
+ - The `sqlite-plugin` is used as the default plugin as it is an in-memory database and requires no setup
+ - [core](https://github.com/supertokens/supertokens-core)
+ - [plugin-interface](https://github.com/supertokens/supertokens-plugin-interface)
+ - Check the repository branches by clicking on the links listed above, click the branch tab and check for all the available versions
+ - Add your github username separated by a ',' after core,master in modules.txt
+ - If, for example, your github `username` is `helloworld` then modules.txt should look like
+ ```
+ // put module name like module name,branch name,github username(if contributing with a forked repository) and then call ./loadModules script
+ core,master,helloworld
+ plugin-interface,master
+ sqlite-plugin,master
+ ```
+ - Run `./loadModules` to clone the required repositories
+
+ ### Running the core locally
+ - Run `startTestEnv --wait` in a terminal and keep it running
+ - Navigate to `supertokens-root` in a new terminal and run `cp ./temp/config.yaml .`
+ - Run `java -classpath "./core/*:./plugin-interface/*:./ee/*" io.supertokens.Main ./ DEV`
+ - This will start the core, listening on `http://localhost:3567`
+
+
+
+
+
+## Modifying Code
+
+
+
+
+ - Open the `supertokens-node` project in your IDE to start modifying code
+ - Run `npm run build-pretty` to build the project and find/fix lint/formatting errors before committing
+
+
+
+
+
+ - Open the `supertokens-python` project in your IDE to start modifying code
+ - Run `make lint` to find/fix lint/formatting errors before committing
+
+
+
+
+
+ - Open the `supertokens-core` project in your IDE to start modifying code
+ - After gradle has imported all the dependencies, you can start modifying the code
+
+
+
+
diff --git a/docs/references/contribute/testing.mdx b/docs/references/contribute/testing.mdx
new file mode 100644
index 000000000..533d674f9
--- /dev/null
+++ b/docs/references/contribute/testing.mdx
@@ -0,0 +1,249 @@
+---
+title: Testing
+hide_title: true
+hide_table_of_contents: true
+sidebar_position: 3
+description: Testing changes
+page_type: sdk-reference
+category: contribute
+---
+
+# Testing
+
+## Prerequisites
+
+- Install `docker`
+ - [Docker Desktop](https://docs.docker.com/desktop/) is convenient to install and use, and includes a Docker Engine.
+ - [Docker Engine](https://docs.docker.com/engine/install/) is the minimum requirement to spin up containers required for tests.
+
+
+
+
+
+ 1. Setup repositories for integration/end-to-end testing
+ 1. [supertokens-auth-react](https://github.com/supertokens/supertokens-auth-react)
+ 2. [backend-sdk-testing](https://github.com/supertokens/backend-sdk-testing)
+
+
+
+
+
+ 1. Setup repositories for integration/end-to-end testing
+ 1. [supertokens-auth-react](https://github.com/supertokens/supertokens-auth-react)
+ 2. [backend-sdk-testing](https://github.com/supertokens/backend-sdk-testing)
+
+
+
+
+
+## Unit Tests
+
+
+
+
+ 1. Run `docker compose up --wait` to start up the required containers
+ 2. Run `npm run test`
+
+
+
+
+
+ ### Run all tests
+ 1. Run `make test`
+ 1. Note: This starts up and tears down docker containers required for the tests to run
+ 2. Defaults to using the latest `supertokens-core` image
+ 1. Set the `SUPERTOKENS_CORE_VERSION` environment to pull a different image
+
+ ### Run individual tests
+ 1. Run `docker compose up --wait` to start up the required containers
+ 2. Run tests
+ 1. `pytest tests/` to run a single file
+ 2. `pytest tests/::` to run a single test
+
+
+
+
+
+ ### Testing Locally
+
+ 1. Navigate to the `supertokens-root` repository
+ 2. Run all tests: `.startTestEnv`
+
+ ### Using Github Actions
+
+ 1. Navigate to your `supertokens-core` fork on GitHub
+ 2. Navigate to the `Actions` tab
+ 3. Find the action named `Run Tests` and navigate to it
+ 4. Click on the `Run workflow` button
+ 5. Set the variables
+ 1. `supertokens-plugin-interface owner name` - If `supertokens-plugin-interface` was forked, input your GitHub username
+ 2. `supertokens-plugin-interface branch name` - If the core version you are working on is compatible with a plugin-interface version that is not on the master branch, set this to the appropriate branch
+ 6. Click on the `Run workflow` button
+
+
+
+
+
+
+## Backend SDK Testing
+Integration tests to test backend SDK functionality.
+
+ 1. Start docker containers
+ 1. `docker compose up --wait`
+ 2. Set environment variables
+ 1. `export SUPERTOKENS_ENV=testing`
+ 2. `export TEST_MODE=testing`
+ 3. `export API_PORT=3030`
+
+
+
+
+
+ 3. Start the application server:
+ 1. Navigate to `supertokens-node/test/test-server`
+ 2. `node .`
+
+
+
+
+
+ 3. Start the application server:
+ 1. Navigate to `supertokens-python/test/test-server`
+ 2. `python app.py`
+
+
+
+ 4. Run `backend-sdk-testing` tests
+ 1. Navigate to `backend-sdk-testing`
+ 2. `npm install`
+ 3. `npm run build`
+ 4. `npm test`
+
+
+
+## Auth-React Tests
+End-to-end tests using `supertokens-auth-react` as the frontend.
+
+ 1. Start docker containers
+ 1. `docker compose up --wait`
+ 2. Set environment variables
+ 1. `export SUPERTOKENS_ENV=testing`
+ 2. `export TEST_MODE=testing`
+ 3. `export APP_SERVER=8083`
+ 4. `export NODE_PORT=8082`
+ 5. `export PORT=3031`
+ 6. `export REACT_APP_API_PORT=8083`
+
+
+
+
+
+ 3. Startthe application server:
+ 1. Navigate to `supertokens-node/test/auth-react-server`
+ 2. `npm install`
+ 3. `NODE_PORT=8083 node .`
+
+
+
+
+
+ 3. Start the application server:
+ 1. Django
+ 1. Navigate to `supertokens-python/tests/auth-react/django3x`
+ 2. `uvicorn mysite.asgi:application --port 8083`
+ 2. FastAPI
+ 1. Navigate to `supertokens-python/tests/auth-react/fastapi-server`
+ 2. `uvicorn app:app --host 0.0.0.0 --port 8083`
+ 3. Flask
+ 1. Navigate to `supertokens-python/tests/auth-react/flask-server`
+ 2. `python3 app.py --port 8083`
+
+
+
+
+
+
+ 4. Setup `supertokens-auth-react`
+ 1. Navigate to `supertokens-auth-react`
+ 2. `npm install`
+ 5. Run `supertokens-auth-react` tests
+ 1. Navigate to `supertokens-auth-react/test/server` in a new terminal
+ 2. `npm install`
+ 3. `node .`
+ 3. Navigate to `supertokens-auth-react/examples/for-tests` in a new terminal
+ 4. `npm install`
+ 6. `npm start`
+ 6. Wait a few seconds for the frontend application to start
+ 7. Run tests
+ 1. ALl tests: `npx mocha`
+ 2. Specific specs: `npx mocha --spec `
+
+
+## Website Tests
+End-to-end tests using `supertokens-website` as the frontend.
+
+ 1. Start docker containers
+ 1. `docker compose up --wait`
+ 2. Set environment variables
+ 1. `export SUPERTOKENS_ENV=testing`
+ 2. `export TEST_MODE=testing`
+
+
+
+
+
+ 3. Start the application and cross-domain servers:
+ 1. Navigate to `supertokens-node/test/frontendIntegration` in two new terminals
+ 2. `npm install`
+ 3. `NODE_PORT=8080 node .` in terminal 1
+ 4. `NODE_PORT=8082 node .` in terminal 2
+
+
+
+
+
+ 3. Start the application and cross-domain servers:
+ 1. Django2
+ 1. Navigate to `supertokens-python/tests/frontendIntegration/django2x` in two new terminals
+ 2. `make with-django2x`
+ 3. `gunicorn mysite.wsgi --bind 0.0.0.0:8080` in terminal 1
+ 4. `gunicorn mysite.wsgi --bind 0.0.0.0:8082` in terminal 2
+ 2. Django3
+ 1. Navigate to `supertokens-python/tests/frontendIntegration/django3x` in two new terminals
+ 2. `make with-django`
+ 3. `uvicorn mysite.asgi:application --port 8080` in terminal 1
+ 4. `uvicorn mysite.asgi:application --port 8082` in terminal 2
+ 3. DRF Sync
+ 1. Navigate to `supertokens-python/tests/frontendIntegration/drf_sync` in two new terminals
+ 2. `make with-drf`
+ 3. `gunicorn mysite.wsgi --bind 0.0.0.0:8080` in terminal 1
+ 4. `gunicorn mysite.wsgi --bind 0.0.0.0:8082` in terminal 2
+ 4. DRF Async
+ 1. Navigate to `supertokens-python/tests/frontendIntegration/drf_async` in two new terminals
+ 2. `make with-drf`
+ 3. `uvicorn mysite.asgi:application --port 8080` in terminal 1
+ 4. `uvicorn mysite.asgi:application --port 8082` in terminal 2
+ 5. FastAPI
+ 1. Navigate to `supertokens-python/tests/frontendIntegration/fastapi-server` in two new terminals
+ 2. `make with-fastapi`
+ 3. `uvicorn app:app --host 0.0.0.0 --port 8080` in terminal 1
+ 4. `uvicorn app:app --host 0.0.0.0 --port 8082` in terminal 2
+ 6. Flask
+ 1. Navigate to `supertokens-python/tests/frontendIntegration/flask-server` in two new terminals
+ 2. `make with-flask`
+ 3. `python3 app.py --port 8080` in terminal 1
+ 4. `python3 app.py --port 8082` in terminal 2
+
+
+
+
+
+ 4. Setup `supertokens-website`
+ 1. Navigate to `supertokens-website`
+ 2. `npm install`
+ 5. Run `supertokens-website` tests
+ 1. Navigate to `supertokens-website/test/server` in a new terminal
+ 2. `npm install`
+ 3. `NODE_PORT=8081 node .`
+ 3. Navigate to `supertokens-website/` in a new terminal
+ 7. Run tests: `npm test`
\ No newline at end of file
diff --git a/src/components/Tabs/RepositoryTabs.tsx b/src/components/Tabs/RepositoryTabs.tsx
new file mode 100644
index 000000000..711d1587f
--- /dev/null
+++ b/src/components/Tabs/RepositoryTabs.tsx
@@ -0,0 +1,44 @@
+import Tabs, { Props as TabsProps } from "@theme/Tabs";
+import TabItem from "@theme/TabItem";
+import { useMemo } from "react";
+
+const RepositoryTabOptions = [
+ { label: "Node", value: "supertokens-node" },
+ { label: "Python", value: "supertokens-python" },
+ { label: "Core", value: "supertokens-core" },
+ { label: "React", value: "supertokens-auth-react" },
+ { label: "Website", value: "supertokens-website" },
+ { label: "Backend SDK Testing", value: "backend-sdk-testing" },
+];
+
+const RepositoryTabsGroupId = "repository";
+
+type RepositoryTabsProps = Omit & {
+ exclude?: string[];
+ // TODO: Remove this.
+ // Temporary solution for places where we show stuff like "Dashboard" and "cURL"
+ additionalValues?: { label: string; value: string }[];
+};
+
+function RepositoryTabsRoot(props: RepositoryTabsProps) {
+ const { children, exclude, additionalValues, ...rest } = props;
+
+ const tabOptions = useMemo(() => {
+ const allOptions = additionalValues
+ ? [...RepositoryTabOptions, ...additionalValues]
+ : RepositoryTabOptions;
+ if (exclude) return allOptions.filter((tabItem) => !exclude.includes(tabItem.value));
+ return allOptions;
+ }, [RepositoryTabOptions, exclude, additionalValues]);
+
+ return (
+
+ {children}
+
+ );
+}
+
+export const RepositoryTabs = Object.assign(RepositoryTabsRoot, {
+ Tab: TabItem,
+ TabItem,
+});
diff --git a/src/components/Tabs/index.ts b/src/components/Tabs/index.ts
index 7a2885359..97edf73eb 100644
--- a/src/components/Tabs/index.ts
+++ b/src/components/Tabs/index.ts
@@ -1,5 +1,6 @@
export * from "./FrontendTabs";
export * from "./BackendTabs";
+export * from "./RepositoryTabs";
export * from "./SelfHostingTabs";
export * from "./FrontendCustomUITabs";
export * from "./FrontendPrebuiltUITabs";
diff --git a/src/plugins/generateLllmsFullTxt.ts b/src/plugins/generateLllmsFullTxt.ts
index 13d5ac0db..ea2af82bf 100644
--- a/src/plugins/generateLllmsFullTxt.ts
+++ b/src/plugins/generateLllmsFullTxt.ts
@@ -197,6 +197,7 @@ async function parseMdxContent(filePath: string, usePageTitle = false): Promise<
FrontendCustomUITabs: "Tabs",
FrontendPrebuiltUITabs: "Tabs",
BackendTabs: "Tabs",
+ RepositoryTabs: "Tabs",
NodePackageManagerCard: "Tabs",
FrontendTabs: "Tabs",
DatabaseTabs: "Tabs",
diff --git a/src/theme/MDXComponents.tsx b/src/theme/MDXComponents.tsx
index a428e73ad..dae6b002f 100644
--- a/src/theme/MDXComponents.tsx
+++ b/src/theme/MDXComponents.tsx
@@ -19,6 +19,7 @@ import {
FrontendPrebuiltUITabs,
FrontendCustomUITabs,
BackendTabs,
+ RepositoryTabs,
AppInfoForm,
SelfHostingTabs,
NpmOrScriptsCard,
@@ -155,6 +156,7 @@ export default {
FrontendPrebuiltUITabs,
FrontendCustomUITabs,
BackendTabs,
+ RepositoryTabs,
AppInfoForm,
SelfHostingTabs,
NpmOrScriptsCard,