Replace Web IDE with client-only VS Code
## Problem Statement
The GitLab Web IDE is in a sort of in-between area. It's not a full "IDE" in that it can't compile code and it's not customizable to match a developer's personal workflows. But it's also way more powerful than our Web Editor, a single-file editing experience that is super fast but can be limiting if you want to do anything more than fix a typo or write some Markdown.
## Solution
Replace the current Web IDE, which is based on the open sourced Monaco editor, with a client-side instance of VS Code and implement custom extensions for creating commits and interacting with MRs.
## Benefits
- Dramatically improved usability and feature complete-ness
- Ability to customize the theme and syntax highlighting from within the editor
- Access to VSCode extensions to customize the user experience
### Web IDE issues this addresses
With the implementation of a more mature open source editor, we will be able to close a number of issues and feature requests. See https://gitlab.com/gitlab-org/gitlab/-/issues/355797 for more detail
## Risks / Drawbacks
- VS Code has a huge percentage of the IDE market but some people may prefer other editors.
- The current Monaco-based Web IDE is exceptionally simple and we'll be increasing the complexity of the editor, potentially making it harder for non-developers to contribute.
## Iterations
This is a large task but very achievable in the near term. We already have a functional proof of concept. To get to a production-ready implementation we'll follow this approach:
1. ~~Convert the proof of concept to a read-only instance deployed to `gitlab-org` behind a feature flag.~~ :heavy_check_mark:
2. ~~Build a custom git module for VS Code~~ :heavy_check_mark:
3. ~~Handle commits from the new editor~~ :heavy_check_mark:
4. ~~Launch Beta on~~ ~~Gitlab.com~~ :heavy_check_mark:
5. Pre-install the GitLab Workflow VS Code extension to handle MR workflows
6. ~~Launch to a small number of users and solicit feedback~~ (moved to earlier, beta release)
7. Enable extensions for Self-managed users behind a feature flag
8. Allow users to opt-in to using extensions after accepting the privacy statement
9. Allow self-managed admins to enable extensions in the Admin interface
10. Self-managed admins can create an allow-list for extensions
11. ~~Re-implement Web Terminal functionality~~ :heavy_check_mark: The Remote Development MVC gives you access to an interactive terminal.
12. ~~Re-implement Live Preview functionality~~ (not going to do this)
13. Remove the "old" Web IDE code
14. Search across a project
epic