monaco-editor-lsp-next
Go to file
cfngc4594 1bdae1d458
Some checks failed
Docker Build and Push / docker-build-and-push (., Dockerfile, monaco-editor-lsp-next) (push) Failing after 21s
Docker Build and Push / docker-build-and-push (./docker/lsp/clangd, ./docker/lsp/clangd/Dockerfile, lsp-c) (push) Failing after 15s
Docker Build and Push / docker-build-and-push (./docker/lsp/clangd, ./docker/lsp/clangd/Dockerfile, lsp-cpp) (push) Failing after 14s
chore(dockerignore): remove env* pattern from .dockerignore
2025-03-05 22:50:36 +08:00
.github/workflows fix(docker): update matrix strategy for clearer context and file assignment 2025-03-05 15:44:26 +08:00
docker/lsp/clangd feat(docker): simplify docker compose commands and add compose.yml for service configuration 2025-02-21 19:56:49 +08:00
public docs: add placeholder .gitkeep file to 'public' folder 2025-02-20 01:31:14 +08:00
src feat(language-server): add logging for URL creation in connectToLanguageServer 2025-03-05 19:21:55 +08:00
.dockerignore chore(dockerignore): remove env* pattern from .dockerignore 2025-03-05 22:50:36 +08:00
.env.example fix(language-server): update configuration to use environment variables for WebSocket settings 2025-02-24 00:22:34 +08:00
.gitignore chore: update .gitignore to explicitly commit env files 2025-02-20 08:42:01 +08:00
bun.lock feat(components/ui): add Sidebar-13 component from shadcn/ui 2025-03-03 14:51:13 +08:00
components.json chore: initialize shadcn/ui 2025-02-19 09:07:30 +08:00
compose.local.yml chore(docker): update docker compose configuration to use pre-built images 2025-03-05 15:58:44 +08:00
compose.yml chore(docker): update docker compose configuration to use pre-built images 2025-03-05 15:58:44 +08:00
demo.png chore(images): replace demo image with new version 2025-03-05 10:30:27 +08:00
Dockerfile feat(dockerfile): support bun.lockb file 2025-03-05 16:23:10 +08:00
eslint.config.mjs chore: initialize the project 2025-02-19 09:00:15 +08:00
LICENSE chore: add MIT License file to the repository 2025-02-19 18:38:49 +08:00
next.config.ts feat(next.config): add dockerode to serverExternalPackages 2025-02-26 21:18:33 +08:00
package.json feat(components/ui): add Sidebar-13 component from shadcn/ui 2025-03-03 14:51:13 +08:00
postcss.config.mjs chore: initialize the project 2025-02-19 09:00:15 +08:00
README.md docs(readme): improve setup instructions with pre-built Docker images 2025-03-05 16:19:02 +08:00
tailwind.config.ts feat(components/ui): add Sidebar-13 component from shadcn/ui 2025-03-03 14:51:13 +08:00
tsconfig.json chore: initialize the project 2025-02-19 09:00:15 +08:00

monaco-editor-lsp-next

A seamless Next.js integration of the Monaco Editor with robust LSP support all without SSR hassles.

demo

⚠️ WSL Users: Critical Configuration

🐧 Network Mode Requirement

When using Windows Subsystem for Linux (WSL), you must configure your network mode as Mirrored to ensure proper LSP server connectivity. Standard WSL network configurations may create IPv6 conflicts that block Monaco-LSP communication.

🔧 Mirror Mode Setup:

  1. Open WSL settings ⚙️
  2. Navigate to Network section 🌐
  3. Select Mirrored mode 🔄
  4. Restart WSL instance 💻

Complete these steps before launching the editor for seamless LSP integration! 🎉

🚀 Getting Started

Deploy the project quickly using pre-built Docker images:

# Clone the repository
git clone https://github.com/cfngc4594/monaco-editor-lsp-next
cd monaco-editor-lsp-next

# Start the application with pre-built images
docker compose up -d

🔨 Local Manual Build

Build the images locally and start the containers:

# Clone the repository
git clone https://github.com/cfngc4594/monaco-editor-lsp-next
cd monaco-editor-lsp-next

# Build and start containers using the local configuration
docker compose -f compose.local.yml up -d --build

🛠 Development Mode

Set up a development environment with hot-reloading:

# Clone the repository
git clone https://github.com/cfngc4594/monaco-editor-lsp-next
cd monaco-editor-lsp-next

# Start only the LSP containers
docker compose up -d lsp-c lsp-cpp
# Or use the local configuration
# docker compose -f compose.local.yml up -d --build lsp-c lsp-cpp

# Install dependencies and start the development server
bun install
bun run dev

⚙️ Technical Configuration

LSP Server Mapping

Language LSP Server Port
C clangd 4594
C++ clangd 4595

📦 Dependency Management

🔒 Version Lock Requirements

Critical Pairing:

Package Max Version Reference
monaco-editor ≤0.36.1 Compatibility Matrix
monaco-languageclient ≤5.0.1

Version Lock Rationale:

  1. API Stability

    • Newer monaco-editor (≥0.40.0) breaks monaco-languageclient integration
    • v0.36.1 matches @codingame/monaco-vscode-api@1.76.9 requirements
  2. LSP Feature Breakdown

    • Version mismatches disable:
      • Auto textDocument/didOpen events
      • textDocument/inlayHint resolution
      • textDocument/documentLink functionality
  3. Version Conflict

    • @codingame package versioning (e.g., 11.1.2) ≠ monaco-editor versions (e.g., 0.36.1)
    • @monaco-editor/react depends on monaco-editor versioning scheme

Failure Indicators:

  • ✔️ WebSocket connection established
  • Missing syntax highlighting
  • No autocomplete suggestions
  • Silent LSP initialization failures

🎨 Shiki Compatibility Notice

Syntax highlighting depends on rehype-pretty-code's deprecated getHighlighter API from shiki@legacy.

Key Points:

  • Affected File: src/components/mdx-preview.tsx

  • Dependency Chain: rehype-pretty-codeshiki@legacy

  • Version Constraints:

    "shiki": "<=2.5.0"
    "@shikijs/monaco": "<=2.5.0"
    

Maintenance Note:
While shiki@3.0.0+ introduces modern APIs (createHighlighter/getSingletonHighlighter), upgrading requires rehype-pretty-code updates. Track progress here.