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

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.
- Open Selective Download panel in SCM sidebar
- Click ghost folders to download
- 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