47 breaking releases

0.64.0 Feb 21, 2023
0.61.0 Feb 16, 2023
0.23.0 Dec 19, 2022
0.17.0 Mar 5, 2021
0.15.0 Jan 15, 2020

#130 in Development tools

Download history 4/week @ 2022-11-28 123/week @ 2022-12-05 17/week @ 2022-12-12 54/week @ 2022-12-19 7/week @ 2022-12-26 147/week @ 2023-01-02 78/week @ 2023-01-09 13/week @ 2023-01-16 98/week @ 2023-01-23 193/week @ 2023-01-30 393/week @ 2023-02-06 318/week @ 2023-02-13 128/week @ 2023-02-20 62/week @ 2023-02-27 11/week @ 2023-03-06 6/week @ 2023-03-13

239 downloads per month
Used in vhdl_ls

MPL-2.0 license

49K SLoC


This repository contains a fast VHDL language server and analysis library written in Rust.

The speed makes the tool very pleasant to use since it loads projects really fast and does not consume a lot of ram. A 200.000 line VHDL project is analyzed in 160 ms on my Desktop using 8 cores and only consumes 180 MByte of RAM when loaded.

I very much appreciate help from other people especially regarding semantic analysis of VHDL. You do not need to be a programmer to help, it is even more helpful to interpret and clarify the VHDL standard and provide minimal examples and describe how they should work according to the standard. Further information about contributing can be found by reading the Contributors Guide

Join the chat at https://gitter.im/rust_hdl/Lobby Build Status


VHDL Language Server

vhdl ls crate


  • A complete VHDL language server protocol implementation with diagnostics, navigate to symbol, find all references etc.


  • Publishes diagnosics based on parse errors and warnings as well as semantic analysis.
  • Usable today to get full live syntax error checking.
  • Checks for missing and duplicate declarations
  • Supports goto-definition/declaration for non-overloaded items
  • Supports find-references for non-overloaded items

VHDL Language Frontend

vhdl language frontend crate


  • This project aims to provide a fully featured open source VHDL frontend that is easy to integrate into other tools.
  • A design goal of the frontend is to be able to recover from syntax errors such that it is useful for building a language server.
  • Analysis order must be automatically computed such that the user does not have to maintain a compile order.
  • Comments will be part of the AST to support document generation.
  • Separate parsing from semantic analysis to allow code formatting on non-semantically correct code.

Trying it out

A language server is never used directly by the end user and it is integrated into different editor plugins. The ones I know about are listed here.

Use in VSCode


Use in Atom


Use in emacs


VHDL LS has built-in support by emacs lsp-mode since 2020-01-04. The only thing required is to configure the path to the vhdl_ls binary unless it is added to the $PATH. Just add the following to your .emacs.el:

(require 'use-package)

; Required unless vhdl_ls is on the $PATH
(setq lsp-vhdl-server-path "${PATH_TO_RUST_HDL}/target/release/vhdl_ls")

; Prefer vhdl_ls over other VHDL language servers
  '(lsp-vhdl-server 'vhdl-ls))

(use-package lsp-mode
         (add-hook 'vhdl-mode-hook 'lsp))


The language server needs to know your library mapping to perform full analysis of the code. For this it uses a configuration file in the TOML format named vhdl_ls.toml.

vhdl_ls will load configuration files in the following order of priority (first to last):

  1. A file named .vhdl_ls.toml in the user home folder.
  2. A file name from the VHDL_LS_CONFIG environment variable.
  3. A file named vhdl_ls.toml in the workspace root.

Settings in a later files overwrites those from previously loaded files.

Example vhdl_ls.toml

# File names are either absolute or relative to the parent folder of the vhdl_ls.toml file
lib2.files = [
lib1.files = [


~158K SLoC