LambdaCms "media" extension

Latest on Hackage:

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow to host generated Haddocks.

MIT licensed by Mats Rietdijk, Cies Breijs
Maintained by


This is an extension for LambdaCms which allows admins to manage media files.

NOTE: At this point the functionality provided by this extension is very basic. Pull requests adding features are most welcome.


LambdaCms extensions come as plain Haskell packages and need to be added to the project’s .cabal file like any other package dependency.

The following guide expects a newly initialized LambdaCms base application. When you have an existing base app this guide show still be easy to follow.

In the library section of your base application’s .cabal file append the following line to build-depends:

                , lambdacms-media

The media extension’s admin section needs to be mounted in the base app’s router, therefor add the following line to your config/routes file:

/admin/media  MediaAdminR          MediaAdmin   getLambdaCmsMedia

To Application.hs add:

import LambdaCms.Media

As well as the following line (see the comment):

    let getLambdaCms = CoreAdmin
        getLambdaCmsMedia = MediaAdmin  -- add this line
        mkFoundation appConnPool = App {..}

Then proceed by including the migrateLambdaCmsMedia function to Application.hs as shown in this snippet:

        (runSqlPool (mapM_ runMigration [migrateAll, migrateLambdaCmsCore, migrateLambdaCmsMedia]) pool)
        (messageLoggerSource theFoundation appLogger)

To Foundation.hs also add import LambdaCms.Media and the following two lines (see comments):

    , getLambdaCms   :: CoreAdmin
    , getLambdaCmsMedia :: MediaAdmin  -- add this line
    adminMenu = (defaultCoreAdminMenu CoreAdminR)
                ++ (defaultMediaAdminMenu MediaAdminR)  -- add this line
    renderLanguages _ = ["en", "nl"]

The last line hooks the media admin section into the admin menu.

Finally the following instance needs to be defined in Foundation.hs:

instance LambdaCmsMedia App where
  mediaR       = MediaAdminR
  staticDir y  = appStaticDir $ appSettings y
  staticRoot _ = "/static"

That’s it! You can now cabal install the new dependency and run yesod devel to test drive the freshly installed extension.

Using media in another LambdaCms extension

A common usecase would be to use the “media” that are managed using the lambdacms-media extension in other extensions. For example: to add an image to a blog post.

First off all the lambdacms-media package needs to become a package dependency of that particular extension’s package.

Then we can add an imageId to the Post model.

  title Text
  body Text
  imageId MediaId Maybe

To make it all work we need to put a constraint on the type class defined in the Foundation.hs:

class LambdaCmsMedia master => MysitePostSub master where

After this the attachedMaybeMedia function may be used in the handler functions of the blog post extension.


All code in this repository is released under the MIT license, as specified in the LICENSE file.


Change log


  • Bump upperbound of lambdacms-core


  • Use Stack


  • Put constraint to avoid dependency on broken lambdacms-core


  • Initial upload to Hackage
comments powered byDisqus