Folder Maker
Create folders and files from templates with smart variable substitution
🌍 Languages: English | 한국어

✨ Features
- 🎯 Template-based scaffolding - Right-click any folder to create from templates
- 🔄 Smart variable substitution - Automatic case transformations (camelCase, kebabCase, pascalCase)
- ⚙️ Workspace & global templates - Project-specific or shared templates
- 🔒 Security-first - Path traversal protection, injection prevention
- 🌍 Internationalized - English and Korean support
🎥 Demo

Right-click a folder → Select template → Enter name → Files created instantly
🚀 Quick Start
Installation
- Download from VS Code Marketplace
- Or install VSIX:
code --install-extension folder-maker-0.0.1.vsix
Usage
Method 1: Context Menu
- Right-click any folder in Explorer
- Select "Create from folder template"
- Choose a template
- Enter folder name
- Done! ✅
Method 2: Keyboard Shortcut
- Windows/Linux:
Ctrl+Alt+F
- macOS:
Cmd+Alt+F
Method 3: Command Palette
- Press
Ctrl+Shift+P (or Cmd+Shift+P)
- Type "Create from folder template"
📝 Template Configuration
Workspace Templates (Recommended)
Create .vscode/folder-maker.json in your project:
{
"templates": [
{
"name": "React Component",
"description": "TypeScript React component with test",
"files": [
{
"path": "index.tsx",
"content": "export { ${folderName|pascalCase} } from './${folderName|pascalCase}'\n"
},
{
"path": "${folderName|pascalCase}.tsx",
"content": "export const ${folderName|pascalCase} = () => {\n return <div>${folderName}</div>\n}\n"
},
{
"path": "__tests__/${folderName|pascalCase}.test.tsx",
"content": "import { ${folderName|pascalCase} } from '../${folderName|pascalCase}'\n\ndescribe('${folderName|pascalCase}', () => {\n it('renders', () => {\n // test here\n })\n})\n"
}
]
}
]
}
Global Templates
Add to VS Code settings (settings.json):
{
"folderMaker.templates": [
{
"name": "Node.js Service",
"description": "TypeScript service with test",
"files": [
{
"path": "${folderName|camelCase}.service.ts",
"content": "export class ${folderName|pascalCase}Service {\n // TODO: Implement\n}\n"
},
{
"path": "${folderName|camelCase}.service.test.ts",
"content": "import { ${folderName|pascalCase}Service } from './${folderName|camelCase}.service'\n\ndescribe('${folderName|pascalCase}Service', () => {\n it('should be defined', () => {\n expect(new ${folderName|pascalCase}Service()).toBeDefined()\n })\n})\n"
}
]
}
]
}
🔤 Variable Substitution
| Variable |
Input: UserProfile |
Output |
${folderName} |
- |
UserProfile |
${folderName\|camelCase} |
- |
userProfile |
${folderName\|kebabCase} |
- |
user-profile |
${folderName\|pascalCase} |
- |
UserProfile |
Examples
// Template
export const ${folderName|camelCase} = () => {}
// Input: "MyComponent"
// Result:
export const myComponent = () => {}
🛡️ Security
- Path traversal protection - Blocks
../../../etc/passwd attacks
- Injection prevention - Sanitizes
${malicious} code
- Resource limits - Max 100 files, 10MB per file, 100MB total
📖 Documentation
🔧 Development
Setup
npm install
Run Extension
Press F5 in VS Code to launch Extension Development Host
Testing
npm run test:run # Run all tests (160 tests)
npm run test:coverage # Generate coverage report
npm run lint:check # ESLint check
npm run format:check # Prettier check
Build
npm run compile # Compile TypeScript
vsce package # Create VSIX
🤝 Contributing
Contributions are welcome! Please read CLAUDE.md for development guidelines.
📄 License
MIT © 2025 yhslog
🙏 Acknowledgments
Built with Claude Code