"Claude Code today. Cursor AI tomorrow. Different shortcuts, different muscle memory."
RangeLink ends it. One keybinding. Any AI, any tool. Character-level precision.recipes/baking/chickenpie.ts#L3C14-L314C16
Every AI coding assistant has its own way to share code β different shortcuts, different formats, different muscle memory. If you use multiple AI tools, you're constantly context-switching.
RangeLink unifies it:
- One keybinding β
Cmd+R Cmd+Lworks with Claude Code, Cursor AI, Copilot, terminal tools, text editors. Learn once, use everywhere. - Better precision β Character-level ranges, not just lines. Share exactly what matters.
- Universal format β GitHub-style links work in PRs, Slack, docs. Not proprietary.
- AI-agnostic β Your workflow doesn't change when you switch AI assistants.
VS Code: π¦ Install from VS Code Marketplace
Cursor: π¦ Install from Open VSX Registry
Or search for "RangeLink" in your editor's Extensions panel (Cmd+Shift+X / Ctrl+Shift+X)
- Bind a destination (optional but recommended): Command Palette β "Bind RangeLink to..." (Claude Code, Cursor AI, Copilot Chat, Terminal, or Text Editor)
- Select some code in your editor
- Generate link: Command Palette β "Copy Range Link" (or
Cmd+R Cmd+L/Ctrl+R Ctrl+Lif no keybinding conflicts) - Done! Link auto-pastes to your bound destination, or copies to clipboard if no destination bound
Example output:
recipes/baking/chickenpie.ts#L3C14-L314C16
Tip: If Cmd+R Cmd+L doesn't work, another extension may have claimed that keybinding. Use Command Palette as the reliable fallback.
| Feature | Description |
|---|---|
| Paste Destinations | Auto-send links to Claude Code, Cursor AI, Copilot Chat, Terminal, or Text Editor |
| Link Navigation | Cmd+Click any RangeLink in terminal or editor to jump directly to code |
| Character Precision | #L3C14-L314C16 β not just lines, exact character ranges |
| Portable Links (BYOD) | Links work regardless of recipient's delimiter configuration |
| R-Keybinding Family | R-L (link), R-C (clipboard), R-V (paste text), R-J (jump to destination) |
- π€ AI Assistants β Claude Code, Cursor AI, GitHub Copilot, terminal claude-code β with exact context
- π¬ Code Reviews β "The bug is in
api/routes.ts#L215C8-L223C45" (click to view) - π₯ Team Collaboration β Universal format everyone can use and navigate
- π Documentation β Precise references in docs, Slack, PRs, anywhere
- Extension README β Full feature guide, commands, configuration
- Link Formats β Complete notation reference
- BYOD Guide β Portable links specification
- Development Guide β Setup, building, testing
- Contributing Guide β How to contribute
- Architecture β Design principles and patterns
- Roadmap β What's coming next
RangeLink is organized as a pnpm workspace with a platform-agnostic core library and editor-specific extensions. The core has zero dependencies and targets 100% test coverage.
π See packages/ for details β
Even though I use Cursor daily, most of my AI work happens with claude-code running in a terminal inside Cursor. The constant copy-pasting between terminal and editor was exhausting.
One day, frustrated after the hundredth copy-paste, I tried something: I sent claude-code a link like recipes/baking/chickenpie.ts#L3C14-L314C16 pointing to a specific code snippet.
It just worked. No explanation needed. Claude understood immediately.
That was the lightbulb moment: precise code references should be universal. Not just for AI assistants, but for code reviews, documentation, team collaboration β anywhere developers share code.
I built the VS Code extension first, then extracted a platform-agnostic core library. The goal: make this work everywhere, for everyone.
Today, with paste destinations, RangeLink sends links directly where you need them β Claude Code, Cursor AI, GitHub Copilot Chat, terminals, or text editors. No more copy-paste friction. It helps developers share code with precision across any AI assistant, VSCode, Cursor, GitHub, Slack, and more. One format, zero friction.
The best part? Your teammates don't even need RangeLink installed to understand your links. The notation is GitHub-inspired β developers already know it.
π°οΈ The Original POC (Memorabilia)
Before RangeLink became what it is today, it started as a rough-and-ready VS Code extension with just two files. Here's where it all began:
package.json:
{
"name": "copy-reference",
"displayName": "Copy GitHub Reference",
"description": "Copy GitHub-style file references with line and column numbers",
"version": "0.1.0",
"publisher": "local",
"engines": {
"vscode": "^1.74.0"
},
"categories": ["Other"],
"main": "./extension.js",
"activationEvents": [],
"contributes": {
"commands": [
{
"command": "copyReference.copy",
"title": "Copy GitHub-style Reference",
"category": "Copy"
}
],
"keybindings": [
{
"command": "copyReference.copy",
"key": "cmd+shift+l",
"mac": "cmd+shift+l",
"win": "ctrl+shift+l",
"linux": "ctrl+shift+l",
"when": "editorTextFocus"
}
],
"menus": {
"editor/context": [
{
"when": "editorTextFocus",
"command": "copyReference.copy",
"group": "9_cutcopypaste@4"
}
]
}
}
}extension.js:
const vscode = require('vscode');
function activate(context) {
let disposable = vscode.commands.registerCommand('copyReference.copy', () => {
const editor = vscode.window.activeTextEditor;
if (!editor) {
vscode.window.showErrorMessage('No active editor');
return;
}
const selection = editor.selection;
const document = editor.document;
const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri);
// Get relative path from workspace root
const relativePath = workspaceFolder
? document.uri.path.substring(workspaceFolder.uri.path.length + 1)
: vscode.workspace.asRelativeUri(document.uri).path;
const startLine = selection.start.line + 1;
const startChar = selection.start.character + 1;
const endLine = selection.end.line + 1;
const endChar = selection.end.character + 1;
// Format: path/to/file.rb#L1C1-L2C10
let reference;
if (selection.isEmpty) {
// Just cursor position, no selection
reference = `${relativePath}:${startLine}`;
} else if (startLine === endLine && startChar === 1 && endChar > startChar) {
// Full line selection - use simple format
reference = `${relativePath}:${startLine}`;
} else if (startLine === endLine) {
// Single line selection with specific columns
reference = `${relativePath}#L${startLine}C${startChar}-L${endLine}C${endChar}`;
} else {
// Multi-line selection
reference = `${relativePath}#L${startLine}C${startChar}-L${endLine}C${endChar}`;
}
vscode.env.clipboard.writeText(reference);
// Show a subtle notification
vscode.window.setStatusBarMessage(`π Copied: ${reference}`, 3000);
// Optional: Also show as information message (can be disabled if too intrusive)
// vscode.window.showInformationMessage(`Copied: ${reference}`);
});
context.subscriptions.push(disposable);
}
function deactivate() {}
module.exports = {
activate,
deactivate,
};From this humble beginning, RangeLink evolved into a comprehensive monorepo with a platform-agnostic core library, comprehensive testing, structured error handling, portable BYOD links, and support for advanced features like rectangular selections.
Ever notice the chicken in our logo? That's not just any chicken β it's a free-range chicken. Because your code should roam free across editors, tools, and teams. No fences, no boundaries. π
The chains? Those represent links β connections between developers, tools, and ideas. Collaboration without constraints.
And here's the nerdy part: look closely at the numbers. You'll see 3.1416 instead of just 3.14. Because when you're sharing code references, precision matters. RangeLink shares exact ranges β period.
Tip
Ο Dad Joke: Pi is irrational, and so are developers who don't use precise code references. At least Pi has an excuse.
- π¦ VS Code Marketplace
- π¦ Open VSX Registry
- π Core Library
- π Report Issues
- π Full Documentation
MIT β see LICENSE file for details.
Made with β€οΈ for developers who love precision