Skip to content
Projects

b0o/SchemaStore.nvim

View on GitHub

b0o/SchemaStore.nvim has 1,047 GitHub stars and 22 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-09 11:33 UTC. Last push 2026-11-02.

How these counts are measured

🛍 JSON schemas for Neovim

Measured star growth

in 24h
0
in 7 days
Collecting history
in 15 days
Collecting history
in 1 month
Collecting history

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

README.md

Original

SchemaStore.nvim

License: Apache 2.0 Test Status Build Status

A Neovim plugin that provides the SchemaStore catalog for use with jsonls and yamlls.

Installation

Lazy.nvim:

{ 'b0o/schemastore.nvim' }

vim.pack (Neovim 0.12+):

vim.pack.add({ 'https://github.com/b0o/schemastore.nvim' })

Setup

These examples require Neovim 0.11+, nvim-lspconfig, and the corresponding language server installed.

JSON

Configure jsonls:

vim.lsp.config('jsonls', {
  settings = {
    json = {
      schemas = require('schemastore').json.schemas(),
      validate = { enable = true },
    },
  },
})
vim.lsp.enable('jsonls')

validate = { enable = true } is recommended; see #8 for details.

YAML

Configure yamlls, disabling its built-in SchemaStore support to use this plugin's catalog and options:

vim.lsp.config('yamlls', {
  settings = {
    yaml = {
      schemaStore = {
        enable = false,
        -- Avoid TypeError: Cannot read properties of undefined (reading 'length')
        url = '',
      },
      schemas = require('schemastore').yaml.schemas(),
    },
  },
})
vim.lsp.enable('yamlls')

Customizing schemas

Pass options to require('schemastore').json.schemas() in the JSON setup above, or to require('schemastore').yaml.schemas() for YAML. Both support the same options.

Both functions return independent deep copies, so customization options and manual changes to the returned data do not affect the internal catalog or other calls. JSON and YAML can use different options independently.

Select or ignore schemas

Use schema names from the catalog to include only specific schemas:

require('schemastore').json.schemas {
  select = {
    '.eslintrc',
    'package.json',
  },
}

Or exclude specific schemas:

require('schemastore').json.schemas {
  ignore = {
    '.eslintrc',
    'package.json',
  },
}

select and ignore are mutually exclusive; using both throws an error.

When combining select with extra, explicitly include the extra schema names in select.

Replace schemas

Use replace to override a catalog schema's URL:

require('schemastore').json.schemas {
  replace = {
    ['package.json'] = 'https://example.com/package.json',
  },
}

Or replace its full definition, keeping the original schema name:

require('schemastore').json.schemas {
  replace = {
    ['package.json'] = {
      description = 'package.json overridden',
      fileMatch = { 'package.json' },
      name = 'package.json',
      url = 'https://example.com/package.json',
    },
  },
}

Add schemas

Use extra to add schemas to the catalog:

require('schemastore').json.schemas {
  extra = {
    {
      description = 'My custom JSON schema',
      fileMatch = { 'foo.json', '.foo.json' },
      name = 'foo.json',
      url = 'https://example.com/schema/foo.json',
    },
  },
}

fileMatch accepts a string or a list of strings. For local schemas, set url to a file:// URL (e.g. file:///path/to/schema.json) or a plain file path (e.g. /path/to/schema.json).

License

© 2021-2026 Maddison Cohodas and Contributors.

Released under the Apache 2.0 License.

Explore related projects