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

Sven

Viktor Rognås

|
120 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.csvExtensions": [".csv",".tsv"],

  // Aggressive line-count limit for CSV-like files. Blame is skipped above this regardless of largeFileLimit.
  "sven.blame.csvLineLimit": 500,

  "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,

  "sven.blame.prefetchHistory": 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.types": [],

  "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.serverOnlyColor": "charts.green"  // values: ["charts.green","charts.blue","charts.purple","charts.yellow","charts.orange","charts.red","editorInfo.foreground","editorWarning.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.csvExtensions": [".csv",".tsv"],

  // Aggressive file-size limit (MB) for CSV-like diffs. Above this, prompts before fetching BASE via 'svn cat'.
  "sven.diff.csvSizeLimitMB": 1,

  "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

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

Note: This extension is in active development. Stable for daily use, but expect occasional breaking changes — please report issues.

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

Install: search Sven (publisher vrognas) in the Extensions view — available on the VS Code Marketplace and Open VSX (Positron installs from Open VSX).

Open existing repo: File → Open Folder → select folder with .svn

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

Guided tour: Ctrl+Shift+P → Welcome: Open Walkthrough → Getting Started with SVN (4 more walkthroughs cover the daily workflow, history, large repos, and locking)

Daily workflow:

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

In Positron, commit via Ctrl+Shift+P → SVN: Commit Staged (the commit-box Ctrl+Enter shortcut is VS Code-only — see Positron notes).

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: Revision and author details

Toggle: Ctrl+Shift+P → SVN Blame: Toggle Annotations (Blame)

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, follows the active editor automatically
  • 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

Status bar shows $(unlock) N when N files need locking.

Setup: right-click file → SVN Properties → Toggle Require Lock (needs-lock)

Commands: Lock, Unlock, Steal Lock, 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, Folder Only

How To

Task How
Compare with server Right-click → Open Changes with HEAD (Server Latest)
Resolve conflicts Fix markers in file → right-click file in Source Control → Resolve conflicts for selected
Switch branches Ctrl+Shift+P → SVN: Switch Branch
Create patch Right-click files → Show Changes (Patch) for Selected
Set line endings Right-click → SVN Properties → Set Line Ending Style (EOL)
Ignore files Right-click → Add to Ignore List (svn:ignore)
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.blame.csvLineLimit 500 Skip blame for CSV-like files over this line count
sven.commit.types [] Custom commit types for guided flow
sven.commit.autoUpdate both Run update before/after commit (both/before/after/none)
sven.diff.tool null External diff tool path
sven.diff.csvSizeLimitMB 1 Prompt before diffing CSV-like files over this size
sven.remoteChanges.checkFrequency 300 Remote check interval (seconds)
sven.sourceControl.hideUnversioned false Hide unversioned files
sven.log.length 50 Commits shown in history

All 80 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

Still stuck? Open an issue →

More Info

Positron IDE: Fully supported — SCM views, blame, history, and the Connections pane (repositories appear with branch/revision/quick actions) work out of the box. Known platform limitations are documented in Positron notes; integration details in Positron guide.

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


Forked from JohnstonCode/svn-scm

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft