Skip to content

[CRITICAL] Newest nvim build triggers bad argument #1 to 'decode' (string expected, got nil) #1362

@DrKJeff16

Description

@DrKJeff16

Description

(This plugin was working perfectly for me beforehand)

After compiling to newest Neovim version (as of July 12th, 2025) I am getting this error when opening a file
that's in a directory with git:

Lua callback:
.../share/nvim/lazy/gitsigns.nvim/lua/gitsigns/diff_int.lua:30: bad argument #1 to 'decode' (string expected, got nil)
stack traceback:
    [C]: in function 'decode'
    .../share/nvim/lazy/gitsigns.nvim/lua/gitsigns/diff_int.lua:30: in function <.../share/nvim/lazy/gitsigns.nvim/lua/gitsigns/diff_int.lua:29>
Luv thread:
.../share/nvim/lazy/gitsigns.nvim/lua/gitsigns/diff_int.lua:63: attempt to call field 'diff' (a nil value)

Neovim version

NVIM v0.12.0-dev-810+g4778a4c201

Operating system and version

Arch Linux, Linux 6.15.6-arch1-1

Expected behavior

Expected this plugin to work, pretty much

Actual behavior

The plugin triggers and error. I think it still works in some regards but I cannot confirm since it's a very persistent error.

Note that it only happens when a file in a git repository is opened.

Minimal config

for name, url in pairs{
  gitsigns = 'https://github.com/lewis6991/gitsigns.nvim',
  -- ADD OTHER PLUGINS _NECESSARY_ TO REPRODUCE THE ISSUE
} do
  local install_path = vim.fn.fnamemodify('gitsigns_issue/'..name, ':p')
  if vim.fn.isdirectory(install_path) == 0 then
    vim.fn.system { 'git', 'clone', '--depth=1', url, install_path }
  end
  vim.opt.runtimepath:append(install_path)
end

require('gitsigns').setup{
  debug_mode = true, -- You must add this to enable debug messages
  -- ADD GITSIGNS CONFIG THAT IS _NECESSARY_ FOR REPRODUCING THE ISSUE
}

-- ADD INIT.LUA SETTINGS THAT IS _NECESSARY_ FOR REPRODUCING THE ISSUE

-- (DrKJeff16): The config above is LITERALLY enough to trigger this issue, no changes at all!

Steps to reproduce

This only happens when opening a file in a git repository

  1. git clone repository.git
  2. cd repository
  3. nvim --clean -u init.lua <path/to/file>
  4. (Optional, retriggers the same message) :ed path/to/another_file

Gitsigns debug messages

