DevStack
Elevate your development environment with precision-engineered tooling. DevStack represents a comprehensive integration of over 101+ essential development utilities within a unified VSCode extension, providing complete functionality while maintaining optimal performance standards and system resource efficiency.
Before continuing, read First...
To facilitate navigation through this comprehensive documentation—which encompasses functionality equivalent to over 100 extensions—each section includes direct links to corresponding detailed documentation for deeper exploration. The modular architecture allows individual features to be utilized independently, eliminating the need to master the entire system before implementation. For those preferring a complete walkthrough, the full documentation site provides sequential coverage of all capabilities.
This documentation structure prioritizes recently introduced features at the top, enabling existing users to quickly identify and adopt new functionality. Given the extensive scope of available tools and features, this approach ensures that valuable additions remain visible and accessible to the established user base. New users are recommended to begin with the foundational concepts outlined in the Virtual Filing System section. It has reached a point where, I will no longer update the number of extensions replaced. Just fyi, its probably at a higher value.
Features
- this is to get back as much performance as we can when we work on either certain files that are VERY large. Where the background process, just choke so hard you can no longer edit that file? So why can't we just turn off everything while we work on that one file, and turn it back on after? Or when we really need it, we will have the option to turn everything off. Literally getting all the performance back that vscode takes from us. Once your done working with those files, flip the switch to turn everything back on
- SO theres going to be two switches
- The Single File Mode, one that turns everything off so you can work in that one file, so everything that is related to that file type will be turned off and when your done. You just flip the switch back, turning everything back on again.
- this will have the functionality that, when you close the file that you were working on when you disabled everything, it will automatically restore everything for you
 
- The Duke NUKEM Mode, WILL TURN ABSOLUTELY EVERYTHING OFF NO MATTER WHAT IT IS, IF IT CAN BE ASSIGNed A FALSE VALUE... IT WILL GET SAID VALUE. Then whenever you don't need such an extreme enviroment, flip the switch back, turning everything back on
 
Why would you need such measures? Weirdly enough, I have a really good computer, but due to file sizes, we need to get as much performance back as possible.
While not everything file I work on is like this ( thank god ), there are, in my case, quite a few files I have to deal with where it makes working with them impossible. To the point where, when you paste data, you then have to sit there for 5, 6, 7, 11 minutes just for vscode to be ok again.
I tried to do a quick search to see if there are currently any extensions that would, do just this, but I can't seem to find one. Like whats my other option when dealing with these files? Opening them in notepad++? lol
WARNING: this wont be for everyone... because this will literally, I mean literally, turn absolutely everything off that I can find that will allow me to turn it off. WHICH MEANS, if something were to happen and the switch to turn it back on, doesn't work... this is worse case scenario, but stuff happens. Whether it's an edge case, or something no one has thought of before or has happened to them before, may happen to you. So please do not use this, IF YOU ARE NOT COMFORTABLE with this.
What are we going to be turning off exactly, the global option will be disabling all extensions along with the following:
Duke NUKEM Mode... 
 const SETTINGS_TO_DISABLE = {
    'editor.suggest.enabled': false,
    'editor.parameterHints.enabled': false,
    'editor.hover.enabled': false,
    'editor.codeLens': false,
    'editor.inlayHints.enabled': 'off',
    'editor.lightbulb.enabled': 'off',
     'editor.suggestOnTriggerCharacters': false, 
    'editor.suggestSelection': 'never',
    'javascript.validate.enable': false,
    'typescript.validate.enable': false,
    'eslint.enable': false,
    'css.validate': false,
    'html.validate.scripts': false,
    'json.validate.enable': false,
    'editor.formatOnType': false,
    'editor.formatOnPaste': false,
    'editor.semanticHighlighting.enabled': false,
    'editor.foldingStrategy': 'indentation',
    'editor.minimap.enabled': false,
    'breadcrumbs.enabled': false,
    'problems.decorations.enabled': false,
    'prettier.enable': false,
    'sonarlint.disableTelemetry': true,
    'editor.fontLigatures': false, 
    'editor.matchBrackets': 'never', 
    'editor.renderLineHighlight': 'none', 
    'editor.renderWhitespace': 'none', 
    'editor.wordWrap': 'off', 
    'editor.stickyScroll.enabled': false, 
    'workbench.editor.enablePreview': false, 
    'workbench.startupEditor': 'none', 
    'workbench.tree.renderIndentGuides': 'none', 
    'workbench.activityBar.visible': false,  
    'explorer.compactFolders': false, 
    'scm.alwaysShowProviders': false, 
    'git.autofetch': false, 
    "telemetry.telemetryLevel": "off",
    "update.mode": "none",
    "extensions.autoUpdate": false,
    "extensions.autoCheckUpdates": false,
    "extensions.ignoreRecommendations": true,
    "workbench.enableExperiments": false,
    "settingsSync.enabled": false,
    "workbench.settings.enableNaturalLanguageSearch": false,
    "files.watcherExclude": {
        "**/*": true
    },
    "search.exclude": {
        "**/*": true
    },
    "files.autoSave": "off",
    "git.enabled": false,
    "scm.autoReveal": false,
    "workbench.editor.sharedProcess.enable": false, 
    "editor.quickSuggestions": {
        "other": "off",
        "comments": "off",
        "strings": "off"
    },
    "editor.wordBasedSuggestions": "off",
    "editor.acceptSuggestionOnEnter": "off",
    "editor.inlineSuggest.enabled": "false",
    "editor.formatOnSave": false,
    "editor.codeActionsOnSave": null, 
};
 
Single File Mode... 
const FILE_TYPE_SETTINGS = {
    'javascript': {
        'javascript.validate.enable': false,
        'javascript.suggest.enabled': false,
        'javascript.suggestionActions.enabled': false,
        'javascript.inlayHints.enumMemberValues.enabled': false,
        'javascript.inlayHints.functionLikeReturnTypes.enabled': false,
        'javascript.inlayHints.parameterNames.enabled': 'none',
        'javascript.inlayHints.parameterTypes.enabled': false,
        'javascript.inlayHints.propertyDeclarationTypes.enabled': false,
        'javascript.inlayHints.variableTypes.enabled': false,
        'javascript.updateImportsOnFileMove.enabled': false,
        'javascript.referencesCodeLens.enabled': false,
        'eslint.enable': false,
        'eslint.run': false, 
        'javascript.suggest.autoImports': false,
        'javascript.suggest.completeJSDocs': false,
        'javascript.format.enable': false,
        'javascript.autoClosingTags': false,
    },
    'typescript': {
        'typescript.validate.enable': false,
        'typescript.suggest.enabled': false,
        'typescript.suggestionActions.enabled': false,
        'typescript.inlayHints.enumMemberValues.enabled': false,
        'typescript.inlayHints.functionLikeReturnTypes.enabled': false,
        'typescript.inlayHints.parameterNames.enabled': 'none',
        'typescript.inlayHints.parameterTypes.enabled': false,
        'typescript.inlayHints.propertyDeclarationTypes.enabled': false,
        'typescript.inlayHints.variableTypes.enabled': false,
        'typescript.updateImportsOnFileMove.enabled': false,
        'typescript.referencesCodeLens.enabled': false,
        'typescript.implementationsCodeLens.enabled': false,
      //  'typescript.tsserver.maxTsServerMemory': 512, // Reduce memory
        'eslint.enable': false,
        'typescript.suggest.autoImports': false,
        'typescript.suggest.completeJSDocs': false,
        'typescript.updateImportsOnPaste.enabled': false,
        'typescript.format.enable': false,
        'typescript.autoClosingTags': false,
    },
    'python': {
        'python.linting.enabled': false,
        'python.linting.pylintEnabled': false,
        'python.linting.flake8Enabled': false,
        'python.linting.mypyEnabled': false,
        'python.analysis.diagnosticMode': 'off',
        'python.analysis.typeCheckingMode': 'off',
        'python.languageServer': 'None',
        'python.analysis.completeFunctionParens': false,
        'python.analysis.autoImportCompletions': false,
        'pylint.enabled': false,
        'isort.check': false,
        'black-formatter.showNotifications': 'off',
    },
    'json': {
        'json.validate.enable': false,
        'json.schemas': [], 
        'json.schemaDownload.enable': false,
		  'json.format.enable': false,
    },
    'jsonc': {
      'json.validate.enable': false,
        'json.schemas': [], 
        'json.schemaDownload.enable': false,
		  'json.format.enable': false,
    },
    'css': {
        'css.validate': false,
        'css.lint.emptyRules': 'ignore',
        'css.lint.unknownAtRules': 'ignore',
        'css.colorDecorators.enable': false,
    },
    'scss': {
        'scss.validate': false,
        'scss.lint.emptyRules': 'ignore',
        'scss.lint.unknownAtRules': 'ignore',
        'scss.colorDecorators.enable': false,
    },
    'less': {
        'less.validate': false,
        'less.lint.emptyRules': 'ignore',
        'less.colorDecorators.enable': false,
    },
    'html': {
        'html.validate.scripts': false,
        'html.validate.styles': false,
        'html.autoClosingTags': false,
        'html.suggest.html5': false,
    },
    'php': {
        'php.validate.enable': false,
        'php.suggest.basic': false,
        'intelephense.diagnostics.enable': false,
    },
    'go': {
        'go.lintOnSave': 'off',
        'go.vetOnSave': 'off',
        'go.buildOnSave': 'off',
        'go.diagnostic.vulncheck': 'Off',
        'gopls': { 'ui.diagnostic.analyses': {} },
    },
    'rust': {
        'rust-analyzer.checkOnSave.enable': false,
        'rust-analyzer.diagnostics.enable': false,
        'rust-analyzer.inlayHints.chainingHints.enable': false,
        'rust-analyzer.inlayHints.parameterHints.enable': false,
        'rust-analyzer.completion.autoimport.enable': false,
    },
    'cpp': {
        'C_Cpp.intelliSenseEngine': 'disabled',
        'C_Cpp.errorSquiggles': 'disabled',
        'C_Cpp.autocomplete': 'disabled',
        'C_Cpp.dimInactiveRegions': false,
    },
    'c': {
        'C_Cpp.intelliSenseEngine': 'disabled',
        'C_Cpp.errorSquiggles': 'disabled',
        'C_Cpp.autocomplete': 'disabled',
        'C_Cpp.dimInactiveRegions': false,
    },
    'java': {
        'java.errors.incompleteClasspath.severity': 'ignore',
        'java.configuration.checkProjectSettingsExclusions': false,
        'java.autobuild.enabled': false,
        'java.completion.enabled': false,
    },
    'csharp': {
        'omnisharp.enableEditorConfigSupport': false,
        'omnisharp.enableImportCompletion': false,
        'omnisharp.enableRoslynAnalyzers': false,
    },
    'markdown': {
        'markdown.validate.enabled': false,
        'markdown.extension.toc.updateOnSave': false,
    },
    'yaml': {
        'yaml.validate': false,
        'yaml.schemaStore.enable': false,
        'redhat.telemetry.enabled': false,
    },
    'xml': {
        'xml.validation.enabled': false,
    },
    'vue': {
        'vetur.validation.template': false,
        'vetur.validation.script': false,
        'vetur.validation.style': false,
    },
    'svelte': {
        'svelte.plugin.svelte.diagnostics.enable': false,
        'svelte.plugin.typescript.diagnostics.enable': false,
    }
};
 
NEW - Live React / Tailwind Playground - Visit Section
NEW - Custom .VSIX Packager - Visit Section
NEW - AI Chat and Error Fixer ( previously Find Errors and Missing Imports ) - Visit Section
NEW - Smaller But Rather Nice Updates, Long In The Making - Visit Section
DevStack Quickpic... finally getting that upgrade...
- even though I barely use ALL of its items, I actually open this quickpic ALOT so  while I am focusing on just getting the site back up I apparently have time to wait and while things are... doing its thing in vscode so I might as well start on this 
- whole menu, virtually got nuked 
- G3- from here on out, if you ever see G3 anywhere its github add, commit, push
 
- G4- the forth being upgrade patch
 
- G4 & X-VSCE- adding on custom vsce packager ( that turned out to be annoying... but it's done and it works great )
 
- G4 & Pub To NPM- self explanitory, publishes to npm
 
- PRISMA DB SECTION - 
- * Remote- we all know star means all, so if like me, you have a remote db and local db to work with, this sets the remote url to DATABASE_URL and does every thing in order to make this work have the following values set accordingly- 
- LOCAL="postgresql://...."
- REMOTE="postgresql://....."
- DATABASE_URL=""
 
- * Local- does the same for local
- Reset- resets db
- Push- pushes db
- Seed- seed db
- Gen- db generate
- Studio- db studio
 
- FILE SYSTEM SECTION - 
- Clean *- clean all, this is an example I will be converting this and it will not just work on pnpm but will work on all pkg mgrs,  foreach ($path in @('.cache', 'build', 'node_modules', 'pnpm-lock.yaml',  'public\build' )) { if (Test-Path $path) { Remove-Item -Path $path -Recurse -Force -ErrorAction SilentlyContinue } }
- Duke NUKEM- a nuclear option of the above and below, a one button does all type deal if, something shits somewhere in your project and you don't know where, lol, I don't know how else to explain it
- I- install
- build- build
 
- VSCODE Section - 
- R EXT- these will be soft restarts and will solve a lot of issues you may run into, restart of extensions
- R TS- resart ts server
- R Window- hard restart of workspace actually restarting the instance
- DevTools- opens devtools
 
 
NEW - A Deterministic AI Engine Compiler - Visit Section
NEW - Install Catalyst ui library - Visit Section
Everything beyond this point, would not be considered 'new' functionality. If your already familiar with the extension, your safe to stop here.
Virtual Filing System
- Comprehensive organization system that eliminates the need for multiple extensions
- UI for creating, editing, and moving folders/items without manual config editing
- Supports multiple item types: files, folders, URLs, commands, snippets, chains
- Project-agnostic configuration with global and workspace-specific settings
For detailed usage instructions and advanced features, visit the complete documentation
Virtual Filing System Usage
For detailed usage instructions and advanced features, visit the complete documentation
VSCode Commands
- Preset VSCode, PowerShell, and Bash commands with required flags
- Cheat sheet with 360+ commonly used commands
- Easy command creation and management
For detailed usage instructions and advanced features, visit the complete documentation
PowerShell Commands
For detailed usage instructions and advanced features, visit the complete documentation
Debian WSL Bash Commands
For detailed usage instructions and advanced features, visit the complete documentation
VSCode Commands Cheat Sheet
For detailed usage instructions and advanced features, visit the complete documentation
Chain Execution & Creating Command Chains
Details... 
- Execute sequences of VSCode/shell commands with one click
- No limits on command quantity or length
- Hidden commands keep navigation clean while allowing complex workflows
- Open the DevStack sidebar
- Navigate to "Create Chain"
- Add commands with labels and paths
- Reorder execution as needed
- Save to make available in your workflow
- Configuration
- File Locations
Global config: AppData/Roaming/Code/User/globalStorage/skyler.ocrmnav/global-navigator-config.json
- Workspace config: AppData/Roaming/Code/User/globalStorage/skyler.ocrmnav/project-configs/project-{uniqueID}.json
- Global snippets: AppData/Roaming/Code/User/globalStorage/skyler.ocrmnav/ocrmnavigator.code-snippets
For detailed usage instructions and advanced features, visit the complete documentation
The filing system is virtual - original files remain unchanged
Folders support two levels of depth (three with hidden items)
Markdown files are stored in .vscode folder
All changes are saved to JSON configuration files
 
Concurrent Command Execution
For detailed usage instructions and advanced features, visit the complete documentation
Config file
For detailed usage instructions and advanced features, visit the complete documentation
Project Agnostic Configuration
For detailed usage instructions and advanced features, visit the complete documentation
Markdown Editor and Viewer
- Rich text editor with live preview
- File explorer and outline navigation
- Focus mode and export capabilities
For detailed usage instructions and advanced features, visit the complete documentation
Markdown Cheat Sheet
- Cheat sheet with GitHub-flavored Markdown examples
For detailed usage instructions and advanced features, visit the complete documentation
Readme Generator
For detailed usage instructions and advanced features, visit the complete documentation
Snippets
- Global snippet management
- Intuitive creation/editing interface
- Fuzzy search and quick insertion
- Automatic workspace synchronization
For detailed usage instructions and advanced features, visit the complete documentation
Snippets Viewer
For detailed usage instructions and advanced features, visit the complete documentation
Editor Context Snippets
For detailed usage instructions and advanced features, visit the complete documentation
Context Snippets
For detailed usage instructions and advanced features, visit the complete documentation
- Live preview of formatting changes
- 33+ supported file types (expanding to 72)
- Sticky preview panel that follows your scroll
- Right-click formatting options
For detailed usage instructions and advanced features, visit the complete documentation
Inline Imports
For detailed usage instructions and advanced features, visit the complete documentation
Remove Trailing Commas
For detailed usage instructions and advanced features, visit the complete documentation
Batch Rename
- Batch Rename: Mass edit filenames via generated .txt file
For detailed usage instructions and advanced features, visit the complete documentation
Add Missing Imports w/ Global Config
For detailed usage instructions and advanced features, visit the complete documentation
Add ESLint & Prettier Configs
For detailed usage instructions and advanced features, visit the complete documentation
Remix Run
For detailed usage instructions and advanced features, visit the complete documentation
npx create-remixv2
Details... 
Insurance policy, because personally, I don't know what remix's plans are exactly. One minute they're telling everyone to use another platform, the next they quitely remind everyone that v3 is coming out? I've never seen any... brand, company, what have you, tell their clients / users to go else where. Loosing a lot of people in the process, who would have stayed. To then say, oh our next product is coming out.
npx create-remixv2
- Choose package manager and template at build time
- Select from 30+ popular stacks
- Custom stack reference via user/repo
For detailed usage instructions and advanced features, visit the complete documentation
 
Auto Create Action
- Form Detection: Scans for 
- Intent + Schema Parsing: Extracts intent from form data
- Prisma Method Inference: Auto-detects CRUD operations
- VS Code Integration: Works with active editor, shows warnings when no forms found
For detailed usage instructions and advanced features, visit the complete documentation
Bane Remix Run Stack
For detailed usage instructions and advanced features, visit the complete documentation
Context Components / Functions
For detailed usage instructions and advanced features, visit the complete documentation
V2 -> V1 Routing Convention Conversion
- Converts route conventions automatically
- Safety rollback if issues occur
- Warning: Always push before conversion
For detailed usage instructions and advanced features, visit the complete documentation
Convert single project app to mono repo
For detailed usage instructions and advanced features, visit the complete documentation
Open Route File In Browser - Remix Run
- Browser preview functionality
- URL copying to clipboard
For detailed usage instructions and advanced features, visit the complete documentation
Create Route Files - Remix Run
- Quick route file creation
For detailed usage instructions and advanced features, visit the complete documentation
Context Components / Functions - Remix-Run
- Right-click in editor → Remix Components → Select component to insert
For detailed usage instructions and advanced features, visit the complete documentation
Routing Convention Conversion Remix-Run
For detailed usage instructions and advanced features, visit the complete documentation
Install Auth in Remix w/ Auth Routes
- One-click auth setup with routes
- OTP implementation available
- Installs all required dependencies
For detailed usage instructions and advanced features, visit the complete documentation
Install OTP Into Remix w/ Auth Routes
For detailed usage instructions and advanced features, visit the complete documentation
Create Tests for Routes and Actions In Remix-Run
- Creates comprehensive test files in routes/tests/
- Auto-generates tests for all prismaexport functions
- Includes parameter type validation
For detailed usage instructions and advanced features, visit the complete documentation
React-Router
For detailed usage instructions and advanced features, visit the complete documentation
For detailed usage instructions and advanced features, visit the complete documentation
VSCode Color Theme Builder
- Theme Application Options
- Preset Themes: Apply professional designs in <15s
- Quick Customization: Modify core colors in <5min
- Full Palette: Comprehensive color selection
- Manual Control: Fine-tune every element
- Export & Save Options
- Tailwind Export: Generate CSS classes for projects
- VSCode Copy: Export theme to clipboard
- Workspace Save: Auto-saves to .vscode/settings.json
- Global Save: Applies across all workspaces
For detailed usage instructions and advanced features, visit the complete documentation
Blacked Out
- Minimalist all-black theme
- Reduces eye strain on large monitors
- Mutes distracting UI elements
- Preserves code readability
For detailed usage instructions and advanced features, visit the complete documentation
Window Differentiator
- Color-codes workspace windows
- Subtle visual indicators
- Preserves your preferred theme
- Random color selection from curated palette
For detailed usage instructions and advanced features, visit the complete documentation
Reset - Window Differentiator
For detailed usage instructions and advanced features, visit the complete documentation
Add ShadCN Components To Your Project
- Component Management
- Right-click to add components
- One-click full installation
- Includes all dependencies
For detailed usage instructions and advanced features, visit the complete documentation
Install ShadCN Components w/All Components
For detailed usage instructions and advanced features, visit the complete documentation
GitHub Repo Management
- Auto Commit & Push: Stages, commits, and pushes changes with automatic messages
- Version Control: Auto-upgrades patch version and pushes to GitHub
- VSIX Management: Creates, reveals, and installs VSIX packages with one click
- "Yeet" Command: Complete workflow (save → commit → version → build → publish)
For detailed usage instructions and advanced features, visit the complete documentation
Open Repo in Browser
- Right-click → "Open GitHub Repo in Browser"
- Direct access to repository from any file
For detailed usage instructions and advanced features, visit the complete documentation
Open GitHub Repo At File
this is NOT replacing the original variant...
- instead of just opening your repo in the browser, it will navigate to the file within the repo from where you activated this function
- I use this, way more than I thought I would. But it triggers me every time I use it, then having to still navigate to the file from where I activated the function. Some code bases, we all know how easy it is to get around. But if it's a larger code base with github's annoying nuances within the sidebar nav... fuck that... I know, talk about first world coding problems, but still triggers me when it shouldn't obviously this extension pampers you
- it should reside right underneath the original variant for easy access
- sigh, the dev host is bugging out not allowing me to test... fuck, well... when in doubt,  yeet, I guess
- Borat voice: "Yeet was great success!"
 
For detailed usage instructions and advanced features, visit the complete documentation
Create include object
For detailed usage instructions and advanced features, visit the complete documentation
Create action object
For detailed usage instructions and advanced features, visit the complete documentation
Click To Schema Object
- Right-click model name → "Open Schema Object"
- Jumps directly to schema definition
For detailed usage instructions and advanced features, visit the complete documentation
Generate Crud Resolvers / Rest End Points
- Automatic resolver/REST endpoint creation
- Hover preview before generation
- Right-click → Prisma submenu → "CRUD"
For detailed usage instructions and advanced features, visit the complete documentation
VSCode Extension Management For Devs
For detailed usage instructions and advanced features, visit the complete documentation
File Nesting
For detailed usage instructions and advanced features, visit the complete documentation
Reveal In Explorer
- Reveal in Explorer: Right-click in extensions pane
For detailed usage instructions and advanced features, visit the complete documentation
Copy Path
- Copy Path: Right-click in extensions pane
For detailed usage instructions and advanced features, visit the complete documentation
Bookmarks
- Line-specific markers
- Stores up to 20 bookmarks
- Status bar access
For detailed usage instructions and advanced features, visit the complete documentation
Extension Produced Messages
For detailed usage instructions and advanced features, visit the complete documentation
Search Bar
- Search Bar
- Title bar button for instant access
- Workspace-scoped quick searching
- Config file: .vscode/ocrmnavigator/search-config.json
For detailed usage instructions and advanced features, visit the complete documentation
Clipboard History Pro
- Last 20 clipboard items
- Hover previews
- Status bar access
For detailed usage instructions and advanced features, visit the complete documentation
Color Wheel
- ShadCN-inspired picker
- HEX/OKLCH/CSS values
- Copy with/without hashtag
For detailed usage instructions and advanced features, visit the complete documentation
Lucide Icons
- Fuzzy search across libraries
- JSX/TSX component generation
- Instant clipboard copy
- Pagination and sizing controls
For detailed usage instructions and advanced features, visit the complete documentation
Tailwind Converter
For detailed usage instructions and advanced features, visit the complete documentation
Notes, To-Dos and Things
- Universal Access
- VSCode extension
- Mobile app (PWA)
- Web interface
- GitHub sync
- Key Features
- Priority-based organization
- Offline editing with smart sync
- Team collaboration
- Reminder notifications
For detailed usage instructions and advanced features, visit the complete documentation
Mobile App - Notes, To-Dos and Things
For detailed usage instructions and advanced features, visit the complete documentation
Superuser Task Runner
Phased Out! Functionality was replaced by improved featureset within devstack
- technically completely phased out from its original idea as the entire code base has now been fully merged into devstack but will leave this here for anyone that wants to read it
For detailed usage instructions and advanced features, visit the complete documentation
Share Config With Friends
- Export your setup to shareWithFriends folder
- Includes README with setup instructions
- Manual cleanup recommended for sensitive data
For detailed usage instructions and advanced features, visit the complete documentation
Default Apps Configuration
- Control which features are active
- Accessible via extension settings
- Detailed explanations for each option
For detailed usage instructions and advanced features, visit the complete documentation
View Config Example
For detailed usage instructions and advanced features, visit the complete documentation
Dev Region
- Xbutton on title bar folds all in active editor
- usage:
- // #dev
- // #dev commment
- // #enddev
 
- even works in md files if you place them inside a comment line...much better, that was a pain, especially in this file but it was driving me mad that the default folds weren't folding properly
<!-- // #dev -->
<!-- // #enddev -->
For detailed usage instructions and advanced features, visit the complete documentation.
Left Off Note
- Accessible in the context menu
- select Open Leftoff Note
For detailed usage instructions and advanced features, visit the complete documentation.
Shortcuts
- Task, Notes and Things Quick Pick: Alt + Shift + T
- Context Snippets: Alt + Shift + S
- Clipboard++ History: Alt + Shift + C
- Show Bookmarks: Alt + Shift + B
- DevStack Quick Pick: Alt + Shift + D
- Open UI Dashboard: Alt + Shift + A
- Errors Plus: Alt + Shift + E
- Show Error History: Alt + Shift + H
For comprehensive details on each shortcut's functionality, visit the complete documentation.
Create Export Index
- right click on folder
- creates an index file in that folder
- recursively export *'s each file within that folder to tidy up import statements
For detailed usage instructions and advanced features, visit the complete documentation
Find Errors and Missing Imports
This has obviously evolved, after testing multiple ai engines I wanted something within the extension that offered a bit more in the form of functionality, without any constraints. Since this was already using ai, I converted it into its own view, thus replacing virtually every single ai chat extension, currently the list of engines that are covered:
- openai
- anthropic
- google: 1500 requests/day free with Gemini
- mistral
- groq: Ultra-fast inference, generous free tier
- ollama: 100% free, runs locally, no API key
- xai
- azure
- bedrock
- fal
- deepinfra: Free credits for open models
- vertex
- togetherai
- cohere
- fireworks
- deepseek
- cerebras
- perplexity
- luma
- baseten
The new pane will have the following tabs:
- chat
- errors ( where you will find the same functionality that this feature is replacing )
- context
- settings
- history
- analytics
- snippets
- solutions
Created to cover all engines, free and paid versions/tiers. When you open the settings tab for the first time, you will see that the there is a list containing what free options that are available to you. I made configuring each engine as easy as possible, while at the same time you could configure as many options as you want to be saved and hot swapped whenever you like.
In the chat tab, the top sidebar buttons will contain, add engine and a dropdown to swap between engines that you have already configured. The current engines logo will be displayed to give visual cue on which engine is currently in use, this also serves as the dropdown to select which ever engine you would like to use within the chat.
To configure an engine, for example google. After selecting the option, click on add api key, which will open a browser window to the engines site. Once you have obtained an api key from the provider, paste it into the appropriate input, and click save. I also included a test connection feature, where before saving you can test to see if the connection is successful or not before saving the configuration. Once saved, that config is ready to be used.
Personally out of ALL the ai extensions I had tested, this one is not only the easiest to configure ( obviously, the providers site to obtain api keys is out of my control. Some instances, I couldn't even log into a couple of providers sites nevermind obtain the actual key ), but also allows the use of multiple engines. On that note I did not come across an extension that offered the ability to configure more than one engine. One could be out there, but out of the 20 or so I had tested none of them offered this feature. Never mind being able to hot swap between engines. If your wondering why. Each engine, has strengths and weaknesses. While claude is great at some things, it also really drops the ball in others. So depending on the result you are looking for, you can quickly switch between engines allowing you to ask whatever question you have to the best most appropriate engine that will give the best result. Or if your like me and do not pay for any engines, the ability to quickly swap once you have used your entire quota.
Whenever an engine is selected, it will change the current conversation along with the viewable conversations within the history tab to those only related to the currently selected engine.
For ollama, I even provided a guide/walkthrough to creating your own local ai instance to be used with the extension.
Still under construction...
- following tabs currently working
- errors
- settings
- chat ( haven't tested much but initial tests does have the engine responding within chat, currently only tested with googles ai engine )
- history
- analytics
 
"I almost wish I hadn't gone down that rabbit-hole—and yet—and yet—it's rather curious, you know, this sort of life!".... FUCK, everything is working. Working great to be honest. The ever so enticing rabbit hole, might as well jump head first, really.
- After using some ai engines, within vscode when I was testing the compiler out. Each one, left something to be wanted / desired. That's to say, if they even worked in the first place. Why is it, when it comes to vscode and the marketplace, its like a black hole for just utter garbage... sucking as much as it can, as hard and as fast as it can for its users to just wade through the shit... trying to find some shiny object within, just annoyed that after installing, and all the other stuff that comes with it even including on learning mandarain for one of them, to be left with less than half that are even useable? anyways lol
 Current Plan... 
having to learn mandarin in order just to get going... like cmon, albeit I was able to get away with as little as I could, but still, shouldn't have to learn a completely new and different language lol
- creating a navigator view
- will have a dock for navigation between 'tabs'
- will be the ai chat
 
- where an adjustable text area will be at the bottom with no size restrictions, with buttons running on the side of the siderbar going upwards for functionality
- at the top will have the info on the ai engine, clicking on the image will allow you to hot swap between engines as long as you have them configrued, im hoping to have atleast 1-2 pre confgirued and working at install whenever a new user installs it
- using ai-sdk.dev to not limit on what engine we can access
- the buttons that wil run up the side of the side bar will be
1. quick add current file
2. add context
3. refresh context
4. clear context
5. regenerate ai response
6. copy
7. edit prompt
8. save to snippets
 
- will be devoted to errors that will only get populated when triggered via button defaulting on the focused editor, with an option to spider outwards looking for more errors across your app, again all buttons will be on the inner wall, starting from the bottom going upwards
 
- when you start out it will ask if you want to auto fix or manual
- manual option
- button to scan for errors
- mode toggle: between file and workspace
- button to intiate auto fix at anytime
- a list will display of the errors
- left clicking will bring you to the error and highlighting it
- right clicking will open a contrext menu
- ✨ Auto-fix this error
- 💬 Ask AI about this
- 📋 Copy error details
- ✅ Mark as reviewed
- 🚫 skip error for now
- 🔍 Find similar errors
 
- whenever a error is highlighted it will display the error code underneath in the editor
 
 
 
- Context tab
- displaying current context if any
- can add files, or folders as removing them individually or them all at once
- Context Sets: Save frequently used context combinations
- Token Counter: Shows total tokens from context
- Folder Options: Recursive toggle, file type filters
 
- Settings
- a drop down will be at the top allowing you to select a engine to configure, once configure will remain displayed as a list and each time you sleect a item from the drop down it adds to that list, while at the same time you can remove or edit eeach time
- Multi-Engine Support: Save multiple API configurations
- Quick Switch: Radio buttons for fast engine switching
- Secure Storage: API keys encrypted in VS Code secrets
- Connection Test: Verify API key before saving
 
- history
 
- Searchable: Find past conversations
- Resume: Click to restore conversation in chat tab
- Export: Save conversation as markdown/JSON
- Stats: Message count, token usage, model used
 
- analytics
- Snippets
- tab for viewing the options we had for:
- Open Successful Solutions
- Open Failed Solutions
- Open Last Auto Fix Report
 
 
 
- other features:
- Notifications - Toast alerts for completions
- Keyboard Shortcuts - Quick access to all tabs
- Auto-save Conversations - Never lose work ( this should be taken care of by the histroy tab dude)
 
 
Planned Structure...
/extension
  /views
    /navigator
      - NavigatorView.ts (Main webview)
      - DockManager.ts (Tab switching)
      /tabs
        - ChatTab.ts
        - ErrorsTab.ts
        - ContextTab.ts
        - SettingsTab.ts 
        - HistoryTab.ts
        - AnalyticsTab.ts
        - SnippetsTab.ts
  /services
    - AIEngineService.ts (Multi-provider support)
    - ContextManager.ts (File/folder handling)
    - ErrorScanner.ts (Your existing logic)
    - HistoryService.ts (Conversation storage)
    - SecureStorage.ts (API key encryption)
  /providers
    - OpenAIProvider.ts
    - GroqProvider.ts
    - ClaudeProvider.ts
    - GeminiProvider.ts
 
MD Viewer Renderer
- in the editor context menu
- in the devstack submenu
- select render md
For detailed usage instructions and advanced features, visit the complete documentation.
MD Viewer Renderer In VSCode
- in the editor context menu
- in the devstack submenu
- select render md in vscode
- displays side by side renderer in vscode
Editor Context Updates
Menu Reorganization / Other Updates That Cannot Be Organized...
The context menu has undergone significant restructuring to address usability concerns. As the menu had expanded to occupy the entire screen height (and beyond), strategic reorganization became necessary. After extensive usage analysis, less frequently accessed items have been strategically relocated to submenus while preserving quick access to essential functionality.
 
Comprehensive documentation improvements have been implemented based on structural analysis and user feedback...
- **Section Restructuring**: Previously grouped similar functions have been separated into dedicated sections for improved clarity and navigation
- **Standardized Coding**: All sections now utilize identical underlying code structure, ensuring consistent behavior and maintenance
- **Uniform Styling**: Visual consistency maintained across all documentation sections
- Modern Sidebar: Transitioned to the site's default inset-style sidebar for enhanced visual integration 
- Dynamic Highlighting: Sidebar items automatically highlight corresponding to current scroll position, providing intuitive navigation feedback 
- Synchronized Scrolling: Sidebar maintains visibility of current section through intelligent "ghost scrolling" functionality 
- Direct Navigation: All README links provide direct navigation to corresponding documentation sections 
- Sticky Section Headers: Section titles remain fixed at the top of the viewport during scrolling, with seamless transitions between sections 
- URL Structure: Documentation URLs relocated outside parent routes to accommodate enhanced sidebar functionality 
- Performance: Optimized scrolling detection and highlighting algorithms for smooth user experience 
This represents the final major structural revision for the extension. Throughout the development process, various challenges have been identified and addressed at different stages of growth.
 
As I continously add features and content...
New issues arise that need to be addressed with unique solutions. For example, with the length of the current readme / docs, how do I preset the information to new users where they do not feel overwhelmed while at the same time, not alienating current users by burying new features and update info. Pretty unique issue, as I'm sure no other extension has run into this problem as far as extensions go anyways. I hope this is the last time I change the readme / docs, but as there is no extension to reference with a similar issue I'm primarily having to rely on trial and error.
The solution I have come up with:
- use the read me as more of an overview, giving just enough information to let the user know what each feature is / does while providing a link to the docs. Thus not overwhelming users to the degree that the docs if I were just to use that.
- for current users, I placed all new features at the top of the docs with a link to the section thats contained within. Thus allowing new users to find out with ease whats new, and if interested can read further
This approach balances accessibility for newcomers with feature discoverability for existing users, creating an optimal documentation experience for all user segments.
A new editor has been added, I wanted to test out a new library that turned out to be a much more feature rich offering than the current ones. I will be leaving the current ones up, as they are already coded and incase people enjoy them more than the new one. The new one features the monaco editor and has already received updates including the sidebar cheat sheet, readme generator and more.
 
catalyst ui
- Currently up and running, premium membership not yet available
- Accessible in the context menu
- under catalyst ui
- select a category via submenu
- once a component is selected it inserts at cursor
- current components counts:
- free tier: 193
- total components: 1808
 
For detailed usage instructions and advanced features, visit the complete documentation.
Updates...
- Damn, 'open route in browser' has spoiled me. For 2 minutes I couldn't understand why... I couldn't navigate to the library from the editors context menu, lol. Only to realize, I'm in another project. So I've added these, because even I will visit the site often to reference information. And we're not going minimize vscode, go into the start menu to find / open the browser, to then enter the url by hand... like some kind of peasent ogre smashing keys on the keyboard one finger at a time, that is below our wizardly talents
- both free and premium submenus now have buttons placed at the top of their respective submenus, before the categories that will navigate you to:
  - components: search / filter page that displays all components
  - components list: a list of all components ( I don't see this one getting used much, due to the quantity of items, but I included it because I was already there, and adding this was nothing )
  - components viewer: for premium subs, a page where every single component and its data including source code can be viewed without ever having to navigate, including when ever you search for and even select a new component to view
If your on the fence about the subscription, the components viewer is worlds better than just a list or a products page where you can search and view items. It's a shame no other library has thought to include something like this, even with normal sized libraries, this would be a creature comfort that once you use it, you won't go back, it has even ruined other libraries for me. You don't think about how much better something could be till you have it, as I have not even visited the other two pages since using it. Don't get me wrong, it was created out of necessity, more than anything, due to a products page just not being good enough due to the amount of components. I know, the products page is the industry standard, but for this use case after you use it once, you'll see what I mean. Maybe I need to set some time aside, and really look at the products page... and hopefully I can come out the other side with a redesign to how we usually do it, because if I completely deserted that page never to visit it again. That's defiently a signal for when something should be changed and improved upon.
 
Install Catalyst ui library
- checks which subscription tier your currently in, proceeds to install the appropriate libraries and dev libraries followed by creating the source code files with the proper folder / category structure
- checks to see if you currently have a styles/tailwind.css file, if not found creates the folder and file
- I left all my base goodies in the tailwind file, for example while I left the dark blue theme in the file you can also find things like a stylistic scroll bar that grabs the color values from your current tailwind theme thus giving you a nice custom scroll bar no matter what you change the color values for your theme for your app, other items are a lot more boring in comparison like making sure styles work across browsers and la-di-da
 
- checks and updates the ts-config file
- installs utils.ts in the base catalyst-ui folder
Not the most appropriate to place I know, this just serves as a placeholder so I don't forget to place it where it needs to be, when I can find the time.
All updates are done to the source code of the sidebar...
- Animated burger for trigger
- SidebarMenuAnchor, defaults to opening a new tab when clicked
- SidebarMenuLink, using remixs navlink
- Anchor and Link, displays loading states whenever clicked
- On initial load, sidebar will display a full ui loading state till data has loaded in, this will never display at any other point
- since the siderbar essentially wraps the application, theme provider has been included with 6 pre configred dark themes to choose from, the theme state saved in local storage
- the other sidebar versions will receive the same updates to their code as well
 
Smaller But Rather Nice Updates
The extension was built by, adding one thing after another and with the current amount of functionality at its disposal, showing its age in certain places. As I notice them, I will try to update them immediatly as I go. Thus making everything you need to do, just that much easier and making the menus that much cleaner. Instead of creating a new section for each, I will just include these types of updates here, but have them encased within an accordian so as to not take up too much space. I would love to just hunker down and get them all at once, but with the extension having sooo much functionality I wouldn't know where to start
- several insert code sections have been updated
- build extension +++
- yeet
- open route in browser
Adding items via the devstack sidebar...
  - at times, its just easier to add via the sidebar, because of that there is no point in opening the ui to create such items, but in its current state adding items looks to be haphazardly, to say the least
    - whenever you right click an item within the devstack sidebar, clicking 'add item' will open a quick pic with the following options
      - url
      - command ( vscode command )
      - power shell command
      - debian command ( named due to the fact that it will run the command in a wsl debian enviroment, so you do need to have this already accessible for this to work )
      - copy value
      - chain
      - concurrent 
      - folder ( added afterwards, since I couldn't think of a reason why not to include this. After consolidating everything I know either remember why, or I'm now learning why I didn't do this before now, as the sidebar, is REALLY picky as to what gets done with it )
    - once the label and value fields have been filled with whatever you need / desire
      - obviously different values are needed for folder but ya
    - it will then let you select where you would like to place the newly created item
      - it will not take notice where you right clicked, allowing you to place it within any folder / subfolder
      - the only reason for this, after everything in the sidebar was already coded, I created a helper function for folder selection, no matter the item type, that can also be used in any function it was needed, with only 1 line of code and since it has proved to be used anywhere, at anytime, honestly because of that I just dont want to mess with it lol, its already stressing enough changing so much legacy / older code
  - This will really clean up that context menu, jesus
 
Edit label
- has been edited, adding all item types to be edited whenever triggered
 
  
Sidebar theme selector...
Yes I know, I said I wouldn't be including a theme selector that had a light theme, which is exactly what happened. I've been messing with this for a while now, because I have no idea how or where your going to use it. Personally I use a fixed position, replacing my pages logo icon with it, while at the same time setting the icons color to text-primary. Whenever the theme is changed, the icon displays the current colored theme.
- Default, 6 DARK theme color schemes, the same as you can find in the configurator as I did not have time to come up with more
- on initial load, it keeps whatever theme is set in place by your app, thus having 7 buttons
- with the way I coded, you can add, remove or adjust the current themes provided, or don't even use it at all
- the providor wraps the sidebar, so there is nothing you need to do more other than placing the sidebarthemeselector anywhere you would like
function Example() {
  return (
    <SidebarThemeSelector className='fixed right-[30px] top-[27px]' >
      <Avatar className="h-8 w-8 rounded-lg">
        <Zap className="text-primary" />
      </Avatar>
    </SidebarThemeSelector>
  )
}
- whenever the button is selected applies bg-bacl/50 and animates to the middle of the screen and displays all the avialable options to choose from
- once one is selected, saves the choice in local storage, and animates the slide back to its position
 
Blued Out
- Minimalist all-dark blue theme, variant of blacked out
- Reduces eye strain on large monitors
- Mutes distracting UI elements
- Preserves code readability
A Deterministic AI Engine Compiler
Super nerdy but so accurate I had to use it as the tagline:
Essentially, and most simply put, the one ring to rule them all...
Desgined with a UI to interact with the compiler and ai. Making it a "reusable component" by definition, giving any developer at any skill level the opportunity to not only use it but benefit from its results.
NOTE: Right now, this tool sees use in 100% of my dealings with ai and it delivers ridiculous results. It's not available to users yet as I figure out... what the hell to do with this. Once I make that decision, the tool will be available for you to use.
You won't keep asking:
- Why doesn't it remember what I said 10 messages ago?
- Why did it change the style from last time?
- Why do I have to re-explain my setup every session?
It takes what was impossible before and makes it reality. Instead of YouTubers making videos on "how to build a whole app with AI" just to create a single, very simple page or another common small blog you'd never actually see in production—this lets you complete large, complex projects spanning any number of files in a surprisingly short time. Right now, the only ceiling that exists is the AI engine's overall skill level. For example, while some engines can technically build very complex auto loan calculators (with heavy asterisks attached), you wouldn't actually use it in production. I get the novelty when people show off its "capability," but we both know that dev isn't putting that exact calculator in their project.
In closing:
I genuinely don't look at AI the same way now. My perspective is a stark contrast to how I worked with it before. The factory-level output I produce now definitely eases my anxiety when workloads hit a certain point. The possibilities are beyond what I can comprehend alone with the knowledge I have, because it doesn't just unlock new doors for each industry that uses it. This... how do I put this... imagine an average American home representing an AI engine. This would be like a Tesla Gigafactory or Amazon processing center breaking ground right up against the walls of that home, running at full capacity, with restrictions only placed by its own choice. If Microsoft wanted to dominate one more industry and make everyone else irrelevant, this could do it—putting them 3-5 years ahead overnight, not to mention the resources saved in the process.  Right now, I'm more excited about just how much more efficient I became because of this. The only thing weighing that down is figuring out what to do with it. And hey, if you're reading this and have an answer, my email is on my profile. Frankly, that's the only reason I decided to put this here right now, because I very much doubt the vp of ai at microsoft would take some dudes random call in the middle of the day, haha.
 
I don't know why, I am now just coming up with this idea... 
- because I would have used it, thoroughly. Funny part is, its such a simple and plain function
- named: "copyValue"
- I would have loved to just name it copy, but every single time I name something, with that level of simplicity, not only does it not end up working but, bad things happen, instead of possibly getting a headache later, I'm just going to avoid it all together
- You have probably already guessed at what this will do for you in the sidebar, whenever this item is clicked, whatever value you had given it, will be placed in your clipboard, to be used in whatever capacity you need
- due to the simplicity, and how I should have thought about this a million years ago, it will be up and running, and ready to be used shortly, the ui may not be up right away, but you can always add it to the config
 
Custom VSIX Packager
I Must have built the perfect one in a million, edge case, storm to really make vsce stop in its tracks. Ah, well, something new to learn, like I didn't know a vsix was a renamed zip file lol. Why, bother renaming it? Some thing, will just never make sense to me. So incase, like me, you cannot use vsce for whatever reason, or maybe you just don't like it and didn't even know... there was even another option. I personally, never really cared for vsce but didn't think there was another option, let alone building it myself. So, here we are, incase you want to run the command in a chain, or concurrent item in the sidebar
- ocrmnavigator.customVsixPackager
- place it like you would any other vscode command, I beleive this is the first command I've openly documented. Should, have a section that displays them all in case you wanted to go nuts building your own chain / concurrent commands... Just forever adding on to the ever growing work load
 
To trigger
- Need to right click package.json || package.dev.jsonc, in order for the command to be revealed
- now replacing vsce within the build +++ function
- Currently the packager executes:
- Currently ignoring the following files: thus providing you with a slightly smaller file than vsce does
.git
.git/**
scripts
scripts/**
vsix
vsix/**
.vscodeignore
package.dev.jsonc
package-lock.json
**/*.vsix
- IF, you have .vscodeignore in your root folder, it will instead use the rules you have set out within that file, just like any other ignore file, ensure to have a rule per line
- note: the .vscodeignore file will completely over write the current ignore list in place, giving you the freedom / control you need, so don't just place in a single item thinking it will, just add that one onto a list, the above list is exactly hows each ignored within the script, so you can copy paste into the ignore and add anything else you would like or, you can also remove items
 
- I will make it so that, we can have it just get pushed to the marketplace without worry or hassle
So what you will be left with, if you inspect it, is your extension placed within the extension folder, [Content_Types].xml and finally your extension.vsixmanifest, thus allowing us to upload to marketplace without issue, and if left at default will produce a smaller file than vsce.
UPDATE: If your reading this, and the marketplace listing looks perfectly fine, then you know the vsix uploads perfectly to be listed and displayed in the marketplace
Build Extension +++...
I've been wanting to update this for so long... As I have always felt that it... just needed to do a couple more things
Full function overview
- saves all files 
- takes note of all existing files with .vsix in root folder, adding the file count to the step count for progress tracking 
- compiles extension via - pnpm run compileso make sure you have this set up in your package.json
 - 
- it doesn't just run pnpm, it first checks which compiler you currently use, and uses the appropriate command, so whenever you see any command written about after this, just remember its not using pnpm, but whatever pkg mgr you use
 
- checks if local files are dirty - 
- if yes, git add && git diff || git commit && git push && pnpm version patch && git push && git push --tags
- if your wondering wtf, that was about. If your files are not synced with your repo it runs all the commmands it needs in order to "clean" your local file registry, in other words so your local files match / mirror your repos, next it increases the patch number by 1 and pushing that to your repo, finishing off with locally creating the vsix file
 
- if no, pnpm version patch && git push && git push --tags
 
- waits for new vsix file to be created 
- creates vsix file, placing it in the root folder 
- publishes the extension with once built 
this next step I'm putting back in because, even after publishing with vsce publish, the microsoft dashboard does not recognize it. Personally I don't know why, maybe you do shrugs, I just haven't had the time to spend to look into this. As I have noticed that the marketplace readme, does not update unless I update the extension on the dashboard. At one point, I noticed that there was almost a 30 day period with no updates, all the while I was using vsce publish, after visiting the marketplace listing, I had noticed the readme was about 10-11 updates old. So, for that reason... UPDATE: I'll keep an eye on if this changes or continues to act the same way, if it changes this will be removed
- reveals new vsix in file explorer 
- opens browser at publishers dashboard - 
- I have coded it to open a specfic browser for me, due to using accounts in certain browsers and microsoft not completely vibing with the fact that I will not sign up for one of their emails, instead using other providers to use their services. Because of that, their login process is really nitpicky on how I login. For you though, it will open your default browser and navigate to the dashboard. The reason I even brought all this up is, the url I used for you, after several tests seems to work for me, so I hope it works for you! So... if it doesn't work atleast you know why
 
- whatever amount of old vsix files you currently have in your root folder, will automatically get deleted... fucking finally... lol, I don't know why I waited so long to add this - 
- if you currently have no old vsix files, it skips this step
 
- instead of the soft extension restart, like before - 
- saves all files ( incase you kept on working, so nothing gets lost to the nether )
- restarts your instance, reopening the window you were in at the time of the instance shutting down, reopening in the same workspace so as to not interrupt us too much
 
I'll know pretty quickly if I hate this or not, so it might get changed back. But who knows, I might love it, since it takes care of one more step for me
... that restart was fast... damn... ok, might actually love this
Even with like 3 workspaces open, reopens them in faster than you can blink, safe to say for now, this will stay
 
Node script... 
const fs = require('fs');
const path = require('path');
const archiver = require('archiver');
const fse = require('fs-extra');
const { globby } = require('globby');
const ROOT_DIR = path.resolve(__dirname, '..');
const PACKAGE_JSON_PATH = path.join(ROOT_DIR, 'package.json');
const VSIX_IGNORE_PATH = path.join(ROOT_DIR, '.vscodeignore');
const VSIX_DIR = path.join(ROOT_DIR);
const REQUIRED_FILES = [
    'package.json',
    'README.md',
    'CHANGELOG.md',
    'LICENSE'
];
const STRUCTURE_DEPTH = 3;
const ADDITIONAL_IGNORES = [
    '.git',
    '.git/**',
    'scripts',
    'scripts/**',
    'vsix',
    'vsix/**',
    '.vscodeignore',
    'package.dev.jsonc',
    'package-lock.json',
    '**/*.vsix'
];
function isIgnored(filePath, patterns) {
    const normalizedPath = filePath.replace(/\\/g, '/');
    
    for (const pattern of patterns) {
        const normalizedPattern = pattern.replace(/\\/g, '/');
        
        if (normalizedPattern.endsWith('/**')) {
            const dir = normalizedPattern.slice(0, -3);
            if (normalizedPath === dir || normalizedPath.startsWith(dir + '/')) {
                return true;
            }
        }
        
        if (normalizedPattern.startsWith('**/')) {
            const suffix = normalizedPattern.slice(3);
            if (normalizedPath.endsWith(suffix) || normalizedPath.includes('/' + suffix)) {
                return true;
            }
        }
        
        if (normalizedPattern.includes('*')) {
            const regexPattern = normalizedPattern
                .replace(/\./g, '\\.')
                .replace(/\*\*/g, '.*')
                .replace(/\*/g, '[^/]*');
            const regex = new RegExp('^' + regexPattern + '$');
            if (regex.test(normalizedPath)) {
                return true;
            }
        }
        
        if (normalizedPath === normalizedPattern || normalizedPath.startsWith(normalizedPattern + '/')) {
            return true;
        }
    }
    
    return false;
}
function buildStructureTree(files, depth) {
    const tree = {};
    
    files.forEach(file => {
        const parts = file.split('/');
        let current = tree;
        
        for (let i = 0; i < Math.min(parts.length, depth); i++) {
            const part = parts[i];
            if (!current[part]) {
                current[part] = {};
            }
            current = current[part];
        }
    });
    
    return tree;
}
function printTree(tree, indent = '') {
    const entries = Object.keys(tree).sort();
    entries.forEach((key, index) => {
        const isLast = index === entries.length - 1;
        const prefix = isLast ? '└── ' : '├── ';
        const childIndent = indent + (isLast ? '    ' : '│   ');
        
        console.log(`${indent}${prefix}${key}`);
        
        if (Object.keys(tree[key]).length > 0) {
            printTree(tree[key], childIndent);
        }
    });
}
async function createVsix() {
    console.log('📦 Starting custom VSIX packaging...');
    await fse.ensureDir(VSIX_DIR);
    const pkg = await fse.readJson(PACKAGE_JSON_PATH);
    const extensionId = `${pkg.publisher}.${pkg.name}`;
    const vsixFileName = `${extensionId}-${pkg.version}.vsix`;
    const vsixPath = path.join(VSIX_DIR, vsixFileName);
    await fse.remove(vsixPath);
    let ignorePatterns = [...ADDITIONAL_IGNORES];
    if (await fse.pathExists(VSIX_IGNORE_PATH)) {
        const ignoreContent = await fse.readFile(VSIX_IGNORE_PATH, 'utf8');
        const filePatterns = ignoreContent
            .split('\n')
            .map(line => line.trim())
            .filter(line => line.length > 0 && !line.startsWith('#'));
        ignorePatterns.push(...filePatterns);
    } else {
        console.warn('.vscodeignore not found. Using default exclusions (node_modules, .git, etc.).');
        ignorePatterns.push(
            '**/node_modules/**',
            '**/src/**',
            '**/*.map',
            '**/*.ts',
            '**/*.tsx',
            '**/tsconfig.json',
            '**/webpack.config.js',
            '**/.vscode/**',
            '**/.gitignore'
        );
    }
    const outputDir = pkg.main ? path.dirname(pkg.main) : 'dist';
    if (ignorePatterns.includes(outputDir) || ignorePatterns.includes(outputDir + '/**')) {
        console.warn(`WARNING: The extension entry point folder (${outputDir}) is in .vscodeignore. This will break the extension.`);
    }
    const allFiles = await globby('**/*', {
        cwd: ROOT_DIR,
        dot: true,
        gitignore: false
    });
    const includedFiles = allFiles.filter(file => {
        if (REQUIRED_FILES.includes(file)) return true;
        const shouldIgnore = isIgnored(file, ignorePatterns);
        return !shouldIgnore;
    });
    REQUIRED_FILES.forEach(file => {
        if (!includedFiles.includes(file) && fs.existsSync(path.join(ROOT_DIR, file))) {
            includedFiles.push(file);
        }
    });
    console.log(`\nFound ${includedFiles.length} files to include (excluding ${allFiles.length - includedFiles.length} ignored files).`);
    console.log('\n🔍 Largest files being included:');
    
    const fileSizes = includedFiles.map(file => {
        const filePath = path.join(ROOT_DIR, file);
        const stats = fs.statSync(filePath);
        return { file, size: stats.size };
    }).sort((a, b) => b.size - a.size).slice(0, 10);
    
    fileSizes.forEach(({ file, size }) => {
        console.log(`  ${(size / 1024).toFixed(2)} KB - ${file}`);
    });
    const output = fs.createWriteStream(vsixPath);
    const archive = archiver('zip', { zlib: { level: 9 } });
    const archivedFiles = [];
    archive.on('entry', function(entry) {
        archivedFiles.push(entry.name);
    });
    output.on('close', function () {
        console.log(`\n✅ Successfully created VSIX: ${vsixPath}`);
        console.log(`Total size: ${(archive.pointer() / 1024 / 1024).toFixed(2)} MB`);
        
        const structure = buildStructureTree(archivedFiles, STRUCTURE_DEPTH);
        
        console.log(`\n📁 Structure (${STRUCTURE_DEPTH} levels deep):`);
        printTree(structure);
    });
    archive.on('warning', function (err) {
        if (err.code === 'ENOENT') {
            console.warn('Archive Warning:', err.message);
        } else {
            throw err;
        }
    });
    archive.on('error', function (err) { throw err; });
    archive.pipe(output);
    archive.append(fs.createReadStream(PACKAGE_JSON_PATH), { name: 'extension/package.json' });
    for (const filePath of includedFiles) { 
        if (filePath !== 'package.json') {
            archive.file(path.join(ROOT_DIR, filePath), { name: `extension/${filePath}` });
        }
    }
    await archive.finalize();
}
createVsix().catch(err => {
    console.error('\n❌ VSIX Packaging Failed:', err);
    process.exit(1);
});
 
Well, that was a long journey, forgot how annoying it was to continously go back to the terminal placing in each command after one another, waiting for it to finish before placing the next command. Happy that I only have to do it one more time, never to having to do this again. With that said, the vsix file sizes are smaller now and this function exectues in half the amount of time as it did before, since vsce didn't have an option to compile once, for saving locally and publishing. Coming back after testing, it runs way faster than half the amount of time as earlier, fyi. Whether or not you publish the vsix it won't interfere with the function
Wizards Section
Due to the quantity of commands and spells to cast, this will take a while for me to organize. BUT, I will leave it haphazardly as I take care of it when I can. That way, you can go through it at any time and grab what you need. What commands exactly? Every single one used in this extension.
- IF you wanted to create a custom concurrent / chain commond that includes all matter of comands and bobs to whirl, have at it
- I hate limiting things or people, letting them to their own devices. Ontop of which, this gives you the freedom to do things that your use case needs
- I wish this was more of a common thing, because whenever I wanted to do something like this, with another extensions functionality, I had to search, test out a bunch of different functions till I found it because of stupid naming conventions. BECAUSE, you can throw in any extensions commands into devstack, so long as that other extension is installed in your instance, thus giving access to its function, within your instance... sigh, I dont even know how I'm going to catergorize this
Took a lot less time than I thought it would, to get the base list cleaned...
I am not... including the 2200 functions from the ui library
Example Usage
{    
  {
    "label": "Custom .VSIX Packager",
    "path": "ocrmnavigator.customVsixPackager",
    "type": "command"
  }
}
Allowing you to place it within the sidebar to be used whenever you need it. Or if you want to chain a bunch of them together, to run all at once or one after another, along with other scripts, powershell commands, sh commands and so on. This isn't ALL of them, I think 150-200 or so, but its a start for now. Once it's catergorized and looking pretty, I'll add more.
ocrmnavigator.customVsixPackager
Custom .VSIX Packager
ocrmnavigator.openPrePrompt
Open Pre-Prompt
ocrmnavigator.copyValue
Copy Value
ocrmnavigator.installCatalystUIFree
Install Catalyst UI Comps
ocrmnavigator.installCatalystUI
Install Catalyst UI
ocrmnavigator.UIComponents
Components
ocrmnavigator.UIComponentsList
Components List
ocrmnavigator.UIComponentsViewer
Components Viewer
ocrmnavigator.catalystUI.x.sidebar01
Navigation Grouped By Section
ocrmnavigator.catalystUI.x.sidebar02
With Collapsible Sections
ocrmnavigator.catalystUI.x.sidebar03
With Submenus
ocrmnavigator.catalystUI.x.sidebar04
Floating Sidebar With Submenus
ocrmnavigator.catalystUI.x.sidebar05
With Collapsible Submenus
ocrmnavigator.catalystUI.x.sidebar06
With Submenus As Dropdowns
ocrmnavigator.catalystUI.x.sidebar07
Collapses To Icons
ocrmnavigator.catalystUI.x.sidebar08
With Secondary Navigation
ocrmnavigator.catalystUI.x.sidebar09
With Collapsible Nested Sidebars
ocrmnavigator.catalystUI.x.sidebar10
In A Popover
ocrmnavigator.catalystUI.x.sidebar11
Collapsible File Tree
ocrmnavigator.catalystUI.x.sidebar12
With A Calendar
ocrmnavigator.catalystUI.x.sidebar13
In A Dialog
ocrmnavigator.catalystUI.x.sidebar14
Right Sidebar
ocrmnavigator.catalystUI.x.sidebar15
Left And Right Sidebar
ocrmnavigator.catalystUI.x.sidebar16
Shopping Cart
ocrmnavigator.catalystUI.x.sidebar17
Shopping Cart V2
ocrmnavigator.catalystUI.x.sidebar18
With A Tree View
ocrmnavigator.catalystUI.x.sidebar27
Right & Left Sidebar W Full Functionality
ocrmnavigator.notesTodoAndThings
Notes Todo And Things
ocrmnavigator.changeFreePremium
Change Free Premium
ocrmnavigator.tailwindConverter
Tailwind Converter
ocrmnavigator.yeet
yeet
ocrmnavigator.renderMd
Render MD
ocrmnavigator.YEEEETMOTHERFUCKER2
Build Extension +++
ocrmnavigator.foldParentRegions
Auto Fold #dev
ocrmnavigator.autoFoldRegion
Auto Fold #dev"
ocrmnavigator.openLeftOffNote
Open Left Off Note
ocrmnavigator.openExistingNote
View Left Off Note
ocrmnavigator.navigateToBookmark
Navigate to Bookmark
ocrmnavigator.openGitHubRepoAtFile
Open GitHub Repo At File
ocrmnavigator.showModernizationStats
Show Modernization Stats
ocrmnavigator.convertClassToHooks
Convert Class to Hooks
ocrmnavigator.modernizeCode
Modernize Code
ocrmnavigator.navigateToError
Navigate To Error
ocrmnavigator.undoLastFix
Undo Last Auto-Fix
ocrmnavigator.sendFunctionContextToCopilot
Send Function Context to Copilot
ocrmnavigator.confirmFixWorked
Confirm Fix Worked (Learn Pattern)
ocrmnavigator.clearErrorHistory
Clear Error History
ocrmnavigator.showErrorHistory
Show Error History
ocrmnavigator.errorsMissingImportsPlus
Find Errors, Missing Imports & More
ocrmnavigator.createFolderSmartIndex
Create Export Index ( registry )
ocrmnavigator.convertToAgnostic
Convert To Become Agnostic
ocrmnavigator.concurrent
Concurrently
ocrmnavigator.typography
Typography
ocrmnavigator.navMenu
Nav Menu
ocrmnavigator.pagination
Pagination
ocrmnavigator.dateTime
Date Time Picker
ocrmnavigator.dateWInput
Date W/ Input
ocrmnavigator.dobDate
DOB Date Picker
ocrmnavigator.avatar
Avatar
ocrmnavigator.alertDialog
Alert Dialog
ocrmnavigator.switchCard
Switch Card
ocrmnavigator.shadCNswitch
Switch
ocrmnavigator.textarea
Textarea
ocrmnavigator.addShadcnTooltip
Tooltip
ocrmnavigator.addShadcnSidebar
Sidebar
ocrmnavigator.addShadcnContextMenu
Context Menu
ocrmnavigator.addShadcnPopover
Popover
ocrmnavigator.addShadcnMenubar
Menubar
ocrmnavigator.addShadcnHoverCard
Hover Card
ocrmnavigator.addShadcnDropdownMenu
Dropdown Menu
ocrmnavigator.addShadcnDrawer
Drawer
ocrmnavigator.addShadcnChart
Chart
ocrmnavigator.addShadcnCombobox
Combobox
ocrmnavigator.addShadcnCheckbox
Checkbox
ocrmnavigator.addErrorBoundary
Error Boundary
ocrmnavigator.addMetaFunction
Meta Function
ocrmnavigator.addLinksFunction
Links Function
ocrmnavigator.createActionObject
Create Action Object
ocrmnavigator.createIncludeObject
Create Include Object
ocrmnavigator.reactrouterFileBasedRouting
RR Folder Routing
ocrmnavigator.inlinesImports
Inline Imports
ocrmnavigator.openPlayer
Media Player
ocrmnavigator.myTanStackTable
TanStack Table Scaffolding
ocrmnavigator.myProjectSetup
Project Scaffolding
ocrmnavigator.autoRemixAction
Automatic Remix Action
ocrmnavigator.createUiMD
MD
ocrmnavigator.buildProjectConfigurator
Build & Deploy
ocrmnavigator.createSingleApp
Create Single App - React Router
ocrmnavigator.createMonorepo
Create Monorepo
ocrmnavigator.openMusicInBrowser
Playlist
ocrmnavigator.convertToMono
Convert to Monorepo
ocrmnavigator.buildProject
Build & Deploy Project
ocrmnavigator.updatePrisma
Update Prisma Scripts
ocrmnavigator.strView
Superuser Task Runner
ocrmnavigator.themedScrollBar
Scroll Bar - based on CSS theme
ocrmnavigator.mdFile
View MD
ocrmnavigator.testsubmenu
test sub menu
ocrmnavigator.devStackView
Chains
ocrmnavigator.mdViewWorkspaceList
MD
ocrmnavigator.cmdsView
DevStack
ocrmnavigator.uiReference
Reference
ocrmnavigator.uiCreate
Create
ocrmnavigator.uiMasterApps
Master Apps
ocrmnavigator.skylersMenuEditorContext
8an3
ocrmnavigator.ui8an3Menu
8an3
ocrmnavigator.uiConfigurators
Configurators
ocrmnavigator.snippetsFile
Snippets File
ocrmnavigator.snippetsEdit
Edit Snippet
ocrmnavigator.chainsEdit
DevStack Chains
ocrmnavigator.cmdsEdit
Command
ocrmnavigator.snippetsCreate
Snippet Create
ocrmnavigator.createMDWCheat3Wide
MD w/ Viewer
ocrmnavigator.chainsCreate
Chain
ocrmnavigator.cmdsCreate
Cmd / Powershell Cmd / URL / VSCode Cmd / Debian Cmd / File / MD / Folder
ocrmnavigator.openUi
UI Dashboard
ocrmnavigator.configSub
Configuration
ocrmnavigator.lucideButtons
Lucide Icons
ocrmnavigator.colorWheel
Color Wheel
ocrmnavigator.blackedOut
Blacked Out
ocrmnavigator.bluedOut
Blued Out
ocrmnavigator.windowDifferentiator
Window Differentiator
ocrmnavigator.resetWindowDifferentiator
Reset Colors - Window Differentiator
ocrmnavigator.useHydrated
Required for clientOnly - use-hydrated.js
ocrmnavigator.clientOnly
Custom client-only.js that replaces remix-utils version
ocrmnavigator.searchWFusejs
Search w/ Fuse.js
ocrmnavigator.searchWFilter
Search w/ Filter
ocrmnavigator.commandWCommandInput
Command w/ CommandInput
ocrmnavigator.commandWSearch
Command w/ Search
ocrmnavigator.bgWHover
BG w/ Hover
ocrmnavigator.blue
BG Blue w/ Hover
ocrmnavigator.apiRoute
API Route
ocrmnavigator.prevState
prevState
ocrmnavigator.insertSnippet
%s
ocrmnavigator.visualizeSchemaRelations
Visualize Schema Relations
ocrmnavigator.remix
Functions
ocrmnavigator.remixAdd
Remix
ocrmnavigator.contextSnippets
Context Snippets
ocrmnavigator.showHistory
Show History
ocrmnavigator.prisma
Prisma
ocrmnavigator.generateCrudResolvers
Generate CRUD Resolvers
ocrmnavigator.clickToSchemaObject
Open Object In Schema
ocrmnavigator.openGitHubRepo
Open GitHub Repo In Browser
ocrmnavigator.github
GitHub Functions
ocrmnavigator.cammandPagination
Command - Pagination
ocrmnavigator.removeUnusedImports
Remove Unused Imports From File
ocrmnavigator.devStackSubmenu
DevStack
ocrmnavigator.testRouteFile
Create Tests For Route and Action
ocrmnavigator.installAuthRemix
Install Auth in Remix w/ Auth Routes
ocrmnavigator.installOTPRemix
Install OTP Into Remix w/ Auth Routes
ocrmnavigator.configureEslingPrettier
Add ESlint and Prettier configs
ocrmnavigator.installShadcn
Install ShadCN w/ All Components
ocrmnavigator.convertV1ToV2
Converts the v1 routing convention to v2
ocrmnavigator.addFetch
Fetch w/ state and useEffect
ocrmnavigator.addCleanSmTable
Sm Table w/ Columns
ocrmnavigator.addFuseInput
Fuse Input w/ X
ocrmnavigator.designedButtonClassName
Designed Button ClassName
ocrmnavigator.configureImports
Configure Missing Imports
ocrmnavigator.addMissingImports
Configure Missing Imports
ocrmnavigator.addRouteFile
Route File
ocrmnavigator.addTableFile
TanStack Table File
ocrmnavigator.addUseEffect
useEffect
ocrmnavigator.addUseState
useState
ocrmnavigator.addMap
Map
ocrmnavigator.addOnSubmitFunionatlity
On Submit w/ Fetcher
ocrmnavigator.addOnClickWithSubmit
Button W/ On Click With Submit
ocrmnavigator.addClassNames
ClassNames
ocrmnavigator.addFetcherForm
Fetcher.Form With Items
ocrmnavigator.addLoader
Loader
ocrmnavigator.addAction
Action
ocrmnavigator.openRouteInBrowser
Open Route in Browser
ocrmnavigator.previewRoute
Preview Route URL
ocrmnavigator.testRouteConversion
Test Route Conversion
ocrmnavigator.openUrlFromEditor
Open the files route
ocrmnavigator.missingImportsAndVariables
Missing Imports && Variables
ocrmnavigator.configExample
View Example Config
ocrmnavigator.hideSingleItem
Toggle To Hide Item In UI
ocrmnavigator.toggleHiddenItems
Toggle Hidden Nav Items
ocrmnavigator.YEEEETMOTHERFUCKER
YEEEET!!!
ocrmnavigator.refreshWorkspaceSnippets
refreshWorkspaceSnippets
ocrmnavigator.saveSnippet
Save Snippet
ocrmnavigator.openSingleSnippet
Snippet Viewer
ocrmnavigator.openSnippetFromFile
OCRM Navigator: Open in Snippets Viewer
ocrmnavigator.importSnippets
Import Snippets
ocrmnavigator.openSnippetsWebview
Snippet Viewer
ocrmnavigator.createSnippet
Create Snippet
ocrmnavigator.editSnippet
Edit Snippet
ocrmnavigator.copySnippetToClipboard
Copy Snippet Body
ocrmnavigator.addAutoSequencer
Chain / Cmd Sequencer"
ocrmnavigator.autoSequencer
Execute a chain of items."
ocrmnavigator.autoCommitPushUpgrade
Auto Commit, Push and Upgrade"
ocrmnavigator.autoCommitPush
Auto Commit and Push"
ocrmnavigator.upgradeExtension
Upgrade Patch, create & reveal VSIX"
ocrmnavigator.addBashCommand
Open NRCSync"
ocrmnavigator.openExternalWebview
Open NRCSync"
bookmarks.add
Add Bookmark"
bookmarks.show
Show Bookmarks"
clipboardManager.showHistory
Show Clipboard History"
ocrmnavigator.addUnusedToFileTree
Add to tree items
ocrmnavigator.searchForExportsThatAreNotInUse
Search For Unused Exports
ocrmnavigator.quickSearch
Search
ocrmnavigator.formattersSub
Formatters
ocrmnavigator.viewersSub
Open Viewer
ocrmnavigator.editConfig
Edit .json Config
ocrmnavigator.revealInExplorer
Reveal in Explorer
ocrmnavigator.copyPath
Copy Path
ocrmnavigator.addFileToNavigator
Add File to DevStack
ocrmnavigator.initialFile
Add File/s to DevStack
ocrmnavigator.editFileLabel
Edit Label
ocrmnavigator.deleteItem
Remove Item
ocrmnavigator.moveCategoryUp
Move Folder Up
ocrmnavigator.moveCategoryDown
Move Folder Down
ocrmnavigator.deleteCategory
Remove Folder
ocrmnavigator.exportConfig
Export Config
ocrmnavigator.importConfig
Import Config
ocrmnavigator.addItemToDevstack
Add Item
ocrmnavigator.editWebUrl
Edit Web URL
ocrmnavigator.executeSTRCommand
Execute Command
ocrmnavigator.executeCommand
Execute Command
ocrmnavigator.addSubcategory
Add Sub Folder
ocrmnavigator.collapseFolder
Collapse Folder By Default
ocrmnavigator.expandFolder
Expand Folder By Default
ocrmnavigator.refresh
Refresh Navigator
ocrmnavigator.removeUrl
Remove URL
ocrmnavigator.editCommand
Edit Command
ocrmnavigator.moveItem
Move File Item
ocrmnavigator.setMoveTarget
Select as Move Destination
ocrmnavigator.createMD
MD
ocrmnavigator.editMD
Edit .MD
ocrmnavigator.editMDLabel
Edit .MD Label
ocrmnavigator.showCommandsReference
VSCode Cmds Reference
ocrmnavigator.viewMarkdownGuide
MD Guide
ocrmnavigator.moveFileUp
Move File Up
ocrmnavigator.removeConsoleLogsFromFile
Remove console.log statements from this file"
ocrmnavigator.removeConsoleLogsFromFolder
Remove console.log statements from folder"
ocrmnavigator.removeConsoleLogsFromWorkspace
Remove console.log statements from workspace"
ocrmnavigator.debianCMD
Execute Debian WSL CMD
ocrmnavigator.renameBatch
Batch Rename
ocrmnavigator.addTerminalCommandToCategory
Bash Cmd
ocrmnavigator.moveFileDown
Move File Down
ocrmnavigator.executeItem
Execute Terminal CMDS
ocrmnavigator.addFilesToNavigator
Batch Add Files to CRM Navigator
ocrmnavigator.renderFileInMdViewer
.MD Viewer
ocrmnavigator.search
Search in Navigator
ocrmnavigator.formatCurrentFile
Format with DevStack"
ocrmnavigator.configureFormatters
Formatters"
ocrmnavigator.shareConfig
Share Config With Friend"
ocrmnavigator.mainActions
Main Menu"
ocrmnavigator.addActions
Add Menu"
ocrmnavigator.renderEmptyMd
Markdown Viewer"
ocrmnavigator.mdViewer
Markdown Viewer"
ocrmnavigator.editDefaultValues
Default Apps"
ocrmnavigator.removeJson
Remove Trailing Commas"
ocrmnavigator.themeViewer
VSCode Theme Configurator"
ocrmnavigator.removeAllComments
Remove All Comments"
ocrmnavigator.jsonComments
JSON Comments"
ocrmnavigator.renderedMDFile
Render MD In VSCode"
ocrmnavigator.authDesignPage
Auth Design Page
ocrmnavigator.showQuickPick
DevStack: Search
 
Live React / Tailwind Playground
- A dedicated live development environment that prioritizes speed and focuses exclusively on component design ( but not entirely ), complete with a dynamic, minimalist dock and integrated helpers
It seems to be a consistant theme, esepcially of late, where the enviroments I'm designing / coding in are just so slow and the speed at which an item can render, being entirely out of my control. Whether it be due to the fact that, the project has grown so much so that even the dev server no longer loads quickly. At times, being so slow I find I'm coding in 4 different files so as to not sit there and just waste time waiting. Or the opposite but more dangerous counterpart, saying fuck it and really trying to yeet out of the park, by not rendering a single page for the entire project, lol.
But there has always, been one issue when it came to whenever I was looking for a live playground. They are always... 100% of the time, in languages I do not code in. And designing the new sidebar for a part of this extension, was the last nail in the coffin. Waiting well, over 5 minutes between renders. It might not bother me as much if i was better at styling, but it's something I've never been great at. I have literally idly been looking for one ever since I started coding.
AND because I have looked at sooo many, for soooo long, I atleast know what I DO NOT want, haha, because lets be real. The majority of the time, usually more thankful its in another langurage since the ui looks that bad or that clunky to use. And the editors, 75% are beyond horendous to have to be using it all the time.
Features:
- 3 pages, each being full pages - 
- editor
- renderer
- css styling, even though it will be focused on tailwind, I still find the use for css files more often than not
 
- it sounds rediculous, but hear me out. Because we do not need a million functions from the editor itself, instead of cheaping out on the editor, I'm gonna do the exact opposite. Walking right by the the text areas or double / triple text area layouts, it will be a full page monaco editor, stripped... almost bare, but not quite. Even in its most bare state, there is still a hidden command with search capabilties giving way more funcationality then any text box / editor could fathom of having. In its stripped state, codes just as good if not better than anything else I have coded on while it was hosted on a webpage. On page load a empty, function will already be in place, so you can get right at it 
- There will be no buttons, on the monaco editors ui. But, can't not have functionality but I do want to jam as much as I can onto the page while not weighing us down, or feel like your giving up realestate to trade for said functions. A dock will be used where it will have two states, the first being it fades to glass like state, you can see it so you know its there, but you cant make anything out, thus leaving you to ur devices with zero distraction. For the people that hate that, the three main nav buttons to switch between pages will only fade to 50% 
- the remainder of the buttons on that dock will always fade out to where you can just see them. Hovering over it, snapping it back into view. To help everyone out, so you don't feel like the ui is ever in your way, there will be a button on the dock, when clicked 3 buttons will shoot off and spread out towards their respective directions so you can change the location as quickly as posible, while saving space 
- other functionality will include but not limited to copying to clipboard, export the files, one click adds of use state, use effects and other goodies of that nature, for the first time in years I'll be coding a light / dark theme switcher, a button opening a command with search allowing you to click slect one oif the 2200 items in the ui library, letting you paste it where you please, amonge others, in them including a hot swapping theme button as well 
Last but not least, it will be a tailwind / react / css enviroment. At this time, I don't even know of one out there. I have seen, less than a handful over the years, and whenever they did pop up. Were so bad half of them didn't even work.
Hope this works out because, my last resort would be a dedicate app for this. Which I don't want for a lot of reasons, mostly just for the overhead. Spinning up another instance, dev servers and all that and more.  It's only half way done, but you will find it in the UI's tool section when it is.
Reporting Page
- to make it even easier for you to submit a bug report, a page has been created within the devstack ui for you to do so
- bug - brief description of prob
- URL
- description
 
- Currently there are over 2400 tests, even though this covers over 90% of the extensions functionality, I still need to write the remaining tests. In the mean time if you come across something that does not work, let me know
Issues and Bugs
- currently none to report on