π Dockerfiles for Language Server Protocol (LSP) servers - Containerized language servers for use with lspcontainers.nvim.
This repository provides production-ready Docker containers for 25+ Language Server Protocol (LSP) servers, designed to work seamlessly with the lspcontainers.nvim Neovim plugin.
- Docker containers provide isolated, reproducible LSP server environments
- lspcontainers.nvim plugin automatically manages these containers in Neovim
- 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
These containers are designed to work with the lspcontainers.nvim plugin.
π See the plugin documentation for installation and setup instructions.
# 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
- Docker Engine (20.10+)
- Docker Compose (2.0+)
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
- Alpine Linux base for minimal attack surface
- Multi-stage builds where applicable
- Non-root users for security
- Distroless principles - only essential components
- Daily builds via GitHub Actions
- Dependency scanning and security updates
- Version tracking of upstream language servers
We're actively looking for contributors! Here's how you can help:
Found a bug or have a feature request? Open an issue!
Want to add support for a new language? We'd love your contribution!
- Fork the repository
- Create a new directory under
servers/your-language-server/
- 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" ]
- Add to docker-compose.yaml
- Test your build:
docker-compose build your-server
- Submit a pull request
- Update language server versions
- Improve Dockerfile efficiency
- Add missing tools or dependencies
- Enhance security
- Improve README files
- Add usage examples
- Write integration guides
- Create tutorials
Every container provides two tags:
latest
- Latest build from main branchvX.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
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:
- Edit the Dockerfile in
servers/your-server/Dockerfile
- Update the VERSION argument to the new version
- Test the build locally:
docker-compose build your-server
- 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.
- 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!