mightymite
v0.4.5
Published
A tiny (yet mighty) markdown-based content store and API.
Downloads
10
Readme
Mightymite
A tiny (yet mighty) markdown-based content store and API.
Why?
I needed a dead-simple database-less API for accessing content written in markdown with YAML front-matter, that also handles the compilation into JSON and parsing of markdown into HTML. The file-based nature of the API lends itself to hosting anywhere static files may be hosted.
How it works
Content is organized as index.md
files within /content
, in a hierarchy of directories that will map to the client application routes. Each file is parsed as YAML/markdown, with the body compiled as HTML, and output as JSON to /api
.
To avoid unnecessary imports on the client side, documents may import certain collections of other files at compilation time using an import syntax. For instance, you may want to include a limited set of attributes from the latest n blog posts on the home page.
Beyond that, any front-mattter attributes will be available under attributes
, and the body HTML will be available at body
.
Installation
$ yarn add mightymite # or npm install mightymite
Usage
# View commands and options
$ mightymite --help
# Build
$ mightymite build
# Rebuild on file change
$ mightymite watch
# Specify source or output directories other than the defaults
$ mightymite build --src src --out dist
$ mightymite watch --src src --out dist
Configuration
You may use a custom config file by passing along the config
flag:
$ mightymite build --config mightymite.json
And in mightymite.json
:
{
"debug": "true",
"src": "src",
"out": "dist"
}
Import syntax
Content from additional files may be imported using the import
attribute:
# /content/index.md
title: Home
_import:
posts:
match:
- 'news/**/index.md'
- '!news/index.md'
order: date
sort: desc
limit: 5
body: true
attributes:
- title
- date
Data files
Any .yaml
files within the content directory will be converted to JSON and moved to their corresponding location in the output directory. Imports are supported.
# /data.yaml
title: My Site
# Let's import the description from the about page
_import:
about:
match: '/about/index.md'
attributes:
- description
Routes file
A register of all routes are published to the output directory in routes.json
.