Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
b5c58b6
Track when telemetry settings change (#8339)
mrubens Sep 27, 2025
602901f
fix: use max_completion_tokens for GPT-5 models in LiteLLM provider (…
roomote[bot] Sep 27, 2025
a57528d
Make chat icons shrink-0 (#8343)
mrubens Sep 27, 2025
ded23b7
web: Testimonials (#8360)
brunobergher Sep 29, 2025
c943ba7
ci: refresh contrib.rocks cache workflow (#8083)
hannesrudolph Sep 29, 2025
6a91385
feat: add Claude 4.5 Sonnet model across all providers (#8368)
daniel-lxs Sep 29, 2025
06ccab6
chore: add changeset for v3.28.10 (#8369)
mrubens Sep 29, 2025
de77055
Changeset version bump (#8370)
github-actions[bot] Sep 29, 2025
c57539d
fix: correct AWS Bedrock Claude Sonnet 4.5 model identifier (#8372)
roomote[bot] Sep 29, 2025
6759687
fix: correct Claude Sonnet 4.5 model ID format (#8373)
daniel-lxs Sep 29, 2025
46f0ae6
chore: add changeset for v3.28.11 (#8374)
mrubens Sep 29, 2025
f3b3751
Changeset version bump (#8375)
github-actions[bot] Sep 29, 2025
b264495
fix: Anthropic Sonnet 4.5 model id + Bedrock 1M context checkbox (#8384)
daniel-lxs Sep 29, 2025
8b74af9
chore: add changeset for v3.28.12 (#8385)
mrubens Sep 29, 2025
2502058
Changeset version bump (#8376)
github-actions[bot] Sep 29, 2025
8111da6
Fix Vertex Sonnet 4.5 (#8391)
mrubens Sep 29, 2025
7b7bb49
fix: remove topP parameter from Bedrock inference config (#8388)
daniel-lxs Sep 29, 2025
d25a8d7
chore: add changeset for v3.28.13 (#8393)
mrubens Sep 29, 2025
702b269
Changeset version bump (#8394)
github-actions[bot] Sep 29, 2025
9e98d1a
feat: add GLM-4.6 model support for z.ai provider (#8408)
roomote[bot] Sep 30, 2025
4ec921c
chore: add changeset for v3.28.14 (#8413)
mrubens Sep 30, 2025
9f41ee0
Changeset version bump (#8414)
github-actions[bot] Sep 30, 2025
9af9d5b
A couple more sonnet 4.5 fixes (#8421)
mrubens Sep 30, 2025
e33efc6
chore: Remove unsupported Gemini 2.5 Flash Image Preview free model (…
SannidhyaSah Sep 30, 2025
c552027
Include reasoning messages in cloud tasks (#8401)
mrubens Sep 30, 2025
3e47e88
fix: show send button when only images are selected in chat textarea …
roomote[bot] Sep 30, 2025
f8ed7a7
Add structured data to the homepage (#8427)
mrubens Oct 1, 2025
9bcd991
fix: Addresses overeager 'there are unsaved changes' dialog in settin…
brunobergher Oct 1, 2025
c8a8188
feat: add UsageStats schema and type (#8441)
roomote[bot] Oct 1, 2025
13534cc
Release: v1.80.0 (#8442)
jr Oct 1, 2025
8622d93
feat: add new DeepSeek and GLM models with detailed descriptions to t…
mohammad154 Oct 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 48 additions & 27 deletions .github/workflows/update-contributors.yml
Original file line number Diff line number Diff line change
@@ -1,46 +1,67 @@
name: Update Contributors
name: Update Contributors # Refresh contrib.rocks image cache

on:
push:
branches:
- main
workflow_dispatch:

permissions:
contents: write
pull-requests: write

jobs:
update-contributors:
refresh-contrib-cache:
runs-on: ubuntu-latest
permissions:
contents: write # Needed for pushing changes.
pull-requests: write # Needed for creating PRs.
steps:
- name: Checkout code
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
- name: Disable Husky

- name: Bump cacheBust in all README files
run: |
echo "HUSKY=0" >> $GITHUB_ENV
git config --global core.hooksPath /dev/null
- name: Update contributors and format
set -euo pipefail
TS="$(date +%s)"
# Target only the root README.md and localized READMEs under locales/*/README.md
mapfile -t FILES < <(git ls-files README.md 'locales/*/README.md' || true)

if [ "${#FILES[@]}" -eq 0 ]; then
echo "No target README files found." >&2
exit 1
fi

UPDATED=0
for f in "${FILES[@]}"; do
if grep -q 'cacheBust=' "$f"; then
# Use portable sed in GNU environment of ubuntu-latest
sed -i -E "s/cacheBust=[0-9]+/cacheBust=${TS}/g" "$f"
echo "Updated cacheBust in $f"
UPDATED=1
else
echo "Warning: cacheBust parameter not found in $f" >&2
fi
done

if [ "$UPDATED" -eq 0 ]; then
echo "No files were updated. Ensure READMEs embed contrib.rocks with cacheBust param." >&2
exit 1
fi

- name: Detect changes
id: changes
run: |
pnpm update-contributors
npx prettier --write README.md locales/*/README.md
if git diff --quiet; then echo "changes=false" >> $GITHUB_OUTPUT; else echo "changes=true" >> $GITHUB_OUTPUT; fi
id: check-changes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if git diff --quiet; then
echo "changed=false" >> $GITHUB_OUTPUT
else
echo "changed=true" >> $GITHUB_OUTPUT
fi

- name: Create Pull Request
if: steps.check-changes.outputs.changes == 'true'
if: steps.changes.outputs.changed == 'true'
uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "docs: update contributors list [skip ci]"
committer: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>"
branch: update-contributors
branch: refresh-contrib-cache
delete-branch: true
title: "Update contributors list"
title: "Refresh contrib.rocks image cache (all READMEs)"
body: |
Automated update of contributors list and related files

This PR was created automatically by a GitHub Action workflow and includes all changed files.
Automated refresh of the contrib.rocks image cache by bumping the cacheBust parameter in README.md and locales/*/README.md.
base: main
31 changes: 31 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,36 @@
# Roo Code Changelog

## [3.28.14] - 2025-09-30

![3.28.14 Release - GLM-4.6 Model Support](/releases/3.28.14-release.png)

- Add support for GLM-4.6 model for z.ai provider (#8406 by @dmarkey, PR by @roomote)

## [3.28.13] - 2025-09-29

- Fix: Remove topP parameter from Bedrock inference config (#8377 by @ronyblum, PR by @daniel-lxs)
- Fix: Correct Vertex AI Sonnet 4.5 model configuration (#8387 by @nickcatal, PR by @mrubens!)

## [3.28.12] - 2025-09-29

- Fix: Correct Anthropic Sonnet 4.5 model ID and add Bedrock 1M context checkbox (thanks @daniel-lxs!)

## [3.28.11] - 2025-09-29

- Fix: Correct AWS Bedrock Claude Sonnet 4.5 model identifier (#8371 by @sunhyung, PR by @app/roomote)
- Fix: Correct Claude Sonnet 4.5 model ID format (thanks @daniel-lxs!)

## [3.28.10] - 2025-09-29

![3.28.10 Release - Kangaroo Writing Sonnet 4.5](/releases/3.28.10-release.png)

- Feat: Add Sonnet 4.5 support (thanks @daniel-lxs!)
- Fix: Resolve max_completion_tokens issue for GPT-5 models in LiteLLM provider (#6979 by @lx1054331851, PR by @roomote)
- Fix: Make chat icons properly sized with shrink-0 class (thanks @mrubens!)
- Enhancement: Track telemetry settings changes for better analytics (thanks @mrubens!)
- Web: Add testimonials section to website (thanks @brunobergher!)
- CI: Refresh contrib.rocks cache workflow for contributor badges (thanks @hannesrudolph!)

## [3.28.9] - 2025-09-26

![3.28.9 Release - Supernova Upgrade](/releases/3.28.9-release.png)
Expand Down
2 changes: 2 additions & 0 deletions apps/web-roo-code/src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
} from "@/components/homepage"
import { EXTERNAL_LINKS } from "@/lib/constants"
import { ArrowRight } from "lucide-react"
import { StructuredData } from "@/components/structured-data"

// Invalidate cache when a request comes in, at most once every hour.
export const revalidate = 3600
Expand All @@ -23,6 +24,7 @@ export default async function Home() {

return (
<>
<StructuredData />
<section className="relative flex h-[calc(125vh-theme(spacing.12))] items-center overflow-hidden md:h-[calc(80svh-theme(spacing.12))]">
<AnimatedBackground />
<div className="container relative flex items-center h-full z-10 mx-auto px-4 sm:px-6 lg:px-8">
Expand Down
131 changes: 104 additions & 27 deletions apps/web-roo-code/src/components/homepage/testimonials.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,45 +4,114 @@ import { useRef, useCallback, useEffect } from "react"
import { motion } from "framer-motion"
import useEmblaCarousel from "embla-carousel-react"
import AutoPlay from "embla-carousel-autoplay"
import { ChevronLeft, ChevronRight } from "lucide-react"
import { ChevronLeft, ChevronRight, Star } from "lucide-react"

export interface Testimonial {
id: number
name: string
role: string
company: string
image?: string
origin: string
quote: string
image?: string
stars?: number
}

export const testimonials: Testimonial[] = [
{
id: 1,
name: "Luca",
role: "Reviewer",
company: "VS Code Marketplace",
origin: "VS Code Marketplace",
quote: "Roo Code is an absolute game-changer! 🚀 It makes coding faster, easier, and more intuitive with its smart AI-powered suggestions, real-time debugging, and automation features. The seamless integration with VS Code is a huge plus, and the constant updates ensure it keeps getting better",
stars: 5,
},
{
id: 2,
name: "Taro Woollett-Chiba",
role: "AI Product Lead",
company: "Vendidit",
origin: "Vendidit",
quote: "Easily the best AI code editor. Roo Code has the best features and capabilities, along with the best development team. I swear, they're the fastest to support new models and implement useful functionality whenever users mention it... simply amazing.",
},
{
id: 3,
name: "Can Nuri",
role: "Reviewer",
company: "VS Code Marketplace",
origin: "VS Code Marketplace",
quote: "Roo Code is one of the most inspiring projects I have seen for a long time. It shapes the way I think and deal with software development.",
stars: 5,
},
{
id: 4,
name: "Michael",
role: "Reviewer",
company: "VS Code Marketplace",
origin: "VS Code Marketplace",
quote: "I switched from Windsurf to Roo Code in January and honestly, it's been a huge upgrade. Windsurf kept making mistakes and being dumb when I ask it for things. Roo just gets it. Projects that used to take a full day now wrap up before lunch. ",
stars: 5,
},
{
name: "Darien Hardin",
role: "Reviewer",
origin: "VS Code Marketplace",
quote: "By far the best coding tool I have used. Looking forward to where this goes in the future. Also, their Discord is an excellent resource with many knowledgeable users sharing their discoveries.",
stars: 5,
},
{
name: "Wiliam Azzam",
role: "Reviewer",
origin: "VS Code Marketplace",
quote: "I've tried Cursor, Windsurf, Cline, Trae and others, and although using RooCode with OpenRouter is more expensive, it is also far more effective. Its agents and initial setup, and learning how to use Code/Architect/Orchestrator, help a great deal in developing quality projects.",
stars: 5,
},
{
name: "Matěj Zapletal",
role: "Reviewer",
origin: "VS Code Marketplace",
quote: "Definitely the best AI coding agent extension.",
stars: 5,
},
{
name: "Ali Davachi",
role: "Reviewer",
origin: "VS Code Marketplace",
quote: "We tried the rest, now we are using the best. The alternatives are more restrictive. I didn't use competitors for a reason. This team is killing it.",
stars: 5,
},
{
name: "Ryan Booth",
role: "Reviewer",
origin: "VS Code Marketplace",
quote: "I work inside Roo about 60+ hours a week and usually roo is building something at all hours of the day. An amazing tool by an amazing team!",
stars: 5,
},
{
name: "Matthew Martin",
role: "Reviewer",
origin: "VS Code Marketplace",
quote: "i spent a fortune trying to dial in various tools to get them to work the way i want, and then i found roocode. customizable for your flavors on your terms. this is what i always wanted.",
stars: 5,
},
{
name: "Edwin Jacques",
role: "Reviewer",
origin: "VS Code Marketplace",
quote: "The BEST. Super fast, no-nonsense, UI that makes sense, many API provider choices, responsive, helpful developer community.",
stars: 5,
},
{
name: "Sean McCann",
role: "Reviewer",
origin: "VS Code Marketplace",
quote: "Roo Code is impressively capable while staying refreshingly simple. It integrates seamlessly into VS Code and handles everything from generating code to refactoring with accuracy and speed. It feels like a natural part of the workflow—no clutter, just results. Extra points for the flexibility of the different agents and the ability to customize them to fit the job.",
stars: 5,
},
{
name: "Colin Tate",
role: "Reviewer",
origin: "VS Code Marketplace",
quote: "Absolutely amazing extension. I had tried Cursor previously, and this just beats it hands down. I've used it for several large projects now, and it is now my go-to for creating things that would normally take weeks or months. Highly recommended.",
stars: 5,
},
{
name: "Michael Scott",
role: "Reviewer",
origin: "VS Code Marketplace",
quote: "I've used all the IDEs and all the assistants - Roo Code is hands down the best of them. It's also one of the few that lets you bring your own API keys - no subscriptions required, just pay as you need/go! Fantastic team and support as well!",
stars: 5,
},
]

Expand All @@ -58,8 +127,8 @@ export function Testimonials() {
[
AutoPlay({
playOnInit: true,
delay: 4000,
stopOnInteraction: true,
delay: 3_500,
stopOnInteraction: false,
stopOnMouseEnter: true,
stopOnFocusIn: true,
}),
Expand Down Expand Up @@ -122,53 +191,53 @@ export function Testimonials() {
</div>

<div className="container relative z-10 mx-auto px-4 sm:px-6 lg:px-8">
<div className="mx-auto mb-8 max-w-5xl text-center">
<div className="mx-auto mb-8 md:max-w-2xl text-center">
<h2 className="text-4xl font-bold tracking-tight sm:text-5xl">
AI-forward developers are using Roo Code
Developers <em>really</em> shipping with AI are using Roo Code
</h2>
<p className="mt-6 text-lg text-muted-foreground">
Join more than 800k people revolutionizing their workflow worldwide
Join more than 1M people revolutionizing their workflow worldwide
</p>
</div>

<motion.div
className="relative mx-auto max-w-[1400px]"
className="relative -mx-4 md:mx-auto max-w-[1400px]"
variants={containerVariants}
initial="hidden"
whileInView="visible"
viewport={{ once: true }}>
{/* Previous Button */}
<button
onClick={scrollPrev}
className="absolute left-0 top-1/2 z-20 -translate-y-1/2 rounded-full border border-border/50 bg-background/80 p-2 backdrop-blur-xl transition-all duration-300 hover:scale-110 hover:shadow-lg md:left-4 md:p-3 lg:left-8"
className="absolute left-1 top-1/2 z-20 -translate-y-1/2 rounded-full border border-border/50 bg-background/80 p-2 backdrop-blur-xl transition-all duration-300 hover:scale-110 hover:shadow-lg md:left-4 md:p-3 lg:left-8"
aria-label="Previous testimonial">
<ChevronLeft className="h-5 w-5 text-muted-foreground transition-colors hover:text-foreground md:h-6 md:w-6" />
</button>

{/* Next Button */}
<button
onClick={scrollNext}
className="absolute right-0 top-1/2 z-20 -translate-y-1/2 rounded-full border border-border/50 bg-background/80 p-2 backdrop-blur-xl transition-all duration-300 hover:scale-110 hover:shadow-lg md:right-4 md:p-3 lg:right-8"
className="absolute right-1 top-1/2 z-20 -translate-y-1/2 rounded-full border border-border/50 bg-background/80 p-2 backdrop-blur-xl transition-all duration-300 hover:scale-110 hover:shadow-lg md:right-4 md:p-3 lg:right-8"
aria-label="Next testimonial">
<ChevronRight className="h-5 w-5 text-muted-foreground transition-colors hover:text-foreground md:h-6 md:w-6" />
</button>

{/* Gradient Overlays */}
<div className="absolute inset-y-0 left-0 z-10 w-[10%] bg-gradient-to-r from-background to-transparent pointer-events-none md:w-[15%]" />
<div className="absolute inset-y-0 right-0 z-10 w-[10%] bg-gradient-to-l from-background to-transparent pointer-events-none md:w-[15%]" />
<div className="hidden md:block absolute inset-y-0 left-0 z-10 w-[10%] bg-gradient-to-r from-background to-transparent pointer-events-none md:w-[15%]" />
<div className="hidden md:block absolute inset-y-0 right-0 z-10 w-[10%] bg-gradient-to-l from-background to-transparent pointer-events-none md:w-[15%]" />

{/* Embla Carousel Container */}
<div className="overflow-hidden" ref={emblaRef}>
<div className="flex">
{testimonials.map((testimonial) => (
<div
key={testimonial.id}
className="relative min-w-0 flex-[0_0_85%] px-2 md:flex-[0_0_70%] md:px-4 lg:flex-[0_0_60%]">
key={testimonial.name}
className="relative min-w-0 flex-[0_0_85%] px-2 md:flex-[0_0_70%] md:px-4 lg:flex-[0_0_30%]">
<div className="group relative py-10 h-full">
<div className="relative flex h-full flex-col rounded-2xl border border-border bg-background transition-all duration-500 ease-out group-hover:scale-[1.02] group-hover:border-border group-hover:bg-background/40 group-hover:shadow-xl dark:border-border/70 dark:bg-background/40 dark:group-hover:border-border dark:group-hover:bg-background/60 dark:group-hover:shadow-[0_20px_50px_rgba(59,130,246,0.15)]">
<div className="flex flex-1 flex-col p-6 md:p-8">
<div className="flex flex-1 flex-col p-4 md:p-6">
<div className="flex-1">
<p className="relative text-sm leading-relaxed text-muted-foreground transition-colors duration-300 group-hover:text-foreground/80 dark:text-foreground/70 dark:group-hover:text-foreground/90 md:text-lg">
<p className="relative text-sm leading-relaxed text-muted-foreground transition-colors duration-300 group-hover:text-foreground/80 dark:text-foreground/70 dark:group-hover:text-foreground/90">
{testimonial.quote}
</p>
</div>
Expand All @@ -178,7 +247,15 @@ export function Testimonials() {
{testimonial.name}
</h3>
<p className="text-sm text-muted-foreground transition-colors duration-300 dark:text-muted-foreground/80">
{testimonial.role} at {testimonial.company}
{testimonial.role} at {testimonial.origin}
{testimonial.stars && (
<span className="flex items-center mt-1">
{" "}
{Array.from({ length: testimonial.stars }, (_, i) => (
<Star key={i} className="size-4 fill-violet-500" />
))}
</span>
)}
</p>
</div>
</div>
Expand Down
26 changes: 26 additions & 0 deletions apps/web-roo-code/src/components/structured-data.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { getStructuredData } from "@/lib/structured-data"

/**
* StructuredData Component
*
* Renders JSON-LD structured data in the document head for SEO.
*
* The structured data includes:
* - Organization information (brand, logo, social profiles)
* - WebSite metadata (site name for Google Search)
* - SoftwareApplication details (VS Code extension)
*
* @see https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data
*/
export function StructuredData() {
const structuredData = getStructuredData()

return (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(structuredData),
}}
/>
)
}
Loading