diff --git a/app/en/get-started/agent-frameworks/crewai/use-arcade-tools/page.mdx b/app/en/get-started/agent-frameworks/crewai/use-arcade-tools/page.mdx
index 4ee83289f..8455a60fd 100644
--- a/app/en/get-started/agent-frameworks/crewai/use-arcade-tools/page.mdx
+++ b/app/en/get-started/agent-frameworks/crewai/use-arcade-tools/page.mdx
@@ -3,7 +3,7 @@ title: "Setup Arcade tools with CrewAI"
description: "Learn how to use Arcade tools in CrewAI applications"
---
-import { Steps, Callout } from "nextra/components";
+import { Steps, Tabs, Callout } from "nextra/components";
# Use Arcade tools with CrewAI
@@ -50,9 +50,25 @@ mkdir crewai-arcade-example
cd crewai-arcade-example
uv init
uv venv
+```
+
+
+
+
+```bash
source .venv/bin/activate
```
+
+
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+```
+
+
+
+
Install the necessary packages:
```bash
diff --git a/app/en/get-started/agent-frameworks/google-adk/setup-python/page.mdx b/app/en/get-started/agent-frameworks/google-adk/setup-python/page.mdx
index 0302a0560..22dd27025 100644
--- a/app/en/get-started/agent-frameworks/google-adk/setup-python/page.mdx
+++ b/app/en/get-started/agent-frameworks/google-adk/setup-python/page.mdx
@@ -3,7 +3,7 @@ title: "Setup Arcade with Google ADK (Python)"
description: "Build an agent with Arcade tools using Google ADK"
---
-import { Steps, Callout } from "nextra/components";
+import { Steps, Tabs, Callout } from "nextra/components";
# Setup Arcade with Google ADK (Python)
@@ -48,9 +48,25 @@ mkdir google-adk-arcade-example
cd google-adk-arcade-example
uv init
uv venv
+```
+
+
+
+
+```bash
source .venv/bin/activate
```
+
+
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+```
+
+
+
+
Install the necessary packages:
```bash
diff --git a/app/en/get-started/agent-frameworks/langchain/use-arcade-with-langchain-py/page.mdx b/app/en/get-started/agent-frameworks/langchain/use-arcade-with-langchain-py/page.mdx
index 9b6dcc10e..2669dedc0 100644
--- a/app/en/get-started/agent-frameworks/langchain/use-arcade-with-langchain-py/page.mdx
+++ b/app/en/get-started/agent-frameworks/langchain/use-arcade-with-langchain-py/page.mdx
@@ -52,7 +52,26 @@ mkdir langchain-arcade-example
cd langchain-arcade-example
uv init
uv venv
+```
+
+
+
+
+```bash
source .venv/bin/activate
+```
+
+
+
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+```
+
+
+
+
+```bash
uv add arcadepy langchain langchain-openai python-dotenv
```
diff --git a/app/en/get-started/agent-frameworks/openai-agents/setup-python/page.mdx b/app/en/get-started/agent-frameworks/openai-agents/setup-python/page.mdx
index 903b74371..2f5029e65 100644
--- a/app/en/get-started/agent-frameworks/openai-agents/setup-python/page.mdx
+++ b/app/en/get-started/agent-frameworks/openai-agents/setup-python/page.mdx
@@ -53,9 +53,25 @@ mkdir openai-agents-arcade-example
cd openai-agents-arcade-example
uv init
uv venv
+```
+
+
+
+
+```bash
source .venv/bin/activate
```
+
+
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+```
+
+
+
+
Install the necessary packages:
```bash
diff --git a/app/en/get-started/agent-frameworks/setup-arcade-with-your-llm-python/page.mdx b/app/en/get-started/agent-frameworks/setup-arcade-with-your-llm-python/page.mdx
index 7739ac310..6365c3c38 100644
--- a/app/en/get-started/agent-frameworks/setup-arcade-with-your-llm-python/page.mdx
+++ b/app/en/get-started/agent-frameworks/setup-arcade-with-your-llm-python/page.mdx
@@ -51,9 +51,25 @@ Create a new virtual environment and activate it:
```bash
uv venv
+```
+
+
+
+
+```bash
source .venv/bin/activate
```
+
+
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+```
+
+
+
+
Install the dependencies:
```bash
diff --git a/app/en/get-started/quickstarts/call-tool-agent/page.mdx b/app/en/get-started/quickstarts/call-tool-agent/page.mdx
index 8b85f65bd..f665dbb02 100644
--- a/app/en/get-started/quickstarts/call-tool-agent/page.mdx
+++ b/app/en/get-started/quickstarts/call-tool-agent/page.mdx
@@ -60,9 +60,25 @@ Install and use the Arcade client to call Arcade Hosted Tools.
```bash
uv venv
- source .venv/bin/activate
```
+
+
+
+ ```bash
+ source .venv/bin/activate
+ ```
+
+
+
+
+ ```powershell
+ . ".venv\Scripts\Activate.ps1"
+ ```
+
+
+
+
Then, run the following command to install the Python client package `arcadepy`:
```bash
diff --git a/app/en/get-started/setup/api-keys/page.mdx b/app/en/get-started/setup/api-keys/page.mdx
index 83b1e16f0..c995e9dd6 100644
--- a/app/en/get-started/setup/api-keys/page.mdx
+++ b/app/en/get-started/setup/api-keys/page.mdx
@@ -89,7 +89,7 @@ arcade login
The CLI will automatically:
- Print your API key to the console
-- Save your credentials to `~/.arcade/credentials.yaml`
+- Save your credentials to `~/.arcade/credentials.yaml` (or `%USERPROFILE%\.arcade\credentials.yaml` on Windows)
diff --git a/app/en/get-started/setup/windows-environment/page.mdx b/app/en/get-started/setup/windows-environment/page.mdx
index 362c27eb2..620774346 100644
--- a/app/en/get-started/setup/windows-environment/page.mdx
+++ b/app/en/get-started/setup/windows-environment/page.mdx
@@ -1,16 +1,294 @@
---
-title: "Windows Environment Setup"
-description: "Set up your Windows environment for Arcade development"
+title: "Windows environment setup"
+description: "Install and use Arcade CLI on Windows"
---
-import { Callout } from "nextra/components";
+import { Steps, Callout, Tabs } from "nextra/components";
-# Windows Environment Setup
+# Windows environment setup
-This page covers setting up your Windows environment for Arcade development.
+Set up Arcade CLI on Windows using `uv` (recommended), with optional `pip` fallback guidance.
-
- This page is coming soon. The team is working on comprehensive documentation for setting up Arcade on Windows.
+## Before you start
+
+- Windows with PowerShell
+- Python 3.10 or later
+- Internet access for package download
+
+Validate which commands exist on your machine:
+
+
+
+
+```bash
+uv --version
+python3 --version
+command -v arcade || true
+```
+
+
+
+
+```powershell
+uv --version
+python --version
+py --version
+Get-Command arcade -ErrorAction SilentlyContinue
+```
+
+
+
+
+
+ If both `python` and `py` are missing, the pip-only instructions will fail
+ until you install Python and add it to `PATH`.
-In the meantime, if you need help setting up Arcade on Windows, please reach out on [Discord](https://discord.gg/GUZEMpEZ9p).
\ No newline at end of file
+## Install `uv`
+
+Use one of the following methods.
+
+
+
+
+```bash
+curl -LsSf https://astral.sh/uv/install.sh | sh
+export PATH="$HOME/.local/bin:$PATH"
+uv --version
+```
+
+
+
+
+```powershell
+irm https://astral.sh/uv/install.ps1 | iex
+uv --version
+```
+
+If `uv` is still not found in the same shell session:
+
+```powershell
+$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"
+uv --version
+```
+
+
+
+
+## Optional binary package managers on Windows
+
+`winget`, `scoop`, and `choco` are optional convenience methods. Keep them secondary to official install instructions.
+
+
+
+
+```powershell
+winget --version
+winget install --id=astral-sh.uv -e
+```
+
+
+
+
+```powershell
+scoop --version
+scoop install main/uv
+```
+
+
+
+
+```powershell
+choco --version
+choco install uv
+```
+
+
+
+
+## Install Arcade CLI with `uv` (recommended)
+
+
+### Global install
+
+
+
+
+```bash
+uv tool install --upgrade arcade-mcp
+arcade -v
+command -v arcade
+```
+
+
+
+
+```powershell
+uv tool install --upgrade arcade-mcp
+arcade -v
+Get-Command arcade
+```
+
+
+
+
+### Virtual environment install
+
+
+
+
+```bash
+uv venv .venv
+uv pip install --python .venv/bin/python arcade-mcp
+.venv/bin/arcade -v
+```
+
+Optional activation:
+
+```bash
+source .venv/bin/activate
+arcade -v
+```
+
+
+
+
+```powershell
+uv venv ".venv"
+uv pip install --python ".venv\Scripts\python.exe" arcade-mcp
+& ".venv\Scripts\arcade.exe" -v
+```
+
+Optional activation:
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+arcade -v
+```
+
+
+
+
+
+## Install without `uv` (pip fallback)
+
+Use this only if `uv` is unavailable.
+
+
+
+
+```bash
+python3 -m venv .venv
+source .venv/bin/activate
+python -m pip install --upgrade pip
+python -m pip install arcade-mcp
+arcade -v
+```
+
+User-level install:
+
+```bash
+python3 -m pip install --user arcade-mcp
+arcade -v
+```
+
+
+
+
+```powershell
+python -m venv ".venv"
+. ".venv\Scripts\Activate.ps1"
+python -m pip install --upgrade pip
+python -m pip install arcade-mcp
+arcade -v
+```
+
+Global user install:
+
+```powershell
+python -m pip install --user arcade-mcp
+arcade -v
+```
+
+
+
+
+## Validate your installation
+
+Run these after install:
+
+
+
+
+```bash
+arcade -v
+arcade --help
+arcade mcp --help
+```
+
+If validating a venv without activation:
+
+```bash
+.venv/bin/arcade -v
+```
+
+
+
+
+```powershell
+arcade -v
+arcade --help
+arcade mcp --help
+```
+
+If validating a venv without activation:
+
+```powershell
+& ".venv\Scripts\arcade.exe" -v
+```
+
+
+
+
+## Troubleshoot Windows setup
+
+### `uv` not found
+
+```powershell
+$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"
+uv --version
+```
+
+### `arcade` resolves to a venv instead of global install
+
+```powershell
+Get-Command arcade
+```
+
+If this points to `.venv\Scripts\arcade.exe`, open a new shell or deactivate the venv before validating global install.
+
+### Execution policy blocks `Activate.ps1`
+
+```powershell
+Get-ExecutionPolicy -List | Format-Table -AutoSize
+Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
+. ".venv\Scripts\Activate.ps1"
+```
+
+### Install takes longer than expected
+
+The first install can download many dependencies. This is normal on fresh environments.
+
+### Docs mention `brew install` commands
+
+Some Arcade docs include `brew` commands for macOS examples. On native Windows,
+prefer `winget`, `scoop`, or `choco`.
+
+If you are following a guide that uses Homebrew, treat it as optional unless you
+are using WSL or Git Bash with Homebrew.
+
+## Next steps
+
+- [Get an API key](/get-started/setup/api-keys)
+- [Run the MCP server quickstart](/get-started/quickstarts/mcp-server-quickstart)
+- [Browse the Arcade CLI reference](/references/arcade-cli)
diff --git a/app/en/guides/create-tools/evaluate-tools/create-evaluation-suite/page.mdx b/app/en/guides/create-tools/evaluate-tools/create-evaluation-suite/page.mdx
index 2894029b2..3a4ab66fd 100644
--- a/app/en/guides/create-tools/evaluate-tools/create-evaluation-suite/page.mdx
+++ b/app/en/guides/create-tools/evaluate-tools/create-evaluation-suite/page.mdx
@@ -96,15 +96,32 @@ async def weather_eval_suite() -> EvalSuite:
Set your OpenAI API key and run the evaluation:
+
+
+
```bash
export OPENAI_API_KEY=
arcade evals .
```
+
+
+
+```powershell
+$env:OPENAI_API_KEY=""
+arcade evals .
+```
+
+
+
+
The command discovers all `eval_*.py` files and executes them using OpenAI's `gpt-4o` model by default.
**Using different providers:**
+
+
+
```bash
# Anthropic
export ANTHROPIC_API_KEY=
@@ -123,6 +140,30 @@ arcade evals . -p openai -p anthropic -k openai:sk-... -k anthropic:sk-ant-...
arcade evals . --num-runs 3 --seed random --multi-run-pass-rule majority
```
+
+
+
+```powershell
+# Anthropic
+$env:ANTHROPIC_API_KEY=""
+arcade evals . -p anthropic
+
+# Or specify API key directly
+arcade evals . -p anthropic -k anthropic:
+
+# Multiple models
+arcade evals . -p openai:gpt-4o,gpt-4o-mini
+
+# Multiple providers (repeat `-p`)
+arcade evals . -p openai -p anthropic -k openai:sk-... -k anthropic:sk-ant-...
+
+# Multi-run evaluation
+arcade evals . --num-runs 3 --seed random --multi-run-pass-rule majority
+```
+
+
+
+
See [Run evaluations](/guides/create-tools/evaluate-tools/run-evaluations) for all available options.
### Understand the results
diff --git a/app/en/guides/create-tools/evaluate-tools/run-evaluations/page.mdx b/app/en/guides/create-tools/evaluate-tools/run-evaluations/page.mdx
index f5df4a97e..4826c7d27 100644
--- a/app/en/guides/create-tools/evaluate-tools/run-evaluations/page.mdx
+++ b/app/en/guides/create-tools/evaluate-tools/run-evaluations/page.mdx
@@ -7,7 +7,7 @@ description: "Learn how to run evaluations using Arcade"
The `arcade evals` command discovers and executes evaluation suites with support for multiple providers, models, and output formats.
-import { Callout } from "nextra/components";
+import { Callout, Tabs } from "nextra/components";
**Backward compatibility**: All new features (multi-provider support, multi-run
@@ -43,18 +43,46 @@ arcade evals . --only-failed
Use OpenAI with default model (`gpt-4o`):
+
+
+
```bash
export OPENAI_API_KEY=sk-...
arcade evals .
```
+
+
+
+```powershell
+$env:OPENAI_API_KEY="sk-..."
+arcade evals .
+```
+
+
+
+
Use Anthropic with default model (`claude-sonnet-4-5-20250929`):
+
+
+
```bash
export ANTHROPIC_API_KEY=sk-ant-...
arcade evals . --use-provider anthropic
```
+
+
+
+```powershell
+$env:ANTHROPIC_API_KEY="sk-ant-..."
+arcade evals . --use-provider anthropic
+```
+
+
+
+
### Specific models
Specify one or more models for a provider:
diff --git a/app/en/guides/create-tools/tool-basics/call-tools-mcp/page.mdx b/app/en/guides/create-tools/tool-basics/call-tools-mcp/page.mdx
index 7bb35c918..dc0fdbe09 100644
--- a/app/en/guides/create-tools/tool-basics/call-tools-mcp/page.mdx
+++ b/app/en/guides/create-tools/tool-basics/call-tools-mcp/page.mdx
@@ -287,10 +287,23 @@ When configuring your MCP client using the Streamable HTTP transport, ensure the
Activate the virtual environment:
+
+
+
```bash
source /path/to/your/project/.venv/bin/activate
```
+
+
+
+```powershell
+. "/path/to/your/project/.venv/Scripts/Activate.ps1"
+```
+
+
+
+
run the MCP server using the http transport. The secrets will be loaded from the `.env` file that is located at the directory of your entrypoint file:
```bash
diff --git a/app/en/guides/deployment-hosting/configure-engine/page.mdx b/app/en/guides/deployment-hosting/configure-engine/page.mdx
index 94cbd837a..a9d38cbba 100644
--- a/app/en/guides/deployment-hosting/configure-engine/page.mdx
+++ b/app/en/guides/deployment-hosting/configure-engine/page.mdx
@@ -81,6 +81,9 @@ export PATH=$PATH:/path/to/your/binary
+The Homebrew tab is macOS-only. For native Windows environments, use Docker for
+Arcade Engine. For Arcade CLI setup on Windows, see [Windows environment setup](/get-started/setup/windows-environment).
+
Arcade uses configuration files to manage engine settings and default values. When you install the Arcade Engine, two files are created:
- The `engine.yaml` file for engine configuration.
- The `engine.env` file for environment variables.
diff --git a/app/en/guides/deployment-hosting/on-prem/page.mdx b/app/en/guides/deployment-hosting/on-prem/page.mdx
index 1d46bbc71..88bacd08d 100644
--- a/app/en/guides/deployment-hosting/on-prem/page.mdx
+++ b/app/en/guides/deployment-hosting/on-prem/page.mdx
@@ -74,11 +74,25 @@ arcade login
Add the environment variables to your shell:
+
+
+
```bash
export ARCADE_API_KEY=
export ARCADE_USER_ID=
```
+
+
+
+```powershell
+$env:ARCADE_API_KEY=""
+$env:ARCADE_USER_ID=""
+```
+
+
+
+
or to a `.env` file:
```env filename=".env"
@@ -125,6 +139,8 @@ Open a **separate terminal** and create a tunnel using one of these options:
# Or download from https://ngrok.com/download
```
+ On Windows, install ngrok from [ngrok.com/download](https://ngrok.com/download).
+
2. **Create a tunnel:**
```bash
@@ -166,6 +182,8 @@ Open a **separate terminal** and create a tunnel using one of these options:
# Or download from https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/
```
+ On Windows, install cloudflared from [Cloudflare Tunnel install docs](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/).
+
2. **Create a tunnel:**
```bash
@@ -201,6 +219,8 @@ Open a **separate terminal** and create a tunnel using one of these options:
# Or download from https://tailscale.com/download
```
+ On Windows, install Tailscale from [tailscale.com/download](https://tailscale.com/download).
+
2. **Authenticate:**
```bash
diff --git a/app/en/references/arcade-cli/page.mdx b/app/en/references/arcade-cli/page.mdx
index e4d154092..7e848ff4b 100644
--- a/app/en/references/arcade-cli/page.mdx
+++ b/app/en/references/arcade-cli/page.mdx
@@ -11,7 +11,7 @@ The Arcade CLI is a command-line tool that allows you to manage your Arcade depl
## Install the Arcade CLI
-In your terminal, run the following command to install the `arcade-mcp` package - Arcade's CLI:
+In your terminal, run the following command to install the published `arcade-mcp` package from PyPI:
@@ -35,6 +35,10 @@ In your terminal, run the following command to install the `arcade-mcp` package
+
+ Using Windows and PowerShell? Follow the [Windows environment setup](/get-started/setup/windows-environment) guide for install options with and without `uv`.
+
+
## Upgrade the Arcade CLI
To upgrade to the latest version of the Arcade CLI, run the appropriate command for your package manager:
@@ -75,7 +79,6 @@ After upgrading, you may need to refresh your credentials:
arcade logout
arcade login
```
-
## Usage
```bash
diff --git a/app/en/references/auth-providers/salesforce/page.mdx b/app/en/references/auth-providers/salesforce/page.mdx
index 192ab795c..62cc5f125 100644
--- a/app/en/references/auth-providers/salesforce/page.mdx
+++ b/app/en/references/auth-providers/salesforce/page.mdx
@@ -208,7 +208,7 @@ Use the Salesforce auth provider to get a user authorization token and call Sale
1. Create an Arcade account
1. Get an [Arcade API key](/get-started/setup/api-keys).
-1. Set the `ARCADE_API_KEY` environment variable with `export ARCADE_API_KEY=`.
+1. Set the `ARCADE_API_KEY` environment variable (`export ARCADE_API_KEY=` on Bash, `$env:ARCADE_API_KEY=""` on PowerShell).
1. Make sure to have Python 3.10+ or Node.js 18+ installed.
diff --git a/app/en/references/cli-cheat-sheet/page.mdx b/app/en/references/cli-cheat-sheet/page.mdx
index 6103d8914..cf2abf4f0 100644
--- a/app/en/references/cli-cheat-sheet/page.mdx
+++ b/app/en/references/cli-cheat-sheet/page.mdx
@@ -59,6 +59,9 @@ import '../../../cheat-sheet-print.css'
```
Use `uv` for faster installs and better dependency management
+
+ Using Windows and PowerShell? See [Windows environment setup](/get-started/setup/windows-environment) for install options with and without `uv`.
+
@@ -75,7 +78,7 @@ import '../../../cheat-sheet-print.css'
| `arcade dashboard` | Open Arcade web UI in browser |
| `arcade dashboard --local` | Open local dashboard |
- Credentials are stored in `~/.arcade/credentials.yaml`
+ Credentials are stored in `~/.arcade/credentials.yaml` (or `%USERPROFILE%\.arcade\credentials.yaml` on Windows).
@@ -492,6 +495,13 @@ import '../../../cheat-sheet-print.css'
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
```
+
+ PowerShell session example:
+
+ ```powershell
+ $env:OPENAI_API_KEY="sk-..."
+ $env:ANTHROPIC_API_KEY="sk-ant-..."
+ ```
diff --git a/app/en/references/mcp/telemetry/page.mdx b/app/en/references/mcp/telemetry/page.mdx
index d4f0119a4..1c0e9db49 100644
--- a/app/en/references/mcp/telemetry/page.mdx
+++ b/app/en/references/mcp/telemetry/page.mdx
@@ -1,8 +1,10 @@
---
-title: "Arcade MCP Telemtry"
+title: "Arcade MCP Telemetry"
description: "Learn about what data we track when using arcade-mcp"
---
+import { Tabs } from "nextra/components";
+
# Telemetry
Arcade collects telemetry data about the usage of `arcade-mcp`, our open source MCP development framework. Participation in this program is optional, and you may opt-out if you'd not like to share any information.
@@ -50,8 +52,22 @@ You may opt-out by setting the `ARCADE_USAGE_TRACKING` environment variable.
For example, to opt out for the lifetime of your terminal session, you can enter
+
+
+
```bash
export ARCADE_USAGE_TRACKING=0
```
-Or to permanently opt out, you can set this environment variable in your shellβs configuration file (for example, `~/.zshrc` for zsh or `~/.bashrc` for bash).
+
+
+
+```powershell
+$env:ARCADE_USAGE_TRACKING=0
+```
+
+
+
+
+To permanently opt out, set this environment variable in your shell configuration
+file (for example, `~/.zshrc`, `~/.bashrc`, or your PowerShell profile).
diff --git a/next-env.d.ts b/next-env.d.ts
index 9edff1c7c..c4b7818fb 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/types/routes.d.ts";
+import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/public/_markdown/en/get-started/agent-frameworks/crewai/use-arcade-tools.md b/public/_markdown/en/get-started/agent-frameworks/crewai/use-arcade-tools.md
index 96f3b54ff..7942c05d0 100644
--- a/public/_markdown/en/get-started/agent-frameworks/crewai/use-arcade-tools.md
+++ b/public/_markdown/en/get-started/agent-frameworks/crewai/use-arcade-tools.md
@@ -43,18 +43,29 @@ mkdir crewai-arcade-example
cd crewai-arcade-example
uv init
uv venv
+```
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
source .venv/bin/activate
```
+### PowerShell (Windows)
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+```
+
Install the necessary packages:
-```bash
+```powershell
uv add 'crewai[tools]' arcadepy
```
Create a new file called `.env` and add the following environment variables:
-```bash
+```powershell
# .env
# Arcade API key
ARCADE_API_KEY=YOUR_ARCADE_API_KEY
diff --git a/public/_markdown/en/get-started/agent-frameworks/google-adk/setup-python.md b/public/_markdown/en/get-started/agent-frameworks/google-adk/setup-python.md
index d75ce1ad4..7dc759aa9 100644
--- a/public/_markdown/en/get-started/agent-frameworks/google-adk/setup-python.md
+++ b/public/_markdown/en/get-started/agent-frameworks/google-adk/setup-python.md
@@ -41,12 +41,23 @@ mkdir google-adk-arcade-example
cd google-adk-arcade-example
uv init
uv venv
+```
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
source .venv/bin/activate
```
+### PowerShell (Windows)
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+```
+
Install the necessary packages:
-```bash
+```powershell
uv add arcadepy google-adk
```
diff --git a/public/_markdown/en/get-started/agent-frameworks/langchain/use-arcade-with-langchain-py.md b/public/_markdown/en/get-started/agent-frameworks/langchain/use-arcade-with-langchain-py.md
index d22c89fb4..ab48ddda7 100644
--- a/public/_markdown/en/get-started/agent-frameworks/langchain/use-arcade-with-langchain-py.md
+++ b/public/_markdown/en/get-started/agent-frameworks/langchain/use-arcade-with-langchain-py.md
@@ -47,13 +47,27 @@ mkdir langchain-arcade-example
cd langchain-arcade-example
uv init
uv venv
+```
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
source .venv/bin/activate
+```
+
+### PowerShell (Windows)
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+```
+
+```powershell
uv add arcadepy langchain langchain-openai python-dotenv
```
Create a new file called `.env` and add the following :
-```bash
+```powershell
# .env
ARCADE_API_KEY=YOUR_ARCADE_API_KEY
OPENAI_API_KEY=YOUR_OPENAI_API_KEY
@@ -857,7 +871,7 @@ if __name__ == "__main__":
asyncio.run(main())
```
-Last updated on January 30, 2026
+Last updated on February 10, 2026
[Overview](/en/get-started/agent-frameworks/langchain/overview.md)
[Setup (TypeScript)](/en/get-started/agent-frameworks/langchain/use-arcade-with-langchain-ts.md)
diff --git a/public/_markdown/en/get-started/agent-frameworks/openai-agents/setup-python.md b/public/_markdown/en/get-started/agent-frameworks/openai-agents/setup-python.md
index 57a2a0fcb..caf17eb79 100644
--- a/public/_markdown/en/get-started/agent-frameworks/openai-agents/setup-python.md
+++ b/public/_markdown/en/get-started/agent-frameworks/openai-agents/setup-python.md
@@ -47,18 +47,29 @@ mkdir openai-agents-arcade-example
cd openai-agents-arcade-example
uv init
uv venv
+```
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
source .venv/bin/activate
```
+### PowerShell (Windows)
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+```
+
Install the necessary packages:
-```bash
+```powershell
uv add openai-agents arcadepy
```
Create a new file called `.env` and add the following environment variables:
-```bash
+```powershell
# .env
# Arcade API key
ARCADE_API_KEY=YOUR_ARCADE_API_KEY
diff --git a/public/_markdown/en/get-started/agent-frameworks/setup-arcade-with-your-llm-python.md b/public/_markdown/en/get-started/agent-frameworks/setup-arcade-with-your-llm-python.md
index 5bda27ce3..fc5159778 100644
--- a/public/_markdown/en/get-started/agent-frameworks/setup-arcade-with-your-llm-python.md
+++ b/public/_markdown/en/get-started/agent-frameworks/setup-arcade-with-your-llm-python.md
@@ -44,18 +44,29 @@ Create a new virtual environment and activate it:
```bash
uv venv
+```
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
source .venv/bin/activate
```
+### PowerShell (Windows)
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+```
+
Install the dependencies:
-```bash
+```powershell
uv add arcadepy openai python-dotenv
```
Your directory should now look like this:
-```bash
+```powershell
arcade-llm-example/
βββ .git/
βββ .gitignore
@@ -462,7 +473,7 @@ if __name__ == "__main__":
chat()
```
-Last updated on January 30, 2026
+Last updated on February 10, 2026
[Overview](/en/get-started/agent-frameworks.md)
-[Using Arcade tools](/en/get-started/agent-frameworks/crewai/use-arcade-tools.md)
+[Setup Arcade tools with CrewAI](/en/get-started/agent-frameworks/crewai/use-arcade-tools.md)
diff --git a/public/_markdown/en/get-started/quickstarts/call-tool-agent.md b/public/_markdown/en/get-started/quickstarts/call-tool-agent.md
index efaf4edff..d62d446ae 100644
--- a/public/_markdown/en/get-started/quickstarts/call-tool-agent.md
+++ b/public/_markdown/en/get-started/quickstarts/call-tool-agent.md
@@ -48,12 +48,23 @@ Then, run the following command to create and activate a new virtual environment
```bash
uv venv
+```
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
source .venv/bin/activate
```
+### PowerShell (Windows)
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+```
+
Then, run the following command to install the Python client package `arcadepy`:
-```bash
+```powershell
uv add arcadepy
```
@@ -339,16 +350,17 @@ Email metadata:
In this example, we call the tool methods directly. In your real applications and , youβll likely be letting the LLM decide which to call. Learn more about using Arcade with Frameworks in the [Frameworks](/get-started/agent-frameworks.md) section, or [how to build your own tools](/guides/create-tools/tool-basics/build-mcp-server.md).
-[ Vanilla Python MCP Client](/guides/agent-frameworks/setup-arcade-with-your-llm-python.md)
-[ LangChain Agent Framework](/guides/agent-frameworks/langchain/use-arcade-tools.md)
-[ CrewAI Agent Framework](/guides/agent-frameworks/crewai/use-arcade-tools.md)
-[ OpenAI Agents Agent Framework](/guides/agent-frameworks/openai-agents/overview.md)
-[ Google ADK Agent Framework](/guides/agent-frameworks/google-adk/overview.md)
+[ CrewAI Agent Framework](/en/get-started/agent-frameworks/crewai/use-arcade-tools.md)
+[ Google ADK Agent Framework](/en/get-started/agent-frameworks/google-adk/setup-python.md)
+[ LangChain Agent Framework](/en/get-started/agent-frameworks/langchain/use-arcade-with-langchain-py.md)
+[ OpenAI Agents Agent Framework](/en/get-started/agent-frameworks/openai-agents/setup-python.md)
+[ Vanilla Python MCP Client](/en/get-started/agent-frameworks/setup-arcade-with-your-llm-python.md)
-[ LangChain Agent Framework](/guides/agent-frameworks/langchain/use-arcade-tools.md)
-[ Google ADK Agent Framework](/guides/agent-frameworks/google-adk/overview.md)
-[ Mastra Agent Framework](/guides/agent-frameworks/mastra/overview.md)
-[ Vercel AI Agent Framework](/guides/agent-frameworks/vercelai.md)
+[ LangChain Agent Framework](/en/get-started/agent-frameworks/langchain/use-arcade-with-langchain-ts.md)
+[ Google ADK Agent Framework](/en/get-started/agent-frameworks/google-adk/setup-typescript.md)
+[ Mastra Agent Framework](/en/get-started/agent-frameworks/mastra.md)
+[ Vercel AI Agent Framework](/en/get-started/agent-frameworks/vercelai.md)
+[ TanStack AI Agent Framework](/en/get-started/agent-frameworks/tanstack-ai.md)
## Full Example Code
@@ -546,7 +558,7 @@ console.log(
console.log(respose_send_email.output?.value);
```
-Last updated on January 30, 2026
+Last updated on February 10, 2026
[Windows environment setup](/en/get-started/setup/windows-environment.md)
[Call tools in IDE/MCP clients](/en/get-started/quickstarts/call-tool-client.md)
diff --git a/public/_markdown/en/get-started/quickstarts/mcp-server-quickstart.md b/public/_markdown/en/get-started/quickstarts/mcp-server-quickstart.md
index 77c88525e..e2fe9a03c 100644
--- a/public/_markdown/en/get-started/quickstarts/mcp-server-quickstart.md
+++ b/public/_markdown/en/get-started/quickstarts/mcp-server-quickstart.md
@@ -100,7 +100,7 @@ mv ../../.env.example ../../.env
### PowerShell (Windows)
-```bash
+```powershell
Copy-Item .env.example .env
```
@@ -116,7 +116,7 @@ export MY_SECRET_KEY="my-secret-value"
### PowerShell (Windows)
-```bash
+```powershell
$env:MY_SECRET_KEY="my-secret-value"
```
diff --git a/public/_markdown/en/get-started/setup/api-keys.md b/public/_markdown/en/get-started/setup/api-keys.md
index 97033bcf5..655ff9f8d 100644
--- a/public/_markdown/en/get-started/setup/api-keys.md
+++ b/public/_markdown/en/get-started/setup/api-keys.md
@@ -61,7 +61,7 @@ arcade login
The CLI will automatically:
- Print your to the console
-- Save your credentials to `~/.arcade/credentials.yaml`
+- Save your credentials to `~/.arcade/credentials.yaml` (or `%USERPROFILE%\.arcade\credentials.yaml` on Windows)
API keys are administrator credentials. Anyone who has your can make requests to Arcade as you. Always store your API keys in a safe place, such as system environment variables, and never commit them to version control, share them publicly, or use them in browser or frontend code.
@@ -74,7 +74,7 @@ Once you have your , you can:
- [Create custom tools](/guides/create-tools/tool-basics/build-mcp-server.md)
-Last updated on January 30, 2026
+Last updated on February 10, 2026
[About Arcade](/en/get-started/about-arcade.md)
[Connect Arcade docs to your IDE](/en/get-started/setup/connect-arcade-docs.md)
diff --git a/public/_markdown/en/get-started/setup/windows-environment.md b/public/_markdown/en/get-started/setup/windows-environment.md
index ab3e919cc..53edd11fe 100644
--- a/public/_markdown/en/get-started/setup/windows-environment.md
+++ b/public/_markdown/en/get-started/setup/windows-environment.md
@@ -1,19 +1,259 @@
---
-title: "Windows Environment Setup"
-description: "Set up your Windows environment for Arcade development"
+title: "Windows environment setup"
+description: "Install and use Arcade CLI on Windows"
---
[Setup](/en/get-started/setup/api-keys.md)
Windows environment setup
-# Windows Environment Setup
+# Windows environment setup
-This page covers setting up your Windows environment for Arcade development.
+Set up Arcade CLI on Windows using `uv` (recommended), with optional `pip` fallback guidance.
-This page is coming soon. The team is working on comprehensive documentation for setting up Arcade on Windows.
+## Before you start
-In the meantime, if you need help setting up Arcade on Windows, please reach out on [Discord](https://discord.gg/GUZEMpEZ9p)Β .
+- Windows with PowerShell
+- Python 3.10 or later
+- Internet access for package download
-Last updated on January 30, 2026
+Validate which commands exist on your machine:
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
+uv --version
+python3 --version
+command -v arcade || true
+```
+
+### PowerShell (Windows)
+
+```powershell
+uv --version
+python --version
+py --version
+Get-Command arcade -ErrorAction SilentlyContinue
+```
+
+If both `python` and `py` are missing, the pip-only instructions will fail until you install Python and add it to `PATH`.
+
+## Install `uv`
+
+Use one of the following methods.
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
+curl -LsSf https://astral.sh/uv/install.sh | sh
+export PATH="$HOME/.local/bin:$PATH"
+uv --version
+```
+
+### PowerShell (Windows)
+
+```powershell
+irm https://astral.sh/uv/install.ps1 | iex
+uv --version
+```
+
+If `uv` is still not found in the same shell session:
+
+```powershell
+$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"
+uv --version
+```
+
+## Optional binary package managers on Windows
+
+`winget`, `scoop`, and `choco` are optional convenience methods. Keep them secondary to official install instructions.
+
+### winget
+
+```bash
+winget --version
+winget install --id=astral-sh.uv -e
+```
+
+### scoop
+
+```bash
+scoop --version
+scoop install main/uv
+```
+
+### chocolatey
+
+```bash
+choco --version
+choco install uv
+```
+
+## Install Arcade CLI with `uv` (recommended)
+
+### Global install
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
+uv tool install --upgrade arcade-mcp
+arcade -v
+command -v arcade
+```
+
+### PowerShell (Windows)
+
+```powershell
+uv tool install --upgrade arcade-mcp
+arcade -v
+Get-Command arcade
+```
+
+### Virtual environment install
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
+uv venv .venv
+uv pip install --python .venv/bin/python arcade-mcp
+.venv/bin/arcade -v
+```
+
+Optional activation:
+
+```bash
+source .venv/bin/activate
+arcade -v
+```
+
+### PowerShell (Windows)
+
+```powershell
+uv venv ".venv"
+uv pip install --python ".venv\Scripts\python.exe" arcade-mcp
+& ".venv\Scripts\arcade.exe" -v
+```
+
+Optional activation:
+
+```powershell
+. ".venv\Scripts\Activate.ps1"
+arcade -v
+```
+
+## Install without `uv` (pip fallback)
+
+Use this only if `uv` is unavailable.
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
+python3 -m venv .venv
+source .venv/bin/activate
+python -m pip install --upgrade pip
+python -m pip install arcade-mcp
+arcade -v
+```
+
+\-level install:
+
+```bash
+python3 -m pip install --user arcade-mcp
+arcade -v
+```
+
+### PowerShell (Windows)
+
+```powershell
+python -m venv ".venv"
+. ".venv\Scripts\Activate.ps1"
+python -m pip install --upgrade pip
+python -m pip install arcade-mcp
+arcade -v
+```
+
+Global install:
+
+```powershell
+python -m pip install --user arcade-mcp
+arcade -v
+```
+
+## Validate your installation
+
+Run these after install:
+
+### Bash/Zsh (macOS/Linux)
+
+```bash
+arcade -v
+arcade --help
+arcade mcp --help
+```
+
+If validating a venv without activation:
+
+```bash
+.venv/bin/arcade -v
+```
+
+### PowerShell (Windows)
+
+```powershell
+arcade -v
+arcade --help
+arcade mcp --help
+```
+
+If validating a venv without activation:
+
+```powershell
+& ".venv\Scripts\arcade.exe" -v
+```
+
+## Troubleshoot Windows setup
+
+### `uv` not found
+
+```powershell
+$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"
+uv --version
+```
+
+### `arcade` resolves to a venv instead of global install
+
+```powershell
+Get-Command arcade
+```
+
+If this points to `.venv\Scripts\arcade.exe`, open a new shell or deactivate the venv before validating global install.
+
+### Execution policy blocks `Activate.ps1`
+
+```powershell
+Get-ExecutionPolicy -List | Format-Table -AutoSize
+Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
+. ".venv\Scripts\Activate.ps1"
+```
+
+### Install takes longer than expected
+
+The first install can download many dependencies. This is normal on fresh environments.
+
+### Docs mention `brew install` commands
+
+Some Arcade docs include `brew` commands for macOS examples. On native Windows, prefer `winget`, `scoop`, or `choco`.
+
+If you are following a guide that uses Homebrew, treat it as optional unless you are using WSL or Git Bash with Homebrew.
+
+## Next steps
+
+- [Get an API key](/get-started/setup/api-keys.md)
+
+- [Run the MCP server quickstart](/get-started/quickstarts/mcp-server-quickstart.md)
+
+- [Browse the Arcade CLI reference](/references/arcade-cli.md)
+
+
+Last updated on February 10, 2026
[Connect Arcade docs to your IDE](/en/get-started/setup/connect-arcade-docs.md)
[Call tools in agents](/en/get-started/quickstarts/call-tool-agent.md)
diff --git a/public/_markdown/en/guides/create-tools/evaluate-tools/create-evaluation-suite.md b/public/_markdown/en/guides/create-tools/evaluate-tools/create-evaluation-suite.md
index 90f2c45c3..8565533e5 100644
--- a/public/_markdown/en/guides/create-tools/evaluate-tools/create-evaluation-suite.md
+++ b/public/_markdown/en/guides/create-tools/evaluate-tools/create-evaluation-suite.md
@@ -87,15 +87,26 @@ async def weather_eval_suite() -> EvalSuite:
Set your OpenAI and run the evaluation:
+### Bash/Zsh (macOS/Linux)
+
```bash
export OPENAI_API_KEY=
arcade evals .
```
+### PowerShell (Windows)
+
+```powershell
+$env:OPENAI_API_KEY=""
+arcade evals .
+```
+
The command discovers all `eval_*.py` files and executes them using OpenAIβs `gpt-4o` model by default.
**Using different providers:**
+### Bash/Zsh (macOS/Linux)
+
```bash
# Anthropic
export ANTHROPIC_API_KEY=
@@ -114,6 +125,26 @@ arcade evals . -p openai -p anthropic -k openai:sk-... -k anthropic:sk-ant-...
arcade evals . --num-runs 3 --seed random --multi-run-pass-rule majority
```
+### PowerShell (Windows)
+
+```powershell
+# Anthropic
+$env:ANTHROPIC_API_KEY=""
+arcade evals . -p anthropic
+
+# Or specify API key directly
+arcade evals . -p anthropic -k anthropic:
+
+# Multiple models
+arcade evals . -p openai:gpt-4o,gpt-4o-mini
+
+# Multiple providers (repeat `-p`)
+arcade evals . -p openai -p anthropic -k openai:sk-... -k anthropic:sk-ant-...
+
+# Multi-run evaluation
+arcade evals . --num-runs 3 --seed random --multi-run-pass-rule majority
+```
+
See [Run evaluations](/guides/create-tools/evaluate-tools/run-evaluations.md) for all available options.
### Understand the results
@@ -358,7 +389,7 @@ If you want stricter suites, increase thresholds (for example `fail_threshold=0.
- Compare sources with [comparative evaluations](/guides/create-tools/evaluate-tools/comparative-evaluations.md)
-Last updated on January 30, 2026
+Last updated on February 10, 2026
[Why evaluate tools?](/en/guides/create-tools/evaluate-tools/why-evaluate.md)
[Run evaluations](/en/guides/create-tools/evaluate-tools/run-evaluations.md)
diff --git a/public/_markdown/en/guides/create-tools/evaluate-tools/run-evaluations.md b/public/_markdown/en/guides/create-tools/evaluate-tools/run-evaluations.md
index 60d283cf9..539427256 100644
--- a/public/_markdown/en/guides/create-tools/evaluate-tools/run-evaluations.md
+++ b/public/_markdown/en/guides/create-tools/evaluate-tools/run-evaluations.md
@@ -43,20 +43,36 @@ arcade evals . --only-failed
Use OpenAI with default model (`gpt-4o`):
+### Bash/Zsh (macOS/Linux)
+
```bash
-# results.txtresults.mdresults.htmlresults.json
export OPENAI_API_KEY=sk-...
arcade evals .
```
+### PowerShell (Windows)
+
+```powershell
+$env:OPENAI_API_KEY="sk-..."
+arcade evals .
+```
+
Use Anthropic with default model (`claude-sonnet-4-5-20250929`):
+### Bash/Zsh (macOS/Linux)
+
```bash
-# results.txtresults.mdresults.htmlresults.json
export ANTHROPIC_API_KEY=sk-ant-...
arcade evals . --use-provider anthropic
```
+### PowerShell (Windows)
+
+```powershell
+$env:ANTHROPIC_API_KEY="sk-ant-..."
+arcade evals . --use-provider anthropic
+```
+
### Specific models
Specify one or more models for a provider:
@@ -629,7 +645,7 @@ Ensure your evaluation files:
- Learn about [comparative evaluations](/guides/create-tools/evaluate-tools/comparative-evaluations.md)
for comparing sources
-Last updated on January 30, 2026
+Last updated on February 10, 2026
[Create an evaluation suite](/en/guides/create-tools/evaluate-tools/create-evaluation-suite.md)
[Capture mode](/en/guides/create-tools/evaluate-tools/capture-mode.md)
diff --git a/public/_markdown/en/guides/create-tools/tool-basics/build-mcp-server.md b/public/_markdown/en/guides/create-tools/tool-basics/build-mcp-server.md
index 0a448e081..7b35cdc56 100644
--- a/public/_markdown/en/guides/create-tools/tool-basics/build-mcp-server.md
+++ b/public/_markdown/en/guides/create-tools/tool-basics/build-mcp-server.md
@@ -171,7 +171,7 @@ mv ../../.env.example ../../.env
### PowerShell (Windows)
-```bash
+```powershell
Copy-Item .env.example .env
```
@@ -187,7 +187,7 @@ export MY_SECRET_KEY="my-secret-value"
### PowerShell (Windows)
-```bash
+```powershell
$env:MY_SECRET_KEY="my-secret-value"
```
diff --git a/public/_markdown/en/guides/create-tools/tool-basics/call-tools-mcp.md b/public/_markdown/en/guides/create-tools/tool-basics/call-tools-mcp.md
index cb328722e..a12c1cf36 100644
--- a/public/_markdown/en/guides/create-tools/tool-basics/call-tools-mcp.md
+++ b/public/_markdown/en/guides/create-tools/tool-basics/call-tools-mcp.md
@@ -189,7 +189,7 @@ When configuring your client using the stdio transport, you need to ensure that
Then, your clientβs configuration file should look like this:
-```json
+```bash
{
"mcpServers": {
"my_server": {
@@ -215,19 +215,27 @@ When configuring your client using the Streamable HTTP transport, ensure the i
Activate the virtual environment:
+### Bash/Zsh (macOS/Linux)
+
```bash
source /path/to/your/project/.venv/bin/activate
```
+### PowerShell (Windows)
+
+```powershell
+. "/path/to/your/project/.venv/Scripts/Activate.ps1"
+```
+
run the server using the http transport. The secrets will be loaded from the `.env` file that is located at the directory of your :
-```bash
+```powershell
uv run server.py http
```
Then, your clientβs configuration file should look like this:
-```json
+```powershell
{
"mcpServers": {
"my_server": {
@@ -240,7 +248,7 @@ Then, your clientβs configuration file should look like this:
For security reasons, Local HTTP servers do not currently support managed authorization and secrets. If you need to use authorization or secrets, you should use the stdio transport and configure the Arcade API key and secrets in your connection settings. If you intend to expose your HTTP to the public internet, please follow the [on-prem MCP server](/guides/deployment-hosting/on-prem.md) guide for secure remote deployment.
-Last updated on January 30, 2026
+Last updated on February 10, 2026
[Access runtime data](/en/guides/create-tools/tool-basics/runtime-data-access.md)
[Organize your MCP server and tools](/en/guides/create-tools/tool-basics/organize-mcp-tools.md)
diff --git a/public/_markdown/en/guides/create-tools/tool-basics/create-tool-secrets.md b/public/_markdown/en/guides/create-tools/tool-basics/create-tool-secrets.md
index f5feeff09..dc1aac720 100644
--- a/public/_markdown/en/guides/create-tools/tool-basics/create-tool-secrets.md
+++ b/public/_markdown/en/guides/create-tools/tool-basics/create-tool-secrets.md
@@ -79,7 +79,7 @@ mv .env.example .env
### PowerShell (Windows)
-```bash
+```powershell
Copy-Item .env.example .env
```
@@ -120,7 +120,7 @@ export MY_SECRET_KEY="my-secret-value"
### PowerShell (Windows)
-```bash
+```powershell
$env:MY_SECRET_KEY="my-secret-value"
```
diff --git a/public/_markdown/en/guides/deployment-hosting/configure-engine.md b/public/_markdown/en/guides/deployment-hosting/configure-engine.md
index 2c99d3fcf..7aa847c53 100644
--- a/public/_markdown/en/guides/deployment-hosting/configure-engine.md
+++ b/public/_markdown/en/guides/deployment-hosting/configure-engine.md
@@ -78,6 +78,8 @@ docker run -d -p 9099:9099 -v ./engine.yaml:/bin/engine.yaml ghcr.io/arcadeai/en
where config.yaml is the path to the [configuration file](/guides/deployment-hosting/configure-engine.md).
+The Homebrew tab is macOS-only. For native Windows environments, use Docker for . For Arcade CLI setup on Windows, see [Windows environment setup](/get-started/setup/windows-environment.md).
+
Arcade uses configuration files to manage engine settings and default values. When you install the , two files are created:
- The `engine.yaml` file for engine configuration.
diff --git a/public/_markdown/en/guides/deployment-hosting/on-prem.md b/public/_markdown/en/guides/deployment-hosting/on-prem.md
index 8fff6c16c..38e3b8dfa 100644
--- a/public/_markdown/en/guides/deployment-hosting/on-prem.md
+++ b/public/_markdown/en/guides/deployment-hosting/on-prem.md
@@ -65,14 +65,23 @@ arcade login
Add the environment variables to your shell:
+### Bash/Zsh (macOS/Linux)
+
```bash
export ARCADE_API_KEY=
export ARCADE_USER_ID=
```
+### PowerShell (Windows)
+
+```powershell
+$env:ARCADE_API_KEY=""
+$env:ARCADE_USER_ID=""
+```
+
or to a `.env` file:
-```bash
+```powershell
# .env
ARCADE_API_KEY=
ARCADE_USER_ID=
@@ -115,6 +124,8 @@ Open a **separate terminal** and create a tunnel using one of these options:
# Or download from https://ngrok.com/download
```
+ On Windows, install ngrok from [ngrok.com/download](https://ngrok.com/download)Β .
+
2. **Create a tunnel:**
```bash
@@ -156,6 +167,8 @@ Open a **separate terminal** and create a tunnel using one of these options:
# Or download from https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/
```
+ On Windows, install cloudflared from [Cloudflare Tunnel install docs](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/)Β .
+
2. **Create a tunnel:**
```bash
@@ -189,6 +202,8 @@ Open a **separate terminal** and create a tunnel using one of these options:
# Or download from https://tailscale.com/download
```
+ On Windows, install Tailscale from [tailscale.com/download](https://tailscale.com/download)Β .
+
2. **Authenticate:**
```bash
@@ -304,7 +319,7 @@ You can now test your Server by making requests using the Playground, or an MCP
- [Configure secrets](/guides/create-tools/tool-basics/create-tool-secrets.md)
for your Server
-Last updated on January 30, 2026
+Last updated on February 10, 2026
[Arcade Cloud](/en/guides/deployment-hosting/arcade-cloud.md)
[Configure Arcade's engine](/en/guides/deployment-hosting/configure-engine.md)
diff --git a/public/_markdown/en/references/arcade-cli.md b/public/_markdown/en/references/arcade-cli.md
index 2317e17ec..68b7b5b00 100644
--- a/public/_markdown/en/references/arcade-cli.md
+++ b/public/_markdown/en/references/arcade-cli.md
@@ -10,7 +10,7 @@ The Arcade CLI is a command-line tool that allows you to manage your Arcade depl
## Install the Arcade CLI
-In your terminal, run the following command to install the `arcade-mcp` package - Arcadeβs CLI:
+In your terminal, run the following command to install the published `arcade-mcp` package from PyPI:
### uv
@@ -26,6 +26,8 @@ This will install the Arcade CLI as a [uv tool](https://docs.astral.sh/uv/guides
pip install arcade-mcp
```
+Using Windows and PowerShell? Follow the [Windows environment setup](/get-started/setup/windows-environment.md) guide for install options with and without `uv`.
+
## Upgrade the Arcade CLI
To upgrade to the latest version of the Arcade CLI, run the appropriate command for your package manager:
@@ -488,7 +490,7 @@ Usage: arcade secret [OPTIONS] COMMAND [ARGS]...
β°βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ―
```
-Last updated on January 30, 2026
+Last updated on February 10, 2026
[Telemetry](/en/references/mcp/telemetry.md)
[CLI Cheat Sheet](/en/references/cli-cheat-sheet.md)
diff --git a/public/_markdown/en/references/auth-providers/salesforce.md b/public/_markdown/en/references/auth-providers/salesforce.md
index 7856df4fd..e93852468 100644
--- a/public/_markdown/en/references/auth-providers/salesforce.md
+++ b/public/_markdown/en/references/auth-providers/salesforce.md
@@ -178,7 +178,7 @@ Use the Salesforce to get a user authorization token and call Salesforce API en
2. Get an [Arcade API key](/get-started/setup/api-keys.md)
.
-3. Set the `ARCADE_API_KEY` environment variable with `export ARCADE_API_KEY=`.
+3. Set the `ARCADE_API_KEY` environment variable (`export ARCADE_API_KEY=` on Bash, `$env:ARCADE_API_KEY=""` on PowerShell).
4. Make sure to have Python 3.10+ or Node.js 18+ installed.
### Python
diff --git a/public/_markdown/en/references/cli-cheat-sheet.md b/public/_markdown/en/references/cli-cheat-sheet.md
index 113fda6ee..9e45f8694 100644
--- a/public/_markdown/en/references/cli-cheat-sheet.md
+++ b/public/_markdown/en/references/cli-cheat-sheet.md
@@ -47,6 +47,8 @@ arcade --help
Use `uv` for faster installs and better dependency management
+Using Windows and PowerShell? See [Windows environment setup](/get-started/setup/windows-environment.md) for install options with and without `uv`.
+
πAuthentication
Authenticate with Arcade Cloud for deployments and secrets management.
@@ -79,7 +81,7 @@ Open Arcade web UI in browser
Open local dashboard
-Credentials are stored in `~/.arcade/credentials.yaml`
+Credentials are stored in `~/.arcade/credentials.yaml` (or `%USERPROFILE%\.arcade\credentials.yaml` on Windows).
π’Organizations & Projects
@@ -699,6 +701,13 @@ OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
```
+PowerShell session example:
+
+```powershell
+$env:OPENAI_API_KEY="sk-..."
+$env:ANTHROPIC_API_KEY="sk-ant-..."
+```
+
πProject Structure
### Minimal Template (`arcade new my_server`)
@@ -809,7 +818,7 @@ Standard development cycle for building servers:
9. **`arcade deploy`** β Deploy to cloud (requires `server.py` entrypoint)
10. **`arcade server logs -f`** β Monitor logs
-Last updated on January 30, 2026
+Last updated on February 10, 2026
[Arcade CLI](/en/references/arcade-cli.md)
[Contextual Access Webhook API](/en/references/contextual-access-webhook-api.md)
diff --git a/public/_markdown/en/references/mcp/telemetry.md b/public/_markdown/en/references/mcp/telemetry.md
index 362a95bbc..6f57ec819 100644
--- a/public/_markdown/en/references/mcp/telemetry.md
+++ b/public/_markdown/en/references/mcp/telemetry.md
@@ -54,13 +54,21 @@ You may opt-out by setting the `ARCADE_USAGE_TRACKING` environment variable.
For example, to opt out for the lifetime of your terminal session, you can enter
+### Bash/Zsh (macOS/Linux)
+
```bash
export ARCADE_USAGE_TRACKING=0
```
-Or to permanently opt out, you can set this environment variable in your shellβs configuration file (for example, `~/.zshrc` for zsh or `~/.bashrc` for bash).
+### PowerShell (Windows)
+
+```powershell
+$env:ARCADE_USAGE_TRACKING=0
+```
+
+To permanently opt out, set this environment variable in your shell configuration file (for example, `~/.zshrc`, `~/.bashrc`, or your PowerShell profile).
-Last updated on January 30, 2026
+Last updated on February 10, 2026
-[Settings](/en/references/mcp/python/settings.md)
+[Errors](/en/references/mcp/python/errors.md)
[Arcade CLI](/en/references/arcade-cli.md)
diff --git a/scripts/generate-clean-markdown.ts b/scripts/generate-clean-markdown.ts
index 6969a2ddf..bb974a8bd 100644
--- a/scripts/generate-clean-markdown.ts
+++ b/scripts/generate-clean-markdown.ts
@@ -34,6 +34,13 @@ const MAIN_PATTERN = /]*>([\s\S]*?)<\/main>/i;
const BODY_PATTERN = /]*>([\s\S]*?)<\/body>/i;
const PAGE_MDX_PATTERN = /\/page\.mdx$/;
const MDX_PATTERN = /\.mdx$/;
+const POWERSHELL_CONTENT_PATTERN =
+ /\$env:|\bGet-Command\b|\bGet-ExecutionPolicy\b|\bSet-ExecutionPolicy\b|Activate\.ps1|\\Scripts\\|^\s*irm\b.*\|\s*iex\b|^\s*&\s*["'][^"']*\.exe["']/im;
+const BASH_CONTENT_PATTERN =
+ /^\s*export\s+[A-Za-z_][A-Za-z0-9_]*=|^\s*source\s+|^\s*command\s+-v\s+|\.venv\/bin\/|\/bin\/activate|\$HOME|curl\s+-LsSf.*\|\s*sh\b|\bbrew\b/im;
+const MARKDOWN_HEADING_PATTERN = /^#{1,6}\s+/;
+const MARKDOWN_FENCE_PATTERN = /^```/;
+const MARKDOWN_CLOSING_FENCE_PATTERN = /^```\s*$/;
// Validation regex patterns
const IMPORT_STATEMENT_PATTERN = /^import\s+/m;
@@ -193,6 +200,19 @@ function findElementWithText(node: Node, patterns: string[]): string | null {
return null;
}
+/**
+ * Infers shell language from command content when UI labels are ambiguous.
+ */
+function inferShellLanguageFromCode(code: string): "powershell" | "bash" | "" {
+ if (POWERSHELL_CONTENT_PATTERN.test(code)) {
+ return "powershell";
+ }
+ if (BASH_CONTENT_PATTERN.test(code)) {
+ return "bash";
+ }
+ return "";
+}
+
/**
* Maps label text to language identifier
*/
@@ -200,9 +220,16 @@ function labelToLanguage(label: string): string {
const map: Record = {
terminal: "bash",
bash: "bash",
+ "bash/zsh": "bash",
+ "zsh/bash": "bash",
+ "bash/zsh (macos/linux)": "bash",
+ "zsh/bash (macos/linux)": "bash",
shell: "bash",
sh: "bash",
zsh: "bash",
+ powershell: "powershell",
+ pwsh: "powershell",
+ "powershell (windows)": "powershell",
python: "python",
py: "python",
typescript: "typescript",
@@ -244,9 +271,16 @@ function labelToLanguage(label: string): string {
const LANGUAGE_LABELS = new Set([
"terminal",
"bash",
+ "bash/zsh",
+ "zsh/bash",
+ "bash/zsh (macos/linux)",
+ "zsh/bash (macos/linux)",
"shell",
"sh",
"zsh",
+ "powershell",
+ "pwsh",
+ "powershell (windows)",
"python",
"py",
"typescript",
@@ -408,6 +442,7 @@ turndown.addRule("fencedCodeBlock", {
// Try to extract language from various sources
let language = "";
+ const inferredShellLanguage = inferShellLanguageFromCode(code);
// 1. Check code element class (e.g., "language-typescript")
const codeClassName = codeElement.getAttribute("class") || "";
@@ -416,13 +451,25 @@ turndown.addRule("fencedCodeBlock", {
language = langMatch[1];
}
+ // Prefer high-confidence shell inference when class metadata is missing.
+ if (!language && inferredShellLanguage) {
+ language = inferredShellLanguage;
+ }
+
// 2. Look for language label in parent structure
// Nextra code blocks have labels like "Terminal", "Python", etc.
if (!language) {
const labels = [
"Terminal",
"Bash",
+ "Bash/Zsh",
+ "Zsh/Bash",
+ "Bash/Zsh (macOS/Linux)",
+ "Zsh/Bash (macOS/Linux)",
"Shell",
+ "PowerShell",
+ "pwsh",
+ "PowerShell (Windows)",
"Python",
"TypeScript",
"JavaScript",
@@ -462,6 +509,16 @@ turndown.addRule("fencedCodeBlock", {
}
}
+ // Correct common misclassifications from surrounding labels.
+ if (inferredShellLanguage === "powershell") {
+ language = "powershell";
+ } else if (
+ inferredShellLanguage === "bash" &&
+ (language === "python" || !language)
+ ) {
+ language = "bash";
+ }
+
// 3. Try to find filename and add as comment
const filename = findFilename(node);
if (filename) {
@@ -744,6 +801,57 @@ function cleanHtml(html: string): string {
function cleanMarkdown(markdown: string): string {
let cleaned = markdown;
+ // Normalize shell headings derived from tab labels.
+ cleaned = cleaned
+ .replace(
+ /^(#{2,6})\s+Bash$/gm,
+ "$1 Bash/Zsh (macOS/Linux)"
+ )
+ .replace(
+ /^(#{2,6})\s+Zsh\/Bash$/gm,
+ "$1 Bash/Zsh (macOS/Linux)"
+ )
+ .replace(
+ /^(#{2,6})\s+PowerShell$/gm,
+ "$1 PowerShell (Windows)"
+ );
+
+ // Ensure code blocks after each shell heading have matching language.
+ const lines = cleaned.split("\n");
+ for (let i = 0; i < lines.length; i++) {
+ const heading = lines[i].trim();
+ let expectedLang = "";
+ if (heading === "### Bash/Zsh (macOS/Linux)") {
+ expectedLang = "bash";
+ } else if (heading === "### PowerShell (Windows)") {
+ expectedLang = "powershell";
+ } else {
+ continue;
+ }
+
+ let insideCodeFence = false;
+ for (let j = i + 1; j < lines.length; j++) {
+ const trimmed = lines[j].trim();
+ if (MARKDOWN_HEADING_PATTERN.test(trimmed)) {
+ break;
+ }
+ if (!MARKDOWN_FENCE_PATTERN.test(trimmed)) {
+ continue;
+ }
+
+ if (insideCodeFence) {
+ if (MARKDOWN_CLOSING_FENCE_PATTERN.test(trimmed)) {
+ insideCodeFence = false;
+ }
+ continue;
+ }
+
+ lines[j] = `\`\`\`${expectedLang}`;
+ insideCodeFence = true;
+ }
+ }
+ cleaned = lines.join("\n");
+
// Remove excessive blank lines (more than 2 consecutive)
cleaned = cleaned.replace(/\n{4,}/g, "\n\n\n");
diff --git a/tests/clean-markdown.test.ts b/tests/clean-markdown.test.ts
index 7c5cd0f86..64625c601 100644
--- a/tests/clean-markdown.test.ts
+++ b/tests/clean-markdown.test.ts
@@ -10,6 +10,20 @@ const MARKDOWN_DIR = "public/_markdown";
const CODE_BLOCK_PATTERN = /```[\s\S]*?```/g;
const APP_PREFIX_PATTERN = /^app\//;
const PAGE_MDX_SUFFIX_PATTERN = /\/page\.mdx$/;
+const MARKDOWN_HEADING_PATTERN = /^#{1,6}\s+/;
+const FENCE_PREFIX = "```";
+const MARKDOWN_CLOSING_FENCE_PATTERN = /^```\s*$/;
+
+const LEGACY_SHELL_HEADING_PATTERNS = [
+ /^(#{2,6})\s+Bash\s*$/,
+ /^(#{2,6})\s+PowerShell\s*$/,
+ /^(#{2,6})\s+Zsh\/Bash\s*$/,
+];
+
+const SHELL_HEADING_TO_LANG = {
+ "### Bash/Zsh (macOS/Linux)": new Set(["bash", "sh", "shell"]),
+ "### PowerShell (Windows)": new Set(["powershell", "pwsh"]),
+} as const;
/**
* Strips fenced code blocks from markdown content
@@ -29,6 +43,26 @@ function mdxPathToRelativePath(mdxFile: string): string {
.replace(PAGE_MDX_SUFFIX_PATTERN, "");
}
+/**
+ * Finds the language of the first fenced code block after a heading.
+ * Stops at the next heading if no code block appears first.
+ */
+function firstFenceLanguageAfterHeading(
+ lines: string[],
+ headingLineIndex: number
+): string | null {
+ for (let i = headingLineIndex + 1; i < lines.length; i += 1) {
+ const trimmed = lines[i].trim();
+ if (trimmed.startsWith(FENCE_PREFIX)) {
+ return trimmed.slice(FENCE_PREFIX.length).trim().toLowerCase();
+ }
+ if (MARKDOWN_HEADING_PATTERN.test(trimmed)) {
+ return null;
+ }
+ }
+ return null;
+}
+
// Patterns that indicate raw MDX syntax leaked into clean markdown
// These are checked OUTSIDE of code blocks only
const MDX_PATTERNS = [
@@ -198,4 +232,144 @@ describe("Clean Markdown Files", () => {
},
TIMEOUT
);
+
+ test(
+ "clean markdown files use explicit shell headings",
+ async () => {
+ const markdownFiles = await fg(`${MARKDOWN_DIR}/**/*.md`);
+ const errors: Array<{ file: string; line: number; heading: string }> = [];
+
+ for (const file of markdownFiles) {
+ const lines = readFileSync(file, "utf-8").split("\n");
+ for (let i = 0; i < lines.length; i += 1) {
+ const line = lines[i].trim();
+ for (const pattern of LEGACY_SHELL_HEADING_PATTERNS) {
+ if (pattern.test(line)) {
+ errors.push({ file, line: i + 1, heading: line });
+ }
+ }
+ }
+ }
+
+ if (errors.length > 0) {
+ console.error("\nClean markdown files with legacy shell headings:");
+ for (const { file, line, heading } of errors) {
+ console.error(` - ${file}:${line} -> ${heading}`);
+ }
+ }
+
+ expect(
+ errors.length,
+ `${errors.length} clean markdown headings still use legacy shell labels`
+ ).toBe(0);
+ },
+ TIMEOUT
+ );
+
+ test(
+ "explicit shell headings map to matching code fence languages",
+ async () => {
+ const markdownFiles = await fg(`${MARKDOWN_DIR}/**/*.md`);
+ const errors: Array<{
+ file: string;
+ line: number;
+ heading: string;
+ actual: string | null;
+ }> = [];
+
+ for (const file of markdownFiles) {
+ const lines = readFileSync(file, "utf-8").split("\n");
+
+ for (let i = 0; i < lines.length; i += 1) {
+ const heading = lines[i].trim() as keyof typeof SHELL_HEADING_TO_LANG;
+ const expected = SHELL_HEADING_TO_LANG[heading];
+ if (!expected) {
+ continue;
+ }
+
+ const actual = firstFenceLanguageAfterHeading(lines, i);
+ if (!(actual && expected.has(actual))) {
+ errors.push({
+ file,
+ line: i + 1,
+ heading,
+ actual,
+ });
+ }
+ }
+ }
+
+ if (errors.length > 0) {
+ console.error(
+ "\nClean markdown files with shell heading/code fence mismatches:"
+ );
+ for (const { file, line, heading, actual } of errors) {
+ console.error(
+ ` - ${file}:${line} -> ${heading} expected matching fence, found: ${actual ?? "none"}`
+ );
+ }
+ }
+
+ expect(
+ errors.length,
+ `${errors.length} shell heading sections have mismatched fence languages`
+ ).toBe(0);
+ },
+ TIMEOUT
+ );
+
+ test(
+ "windows environment install section keeps powershell fences for both install blocks",
+ () => {
+ const file = path.join(
+ MARKDOWN_DIR,
+ "en/get-started/setup/windows-environment.md"
+ );
+ const lines = readFileSync(file, "utf-8").split("\n");
+ const heading = "### PowerShell (Windows)";
+
+ const installHeadingIndex = lines.findIndex((line, index) => {
+ if (line.trim() !== heading) {
+ return false;
+ }
+ const sectionPreview = lines
+ .slice(index, Math.min(lines.length, index + 25))
+ .join("\n");
+ return sectionPreview.includes('python -m venv ".venv"');
+ });
+
+ expect(installHeadingIndex).toBeGreaterThan(-1);
+
+ const openingFences: Array<{ line: number; fence: string }> = [];
+ let insideCodeFence = false;
+
+ for (let i = installHeadingIndex + 1; i < lines.length; i += 1) {
+ const trimmed = lines[i].trim();
+ if (MARKDOWN_HEADING_PATTERN.test(trimmed)) {
+ break;
+ }
+ if (!trimmed.startsWith(FENCE_PREFIX)) {
+ continue;
+ }
+
+ if (insideCodeFence) {
+ if (MARKDOWN_CLOSING_FENCE_PATTERN.test(trimmed)) {
+ insideCodeFence = false;
+ }
+ continue;
+ }
+
+ openingFences.push({ line: i + 1, fence: trimmed });
+ insideCodeFence = true;
+ }
+
+ expect(openingFences.length).toBe(2);
+ for (const { line, fence } of openingFences) {
+ expect(fence, `Unexpected fence at ${file}:${line}`).toBe(
+ "```powershell"
+ );
+ }
+ },
+ TIMEOUT
+ );
});