Awesome
NB: This project is not developed anymore, only maintained to keep compiling with recent DMD releases. It can be still useful as an example/reference of doing some basic web with D + vibe.d.
MOOD
PoC blog implementation in D + vibe.d
Based on http://vibed.org
Goals / Features
- stand-alone binary with minimal external dependencies
- simple deployment under dedicated posix user
- straightforward code, minimal to none configurability - fork instead
- basic features include publishing posts, tags and RESTful API for data model
- with
-version=MoodWithPygmentize
does out of the box code highlighting ifpygmentize
is on$PATH
- no JavaScript
- HTTPS-only
- no database needed, articles can be edited as simple Markdown files
Running
- fork this repository
- modify
main.d
to use valid paths to SSL certificates - (optional) tweak Diet templates / CSS / code as you see fit
dub build
(optionally enableMoodWithPygmentize
version in project file)dub run
- (optional/recommended) modify
nginx.include
to use valid domain name / certificates and include it into yournginx.conf
Architecture
mood.storage
implements in-memory immutable cache for post data. It saves new posts to
the filesystem in a hard-coded layout and reloads them when mood process starts.
mood.api
defines data model used by rest of the application. It is exposed via RESTful
API thus allowing any custom client programs to fetch the data from blog. This is the only
part of Mood that has direct access to mood.storage
.
mood.rendering
contains set of functions that build data representation in requested format
based on supplied arguments. Naturally, HTML page rendering (both live and offline) is the main
part.
mood.util
contains various tools that author found missing in vibe.d while writing this project.
mood.config
defines some funamental hard-coded configuration options like administrator password
or filesystem paths used. Everything else is configured by simply changing the code.
mood.application
is the entry point for all web page routes. It uses mood.api
to get the blog data
and mood.rendering
to actually build the response.