Layout Customization and Stability Improvements
| CARVIEW |
Built to make you extraordinarily productive, Cursor is the best way to code with AI.

import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from torchvision import datasets
def get_dataloaders(batch_size=64):
transform = transforms.Compose([transforms.ToTensor()])
train = datasets.MNIST(root="data", train=True, download=True, transform=transform)
test = datasets.MNIST(root="data", train=False, download=True, transform=transform)
return DataLoader(train, batch_size=batch_size, shuffle=True), DataLoader(test, batch_size=batch_size)
class MLP(nn.Module):
def __init__(self, hidden=128):
super().__init__()
self.net = nn.Sequential(
nn.Flatten(),
nn.Linear(28*28, hidden),
nn.ReLU(),
nn.Linear(hidden, 10),
)
def forward(self, x):
return self.net(x)
def train_model(epochs=1, lr=1e-3, device=None):
device = device or ("cuda" if torch.cuda.is_available() else "cpu")
model = MLP().to(device)
opt = torch.optim.Adam(model.parameters(), lr=lr)
loss_fn = nn.CrossEntropyLoss()
train_loader, _ = get_dataloaders()
+ # Seed for reproducibility
+ torch.manual_seed(42)
+ if device == "cuda":
+ torch.cuda.manual_seed_all(42)
+ # AMP + Scheduler
+ scaler = torch.cuda.amp.GradScaler(enabled=(device=="cuda"))
+ scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(opt, T_max=epochs)
model.train()
for epoch in range(epochs):
total, correct = 0, 0
for x, y in tqdm(train_loader, desc=f"epoch {epoch+1}"):
x, y = x.to(device), y.to(device)
opt.zero_grad(set_to_none=True)
logits = model(x)
loss = loss_fn(logits, y)
loss.backward()
opt.step()
scaler.scale(loss).backward()
scaler.unscale_(opt)
+ torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
scaler.step(opt)
scaler.update()
+ preds = logits.argmax(dim=1)
+ total += y.size(0)
+ correct += (preds == y).sum().item()
+ acc = correct / max(1, total)
scheduler.step()
+ print(f"epoch {epoch+1}: acc={acc:.3f}")
return model`,import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from torchvision import datasets
def get_dataloaders(batch_size=64):
transform = transforms.Compose([transforms.ToTensor()])
train = datasets.MNIST(root="data", train=True, download=True, transform=transform)
test = datasets.MNIST(root="data", train=False, download=True, transform=transform)
return DataLoader(train, batch_size=batch_size, shuffle=True), DataLoader(test, batch_size=batch_size)
class MLP(nn.Module):
def __init__(self, hidden=128):
super().__init__()
self.net = nn.Sequential(
nn.Flatten(),
nn.Linear(28*28, hidden),
nn.ReLU(),
nn.Linear(hidden, 10),
)
def forward(self, x):
return self.net(x)
def train_model(epochs=1, lr=1e-3, device=None):
device = device or ("cuda" if torch.cuda.is_available() else "cpu")
model = MLP().to(device)
opt = torch.optim.Adam(model.parameters(), lr=lr)
loss_fn = nn.CrossEntropyLoss()
train_loader, _ = get_dataloaders()
+ # Seed for reproducibility
+ torch.manual_seed(42)
+ if device == "cuda":
+ torch.cuda.manual_seed_all(42)
+ # AMP + Scheduler
+ scaler = torch.cuda.amp.GradScaler(enabled=(device=="cuda"))
+ scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(opt, T_max=epochs)
model.train()
for epoch in range(epochs):
total, correct = 0, 0
for x, y in tqdm(train_loader, desc=f"epoch {epoch+1}"):
x, y = x.to(device), y.to(device)
opt.zero_grad(set_to_none=True)
logits = model(x)
loss = loss_fn(logits, y)
loss.backward()
opt.step()
scaler.scale(loss).backward()
scaler.unscale_(opt)
+ torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
scaler.step(opt)
scaler.update()
+ preds = logits.argmax(dim=1)
+ total += y.size(0)
+ correct += (preds == y).sum().item()
+ acc = correct / max(1, total)
scheduler.step()
+ print(f"epoch {epoch+1}: acc={acc:.3f}")
return model`,/ for commands · @ for files
Trusted every day by millions of professional developers.
Agent turns ideas into code

Magically accurate autocomplete