0.03 D dprintf: Deriving GitSignsAdd from Added
0.15 D derive: Deriving GitSignsChange from Changed
0.20 D derive: Deriving GitSignsDelete from Removed
0.27 D derive: Deriving GitSignsChangedelete from GitSignsChange
0.31 D derive: Deriving GitSignsTopdelete from GitSignsDelete
0.35 D derive: Deriving GitSignsUntracked from GitSignsAdd
0.39 D derive: Deriving GitSignsAddNr from GitSignsAdd
0.49 D derive: Deriving GitSignsChangeNr from GitSignsChange
0.51 D derive: Deriving GitSignsDeleteNr from GitSignsDelete
0.57 D derive: Deriving GitSignsChangedeleteNr from GitSignsChangeNr
0.62 D derive: Deriving GitSignsTopdeleteNr from GitSignsDeleteNr
0.74 D derive: Deriving GitSignsUntrackedNr from GitSignsAddNr
0.82 D derive: Deriving GitSignsAddLn from DiffAdd
0.91 D derive: Deriving GitSignsChangeLn from DiffChange
0.95 D derive: Deriving GitSignsChangedeleteLn from GitSignsChangeLn
1.00 D derive: Deriving GitSignsTopdeleteLn from GitSignsDeleteLn
1.04 D derive: Deriving GitSignsUntrackedLn from GitSignsAddLn
1.08 D derive: Deriving GitSignsAddCul from GitSignsAdd
1.12 D derive: Deriving GitSignsChangeCul from GitSignsChange
1.16 D derive: Deriving GitSignsDeleteCul from GitSignsDelete
1.20 D derive: Deriving GitSignsChangedeleteCul from GitSignsChangeCul
1.24 D derive: Deriving GitSignsTopdeleteCul from GitSignsDeleteCul
1.28 D derive: Deriving GitSignsUntrackedCul from GitSignsAddCul
1.34 D derive: Deriving GitSignsStagedAdd from GitSignsAdd
1.39 D derive: Deriving GitSignsStagedChange from GitSignsChange
1.45 D derive: Deriving GitSignsStagedDelete from GitSignsDelete
1.49 D derive: Deriving GitSignsStagedChangedelete from GitSignsChangedelete
1.64 D derive: Deriving GitSignsStagedTopdelete from GitSignsTopdelete
1.73 D derive: Deriving GitSignsStagedUntracked from GitSignsUntracked
1.77 D derive: Deriving GitSignsStagedAddNr from GitSignsAddNr
1.81 D derive: Deriving GitSignsStagedChangeNr from GitSignsChangeNr
1.85 D derive: Deriving GitSignsStagedDeleteNr from GitSignsDeleteNr
1.89 D derive: Deriving GitSignsStagedChangedeleteNr from GitSignsChangedeleteNr
1.96 D derive: Deriving GitSignsStagedTopdeleteNr from GitSignsTopdeleteNr
2.00 D derive: Deriving GitSignsStagedUntrackedNr from GitSignsUntrackedNr
2.04 D derive: Deriving GitSignsStagedAddLn from GitSignsAddLn
2.09 D derive: Deriving GitSignsStagedChangeLn from GitSignsChangeLn
2.13 D derive: Deriving GitSignsStagedChangedeleteLn from GitSignsChangedeleteLn
2.15 D derive: Could not derive GitSignsStagedTopdeleteLn
2.17 D derive: Deriving GitSignsStagedUntrackedLn from GitSignsUntrackedLn
2.20 D derive: Deriving GitSignsStagedAddCul from GitSignsAddCul
2.22 D derive: Deriving GitSignsStagedChangeCul from GitSignsChangeCul
2.25 D derive: Deriving GitSignsStagedDeleteCul from GitSignsDeleteCul
2.34 D derive: Deriving GitSignsStagedChangedeleteCul from GitSignsChangedeleteCul
2.37 D derive: Deriving GitSignsStagedTopdeleteCul from GitSignsTopdeleteCul
2.40 D derive: Deriving GitSignsStagedUntrackedCul from GitSignsUntrackedCul
2.46 D derive: Deriving GitSignsAddPreview from DiffAdd
2.49 D derive: Deriving GitSignsDeletePreview from DiffDelete
2.51 D derive: Deriving GitSignsCurrentLineBlame from NonText
2.55 D derive: Deriving GitSignsAddInline from TermCursor
2.59 D derive: Deriving GitSignsDeleteInline from TermCursor
2.64 D derive: Deriving GitSignsChangeInline from TermCursor
2.67 D derive: Deriving GitSignsAddLnInline from GitSignsAddInline
2.71 D derive: Deriving GitSignsChangeLnInline from GitSignsChangeInline
2.74 D derive: Deriving GitSignsDeleteLnInline from GitSignsDeleteInline
2.89 D derive: Deriving GitSignsDeleteVirtLn from DiffDelete
2.96 D derive: Deriving GitSignsDeleteVirtLnInLine from GitSignsDeleteLnInline
3.01 D derive: Deriving GitSignsVirtLnum from GitSignsDeleteVirtLn
3333.56 D git: git --version
3338.75 D git: git rev-parse --show-toplevel --absolute-git-dir --abbrev-ref HEAD
16327.59 D cli.run: Running action 'debug_messages' with arguments {}
20951.00 D cli.run: Running action 'debug_messages' with arguments {}

Gitsigns cache

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions