Skip to content
| Marketplace
Sign in
Visual Studio Code>SCM Providers>SvenNew to Visual Studio Code? Get it now.
Sven

Sven

Viktor Rognås

|
1 install
| (0) | Free
Integrated Subversion source control with Positron IDE support. Privacy-focused: zero telemetry, local-only operations.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Sven - Subversion

{
  "sven.auth.commandTimeout": 60,

  "sven.auth.credentialMode": "auto"  // values: ["auto","systemKeyring","extensionStorage","prompt"],

  "sven.autorefresh": true,

  "sven.blame.autoBlame": true,

  "sven.blame.dateFormat": "relative"  // values: ["relative","absolute"],

  "sven.blame.enableLogs": true,

  "sven.blame.enabled": true,

  // Date format for gutter annotations
  "sven.blame.gutter.dateFormat": "relative"  // values: ["relative","absolute"],

  "sven.blame.gutter.enabled": true,

  // Show colored revision icons in gutter
  "sven.blame.gutter.showIcons": true,

  // Show author/revision/date text in gutter (verbose)
  "sven.blame.gutter.showText": null,

  "sven.blame.gutter.template": "${author} (${revision}) ${date}",

  // Only show inline annotation on current line (cursor position)
  "sven.blame.inline.currentLineOnly": true,

  "sven.blame.inline.enabled": true,

  // Opacity of inline annotations (0.0 = invisible, 1.0 = solid)
  "sven.blame.inline.opacity": 0.5,

  "sven.blame.inline.showMessage": null,

  "sven.blame.inline.template": "  ${author}, ${date} (r${revision}) • ${message}",

  // Line count threshold for large file warning (0 to disable)
  "sven.blame.largeFileLimit": 3000,

  // Show warning before blaming files exceeding line limit
  "sven.blame.largeFileWarning": true,

  // Highlight uncommitted changes in blame view
  "sven.blame.showWorkingCopyChanges": true,

  // Show blame info for current line in status bar
  "sven.blame.statusBar.enabled": true,

  "sven.blame.statusBar.template": "$(person) ${author}, $(clock) ${date} - ${message}",

  "sven.commit.autoUpdate": "both"  // values: ["both","before","after","none"],

  // Select all staged files by default when committing
  "sven.commit.changes.selectedAll": true,

  // Warn before committing with empty message
  "sven.commit.checkEmptyMessage": true,

  "sven.commit.conventionalCommits": true,

  "sven.commit.useQuickPick": true,

  "sven.conflicts.autoResolve": null,

  "sven.debug.disableSanitization": null,

  "sven.decorator.baseColor": "charts.blue"  // values: ["charts.blue","charts.purple","charts.green","charts.yellow","charts.orange","charts.red","editorInfo.foreground","editorWarning.foreground"],

  "sven.decorator.serverColor": "charts.orange"  // values: ["charts.orange","charts.yellow","charts.red","charts.purple","charts.blue","charts.green","editorWarning.foreground","editorInfo.foreground"],

  "sven.default.encoding": null,

  // Default folder for new checkouts
  "sven.defaultCheckoutDirectory": null,

  // Action when tracked files are deleted in Explorer
  "sven.delete.actionForDeletedFiles": "remove"  // values: ["none","prompt","remove"],

  "sven.delete.ignoredRulesForDeletedFiles": [],

  // Automatically detect and show svn:externals
  "sven.detectExternals": true,

  // Scan ignored folders for SVN repositories
  "sven.detectIgnored": true,

  "sven.diff.tool": null,

  "sven.diff.withHead": true,

  // Experimental: Auto-detect output encoding
  "sven.experimental.detect_encoding": null,

  // Encoding detection priority order
  "sven.experimental.encoding_priority": [],

  // Suppress warning when SVN executable not found
  "sven.ignoreMissingSvnWarning": null,

  "sven.ignoreRepositories": null,

  // Suppress warning when working copy needs upgrade
  "sven.ignoreWorkingCopyIsTooOld": null,

  "sven.layout.branchesRegex": "branches/([^/]+)(/.*)?",

  // Regex capture group for branch name
  "sven.layout.branchesRegexName": 1,

  "sven.layout.showFullName": true,

  // Regex capture group for tag name
  "sven.layout.tagRegexName": 1,

  "sven.layout.tagsRegex": "tags/([^/]+)(/.*)?",

  "sven.layout.trunkRegex": "(trunk)(/.*)?",

  // Regex capture group for trunk name
  "sven.layout.trunkRegexName": 1,

  // Show colored dots for different authors in history view
  "sven.log.authorColors": true,

  "sven.log.length": 50,

  // Maximum folder depth to scan for SVN repositories
  "sven.multipleFolders.depth": 4,

  "sven.multipleFolders.enabled": null,

  // Folders to skip when scanning for SVN repositories
  "sven.multipleFolders.ignore": ["**/.git","**/.hg","**/vendor","**/node_modules"],

  // Auth mode logging frequency in output panel
  "sven.output.authLogging": "once"  // values: ["once","always","never"],

  "sven.path": null,

  "sven.performance.maxXmlTags": 500000,

  "sven.previousCommitsUser": null,

  // Include remote changes check when running Refresh command
  "sven.refresh.remoteChanges": null,

  "sven.remoteChanges.checkFrequency": 300,

  // Show SVN output panel on extension start
  "sven.showOutput": null,

  // Show notification after update completes
  "sven.showUpdateMessage": true,

  "sven.sourceControl.changesLeftClick": "open diff"  // values: ["open","open diff"],

  // Show externals in main repository if from the same server
  "sven.sourceControl.combineExternalIfSameServer": null,

  // Include unversioned files in the badge count
  "sven.sourceControl.countUnversioned": true,

  // Hide unversioned files from Source Control view
  "sven.sourceControl.hideUnversioned": null,

  "sven.sourceControl.ignore": [],

  // Changelists to exclude from commit operations
  "sven.sourceControl.ignoreOnCommit": ["ignore-on-commit"],

  // Changelists to exclude from badge count
  "sven.sourceControl.ignoreOnStatusCount": ["ignore-on-commit"],

  "sven.sparse.confirmExclude": true,

  // Timeout for download operations (minutes). Increase for large folders.
  "sven.sparse.downloadTimeoutMinutes": 10,

  "sven.sparse.largeFileWarningMb": 10,

  // Timeout for folder size estimation (seconds)
  "sven.sparse.preScanTimeoutSeconds": 30,

  "sven.update.ignoreExternals": true
}

