PHPackages                             cammanderson/mmb - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. cammanderson/mmb

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

cammanderson/mmb
================

Minimalist markdown blogging tool

v1.0-alpha(11y ago)1991LGPL-3.0PHPPHP &gt;=5.4.0

Since Aug 16Pushed 11y ago1 watchersCompare

[ Source](https://github.com/cammanderson/mmb)[ Packagist](https://packagist.org/packages/cammanderson/mmb)[ RSS](/packages/cammanderson-mmb/feed)WikiDiscussions master Synced today

READMEChangelog (1)Dependencies (7)Versions (3)Used By (1)

Minimalist Markdown Blog
========================

[](#minimalist-markdown-blog)

Focus on writing clean blog articles using simple markdown. Include beautiful colourful fenced code blocks that people will love.

Minimalistic approach, based on silex. Chose where to store and retrieve your markdown, I'm using a separate git repository. Articles are pushed here and mapped by the FileArticleService.

Usage
-----

[](#usage)

For your application:

- Add to your composer
- Add to your Silex application
- Install [Pygments](http://pygments.org/download/)
- Specify the pygmentize bin
- Specify the path to the articles (default file provider)

### Composer

[](#composer)

```
{
    "require": {
        "cammanderson/mmb" : "dev-master"
    }
}
```

### Silex Service Provider and Route

[](#silex-service-provider-and-route)

You can add the article service and then use it in your application as needed.

```
...
$app->register(new MMB\ArticleServiceProvider());
...
// Controller
$articleController = function (Silex\Application $app, MMB\Article $article) {
    return $app['twig']->render('article.html.twig', array(
            'article' => $article,
            'highlighter' => $app['markdown_parser_highlighter']
        ));
};

// Add the article route
$app->get('/article/{article}', function (MMB\Article $article) use ($app, $articleController) {
    return $articleController($app, $article);
})->assert('article', '.+')
->convert('article', 'article_service:getArticle');
...
```

### Default Configuration

[](#default-configuration)

Currently needs a couple of elements set to app\['config'\]\['parameters'\]

```
parameters:
    mmb_file_path: ../content
    pygments_bin: /opt/local/bin/pygmentize-2.7
```

Consider using a YAML config provider for silex [deralex/yaml-config-service-provider](http://https://github.com/deralex/YamlConfigServiceProvider)

### Writing Articles

[](#writing-articles)

Using the FileArticleService, it will take a configuration *path* to look for files. Articles are mapped by key, where the key matches the filename.

```
2014-08-10_my-article.md
2014-08-12_my-other-article.md

```

### Hosting articles on github

[](#hosting-articles-on-github)

It is easily possible to place the articles in your github repository and connect to it using [GithubService for mmd](https://github.com/cammanderson/mmb-github).

Extending
---------

[](#extending)

### Alternative location for Articles

[](#alternative-location-for-articles)

You can always implement your own ArticleService to source the articles from another location.

```
class MyArticleService extends AbstractArticleService
{
    public function getArticle($key)
    {
        // TODO: Implement your own method to locate the article
        $articleContents = '...';

        // Create the article
        $article = $this->provider->provide($key, $articleContents);

        // ... Apply further properties your Service supports

        // Return
        return $article;
    }
}
```

Now register to the dependency injector (remember to provider the article provider).

```
$app['article_service'] = $app->share(function ($app) {
    $service = new MyArticleService();
    $service->setProvider($app['article_provider']);
    return $service;
});
```

TODO
----

[](#todo)

Eventually to be moved to MCB (Minimalist Coders Blog) for more broader use. Developers can then implement their own article providers (file, git, cmf etc), formating and highlighters (e.g. pygments, geshi etc).

- Add various traits to article to support dates, author, version, changelog etc
- Implement a GitArticleService/GitHubArticleService that interrogates git for author, versions, etc
- Implement a better configuration layout
- Implement ArticleService list commands, allowing listings of blog history
- Possible Symfony2 support via DI/Service container config
- Implement geshi/sundown/restructedtext etc.

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

4285d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7b7e2790fff48e485c35c4cf333514955fc432645c8493ded8a7863b5a521116?d=identicon)[cammanderson](/maintainers/cammanderson)

---

Top Contributors

[![cammanderson](https://avatars.githubusercontent.com/u/578846?v=4)](https://github.com/cammanderson "cammanderson (1 commits)")

---

Tags

markdowncodingblog

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/cammanderson-mmb/health.svg)

```
[![Health](https://phpackages.com/badges/cammanderson-mmb/health.svg)](https://phpackages.com/packages/cammanderson-mmb)
```

###  Alternatives

[justinwalsh/daux.io

Documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly

4.6k38.1k1](/packages/justinwalsh-dauxio)[daux/daux.io

Documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly

825191.0k1](/packages/daux-dauxio)[benjaminhoegh/parsedown-extended

An extension for Parsedown.

5022.6k1](/packages/benjaminhoegh-parsedown-extended)[pagerange/metaparsedown

Adds ability to have meta data in markdown files parsed by eursev/parsedown or eruseve/parsedown-extra

2637.2k2](/packages/pagerange-metaparsedown)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
