Skip to content

lspcontainers/dockerfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

lspcontainers/dockerfiles

πŸš€ Dockerfiles for Language Server Protocol (LSP) servers - Containerized language servers for use with lspcontainers.nvim.

Docker Hub Build Status License

🌟 What is this?

This repository provides production-ready Docker containers for 25+ Language Server Protocol (LSP) servers, designed to work seamlessly with the lspcontainers.nvim Neovim plugin.

🎯 How it works:

  1. Docker containers provide isolated, reproducible LSP server environments
  2. lspcontainers.nvim plugin automatically manages these containers in Neovim
  3. Zero local installation - no need to install language servers on your system

Perfect for:

  • Consistent development environments across teams and machines
  • Clean system - no language server pollution on your host
  • Reproducible builds with pinned package versions
  • Easy switching between language server versions

πŸ› οΈ Supported Language Servers

Language Server Container Version
Bash bash-language-server lspcontainers/bash-language-server Version
C/C++ clangd lspcontainers/clangd-language-server Version
C# omnisharp lspcontainers/omnisharp-language-server Version
CSS/SCSS/Less vscode-css-languageserver lspcontainers/css-language-server Version
Deno deno-lsp lspcontainers/deno-language-server Version
Docker dockerfile-ls lspcontainers/docker-language-server Version
ESLint eslint-languageserver lspcontainers/eslint-language-server Version
Go gopls lspcontainers/gopls Version
GraphQL graphql-language-service lspcontainers/graphql-language-server Version
HTML html-languageserver lspcontainers/html-language-server Version
JavaScript/TypeScript typescript-language-server lspcontainers/typescript-language-server Version
JSON vscode-json-languageserver lspcontainers/json-language-server Version
Lua lua-language-server lspcontainers/lua-language-server Version
PHP intelephense lspcontainers/php-language-server Version
PowerShell powershell-es lspcontainers/powershell-language-server Version
Prisma prisma-language-server lspcontainers/prisma-language-server Version
Python pylsp lspcontainers/python-lsp-server Version
Python pyright lspcontainers/pyright-language-server Version
Ruby solargraph lspcontainers/ruby-language-server Version
Rust rust-analyzer lspcontainers/rust-analyzer Version
Svelte svelte-language-server lspcontainers/svelte-language-server Version
Tailwind CSS tailwindcss-language-server lspcontainers/tailwindcss-language-server Version
Terraform terraform-ls lspcontainers/terraform-ls Version
Vue volar lspcontainers/volar-language-server Version
Vue vuels (legacy) lspcontainers/vue-language-server Version
XML lemminx lspcontainers/xml-language-server Version
YAML yaml-language-server lspcontainers/yaml-language-server Version

πŸš€ Quick Start

Using with lspcontainers.nvim (Recommended)

These containers are designed to work with the lspcontainers.nvim plugin.

πŸ‘‰ See the plugin documentation for installation and setup instructions.

Building Containers Locally

# Clone the repository
git clone https://github.com/lspcontainers/dockerfiles.git
cd dockerfiles

# Build a specific server
docker-compose build gopls

# Build all servers
docker-compose build

# Build all servers in parallel (faster!)
docker-compose build --parallel

πŸ“‹ Prerequisites

πŸ—οΈ Architecture & Design

πŸ”’ Reproducible Builds

All containers use pinned package versions for complete reproducibility:

  • Base images: Specific Alpine/Debian versions
  • System packages: Exact apk/apt package versions
  • Language packages: Pinned npm, gem, pip, go module versions

πŸ”οΈ Minimal & Secure

  • Alpine Linux base for minimal attack surface
  • Multi-stage builds where applicable
  • Non-root users for security
  • Distroless principles - only essential components

πŸ”„ Automated Updates

  • Daily builds via GitHub Actions
  • Dependency scanning and security updates
  • Version tracking of upstream language servers

🀝 Contributing

We're actively looking for contributors! Here's how you can help:

πŸ› Report Issues

Found a bug or have a feature request? Open an issue!

πŸ”§ Add New Language Servers

Want to add support for a new language? We'd love your contribution!

  1. Fork the repository
  2. Create a new directory under servers/your-language-server/
  3. Write a Dockerfile following our patterns:
    FROM alpine:3.22.1
    
    ARG VERSION=1.2.3
    LABEL version="${VERSION}"
    
    RUN apk add --no-cache \
      nodejs=22.16.0-r2 \
      npm=11.3.0-r0 \
      && npm install -g \
        your-language-server@${VERSION}
    
    CMD [ "your-language-server", "--stdio" ]
  4. Add to docker-compose.yaml
  5. Test your build: docker-compose build your-server
  6. Submit a pull request

πŸ› οΈ Improve Existing Containers

  • Update language server versions
  • Improve Dockerfile efficiency
  • Add missing tools or dependencies
  • Enhance security

πŸ“š Documentation

  • Improve README files
  • Add usage examples
  • Write integration guides
  • Create tutorials

🏷️ Container Versioning

Every container provides two tags:

  • latest - Latest build from main branch
  • vX.Y.Z - Pinned version of the language server
# Always latest
docker pull lspcontainers/gopls:latest

# Specific version for production
docker pull lspcontainers/gopls:v0.19.1

πŸ”„ Updating Dockerfile Versions

Each Dockerfile includes version information that controls both the language server version and container tagging:

# Version is declared at the top
ARG VERSION=1.2.3
LABEL version="${VERSION}"

# Version variable is used in installation
RUN npm install -g your-language-server@${VERSION}

To update a language server version:

  1. Edit the Dockerfile in servers/your-server/Dockerfile
  2. Update the VERSION argument to the new version
  3. Test the build locally: docker-compose build your-server
  4. Submit a pull request with your changes

The CI/CD pipeline automatically:

  • Extracts the version from the LABEL version directive
  • Tags the image with both latest and the specific version
  • Pushes to Docker Hub with proper versioning

Example version update:

# Before
ARG VERSION=1.2.3

# After  
ARG VERSION=1.3.0

This ensures reproducible builds and allows users to pin to specific language server versions.

πŸ“Š Project Stats

  • 25+ Language Servers supported
  • 100% reproducible builds with pinned versions
  • Multi-architecture support (amd64, arm64)
  • Active community with regular contributions

Ready to contribute? Check out our Contributing Guide and join our community of developers making language servers more accessible!

About

Dockerfiles for all LSPs used with lspcontainers.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published