"use client";
import React, { useState } from "react";
import Navigation from "./Navigation";
import SupportChat from "./SupportChat";
export default function Dashboard() {
return (
<div className="flex h-[600px] border rounded-lg overflow-hidden">
<div className="w-64 border-r">
</div>
<div className="w-80 border-l">
<SupportChat />
</div>
</div>
);
}"use client";
import React, { useState } from "react";
import Navigation from "./Navigation";
import SupportChat from "./SupportChat";
export default function Dashboard() {
return (
<div className="flex h-[600px] border rounded-lg overflow-hidden">
<div className="w-64 border-r">
</div>
<div className="w-80 border-l">
<SupportChat />
</div>
</div>
);
}Everywhere software gets built

composerOpenModeToggleKeybinding is a function that needs to be called to get its value. Using it directly causes the keybinding display condition to always be truthy.The new way to build software.
It was night and day from one batch to another, adoption went from single digits to over 80%. It just spread like wildfire, all the best builders were using Cursor.

The most useful AI tool that I currently pay for, hands down, is Cursor. It's fast, autocompletes when and where you need it to, handles brackets properly, sensible keyboard shortcuts, bring-your-own-model... everything is well put together.

The best LLM applications have an autonomy slider: you control how much independence to give the AI. In Cursor, you can do Tab completion, Cmd+K for targeted edits, or you can let it rip with the full autonomy agentic version.

Cursor quickly grew from hundreds to thousands of extremely enthusiastic Stripe employees. We spend more on R&D and software creation than any other undertaking, and there's significant economic outcomes when making that process more efficient and productive.

It's official. I hate vibe coding. I love Cursor tab coding. It's wild.

It's definitely becoming more fun to be a programmer. It's less about digging through pages and more about what you want to happen. We are at the 1% of what's possible, and it's in interactive experiences like Cursor where models like GPT-5 shine brightest.

Stay on the frontier
Cursor is an applied team focused on building the future of coding.
Recent highlights
Introducing Cursor 2.0 and Composer
A new interface and our first coding model, both purpose-built for working with agents.
Improving Cursor Tab with online RL
Our new Tab model makes 21% fewer suggestions while having 28% higher accept rate.
1.5x faster MoE training with custom MXFP8 kernels
Achieving a 3.5x MoE layer speedup with a complete rebuild for Blackwell GPUs.
Try Cursor now.
Built to make you extraordinarily productive, Cursor is the best way to code with AI.

import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from torchvision import datasets
def get_dataloaders(batch_size=64):
transform = transforms.Compose([transforms.ToTensor()])
train = datasets.MNIST(root="data", train=True, download=True, transform=transform)
test = datasets.MNIST(root="data", train=False, download=True, transform=transform)
return DataLoader(train, batch_size=batch_size, shuffle=True), DataLoader(test, batch_size=batch_size)
class MLP(nn.Module):
def __init__(self, hidden=128):
super().__init__()
self.net = nn.Sequential(
nn.Flatten(),
nn.Linear(28*28, hidden),
nn.ReLU(),
nn.Linear(hidden, 10),
)
def forward(self, x):
return self.net(x)
def train_model(epochs=1, lr=1e-3, device=None):
device = device or ("cuda" if torch.cuda.is_available() else "cpu")
model = MLP().to(device)
opt = torch.optim.Adam(model.parameters(), lr=lr)
loss_fn = nn.CrossEntropyLoss()
train_loader, _ = get_dataloaders()
+ # Seed for reproducibility
+ torch.manual_seed(42)
+ if device == "cuda":
+ torch.cuda.manual_seed_all(42)
+ # AMP + Scheduler
+ scaler = torch.cuda.amp.GradScaler(enabled=(device=="cuda"))
+ scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(opt, T_max=epochs)
model.train()
for epoch in range(epochs):
total, correct = 0, 0
for x, y in tqdm(train_loader, desc=f"epoch {epoch+1}"):
x, y = x.to(device), y.to(device)
opt.zero_grad(set_to_none=True)
logits = model(x)
loss = loss_fn(logits, y)
loss.backward()
opt.step()
scaler.scale(loss).backward()
scaler.unscale_(opt)
+ torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
scaler.step(opt)
scaler.update()
+ preds = logits.argmax(dim=1)
+ total += y.size(0)
+ correct += (preds == y).sum().item()
+ acc = correct / max(1, total)
scheduler.step()
+ print(f"epoch {epoch+1}: acc={acc:.3f}")
return model`,import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from torchvision import datasets
def get_dataloaders(batch_size=64):
transform = transforms.Compose([transforms.ToTensor()])
train = datasets.MNIST(root="data", train=True, download=True, transform=transform)
test = datasets.MNIST(root="data", train=False, download=True, transform=transform)
return DataLoader(train, batch_size=batch_size, shuffle=True), DataLoader(test, batch_size=batch_size)
class MLP(nn.Module):
def __init__(self, hidden=128):
super().__init__()
self.net = nn.Sequential(
nn.Flatten(),
nn.Linear(28*28, hidden),
nn.ReLU(),
nn.Linear(hidden, 10),
)
def forward(self, x):
return self.net(x)
def train_model(epochs=1, lr=1e-3, device=None):
device = device or ("cuda" if torch.cuda.is_available() else "cpu")
model = MLP().to(device)
opt = torch.optim.Adam(model.parameters(), lr=lr)
loss_fn = nn.CrossEntropyLoss()
train_loader, _ = get_dataloaders()
+ # Seed for reproducibility
+ torch.manual_seed(42)
+ if device == "cuda":
+ torch.cuda.manual_seed_all(42)
+ # AMP + Scheduler
+ scaler = torch.cuda.amp.GradScaler(enabled=(device=="cuda"))
+ scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(opt, T_max=epochs)
model.train()
for epoch in range(epochs):
total, correct = 0, 0
for x, y in tqdm(train_loader, desc=f"epoch {epoch+1}"):
x, y = x.to(device), y.to(device)
opt.zero_grad(set_to_none=True)
logits = model(x)
loss = loss_fn(logits, y)
loss.backward()
opt.step()
scaler.scale(loss).backward()
scaler.unscale_(opt)
+ torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
scaler.step(opt)
scaler.update()
+ preds = logits.argmax(dim=1)
+ total += y.size(0)
+ correct += (preds == y).sum().item()
+ acc = correct / max(1, total)
scheduler.step()
+ print(f"epoch {epoch+1}: acc={acc:.3f}")
return model`,/ for commands · @ for files
Trusted every day by millions of professional developers.
Agent turns ideas into code

