web: Cloud page and updates to Pricing to explain Cloud Agent Credits (#8605)

* Adds mention of Cloud agents to /pricing

* Credit pricing FAQ

* Skeleton of a /cloud page and more pricing page tweaks

* Lint

* Update apps/web-roo-code/src/app/cloud/page.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* Code review

* Updates copy to new credit system

* Moves Terms of Service to be backed by a markdown file, easier to read/edit/diff

* Updated ToS

* Twerm copy tweaks

* Cloud screenshot and style adjustments

* Style tweaks

* Styles

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
This commit is contained in:
Bruno Bergher 2025-10-17 00:01:19 +01:00 committed by GitHub
parent 270dce5050
commit 9aee31f28a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 527 additions and 355 deletions

View file

@ -31,7 +31,10 @@
"react-cookie-consent": "^9.0.0",
"react-dom": "^18.3.1",
"react-icons": "^5.5.0",
"react-markdown": "^9.0.3",
"recharts": "^2.15.3",
"rehype-raw": "^7.0.0",
"remark-gfm": "^4.0.1",
"tailwind-merge": "^3.3.0",
"tailwindcss-animate": "^1.0.7",
"tldts": "^6.1.86",

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View file

@ -0,0 +1,247 @@
import {
ArrowRight,
ChartLine,
Cloud,
Lock,
LucideIcon,
Megaphone,
MessageCircleQuestionMark,
ReplaceAll,
Router,
Share2,
Users,
} from "lucide-react"
import type { Metadata } from "next"
import { Button } from "@/components/ui"
import { AnimatedBackground } from "@/components/homepage"
import { SEO } from "@/lib/seo"
import { EXTERNAL_LINKS } from "@/lib/constants"
import Image from "next/image"
const TITLE = "Roo Code Cloud"
const DESCRIPTION =
"Roo Code Cloud gives you and your team the tools to take AI-coding to the next level with cloud agents, remote control, and more."
const PATH = "/cloud"
const OG_IMAGE = SEO.ogImage
export const metadata: Metadata = {
title: TITLE,
description: DESCRIPTION,
alternates: {
canonical: `${SEO.url}${PATH}`,
},
openGraph: {
title: TITLE,
description: DESCRIPTION,
url: `${SEO.url}${PATH}`,
siteName: SEO.name,
images: [
{
url: OG_IMAGE.url,
width: OG_IMAGE.width,
height: OG_IMAGE.height,
alt: OG_IMAGE.alt,
},
],
locale: SEO.locale,
type: "website",
},
twitter: {
card: SEO.twitterCard,
title: TITLE,
description: DESCRIPTION,
images: [OG_IMAGE.url],
},
keywords: [...SEO.keywords, "cloud", "subscription", "cloud agents", "AI cloud development"],
}
interface Feature {
icon: LucideIcon
title: string
description: string
logos?: string[]
}
const cloudFeatures: Feature[] = [
{
icon: Router,
title: "Roomote Control",
description: "Control your IDE from anywhere and keep coding away from your computer.",
},
{
icon: Cloud,
title: "Cloud Agents",
description:
"Specialized agents running in the Cloud to get stuff done while you sleep, with a credit-based system that doesn't lock you in or dumb your models down.",
},
{
icon: ReplaceAll,
title: "Still Model-agnostic",
description: "Bring your own provider key — no markup, lock-in, no restrictions.",
logos: ["Anthropic", "OpenAI", "Gemini", "Grok", "Qwen", "Kimi", "Mistral", "Ollama"],
},
{
icon: ChartLine,
title: "Usage Analytics",
description: "Detailed token analytics to help you optimize your costs and usage.",
},
{
icon: Megaphone,
title: "Early Model Access",
description: "Get early, free access to new, stealth coding models as they become available.",
},
{
icon: Share2,
title: "Task Sharing",
description: "Share tasks with friends and co-workers and let them follow your work.",
},
{
icon: Users,
title: "Team Management",
description:
"Manage your team and their access to tasks and resources, with centralized billing, analytics and configuration.",
},
{
icon: Lock,
title: "Secure and Private",
description:
"Your data is never used for training, and we're SOC2 Type 2 and GDPR compliant, following state-of-the-art security practices, with deep respect for your IP.",
},
{
icon: MessageCircleQuestionMark,
title: "Priority support",
description: "Get quick help from the people who know Roo best.",
},
]
// Workaround for next/image choking on these for some reason
import screenshotDark from "/public/heroes/cloud-screen.png"
export default function CloudPage() {
return (
<>
<section className="relative flex md:h-[calc(80vh-theme(spacing.12))] items-center overflow-hidden">
<AnimatedBackground />
<div className="container relative flex items-center h-full z-10 mx-auto px-4 sm:px-6 lg:px-8">
<div className="grid h-full relative gap-8 md:gap-12 lg:grid-cols-2 lg:gap-16">
<div className="flex flex-col px-4 justify-center space-y-6 sm:space-y-8">
<div>
<h1 className="text-4xl font-bold tracking-tight mt-8 text-center md:text-left md:text-4xl lg:text-5xl lg:mt-0">
Go <em>way</em> beyond the IDE
</h1>
<p className="mt-4 max-w-md text-lg text-muted-foreground text-center md:text-left sm:mt-6">
Roo Code Cloud gives you (and your team) the tools to take AI-coding to the next
level
</p>
</div>
<div className="flex flex-col space-y-3 sm:flex-row sm:space-x-4 sm:space-y-0">
<Button
variant="outline"
size="lg"
className="w-full sm:w-auto bg-white/20 dark:bg-white/10 backdrop-blur-sm border border-black/40 dark:border-white/30 hover:border-blue-400 hover:bg-white/30 dark:hover:bg-white/20 hover:shadow-[0_0_20px_rgba(59,130,246,0.5)] transition-all duration-300">
<a
href={EXTERNAL_LINKS.CLOUD_APP_SIGNUP}
target="_blank"
rel="noopener noreferrer"
className="flex w-full items-center justify-center">
Start Free Trial
<ArrowRight className="ml-2" />
</a>
</Button>
</div>
</div>
<div className="flex items-center justify-end mx-auto h-full mt-8 lg:mt-0">
<div className="md:w-[900px] md:h-[530px] bg-black dark:bg-white relative rounded-md overflow-clip shadow-2xl">
<div className="block">
<Image
src={screenshotDark}
alt="Screenshot of Roo Code Cloud"
className="max-w-full h-auto"
width={2680}
height={1784}
/>
</div>
</div>
</div>
</div>
</div>
</section>
<section className="relative overflow-hidden border-t border-border py-32">
<div className="container relative z-10 mx-auto px-4 sm:px-6 lg:px-8">
<div className="mx-auto mb-12 md:mb-24 max-w-4xl text-center">
<div>
<h2 className="text-4xl font-bold tracking-tight sm:text-5xl">Power and Flexibility</h2>
<p className="mt-6 text-lg text-muted-foreground">
Code in the cloud, access free models, get usage analytics and more
</p>
</div>
</div>
<div className="relative mx-auto md:max-w-[1200px]">
<ul className="grid grid-cols-1 place-items-center gap-6 md:grid-cols-2 lg:grid-cols-3 lg:gap-8">
{cloudFeatures.map((feature, index) => {
const Icon = feature.icon
return (
<li
key={index}
className="relative h-full border border-border rounded-2xl bg-background p-8 transition-all duration-300">
<Icon className="size-6 text-foreground/80" />
<h3 className="mb-3 mt-3 text-xl font-semibold text-foreground">
{feature.title}
</h3>
<p className="leading-relaxed font-light text-muted-foreground">
{feature.description}
</p>
{feature.logos && (
<div className="mt-4 flex flex-wrap items-center gap-4">
{feature.logos.map((logo) => (
<Image
key={logo}
width={20}
height={20}
className="w-5 h-5 overflow-clip opacity-50 dark:invert"
src={`/logos/${logo.toLowerCase()}.svg`}
alt={`${logo} Logo`}
/>
))}
</div>
)}
</li>
)
})}
</ul>
</div>
</div>
</section>
<div id="faq"></div>
{/* CTA Section */}
<section className="py-20">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="mx-auto max-w-4xl rounded-3xl border border-border/50 bg-gradient-to-br from-blue-500/5 via-cyan-500/5 to-purple-500/5 p-8 text-center shadow-2xl backdrop-blur-xl dark:border-white/20 dark:bg-gradient-to-br dark:from-gray-800 dark:via-gray-900 dark:to-black sm:p-12">
<h2 className="mb-4 text-3xl font-bold tracking-tight sm:text-4xl">Try Roo Code Cloud now</h2>
<p className="mx-auto mb-8 max-w-2xl text-lg text-muted-foreground">Code from anywhere.</p>
<div className="flex flex-col justify-center space-y-4 sm:flex-row sm:space-x-4 sm:space-y-0">
<Button
size="lg"
className="bg-black text-white hover:bg-gray-800 hover:shadow-lg hover:shadow-black/20 dark:bg-white dark:text-black dark:hover:bg-gray-200 dark:hover:shadow-white/20 transition-all duration-300"
asChild>
<a
href={EXTERNAL_LINKS.CLOUD_APP_SIGNUP}
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center">
Create a free Cloud account
<ArrowRight className="ml-2 h-4 w-4" />
</a>
</Button>
</div>
</div>
</div>
</section>
</>
)
}

View file

@ -14,6 +14,8 @@ const DESCRIPTION =
const PATH = "/pricing"
const OG_IMAGE = SEO.ogImage
const PRICE_CREDITS = 5
export const metadata: Metadata = {
title: TITLE,
description: DESCRIPTION,
@ -59,6 +61,7 @@ interface PricingTier {
icon: LucideIcon
price: string
period?: string
creditPrice?: string
trial?: string
cancellation?: string
description: string
@ -80,8 +83,9 @@ const pricingTiers: PricingTier[] = [
description: "For folks just getting started",
features: [
"Token usage analytics",
"Access your task history across devices",
"Follow your tasks from anywhere",
"Share tasks with friends and co-workers",
"Early access to free AI Models",
"Community support",
],
cta: {
@ -95,13 +99,13 @@ const pricingTiers: PricingTier[] = [
price: "$20",
period: "/mo",
trial: "Free 14-day trial · ",
creditPrice: `$${PRICE_CREDITS}`,
cancellation: "Cancel anytime",
description: "For pro Roo coders",
featuresIntro: "Everything in Free, plus:",
featuresIntro: "Everything in Free +",
features: [
"Roomote Control",
"Start, stop and control tasks from anywhere",
"Course-correct Roo from afar",
"Cloud Agents: PR Reviewer and more",
"Roomote Control: Start, stop and control tasks from anywhere",
"Paid support",
],
cta: {
@ -114,33 +118,17 @@ const pricingTiers: PricingTier[] = [
icon: Users,
price: "$99",
period: "/mo",
creditPrice: `$${PRICE_CREDITS}`,
trial: "Free 14-day trial · ",
cancellation: "Cancel anytime",
description: "For AI-forward teams",
featuresIntro: "Everything in Pro, plus:",
featuresIntro: "Everything in Pro +",
features: ["Unlimited users (no per-seat cost)", "Shared configuration & policies", "Centralized billing"],
cta: {
text: "Get started",
href: EXTERNAL_LINKS.CLOUD_APP_SIGNUP + "?redirect_url=/billing",
},
},
{
name: "Enterprise",
icon: Building2,
price: "Custom",
description: "For complex orgs",
featuresIntro: "Everything in Team, plus:",
features: [
"SAML SSO provisioning",
"Custom integrations and terms",
"Security questionnaires and all that fun stuff",
"Dedicated support",
],
cta: {
text: "Talk to Sales",
isContactForm: true,
},
},
]
export default function PricingPage() {
@ -156,7 +144,7 @@ export default function PricingPage() {
<p className="mx-auto mt-4 max-w-2xl text-lg text-muted-foreground">
Simple, transparent pricing that scales with your needs.
<br />
Free 14-day trials to kick the tires.
No inference markups. Free 14-day trials to kick the tires.
</p>
</div>
</div>
@ -175,7 +163,7 @@ export default function PricingPage() {
{/* Pricing Tiers */}
<section className="">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="mx-auto grid max-w-6xl gap-4 lg:grid-cols-4">
<div className="mx-auto grid max-w-6xl gap-4 lg:grid-cols-3">
{pricingTiers.map((tier) => {
const Icon = tier.icon
return (
@ -194,7 +182,7 @@ export default function PricingPage() {
<p className="text-sm text-muted-foreground font-light mb-2">
{tier.featuresIntro}&nbsp;
</p>
<ul className="space-y-3 my-0">
<ul className="space-y-3 my-0 h-[148px]">
{tier.features.map((feature) => (
<li key={feature} className="flex items-start gap-2">
<Check className="mt-0.5 h-4 w-4 text-muted-foreground shrink-0" />
@ -208,9 +196,16 @@ export default function PricingPage() {
<strong>{tier.price}</strong>
{tier.period}
</p>
{tier.creditPrice && (
<p className="text-sm text-muted-foreground mb-1">
+ {tier.creditPrice}/hour for Cloud tasks
</p>
)}
<p className="text-xs text-muted-foreground mb-4">
{tier.trial}
{tier.cancellation}&nbsp;
{tier.cancellation}
</p>
{tier.cta.isContactForm ? (
@ -231,6 +226,19 @@ export default function PricingPage() {
})}
</div>
</div>
<div className="mx-auto grid max-w-6xl gap-4 mt-4 relative">
<p className="bg-background border rounded-2xl p-6 text-center text-sm text-muted-foreground">
<Building2 className="inline size-4 mr-2 mb-0.5" />
Need SAML, advanced security, custom integrations or terms? Enterprise is for you.
<Link
href="/enterprise#contact"
className="font-medium ml-1 text-blue-500 hover:text-blue-600 dark:text-blue-400 dark:hover:text-blue-300">
Talk to Sales
</Link>
.
</p>
</div>
</section>
{/* Additional Information */}
@ -238,7 +246,6 @@ export default function PricingPage() {
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="mx-auto max-w-3xl text-center">
<h2 className="text-3xl font-bold tracking-tight sm:text-4xl">Frequently Asked Questions</h2>
<p className="mt-4 text-lg text-muted-foreground">Got questions about our pricing?</p>
</div>
<div className="mx-auto mt-12 grid max-w-5xl gap-8 md:grid-cols-2">
<div className="rounded-lg border border-border bg-card p-6">
@ -252,15 +259,32 @@ export default function PricingPage() {
<div className="rounded-lg border border-border bg-card p-6">
<h3 className="font-semibold">Is there a free trial?</h3>
<p className="mt-2 text-sm text-muted-foreground">
Yes, all paid plans come with a 14-day free trial.
Yes, all paid plans come with a 14-day free trial to try out functionality.
</p>
<p className="mt-2 text-sm text-muted-foreground">
To use Cloud Agents, you can buy credits.
</p>
</div>
<div className="rounded-lg border border-border bg-card p-6">
<h3 className="font-semibold">How do Cloud Agent credits work?</h3>
<p className="mt-2 text-sm text-muted-foreground">
Cloud Agents are a version of Roo running in the cloud without depending on your IDE.
You can run as many as you want, and bring your own inference provider key.
</p>
<p className="mt-2 text-sm text-muted-foreground">
To cover our infrastructure costs, we charge ${PRICE_CREDITS}/hour while the agent is
running (independent of inference costs).
</p>
<p className="mt-2 text-sm text-muted-foreground">
There are no markups, no tiers, no dumbing-down of models to increase our profit.
</p>
</div>
<div className="rounded-lg border border-border bg-card p-6">
<h3 className="font-semibold">Do I need a credit card for the free trial?</h3>
<p className="mt-2 text-sm text-muted-foreground">
Yes, but you won&apos;t be charged until your trial ends. You can cancel anytime with
one click .
Yes, but you won&apos;t be charged until your trial ends, except for credit purchases.
</p>
<p className="mt-2 text-sm text-muted-foreground">You can cancel anytime with one click.</p>
</div>
<div className="rounded-lg border border-border bg-card p-6">
<h3 className="font-semibold">What payment methods do you accept?</h3>

View file

@ -1,5 +1,10 @@
import type { Metadata } from "next"
import { SEO } from "@/lib/seo"
import fs from "fs"
import path from "path"
import ReactMarkdown from "react-markdown"
import remarkGfm from "remark-gfm"
import rehypeRaw from "rehype-raw"
const TITLE = "Terms of Service"
const DESCRIPTION =
@ -38,315 +43,56 @@ export const metadata: Metadata = {
keywords: [...SEO.keywords, "terms of service", "legal", "agreement", "subscription"],
}
function getTermsContent() {
const filePath = path.join(process.cwd(), "src/app/terms/terms.md")
return fs.readFileSync(filePath, "utf8")
}
export default function Terms() {
const content = getTermsContent()
return (
<>
<div className="container mx-auto px-4 py-12 sm:px-6 lg:px-8">
<div className="prose prose-lg mx-auto max-w-4xl dark:prose-invert">
<h1 className="text-3xl font-bold tracking-tight sm:text-4xl md:text-5xl">
Roo Code Cloud Terms of Service
</h1>
<p className="text-muted-foreground">
<em>(Version 1.0 Effective June 19, 2025)</em>
</p>
<p className="lead">
These Terms of Service (&quot;<strong>TOS</strong>&quot;) govern access to and use of the Roo
Code Cloud service (the &quot;<strong>Service</strong>&quot;). They apply to:
</p>
<ul className="lead">
<li>
<strong>(a)</strong> every <strong>Sales Order Form</strong> or similar document mutually
executed by Roo Code and the customer that references these TOS; <strong>and</strong>
</li>
<li>
<strong>(b)</strong> any{" "}
<strong>online plan-selection, self-service sign-up, or in-app purchase flow</strong>{" "}
through which a customer clicks an &quot;I Agree&quot; (or equivalent) button to accept
these TOS such flow also being an <strong>&quot;Order Form.&quot;</strong>
</li>
</ul>
<p>
By <strong>creating an account, clicking to accept, or using the Service</strong>, the person or
entity doing so (&quot;<strong>Customer</strong>&quot;) agrees to be bound by these TOS, even if
no separate Order Form is signed.
</p>
<p>
If Roo Code and Customer later execute a Master Subscription Agreement (&quot;
<strong>MSA</strong>&quot;), the MSA governs; otherwise, these TOS and the applicable Order Form
together form the entire agreement (the &quot;<strong>Agreement</strong>&quot;).
</p>
<h2 className="mt-12 text-2xl font-bold">1. Agreement Framework</h2>
<ol>
<li>
<strong>Incorporation of Standard Terms.</strong>
<br />
The{" "}
<div className="container mx-auto px-4 py-12 sm:px-6 lg:px-8">
<div className="prose prose-lg mx-auto max-w-4xl dark:prose-invert">
<ReactMarkdown
remarkPlugins={[remarkGfm]}
rehypePlugins={[rehypeRaw]}
components={{
h1: ({ ...props }) => (
<h1 className="text-3xl font-bold tracking-tight sm:text-4xl md:text-5xl" {...props} />
),
h2: ({ ...props }) => <h2 className="mt-12 text-2xl font-bold" {...props} />,
a: ({ ...props }) => (
<a
href="https://commonpaper.com/standards/cloud-service-agreement/2.0/"
className="text-primary hover:underline"
target="_blank"
rel="noopener noreferrer"
className="text-primary hover:underline">
<em>Common Paper Cloud Service Standard Terms v 2.0</em>
</a>{" "}
(the &quot;<strong>Standard Terms</strong>&quot;) are incorporated by reference. If these
TOS conflict with the Standard Terms, these TOS control.
</li>
<li>
<strong>Order of Precedence.</strong>
<br />
(a) Order Form (b) these TOS (c) Standard Terms.
</li>
</ol>
<h2 className="mt-12 text-2xl font-bold">2. Key Commercial Terms</h2>
<div className="overflow-x-auto">
<table className="min-w-full border-collapse border border-border">
<thead>
<tr className="bg-muted/50">
<th className="border border-border px-4 py-2 text-left font-semibold">Term</th>
<th className="border border-border px-4 py-2 text-left font-semibold">Value</th>
</tr>
</thead>
<tbody>
<tr>
<td className="border border-border px-4 py-2 font-medium">
Governing Law / Forum
</td>
<td className="border border-border px-4 py-2">
Delaware law; exclusive jurisdiction and venue in the state or federal courts
located in Delaware
</td>
</tr>
<tr className="bg-muted/25">
<td className="border border-border px-4 py-2 font-medium">
Plans & Subscription Periods
</td>
<td className="border border-border px-4 py-2">
<em>Free Plan:</em> month-to-month.
<br />
<em>Paid Plans:</em> Monthly <strong>or</strong> Annual, as selected in an Order
Form or the online flow.
</td>
</tr>
<tr>
<td className="border border-border px-4 py-2 font-medium">
Auto-Renewal & Non-Renewal Notice
</td>
<td className="border border-border px-4 py-2">
<em>Free Plan:</em> renews continuously until cancelled in the dashboard.
<br />
<em>Paid Plans:</em> renew for the same period unless either party gives 30
days&apos; written notice before the current period ends.
</td>
</tr>
<tr className="bg-muted/25">
<td className="border border-border px-4 py-2 font-medium">Fees & Usage</td>
<td className="border border-border px-4 py-2">
<em>Free Plan:</em> Subscription Fee = $0.
<br />
<em>Paid Plans:</em> Fees stated in the Order Form or online checkout{" "}
<strong>plus</strong> usage-based fees, calculated and invoiced monthly.
</td>
</tr>
<tr>
<td className="border border-border px-4 py-2 font-medium">Payment Terms</td>
<td className="border border-border px-4 py-2">
<em>Monthly paid plans:</em> credit-card charge on the billing date.
<br />
<em>Annual paid plans:</em> invoiced Net 30 (credit card optional).
</td>
</tr>
<tr className="bg-muted/25">
<td className="border border-border px-4 py-2 font-medium">
General Liability Cap
</td>
<td className="border border-border px-4 py-2">
The greater of (i) USD 100 and (ii) 1 × Fees paid or payable in the 12 months
before the event giving rise to liability.
</td>
</tr>
<tr>
<td className="border border-border px-4 py-2 font-medium">
Increased Cap / Unlimited Claims
</td>
<td className="border border-border px-4 py-2">None</td>
</tr>
<tr className="bg-muted/25">
<td className="border border-border px-4 py-2 font-medium">Trial / Pilot</td>
<td className="border border-border px-4 py-2">Not offered</td>
</tr>
<tr>
<td className="border border-border px-4 py-2 font-medium">Beta Features</td>
<td className="border border-border px-4 py-2">
None only generally available features are provided
</td>
</tr>
<tr className="bg-muted/25">
<td className="border border-border px-4 py-2 font-medium">Security Standard</td>
<td className="border border-border px-4 py-2">
Roo Code maintains commercially reasonable administrative, physical, and
technical safeguards
</td>
</tr>
<tr>
<td className="border border-border px-4 py-2 font-medium">Machine-Learning Use</td>
<td className="border border-border px-4 py-2">
Roo Code <strong>does not</strong> use Customer Content to train, fine-tune, or
improve any ML or AI models
</td>
</tr>
<tr className="bg-muted/25">
<td className="border border-border px-4 py-2 font-medium">
Data Processing Addendum (DPA)
</td>
<td className="border border-border px-4 py-2">
GDPR/CCPA-ready DPA available upon written request
</td>
</tr>
<tr>
<td className="border border-border px-4 py-2 font-medium">
Publicity / Logo Rights
</td>
<td className="border border-border px-4 py-2">
Roo Code may identify Customer (name & logo) in marketing materials unless
Customer opts out in writing
</td>
</tr>
</tbody>
</table>
</div>
<h2 className="mt-12 text-2xl font-bold">3. Modifications to the Standard Terms</h2>
<ol>
<li>
<strong>Section 1.6 (Machine Learning).</strong>
<br />
&quot;Provider will not use Customer Content or Usage Data to train, fine-tune, or improve
any machine-learning or AI model, except with Customer&apos;s prior written consent.&quot;
</li>
<li>
<strong>Section 3 (Security).</strong>
<br />
Replace &quot;reasonable&quot; with &quot;commercially reasonable.&quot;
</li>
<li>
<strong>Section 4 (Fees & Payment).</strong>
<br />
Add usage-billing language above and delete any provision allowing unilateral fee increases.
</li>
<li>
<strong>Section 5 (Term & Termination).</strong>
<br />
Insert auto-renewal and free-plan language above.
</li>
<li>
<strong>Sections 7 (Trials / Betas) and any SLA references.</strong>
<br />
Deleted Roo Code offers no trials, pilots, betas, or SLA credits under these TOS.
</li>
<li>
<strong>Section 12.12 (Publicity).</strong>
<br />
As reflected in the &quot;Publicity / Logo Rights&quot; row above.
</li>
</ol>
<h2 className="mt-12 text-2xl font-bold">4. Use of the Service</h2>
<p>
Customer may access and use the Service solely for its internal business purposes and subject to
the Acceptable Use Policy in the Standard Terms.
</p>
<h2 className="mt-12 text-2xl font-bold">5. Account Management & Termination</h2>
<ul>
<li>
<strong>Self-service cancellation or downgrade.</strong>
<br />
Customer may cancel a Free Plan immediately, or cancel/downgrade a Paid Plan effective at
the end of the current billing cycle, via the web dashboard.
</li>
<li>
Either party may otherwise terminate the Agreement as allowed under Section 5 of the
Standard Terms.
</li>
</ul>
<h2 className="mt-12 text-2xl font-bold">6. Privacy & Data</h2>
<p>
Roo Code&apos;s Privacy Notice (
<a
href="https://roocode.com/privacy"
rel="noopener noreferrer"
className="text-primary hover:underline">
https://roocode.com/privacy
</a>
) explains how Roo Code collects and handles personal information. If Customer requires a DPA,
email{" "}
<a href="mailto:support@roocode.com" className="text-primary hover:underline">
support@roocode.com
</a>
.
</p>
<h2 className="mt-12 text-2xl font-bold">7. Warranty Disclaimer</h2>
<p>
Except as expressly stated in the Agreement, the Service is provided{" "}
<strong>&quot;as is,&quot;</strong> and all implied warranties are disclaimed to the maximum
extent allowed by law.
</p>
<h2 className="mt-12 text-2xl font-bold">8. Limitation of Liability</h2>
<p>
The caps in Section 2 apply to all claims under the Agreement, whether in contract, tort, or
otherwise, except for Excluded Claims defined in the Standard Terms.
</p>
<h2 className="mt-12 text-2xl font-bold">9. Miscellaneous</h2>
<ol>
<li>
<strong>Assignment.</strong>
<br />
Customer may not assign the Agreement without Roo Code&apos;s prior written consent, except
to a successor in a merger or sale of substantially all assets.
</li>
<li>
<strong>Export Compliance.</strong>
<br />
Each party will comply with all applicable export-control laws and regulations and will not
export or re-export any software or technical data without the required government licences.
</li>
<li>
<strong>Entire Agreement.</strong>
<br />
The Agreement supersedes all prior or contemporaneous agreements for the Service.
</li>
<li>
<strong>Amendments.</strong>
<br />
Roo Code may update these TOS by posting a revised version at the same URL and emailing or
in-app notifying Customer at least 30 days before changes take effect. Continued use after
the effective date constitutes acceptance.
</li>
</ol>
<h2 className="mt-12 text-2xl font-bold">10. Contact</h2>
<p>
<strong>Roo Code, Inc.</strong>
<br />
98 Graceland Dr, San Rafael, CA 94901 USA
<br />
Email:{" "}
<a href="mailto:support@roocode.com" className="text-primary hover:underline">
support@roocode.com
</a>
</p>
</div>
{...props}
/>
),
table: ({ ...props }) => (
<div className="overflow-x-auto">
<table className="min-w-full border-collapse border border-border" {...props} />
</div>
),
th: ({ ...props }) => (
<th
className="border border-border px-4 py-2 text-left font-bold bg-muted-foreground/5"
{...props}
/>
),
td: ({ node: _node, ...props }) => {
// Check if this is the first column (Term column)
const isTermColumn = _node?.position?.start.column === 1
if (isTermColumn) {
return <td className="border border-border px-4 py-2 font-medium" {...props} />
}
return <td className="border border-border px-4 py-2" {...props} />
},
}}>
{content}
</ReactMarkdown>
</div>
</>
</div>
)
}

View file

@ -0,0 +1,101 @@
# Roo Code Cloud Terms of Service
_(Version 1.1 Effective Oct 16, 2025)_
These Terms of Service ("**TOS**") govern access to and use of the Roo Code Cloud service (the "**Service**"). They apply to:
- **(a)** every **Sales Order Form** or similar document mutually executed by Roo Code and the customer that references these TOS; **and**
- **(b)** any **online plan-selection, self-service sign-up, or in-app purchase flow** through which a customer clicks an "I Agree" (or equivalent) button to accept these TOS — such flow also being an **"Order Form."**
By **creating an account, clicking to accept, or using the Service**, the person or entity doing so ("**Customer**") agrees to be bound by these TOS, even if no separate Order Form is signed.
If Roo Code and Customer later execute a Master Subscription Agreement ("**MSA**"), the MSA governs; otherwise, these TOS and the applicable Order Form together form the entire agreement (the "**Agreement**").
## 1. Agreement Framework
1. **Incorporation of Standard Terms.**
The [_Common Paper Cloud Service Standard Terms v 2.0_](https://commonpaper.com/standards/cloud-service-agreement/2.0/) (the "**Standard Terms**") are incorporated by reference. If these TOS conflict with the Standard Terms, these TOS control.
2. **Order of Precedence.**
(a) Order Form (b) these TOS (c) Standard Terms.
## 2. Key Commercial Terms
| Term | Value |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Governing Law / Forum | Delaware law; exclusive jurisdiction and venue in the state or federal courts located in Delaware |
| Plans & Subscription Periods | _Free Plan:_ month-to-month. <br> _Paid Plans:_ Monthly **or** Annual, as selected in an Order Form or the online flow. |
| Auto-Renewal & Non-Renewal Notice | _Free Plan:_ renews continuously until cancelled in the dashboard. <br> _Paid Plans:_ renew for the same period unless either party gives 30 days' written notice before the current period ends. |
| Fees & Usage | _Free Plan:_ Subscription Fee = $0.<br/>_Paid Plans:_ Fees stated in the Order Form or online checkout, invoiced monthly, **plus** Credits, credit-card charge upon online checkout. |
| Payment Terms | _Monthly paid plans:_ credit-card charge on the billing date.<br/>_Annual paid plans:_ invoiced Net 30 (credit card optional).<br/>_Credits:_ credit-card charge upon online checkout. |
| Credit Expiration. | Credits expire one calendar year after purchase |
| General Liability Cap | The greater of (i) USD 100 and (ii) 1 × Fees paid or payable in the 12 months before the event giving rise to liability. |
| Increased Cap / Unlimited Claims | None. |
| Trial / Pilot | Self-service paid plans offer a 14-day free trial, with no subscription charge during the period. Credits are always charged, including during the free trial. |
| Beta Features | None only generally available features are provided. |
| Security Standard | Roo Code is SOC2 Type 2 compliant and follows industry-standard security practices. |
| Machine-Learning Use | Roo Code **does not** use Customer Content to train, fine-tune, or improve any ML or AI models. |
| Data Processing Addendum (DPA) | GDPR/CCPA-ready DPA available upon written request. Subprocessors listed [here](/legal/subprocessors). |
| Publicity / Logo Rights | Roo Code may identify Customer (name & logo) in marketing materials unless Customer opts out in writing. |
## 3. Modifications to the Standard Terms
1. **Section 1.6 (Machine Learning).**
"Provider will not use Customer Content or Usage Data to train, fine-tune, or improve any machine-learning or AI model, except with Customer's prior written consent."
2. **Section 3 (Security).**
Replace "reasonable" with "commercially reasonable."
3. **Section 4 (Fees & Payment).**
Add usage-billing language above and delete any provision allowing unilateral fee increases.
4. **Section 5 (Term & Termination).**
Insert auto-renewal and free-plan language above.
5. **Sections 7 (Trials / Betas) and any SLA references.**
Deleted Roo Code offers no pilots, betas, or SLA credits under these TOS.
6. **Section 12.12 (Publicity).**
As reflected in the "Publicity / Logo Rights" row above.
## 4. Use of the Service
Customer may access and use the Service solely for its internal business purposes and subject to the Acceptable Use Policy in the Standard Terms.
## 5. Account Management & Termination
- **Self-service cancellation or downgrade.**
Customer may cancel a Free Plan immediately, or cancel/downgrade a Paid Plan effective at the end of the current billing cycle, via the web dashboard.
- Either party may otherwise terminate the Agreement as allowed under Section 5 of the Standard Terms.
## 6. Privacy & Data
Roo Code's Privacy Notice ([https://roocode.com/privacy](https://roocode.com/privacy)) explains how Roo Code collects and handles personal information. If Customer requires a DPA, email [support@roocode.com](mailto:support@roocode.com).
## 7. Warranty Disclaimer
Except as expressly stated in the Agreement, the Service is provided **"as is,"** and all implied warranties are disclaimed to the maximum extent allowed by law.
## 8. Limitation of Liability
The caps in Section 2 apply to all claims under the Agreement, whether in contract, tort, or otherwise, except for Excluded Claims defined in the Standard Terms.
## 9. Miscellaneous
1. **Assignment.**
Customer may not assign the Agreement without Roo Code's prior written consent, except to a successor in a merger or sale of substantially all assets.
2. **Export Compliance.**
Each party will comply with all applicable export-control laws and regulations and will not export or re-export any software or technical data without the required government licences.
3. **Entire Agreement.**
The Agreement supersedes all prior or contemporaneous agreements for the Service.
4. **Amendments.**
Roo Code may update these TOS by posting a revised version at the same URL and emailing or in-app notifying Customer at least 30 days before changes take effect. Continued use after the effective date constitutes acceptance.
## 10. Contact
**Roo Code, Inc.**
98 Graceland Dr, San Rafael, CA 94901 USA
Email: [support@roocode.com](mailto:support@roocode.com)

View file

@ -38,8 +38,13 @@ export function NavBar({ stars, downloads }: NavBarProps) {
<ScrollButton
targetId="product"
className="text-muted-foreground px-4 py-6 transition-transform duration-200 hover:scale-105 hover:text-foreground max-lg:hidden">
Product
Extension
</ScrollButton>
<Link
href="/cloud"
className="text-muted-foreground px-4 py-6 transition-transform duration-200 hover:scale-105 hover:text-foreground">
Cloud
</Link>
<a
href={EXTERNAL_LINKS.DOCUMENTATION}
target="_blank"
@ -140,8 +145,14 @@ export function NavBar({ stars, downloads }: NavBarProps) {
targetId="product"
className="block w-full p-5 py-3 text-left text-foreground active:opacity-50"
onClick={() => setIsMenuOpen(false)}>
Product
Extension
</ScrollButton>
<Link
href="/cloud"
className="block w-full p-5 text-left text-foreground active:opacity-50"
onClick={() => setIsMenuOpen(false)}>
Cloud
</Link>
<a
href={EXTERNAL_LINKS.DOCUMENTATION}
target="_blank"

76
pnpm-lock.yaml generated
View file

@ -311,9 +311,18 @@ importers:
react-icons:
specifier: ^5.5.0
version: 5.5.0(react@18.3.1)
react-markdown:
specifier: ^9.0.3
version: 9.1.0(@types/react@18.3.23)(react@18.3.1)
recharts:
specifier: ^2.15.3
version: 2.15.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rehype-raw:
specifier: ^7.0.0
version: 7.0.0
remark-gfm:
specifier: ^4.0.1
version: 4.0.1
tailwind-merge:
specifier: ^3.3.0
version: 3.3.0
@ -4061,9 +4070,6 @@ packages:
'@types/node@20.17.57':
resolution: {integrity: sha512-f3T4y6VU4fVQDKVqJV4Uppy8c1p/sVvS3peyqxyWnzkqXFJLRU7Y1Bl7rMS1Qe9z0v4M6McY0Fp9yBsgHJUsWQ==}
'@types/node@20.19.19':
resolution: {integrity: sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==}
'@types/node@24.2.1':
resolution: {integrity: sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==}
@ -6351,12 +6357,18 @@ packages:
hast-util-parse-selector@4.0.0:
resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
hast-util-raw@9.1.0:
resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==}
hast-util-to-html@9.0.5:
resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
hast-util-to-jsx-runtime@2.3.6:
resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
hast-util-to-parse5@8.0.0:
resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
hast-util-to-text@4.0.2:
resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
@ -8287,6 +8299,9 @@ packages:
property-information@5.6.0:
resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
property-information@6.5.0:
resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
@ -8580,6 +8595,9 @@ packages:
rehype-katex@7.0.1:
resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==}
rehype-raw@7.0.0:
resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
rehype-react@6.2.1:
resolution: {integrity: sha512-f9KIrjktvLvmbGc7si25HepocOg4z0MuNOtweigKzBcDjiGSTGhyz6VSgaV5K421Cq1O+z4/oxRJ5G9owo0KVg==}
@ -9521,9 +9539,6 @@ packages:
undici-types@6.19.8:
resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
undici-types@7.10.0:
resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==}
@ -13662,11 +13677,6 @@ snapshots:
dependencies:
undici-types: 6.19.8
'@types/node@20.19.19':
dependencies:
undici-types: 6.21.0
optional: true
'@types/node@24.2.1':
dependencies:
undici-types: 7.10.0
@ -13736,7 +13746,7 @@ snapshots:
'@types/ws@8.18.1':
dependencies:
'@types/node': 20.19.19
'@types/node': 24.2.1
optional: true
'@types/yargs-parser@21.0.3': {}
@ -13909,7 +13919,7 @@ snapshots:
sirv: 3.0.1
tinyglobby: 0.2.14
tinyrainbow: 2.0.0
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.2.1)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@20.17.57)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(tsx@4.19.4)(yaml@2.8.0)
'@vitest/utils@3.2.4':
dependencies:
@ -15021,7 +15031,6 @@ snapshots:
debug@4.4.3:
dependencies:
ms: 2.1.3
optional: true
decamelize@1.2.0: {}
@ -16291,6 +16300,22 @@ snapshots:
dependencies:
'@types/hast': 3.0.4
hast-util-raw@9.1.0:
dependencies:
'@types/hast': 3.0.4
'@types/unist': 3.0.3
'@ungap/structured-clone': 1.3.0
hast-util-from-parse5: 8.0.3
hast-util-to-parse5: 8.0.0
html-void-elements: 3.0.0
mdast-util-to-hast: 13.2.0
parse5: 7.3.0
unist-util-position: 5.0.0
unist-util-visit: 5.0.0
vfile: 6.0.3
web-namespaces: 2.0.1
zwitch: 2.0.4
hast-util-to-html@9.0.5:
dependencies:
'@types/hast': 3.0.4
@ -16325,6 +16350,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
hast-util-to-parse5@8.0.0:
dependencies:
'@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
devlop: 1.1.0
property-information: 6.5.0
space-separated-tokens: 2.0.2
web-namespaces: 2.0.1
zwitch: 2.0.4
hast-util-to-text@4.0.2:
dependencies:
'@types/hast': 3.0.4
@ -17722,7 +17757,7 @@ snapshots:
micromark@4.0.2:
dependencies:
'@types/debug': 4.1.12
debug: 4.4.1(supports-color@8.1.1)
debug: 4.4.3
decode-named-character-reference: 1.1.0
devlop: 1.1.0
micromark-core-commonmark: 2.0.3
@ -18519,6 +18554,8 @@ snapshots:
dependencies:
xtend: 4.0.2
property-information@6.5.0: {}
property-information@7.1.0: {}
proxy-addr@2.0.7:
@ -18919,6 +18956,12 @@ snapshots:
unist-util-visit-parents: 6.0.1
vfile: 6.0.3
rehype-raw@7.0.0:
dependencies:
'@types/hast': 3.0.4
hast-util-raw: 9.1.0
vfile: 6.0.3
rehype-react@6.2.1:
dependencies:
'@mapbox/hast-util-table-cell-style': 0.2.1
@ -20011,9 +20054,6 @@ snapshots:
undici-types@6.19.8: {}
undici-types@6.21.0:
optional: true
undici-types@7.10.0: {}
undici@6.21.3: {}