
Product
Introducing Immutable Scans
Scan results now load faster and remain consistent over time, with stable URLs and on-demand rescans for fresh security data.
@metalsmith/metadata
Advanced tools
A metalsmith plugin to load global metadata from files and directories.
{'config.nav': 'src/config/nav.yml'}NPM:
npm install @metalsmith/metadata
Yarn:
yarn add @metalsmith/metadata
Pass the options to Metalsmith#use. The options object is in the format { 'metadata.key': 'path/to/(file.ext|dir)' }. Relative file/directory paths are resolved to metalsmith.directory(). Directory option keys will include direct children of the directory, see Mapping nested metadata directories for creating nested directory structures.
import Metalsmith from 'metalsmith'
import metadata from '@metalsmith/metadata'
const __dirname = dirname(new URL(import.meta.url).pathname)
Metalsmith(__dirname)
.use(
metadata({
// in-source JSON file
jsonFile: 'src/data/a-json-file.json',
// out-of-source YAML file at nested keypath
'nested.yamlFile': 'some-directory/a-yaml-file.yaml',
// out-of-source directory
aDirectory: 'some-directory/a-directory'
})
)
.build((err) => {
console.log(metalsmith.metadata())
// logs { jsonFile: {...}, nested: { yamlFile: {...}}, aDirectory: {...} }
})
Files inside metalsmith.source() will be considered metadata and thus removed from the build output.
Typically, you want to use this plugin somewhere at the start of the chain, before any rendering plugins run, like @metalsmith/layouts or @metalsmith/in-place.
You can merge metadata files into objects by making the root of the data file an object. For example, given the following 2 files:
src/themes/red.json | src/themes/blue.json |
|---|---|
{
"red": {
"primary-color": "#FF0000"
}
}
|
{
"blue": {
"primary-color": "#00FF00"
}
}
|
with a usage like metalsmith.use(metadata({ themes: 'src/themes' })), metalsmith.metadata().themes will be { red: {"primary-color": #00FF00"}, blue: {"primary-color": "#00FF00"}}.
You can merge metadata files into an array by making the root of the data file an array. For example, given the following 2 files:
src/themes/red.json | src/themes/blue.json |
|---|---|
[
{
"primary-color": "#FF0000"
}
]
|
[
{
"primary-color": "#00FF00"
}
]
|
with a usage like metalsmith.use(metadata({ themes: 'src/themes' })), metalsmith.metadata().themes will be [{"primary-color": #00FF00"}, {"primary-color": "#00FF00"}].
You can map nested metadata directories by specifying multiple options:
metalsmith.use(
metadata({
config: 'src/config',
'config.theme': 'src/config/theme',
'config.theme.summer': 'src/config/theme/summer',
'config.constants': 'src/config/constants.yaml'
})
)
The resulting metadata will have a structure like:
{
...otherMetadata,
config: {
...metadata_from_config_dir
theme: {
...metadata_from_config_theme_dir
summer: { ...metadata_from_config_theme_summer_dir }
}
},
constants: {
...metadata_from_config_constants_file
}
}
To enable debug logs, set the DEBUG environment variable to @metalsmith/metadata:
Linux/Mac:
DEBUG=@metalsmith/metadata
Windows:
set "DEBUG=@metalsmith/metadata"
To use this plugin with the Metalsmith CLI,add the @metalsmith/metadata key to your metalsmith.json plugins. Each key in the dictionary of options will be the key for the global metadata object, like so:
{
"plugins": {
"@metalsmith/metadata": {
"authors": "src/authors.json",
"categories": "src/categories.yaml",
"customers": "external_data/customers"
}
}
}
FAQs
A metalsmith plugin to load global metadata from files and directories
The npm package @metalsmith/metadata receives a total of 178 weekly downloads. As such, @metalsmith/metadata popularity was classified as not popular.
We found that @metalsmith/metadata demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Scan results now load faster and remain consistent over time, with stable URLs and on-demand rescans for fresh security data.

Product
Socket's new Alert Details page is designed to surface more context, with a clearer layout, reachability dependency chains, and structured review.

Product
Campaign-level threat intelligence in Socket now shows when active supply chain attacks affect your repositories and packages.