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

Sven

Viktor Rognås

|
8 installs
| (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

GitHub Workflow Status Visual Studio Marketplace Downloads GitHub License

Note: This extension is currently in active development. While stable for daily use, expect occasional breaking changes. Please report any issues to help improve the extension.

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 repo: File → Open Folder → select folder with .svn

Checkout new repo: Ctrl+Shift+P → SVN: Checkout → enter URL → choose folder

Daily workflow:

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

Features

Staging

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

Repository History

Browse commits with file changes and diffs.

  • Repo History view: Full commit log with filtering (author, date, text)
  • File History view: Per-file revisions (right-click file → Show Log)
  • B badge: Your BASE revision
  • Explorer rename/delete auto-converts to svn move/svn delete (preserves history)

File Locking

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

Badge Meaning
K Locked by you
O Locked by someone else
L Needs lock (read-only)

Setup: right-click file → Set Needs-Lock Property

Commands: Lock, Unlock, Manage Locks, Break Lock

Full locking guide →

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

How To

Task How
Compare with server Right-click → Open Changes with HEAD
Resolve conflicts Fix markers in file → right-click → Resolve
Switch branches Ctrl+Shift+P → SVN: Switch Branch
Create patch Right-click files → Show Changes (Patch)
Set line endings Right-click → Set Line Ending Style (EOL)
Ignore files Right-click → Add to Ignore List
External diff Set sven.diff.tool to tool path
Merge branches Ctrl+Shift+P → SVN: Merge
Cleanup Ctrl+Shift+P → SVN: Cleanup

Configuration

Settings

Open Settings (Ctrl+,) and search sven.

Setting Default What it does
sven.blame.autoBlame true Show blame when opening files
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 →

Troubleshooting

"SVN not found" → Set sven.path to full SVN path (e.g., /usr/bin/svn)

Password prompts loop → Set sven.auth.credentialMode to extensionStorage, restart

Slow on large repos → Enable sparse checkout, reduce sven.log.length

Full troubleshooting →

More Info

Positron IDE: Works automatically with Connections pane integration.

Links: Settings · Security · File Locking · Privacy · Contributing · Changelog · Issues


Forked from JohnstonCode/svn-scm

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