5 releases

0.0.5 May 1, 2024
0.0.4 Feb 14, 2024
0.0.3 Feb 12, 2024
0.0.2 Feb 8, 2024
0.0.1 Feb 8, 2024

#507 in Parser implementations

Download history 2/week @ 2024-02-05 148/week @ 2024-02-12 9/week @ 2024-02-19 23/week @ 2024-02-26 26/week @ 2024-04-01 122/week @ 2024-04-29

122 downloads per month
Used in ginko_ls

MIT license

4.5K SLoC


A device-tree source parser, analyzer and language server. The main goal of this project is to make working with device-trees easy. For example, for the following device-tree:


/ {
    pic@10000000 {
        phandle = <1>;
        reg = <0x10000000 0x100>;

dtc produces the following output:

Error: test.dts:9.1-2 syntax error
FATAL ERROR: Unable to parse input tree

whereas ginko produces the following output:

 --> test.dts:8:6
8 |     }
  |      ^ Expected ';'

At the moment, the command-line tool ginko only checks the device-tree source. It curently does not generate device-tree binary files nor can it output reformatted device-tree source files.



Installation and Usage

To install ginko with the rust toolchain, simply call

cargo install ginko

Additionally, pre-built binaries exist for x86 Linux and x86 Windows. Simply downloading them and adding the executables to a directory that is on the path should suffice to run the tool. Pre-built binaries also exist for macOS running on Apple Silicon, however these are not signed and notarized with apple so installation is more tedious. See this for more information.


ginko <path/to/file.dts>

to run ginko on a device-tree source file and check the contents.


  • A complete device-tree source parser.
  • Error tolerant parsing for device-tree usage
  • Providing readable and helpful feedback to the user


This project is in its infancy. Therefore, a couple of features aren't supported yet:

  • C-style includes (i.e., #include "some_header.h")
  • Expressions (parenthesized expressions are ignored and do not throw an error)
  • Binary Device Tree format
  • Stable API


ginko_ls is meant to be a feature-complete language server for device-trees. Language servers can be used in many editors, such as Visual Studio Code, Emacs or Vim


  • Outline
  • Go to definition (nodes)
  • hover

Planned features

  • Incremental analysis
  • completion
  • formatting

Editor Configuration


Either install the ginko_ls manually, or you can install with :Mason.

Configure the server with nvim-lspconfig with the configuration name ginko_ls.

In order to configure it, simply add the following to your init.lua

lspconfig = require('lspconfig')
  on_attach = on_attach,
  capabilities = capabilities

This assumes you have on_attach and capabilities defined, see the nvim-lspconfig docs for more information.


Use Ginko VSCode


If you want to use the Helix Editor, you can modify the devicetree language definition in languages.toml. An example is below.

name = "devicetree"
language-servers = ["ginko_ls"]

command = "ginko_ls"
config = { provideFormatter = false }

All contributions, whether in the form of Pull Requests or Issues are highly appreciated and welcome.


~102K SLoC