Magically accurate autocomplete


"use client";
import React, { useState } from "react";
import Navigation from "./Navigation";
import SupportChat from "./SupportChat";
export default function Dashboard() {
return (
<div className="flex h-[600px] border rounded-lg overflow-hidden">
<div className="w-64 border-r">
</div>
<div className="w-80 border-l">
<SupportChat />
</div>
</div>
);
}"use client";
import React, { useState } from "react";
import Navigation from "./Navigation";
import SupportChat from "./SupportChat";
export default function Dashboard() {
return (
<div className="flex h-[600px] border rounded-lg overflow-hidden">
<div className="w-64 border-r">
</div>
<div className="w-80 border-l">
<SupportChat />
</div>
</div>
);
}Everywhere software gets built

composerOpenModeToggleKeybinding is a function that needs to be called to get its value. Using it directly causes the keybinding display condition to always be truthy.The new way to build software.
It was night and day from one batch to another, adoption went from single digits to over 80%. It just spread like wildfire, all the best builders were using Cursor.

The most useful AI tool that I currently pay for, hands down, is Cursor. It's fast, autocompletes when and where you need it to, handles brackets properly, sensible keyboard shortcuts, bring-your-own-model... everything is well put together.

The best LLM applications have an autonomy slider: you control how much independence to give the AI. In Cursor, you can do Tab completion, Cmd+K for targeted edits, or you can let it rip with the full autonomy agentic version.

Cursor quickly grew from hundreds to thousands of extremely enthusiastic Stripe employees. We spend more on R&D and software creation than any other undertaking, and there's significant economic outcomes when making that process more efficient and productive.

It's official. I hate vibe coding. I love Cursor tab coding. It's wild.

It's definitely becoming more fun to be a programmer. It's less about digging through pages and more about what you want to happen. We are at the 1% of what's possible, and it's in interactive experiences like Cursor where models like GPT-5 shine brightest.

Stay on the frontier
Changelog
Layout Customization and Stability Improvements
Enterprise Insights, Billing Groups, Service Accounts, and Improved Security Controls
Debug Mode, Plan Mode Improvements, Multi-Agent Judging, and Pinned Chats
Improved Plan Mode, AI Code Review in Editor, and Instant Grep
Cursor is an applied team focused on building the future of coding.
Recent highlights
Introducing Cursor 2.0 and Composer
A new interface and our first coding model, both purpose-built for working with agents.
Improving Cursor Tab with online RL
Our new Tab model makes 21% fewer suggestions while having 28% higher accept rate.
1.5x faster MoE training with custom MXFP8 kernels
Achieving a 3.5x MoE layer speedup with a complete rebuild for Blackwell GPUs.




