Never break imports again — Automatically update all import statements when you rename or move files and folders.
🌐 Official Website | Features • Installation • Quick Start • Languages • Configuration • Documentation
If your project has 1,000+ files, add these settings to .vscode/settings.json:
{
"linker.performance.maxFilesToScan": 8000,
"linker.performance.maxConcurrentFiles": 10,
"linker.exclude": ["**/node_modules/**", "**/.git/**", "**/dist/**", "**/build/**"]
}Then reload VS Code.
- Automatically detect and update imports when files or folders are renamed
- Works across your entire workspace instantly
- Preserves your code formatting style (quotes, semicolons, indentation)
- See all import changes before applying them
- Side-by-side or inline diff view with syntax highlighting
- One-click apply or cancel with full control
- Full history tracking for all import changes
- Keyboard shortcuts:
Ctrl+Alt+Z(undo) /Ctrl+Alt+Y(redo) - History preserved across VS Code sessions
- Configurable history limit (default: 50 entries)
- JavaScript/TypeScript — ES6 imports, CommonJS require, dynamic imports
- Python —
importandfrom...importstatements with dot notation - Go — Single and block import statements
- CSS/SCSS/LESS —
@importand@import url()statements
- TypeScript/JavaScript path aliases —
@/,~/, custom tsconfig.json paths - Python path aliases — Auto-detects src/, app/, lib/ structures, pyproject.toml support
- Go module paths — go.mod module paths and replace directives
- CSS build tool aliases — webpack, vite, parcel
@and~aliases - Relative imports (
./,../) - Absolute imports
- Nested folder structures
🎯 USP: Only extension with full alias support across ALL 4 languages!
- Production-ready for large codebases — Handles 50,000+ files
- Smart scanning with configurable limits (default: 10,000 files)
- File size filtering — Automatically skips oversized files
- Operation timeouts — Prevents hanging on massive projects
- Dynamic concurrency — Adjusts based on workspace size
- Workspace analysis — Auto-detects and optimizes for large projects
- File caching to avoid redundant reads
- Batch processing for optimal performance
💡 Having issues with large projects? See configuration settings below
- Automatic
git mvfor tracked files - Optional auto-staging of modified files
- Works seamlessly with your Git workflow
- Choose your settings scope — Workspace or Global settings
- First-time setup prompt — Decide if you want
.vscodefolder created - Change anytime — Switch between workspace and global settings via command palette
- No forced folders — Defaults to global settings if you dismiss the prompt
- Open Visual Studio Code
- Press
Ctrl+Shift+X(Windows/Linux) orCmd+Shift+X(Mac) - Search for "Linker" or "Import Linker"
- Click Install
code --install-extension linkerdev.import-linker- Download the
.vsixfile from Releases - Open VS Code
- Go to Extensions (
Ctrl+Shift+X) - Click
...menu →Install from VSIX... - Select the downloaded file
-
Rename a file or folder in VS Code Explorer
- Right-click → Rename or press
F2
- Right-click → Rename or press
-
Review the preview showing which imports will be updated
- Visual diff shows before/after comparison
- See exactly which files will be modified
-
Click "Apply" to update all imports
- All imports updated instantly across your workspace
- Or click "Cancel" to abort
That's it! ✅ No configuration needed to get started.
Try this simple example:
-
Create two files:
// utils.ts export const hello = () => "Hello!"; // app.ts import { hello } from './utils';
-
Rename
utils.ts→helpers.ts -
Watch Linker automatically update
app.ts:import { hello } from './helpers'; // ✅ Updated!
// ES6 imports
import { Component } from './Component';
import * as utils from '@/utils'; // ✅ Path aliases supported!
// CommonJS
const helper = require('../helper');
// Dynamic imports
const module = await import('./module');Alias Support: Reads tsconfig.json for path mappings (@/*, ~/*, etc.)
# Absolute imports
from utils.helpers import format_date
import utils.helpers
# Relative imports
from .helpers import format_date
from ..utils import helpers
# Path aliases (NEW!)
from @.models.user import User # ✅ Alias support!Alias Support: Auto-detects src/, app/, lib/ directories, or reads pyproject.toml
// Single imports
import "project/utils"
// Block imports
import (
"fmt"
"github.com/user/myproject/utils" // ✅ Module paths!
"github.com/user/myproject/helpers"
)Alias Support: Reads go.mod for module paths and replace directives
/* CSS imports */
@import "partials/variables.css";
@import url("partials/mixins.css");
/* SCSS imports with aliases (NEW!) */
@import '@styles/base/reset'; /* ✅ Webpack/Vite aliases! */
@import '@assets/fonts/custom';Alias Support: Reads webpack.config.js and vite.config.js for @ and ~ aliases
Linker works out-of-the-box with smart defaults. Customize via VS Code Settings (Ctrl+,).
{
// File scanning
"linker.fileExtensions": ["js", "ts", "py", "go", "css"],
"linker.exclude": ["**/node_modules/**", "**/.git/**"],
// Preview options
"linker.preview.diffView": true,
"linker.preview.layout": "side-by-side",
// Formatting preferences
"linker.formatting.quoteStyle": "auto",
"linker.formatting.semicolons": "auto",
// History management
"linker.history.enabled": true,
"linker.history.maxEntries": 50,
// Language toggles
"linker.multiLanguage.python": true,
"linker.multiLanguage.python.aliasSupport": true, // NEW!
"linker.multiLanguage.go": true,
"linker.multiLanguage.go.aliasSupport": true, // NEW!
"linker.multiLanguage.css": true,
"linker.multiLanguage.css.aliasSupport": true, // NEW!
// Git integration
"linker.autoStageChanges": false
}| Setting | Description | Default |
|---|---|---|
fileExtensions |
File types to scan | All supported |
exclude |
Patterns to ignore | node_modules, .git |
preview.diffView |
Show visual preview | true |
preview.layout |
Diff layout style | side-by-side |
formatting.quoteStyle |
Quote preference | auto |
formatting.semicolons |
Semicolon usage | auto |
history.enabled |
Enable undo/redo | true |
history.maxEntries |
History limit | 50 |
autoStageChanges |
Auto-stage in Git | false |
See USER_GUIDE.md for detailed configuration options.
NEW in v1.3.0: Linker now supports path aliases across ALL 4 languages!
Configuration: tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
"~/*": ["src/*"]
}
}
}Example:
import { Button } from '@/components/Button'; // Before rename
import { ButtonNew } from '@/components/ButtonNew'; // After rename ✅Configuration: pyproject.toml (optional)
[tool.linker.paths]
app = "src"
models = "src/models"
utils = "src/utils"Auto-Detection: Linker automatically detects src/, app/, lib/, utils/ directories
Example:
from @.models.user import User # Before rename
from @.models.account import User # After rename ✅Configuration: go.mod
module github.com/user/myproject
replace github.com/user/myproject/old => ./newExample:
import "github.com/user/myproject/models" // Before rename
import "github.com/user/myproject/entities" // After rename ✅Configuration: webpack.config.js or vite.config.js
// webpack.config.js
module.exports = {
resolve: {
alias: {
'@styles': path.resolve(__dirname, 'src/styles'),
'@assets': path.resolve(__dirname, 'src/assets')
}
}
};Example:
@import '@styles/variables'; // Before rename
@import '@styles/theme'; // After rename ✅Scenario: Rename utils.ts → helpers.ts
// Before
// src/utils.ts
export const formatDate = () => { /* ... */ };
// src/app.ts
import { formatDate } from './utils';After (Linker auto-updates):
// src/app.ts
import { formatDate } from './helpers'; // ✅ Updated!Scenario: Rename services/ → api/
// Before
import { fetchUsers } from '../services/userService';
// After (Linker auto-updates)
import { fetchUsers } from '../api/userService'; // ✅ Updated!Scenario: Rename helpers.py → utilities.py
# Before
from utils.helpers import format_date
# After (Linker auto-updates)
from utils.utilities import format_date # ✅ Updated!Scenario: Rename variables.css → vars.css
/* Before */
@import "partials/variables.css";
/* After (Linker auto-updates) */
@import "partials/vars.css"; /* ✅ Updated! */| Action | Windows/Linux | Mac |
|---|---|---|
| Undo last import changes | Ctrl+Alt+Z |
Cmd+Alt+Z |
| Redo import changes | Ctrl+Alt+Y |
Cmd+Alt+Y |
| Show import history | Ctrl+Shift+P → "Linker: Show History" |
Same |
We welcome contributions! Please see our Contributing Guide for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Complete User Guide
If Linker saves you time, please:
- ⭐ Star the GitHub repository
- ⭐ Rate on VS Code Marketplace
- 💬 Share with your team
Current Version: 1.1.7
Status: Production Ready ✅
Languages: 4 (JavaScript/TypeScript, Python, Go, CSS)
Active Development: Yes
Last Updated: November 2025
Imports not updating after rename
Possible causes:
- File extension not included in
linker.fileExtensions - File excluded by
linker.excludepatterns - Unsupported import syntax
Solutions:
- Check your configuration settings
- Verify file extension is in the list
- Reload VS Code window:
Ctrl+Shift+P→ "Reload Window"
Performance issues with large projects
Solutions:
- Increase debounce delay:
{ "linker.performance.debounceDelay": 1000 } - Reduce batch size:
{ "linker.performance.batchSize": 25 } - Add more exclusion patterns
- Disable progress reporting for very large projects
Git auto-stage not working
Checklist:
- ✅ Ensure
linker.git.enabledistrue - ✅ Ensure
linker.git.autoStageistrue - ✅ Verify file is tracked by Git (not untracked/new)
- ✅ Check Git is initialized in your project
TypeScript aliases not resolving
Requirements:
- ✅
tsconfig.jsonexists in project root - ✅
baseUrlis properly configured - ✅
pathsare properly defined - ✅ Alias pattern matches your tsconfig
Try: Reload VS Code window after updating tsconfig.json
❌ Python imports not working / Pylance conflict
Problem: Pylance and Linker both try to update Python imports, causing conflicts.
Solution: Linker automatically disables Pylance's auto-import features. If issues persist:
// .vscode/settings.json
{
"python.analysis.autoImportCompletions": false,
"python.analysis.autoFormatStrings": false
}Full documentation: See PYLANCE-CONFLICT.md
We welcome and appreciate contributions from the community! Whether you're fixing bugs, adding features, or improving documentation, your help makes Linker better for everyone.
- 📖 Read the Contributing Guide — Check out CONTRIBUTING.md for detailed guidelines
- 🐛 Report Bugs — Open an issue with detailed information
- 💡 Request Features — Share your ideas and use cases
- 💻 Submit Pull Requests — Fix bugs, add features, or improve performance
- 📝 Improve Documentation — Help others understand and use Linker
# 1. Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/Linker.git
cd Linker
# 2. Install dependencies
npm install
# 3. Build the extension
npm run build
# 4. Run in development mode
# Press F5 in VS Code to open Extension Development Host
# 5. Make your changes and test thoroughly
# 6. Submit a pull request- 🐛 Bug Fixes — Help squash bugs from our issue tracker
- ✨ New Features — Add support for new languages or enhance existing features
- 🚀 Performance Improvements — Make Linker faster and more efficient
- 📚 Documentation — Improve guides, add examples, fix typos
- 🧪 Tests — Add test cases to improve code quality
- 🌍 Translations — Help make Linker accessible worldwide
Please read CONTRIBUTING.md before starting your contribution!
This project is licensed under the MIT License - see the LICENSE file for details.
If you find Linker useful, please consider:
- ⭐ Star this repository on GitHub
- 📢 Share it with your team and friends
- 💬 Leave a review on the VS Code Marketplace
- 🐛 Report bugs to help improve the extension
- 💡 Request features you'd like to see
- 🌐 Official Website: linker-steel-xi.vercel.app
- Marketplace: VS Code Marketplace
- Repository: GitHub
- Issues: Report a Bug
- Changelog: View Releases
- 👤 Developer: Soumen Das
- 💼 LinkedIn: Connect on LinkedIn
- 🌐 Portfolio: soumendas.me
Made with ❤️ for the developer community
Developed by Soumen Das | LinkedIn
Version 1.1.7 | 🌐 Official Site | ⬆ Back to Top
