b0o/SchemaStore.nvim
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.
🛍 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
OriginalSchemaStore.nvim
A Neovim plugin that provides the SchemaStore catalog for use with jsonls and yamlls.
Installation
{ '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
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
561,323 starspublic-apis/public-apis
A collective list of free APIs
497,575 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
446,525 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,246 stars