Sven - Subversion for VS Code & Positron

Version License

Git-like SVN experience with staging, inline blame, file locking, and sparse checkout. Zero telemetry.

Requires: SVN installed. Windows users: enable Command Line Tools when installing TortoiseSVN.

Why Sven?

Pain Point Sven Solution
SVN has no staging ✅ Git-like stage → commit workflow
"Who wrote this line?" ✅ Inline blame annotations (GitLens-style)
Binary file conflicts ✅ File locking with visual indicators
Giant repos are slow ✅ Sparse checkout - download only what you need
Clunky diff tools ✅ Beyond Compare, Meld, any external tool

Quick Start

Open Existing Repository

  1. File → Open Folder → select folder with .svn
  2. SVN panel appears in Source Control sidebar

Checkout New Repository

  1. Ctrl+Shift+P → SVN: Checkout
  2. Enter repository URL
  3. Choose local folder

Daily Workflow

1. Make changes        → Files appear in "Changes"
2. Click + to stage    → Files move to "Staged"
3. Ctrl+Enter          → Commit staged files

Key Features

Staging (Git-like)

Stage files before commit. No more accidental commits.

Action How
Stage + button or right-click
Unstage - button
Commit Ctrl+Enter

Blame Annotations

See who changed each line, when, and why.

  • Gutter: Colored revision indicators
  • Inline: Author + date at line end
  • Hover: Full commit message

Toggle: Ctrl+Shift+P → SVN: Toggle Annotations

File Locking

Prevent conflicts on binary files (CSVs, images, models).

Command Use Case
Lock Claim exclusive edit rights
Unlock Release when done
Break Lock Admin override

Visual: 🔒 = locked, 🔓 = needs lock (read-only)

Sparse Checkout

Download only specific folders from large repos.

  1. Open Selective Download panel in SCM sidebar
  2. Click ☁️ ghost folders to download
  3. Choose depth: Full, Shallow, Files Only, Empty

Repository History

Browse commits with file changes, diffs, and filtering.

  • B badge = your BASE revision
  • ↻ Refresh / ↓ Fetch / ↓↓ Pull
  • Filter by author, date, text

Smart Operations

Explorer actions auto-convert to SVN commands:

  • Rename → svn move (preserves history)
  • Delete → svn delete (proper removal)

Essential Settings

Open Settings (Ctrl+,) and search sven.

Setting Default What it does
sven.blame.autoBlame true Show blame when opening files
sven.commit.conventionalCommits false Conventional commit format
sven.commit.autoUpdate none Run update before/after commit
sven.diff.tool null External diff tool path
sven.remoteChanges.checkFrequency 300 Remote check interval (seconds)
sven.sourceControl.hideUnversioned false Hide unversioned files
sven.log.length 50 Commits shown in history

All 70+ settings →

Common Tasks

Compare with server

Right-click file → Open Changes with HEAD

Resolve conflicts

  1. Fix conflict markers in file
  2. Right-click → Resolve

Switch branches

Ctrl+Shift+P → SVN: Switch Branch

Create patch

Right-click files → Show Changes (Patch)

Set line endings

Right-click file → Set Line Ending Style (EOL)

Troubleshooting

"SVN not found"

  • Set sven.path to full SVN path (e.g., /usr/bin/svn)

Password prompts loop

  • Try sven.auth.credentialMode: extensionStorage
  • Then restart extension host

Slow on large repos

  • Enable sparse checkout
  • Reduce sven.log.length

Full troubleshooting →

Positron IDE

Works automatically in Positron:

  • Connections pane integration
  • Optimized for data science workflows
  • All operations local (zero telemetry)

Links

  • Full Settings Reference
  • Security & Authentication
  • Privacy Policy
  • Contributing
  • Changelog
  • Report Issue

Credit: Forked from JohnstonCode/svn-scm

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft