ba022a0 Feb 23, 2017
@MoOx @thangngoc89 @greenkeeperio-bot @kuzvac @ben-eb
1786 lines (1461 sloc) 74.7 KB

0.20.4 - 2017-02-23

  • Fixed: better support of react-router routes that don't have slashes (#941 - @MoOx)

  • Added: better support of react-router routes (IndexRoute and trailing slashes) (#941 - @MoOx)

  • Removed: declaration-block-no-ignored-properties has been removed from our stylelint preset because this rule is not reliable (and deprecated). This is not a breaking change. (#960 - @MoOx)

0.20.3 - 2017-01-28

  • 🐛 Fixed: stack trace are not truncated anymore (#819 - @MoOx)

  • Added: when an error saying "xxx is not defined" during static build, a message is printed to give tell people how to handle this problem as it's most of the related to a missing browser API. screen shot 2017-01-28 at 22 33 01 (#819 - @MoOx)

  • Added: webpack 2.2 full compatibility (#928 - @MoOx)

⚠️ Note that 2 dependencies to handle cache and offline options have been updated. If using both and are facing an issue during the static build, you should probably disable cache option until a fix is provided.

Base theme

  • Added: Base theme: Add Facebook (Open Graph) and Twitter card image support based on the hero image (#934 - @VagishVela)

0.20.2 - 2017-01-16

  • 🐛 Fixed: some issues related to the cache option by upgrading hard-source-webpack-plugin (@MoOx)

0.20.1 - 2016-12-19

  • 🐛 Fixed: Aphrodite styles in HTML are not throwing a syntax error (#923 - @xuopled)
  • 🐛 Fixed: first install with yarn does not fail anymore (#911 - @raygesualdo)

0.20.0 - 2016-12-16

No major breaking changes.

Just be careful if you are injecting scripts using react-helmet.

  • 🐛 Fixed: move react-helmet injected scripts in the head to prevent duplicate loading of JS files (#904 - @timothycoy) 
Previously, scripts injected via react-helmet where injected before the end of the </body> tag. But it can produce unexpected behavior since on the client side, react-helmet injects those in the <head>, which can make some scripts doing twice their job (and that's probably not what you want).

  • 🍭 Added: sitemap webpack plugin (#907 - @xuopled) 
You can now rely on import PhenomicLoaderSitemapWebpackPlugin from "phenomic/lib/loader-sitemap-webpack-plugin" to generate a Sitemap. See for more information.

0.19.5 - 2016-11-25

  • 🐛 Fixed: scroll to top should not happen for fresh page, with or without hash (#665 - @MoOx)
  • 🐛 Fixed: internal links to other pages with hash now works as expected (no full page load) (@MoOx)
  • 🐛 Fixed: click on link with hash to another page now scroll correctly when page is completely rendered with all data (#665 - @MoOx)

0.19.4 - 2016-11-24

  • 🐛 Fixed: click on anchors are now scrolling has expected (#665 - @MoOx)

0.19.3 - 2016-11-22

🍭 This bugfixes are a good thing and have been detected since we use 2 different Phenomic projects for our documentation website: one at the root, for the main documentation website and one under /themes/base/demo/ which host the base theme as a demo.

  • 🐛 Fixed: Do not catch links that are not under the current base path (@MoOx)

  • 🐛 Fixed: Avoid catching unwanted <Link> that can be children of a <PageContainer> instance by cleaning up all links listeners on each <PageContainer> updates. (@MoOx)

  • 🐛 Fixed: Phenomic <Link> understand collection links without the base path. ⚠️
One caveat is now you can’t use <Link> to point to a path before the current project base path. This is probably and edge case, more than the case we are fixing here. We might revisit this issue when refactoring how collection is handled and rendered. (@MoOx)

  • 🐛 Fixed: when a <Link> explicitly receive an absolute url from the same domain, but not the same project base path, a normal <a> is rendered (@MoOx)

0.19.2 - 2016-11-22

broken: npm published a incomplete package which resulted in an error during installation: Cannot find module '...phenomic/npm/postinstall.js'

0.19.1 - 2016-11-22

  • 🐛 Fixed: static build does not write phenomic assets as if they were handled by react-helmet. This fix the issue where phenomic CSS are removed from the page when client script take the relay. (@MoOx)

0.19.0 - 2016-11-21

This release contains only a minor breaking change (less strict CSS linting) that you can adjust in a few seconds.

🎉 A cool new "feature" is a brand new base theme for new projects. This base theme is not only prettier than before but it's also a good starting point with multiples interesting examples to leverage Phenomic features!

phenomic-0 19-new-base-theme

💥 (Minor) Breaking change

  • 💥 Removed: stylelint-config-standard has been removed from our recommended
    stylelint config in favor of a minimal number of rules to prevent errors only. This change has been made to make Phenomic more easier to play with. If you want the previous config, just extend stylelint-config-standard directly. (@MoOx)

🚨 Minor change

  • 🚨 Changed: phenomic/lib/Link has been relocated. To prevent issue in the future, it is now accessible with import { Link } from "phenomic". The old reference still works but will show you a warning and will be removed in the future. (@MoOx)

🐛 Bugfixes

  • 🐛 Fixed: Non ASCII characters in filenames break the static build. Filesystem filename (de)conversion (url decoding) was not correctly made before accessing data during the static build. (#878 - @MoOx)

  • 🐛 Fixed: Add missing homepage field in package.json which fix process.env.PHENOMIC_HOMEPAGE (@MoOx)

New features

  • Added: Link can now be used for unknow links (internal or external). Current react-router Link implementation just crash if you use an external link. Phenomic now wrap this by providing a unique API. This is especially handy if you generate links from unknown data (eg: markdow front-matter value that can point to internal or external pages) (@MoOx)

  • Added: full support for Yarn. Phenomic is now fully tested using Yarn (via Travis-CI) as well as npm (via Circle-CI) on Unix system. Windows support is only ensured with npm (Appveyor). (#872 - @dflynn15 & @MoOx)

  • Added: new clientScripts option to disable all JavaScript code 🙃. This allows you to turn Phenomic into a standard static website generator (#874 - @MoOx)

  • Added: support for Glamor and Aphrodite out of the box. You can look at the dedicated documentation for this for more information (#864 - @MoOx)

  • Added: message when you start the development server with JavaScript disabled (@MoOx)

Base theme

  • 🎉 Changed: base theme has been completely redesigned. Now includes more components and examples of how you can leverage Phenomic. (@MoOx)

  • Added: hot loading for PostCSS config in base theme. A discussion is now open to push this solution in postcss-loader but until it is, you can use this solution to get hot loading for your PostCSS config. Very handy for development. (@MoOx)

0.18.1 - 2016-11-09

Bugfixes, including small proptypes issues for new projects (since 0.18.0). We also introduced a less strict stylelint config, like we made for eslint recently.

  • Fixed: don't intercept clicks on links (<a>) with no href (#867 - @grncdr)

  • Added: new stylelint recommended config that fit phenomic base theme (#849 - @xuopled)

Base theme

  • Fixed: remove React warnings related to new way to load pages (#868 - @MoOx)
  • Added: Integration of the new styleint recommended config (#849 - @xuopled)

0.18.0 - 2016-11-03

🎉 Optimistic loading is now a thing!
You can see this in action on Phenomic documentation by throttling the network connection using your browser developer tools with a slow connection.


This release should not bring any major breaking change so you should be available to update very easily (probably by just bumping version number and renaming webpack.config.babel.js to webpack.config.js).

  • Added: layouts can now receive partial data accompanied with a loading flag (isLoading props) Now, if you remove your PageLoading layouts, you will automatically receive partial data in the correct (future) layout (only head, body won't be defined until isLoading is != true).
    Should not be a breaking change if you do still use PageLoading.
    If you still use PageLoading, you can define a static property in some layouts to tell Phenomic to send an isLoading props to your specific layout instead of using PageLoading for this specific transition.
    You can refer to the minimal change you can do in the docs code if you want to replace PageLoading usage by optimistic loading via isLoading props. This probably allows you to handle page transitions more easily since similar layouts won't be unmounted. (#855 - @DavidWells & @MoOx)
  • Added: If site is already open in Chrome on macOS, we reuse the existing tab instead of opening a new one (#854 - @DavidWells)
  • Added: less restriction on babel-register hook You can now use webpack.config.js instead of webpack.config.babel.js and so import es2015 files in webpack configuration file. (#450 - @MoOx)
  • Removed: webpack build notifications If you want to add notifications back, please directly use webpack-notifier. We will add a better, more accurate option later (#859 - @MoOx)
  • Added: support of text, textile, text2tags, asciidoc file extensions for clean urls
 (#852 - @MoOx)

0.17.12 - 2016-10-25

  • Fixed: Linter errors from base theme have been removed (#838 - @montogeek)

0.17.11 - 2016-10-22

  • Fixed: package.json is correctly populated during setup (#835 - @MoOx)

0.17.10 - 2016-10-21

  • Fixed: npm postinstall step (#833 - @MoOx)

0.17.9 - 2016-10-20

In short:

  • Some errors related to cache option have been fixed.
  • Base theme now provides a less strict eslint config.
  • Documentation has been updated and now includes new sections to use Netlify (for deploy & as a CMS)
  • We added some new websites to the showcase


  • Fixed: some errors related to cache option by upgrading a dependency (@MoOx)
  • Added: support for .markdown extension files. This allows to use SiteLeaf as a CMS (#829 - @xuopled)

Base theme

  • Changed: base theme now provides a less strict eslint config (only eslint + eslint-plugin-react recommended rules via a preset - might be moved in it's own package in the future) (@MoOx)
  • Changed: update babel-eslint to ^7.0.0 (@MoOx)
  • Added: babel-plugin-transform-react-jsx-source and babel-plugin-transform-react-jsx-self for easier React debugging

0.17.8 - 2016-10-08

  • Fixed: Service worker file was imported relatively, which only works at the root (@MoOx)

0.17.7 - 2016-10-08

  • Fixed: offline.appcache option was supporting a bunch of options that were completely ignored. We removed this useless options. This might looks like a breaking change, but we prefer to warn you that you are using things that don't do anything. (@MoOx)
  • Fixed: offline option has been fixed to provide a network first approach like documentation is saying. (It was "cache first" since 0.15.0). If that's the behavior you want to keep, please open an issue so we can discuss about that. We think cache-first does not provide a good UX when it comes to update the content. (@MoOx)
  • Fixed: direct access to url (from the address bar) containing a dot in development (@MoOx)
  • Added: new force-offline option, to force offline mode during development (@MoOx)

0.17.6 - 2016-10-04

  • Fixed: RSS feed made using PhenomicLoaderFeedWebpackPlugin have all metadata, not just the link (@MoOx)

0.17.5 - 2016-10-03

  • Fixed: PhenomicLoaderFeedWebpackPlugin was filtering an altered collection which can lead to empty RSS feeds. (@MoOx)
  • Added: an error is thrown is you still have an option in your phenomic loader config for the RSS feed.
    We didn't mention this change in 0.17.0, sorry about that.
    Don't worry, migration is really easy, you just have to move a piece of code.
    See this commit for a feed migration example (@MoOx)

0.17.4 - 2016-09-30

  • Fixed: windows support for 0.17.x (#799 - @MoOx)
  • Fixed: assets=false does not break when offline is on (#794 - @thangngoc89)

0.17.3 - 2016-09-30

  • Fixed: keep query string parameters in URL (#798 - @DavidWells )

0.17.2 - 2016-09-26

  • Fixed: Cannot find module 'webpack' during setup (@MoOx)

0.17.1 - 2016-09-26

  • Fixed: Cannot find module 'source-map-support/register' (@MoOx)

0.17.0 - 2016-09-26

🎉 This release make us closer to 1.0.

Noticeable changes are:

  • 🚀 New experimental "cache" option to boost performance. Development startup time drastically reduced (from 15s to 2s on average for the default theme). To try this feature, just add "cache": true in your phenomic config (in package.json).
  • 🍭 Added support for webpack@2 (we still support webpack 1). See details below for more explanations & webpack 2 migration notes. New base theme already have commented instructions for future migrations 😘.
  • 🔥 react-hot-loader@3 is used (still in beta, but already battle tested). You can now enjoy hot loading on React stateless components! By the way, we changed the default theme to use stateless components.
  • New projects are setup with a new, more clear file tree, see below for details.
  • 📖 Documentation has been improved a little ("Getting Started" now have more answers to commons questions like "how to add Sass?").
  • 👀 We improved CLI output to be more concise & make errors easier to spot

phenomic-0 17 0

To know what is coming next, check out our public ROADMAP.

And do not hesitate to give feedbacks, it's important for the community ❤️.

What's exactly in 0.17.0?

Breaking changes

  • Removed: phenomicLoaderPlugins & phenomicLoaderPresets from "phenomic" To avoid shipping unnecessary code into the client bundle (regression from 0.16.0), we removed plugins & presets from “phenomic” import. Please directly use require(“phenomic/lib/loader-*, by replacing camelCase by dashedCase.

    • phenomicLoaderPlugins.initBodyPropertyFromContent -> require("phenomic/lib/loader-plugin-init-body-property-from-content").default
    • phenomicLoaderPlugins.initHeadPropertyFromConfig -> require("phenomic/lib/loader-plugin-init-head-property-from-config").default
    • phenomicLoaderPlugins.initHeadPropertyFromContent -> require("phenomic/lib/loader-plugin-init-head-property-from-content").default
    • phenomicLoaderPlugins.initRawPropertyFromContent -> require("phenomic/lib/loader-plugin-init-raw-property-from-content").default
    • phenomicLoaderPlugins.initRawBodyPropertyFromContent -> require("phenomic/lib/loader-plugin-init-rawBody-property-from-content").default
    • phenomicLoaderPlugins.markdownInitHeadDescriptionPropertyFromContent -> require("phenomic/lib/loader-plugin-markdown-init-head.description-property-from-content").default
    • phenomicLoaderPlugins.markdownTransformBodyPropertyToHtml -> require("phenomic/lib/loader-plugin-markdown-transform-body-property-to-html").default
    • phenomicLoaderPresets.default -> require("phenomic/lib/loader-preset-default").default
    • phenomicLoaderPresets.markdown -> require("phenomic/lib/loader-preset-markdown").default

    (08bd04f - @MoOx)

  • Removed: PageContainer does not wrap its child into a <div> (#691 - @MoOx, based on @DavidWells idea)
  • Removed: Service Worker is disabled during development (like AppCache) (#689 / 755a3c2 - @MoOx)
  • Changed: BodyContainer now avoid wrapping content in a <div> if a single string is passed as a child. (@MoOx)
  • Changed: RSS feed must be generated using the new PhenomicLoaderFeedWebpackPlugin.
    The loader does not handle RSS feed generation anymore.
    See this commit for a feed migration example (@MoOx)

Minor changes

  • Changed: phenomic/lib/PageContainer has been relocated. To prevent issue in the future, is now accessible by doing import { PageContainer } from "phenomic". If you want to import it with a different name, you can do it this way: js import { PageContainer as PhenomicPageContainer } from "phenomic" (#433 - @MoOx)
  • Changed: error messages for bad configuration are now more readable (#672 - @MoOx)
  • Changed: improved CLI output for phenomic commands/dev server ( f382b20 / 5255b03
    • @MoOx)
  • Added: 🚀 Cache option to improve performance by more than 300% You can enable this experimental feature by adding "cache": true in your package.json phenomic section. If you encounter weird issues, try disabling babel-loader cacheDirectory (and tell us about it!)
  • Added: Error message in the browser if app start fail at start during development (#679 - @MoOx)
  • Added: proper message if Node and npm version are not satisfying requirements (#709 - @thangngoc89)
  • Added: [remark-toc][] in default markdown transformation. You can now use ## Table of Contents (or ## toc) to get a generated table of contents. (569d512 - @MoOx)
  • Added: cache enhanceCollection usage to boost performance for large websites (#762 - @thangngoc89)
  • Added: webpack@2 support. To upgrade, you work will basically be upgrading your webpack configuration after upgrading webpack version to ^2.1.0-beta.23 (and some plugins, see below). See webpack 2 migration notes. Basically you will have to:
    • Change for webpack ExtractTextPlugin (more explicit API)
    • Upgrade of the babel configuration since webpack natively understand ES2015 import: add new sections in your babel.env configuration. webpack 2 understand natively importstatements so it’s unnecessary to transform those (and it will allow webpack 2 enable tree shaking): webpack-develompment & webpack-production.
    • webpack DedupePlugin must be disabled for now as it's not fully compatible yet
    • Your webpack.config file can directly export a function (instead of exporting a makeConfig function) as it's now natively supported by webpack 2.
    • All loaders options must be passed by loader query options or by using webpack or via webpack.LoaderPlugin (#421 - @MoOx)


  • Fixed: front matter route can use / to define the homepage (#721 - @thangngoc89)

What's new in 0.17.0 base theme?

  • Removed: eslint "fix" option has been removed from eslint-loader usage according to the feedback of the community. (#752 - @ben-eb)
  • Changed: new default tree structure. We encourage you to update to a similar structure if you were using the previous one. Main changes:

    • web_modules/layouts => src/layouts
    • web_modules/{Components} => src/components/*
    • web_modules/app/* => src/*
    • web_modules/LayoutContainer => src/AppContainer.js

    (#698 - @MoOx)

  • Changed: we replaced babel-preset-react-hmre by react-hot-loader@3 You can now enjoy hot loading on React stateless components! See how to do the same for you current project in this commit. (#737 - @MoOx)

  • Changed: all components without state are now real stateless components (#747 - @thangngoc89)
  • Changed: babel-preset-latest is now used in place of babel-preset-es2015. This preset cover all stable ES specifications that will land in future versions (currently it covers some ES2017 features). (#661 - @MoOx)
  • Changed: update stylelint to ^7.2.0 & stylelint-config-standard to ^13.0.0 (7c3c843 - @ben-eb)
  • Added: a default highlight.js theme has been (#702 - @MoOx)
  • Added: some default global CSS custom properties (variables) have been added into the webpack configuration file (#617 - @MoOx)

0.16.2 - 2016-08-23

  • Fixed: error during static build have an accurate stack trace. Source map support have been fixed (#644 - @MoOx)
  • Fixed: plugins presets were doing nothing (#655 - @MoOx)

0.16.1 - 2016-08-23

  • Fixed: Uncaught TypeError: (0 , _reactRouterScroll2.default) is not a function We now only import useScroll from react-router-scroll (as we only use this). react-router-scroll@0.3.1 was exporting a default value, 0.3.2 is not. (#627 - @MoOx)
  • Fixed: SyntaxError: Unexpected token when importing CSS from node_modules. Previously, node_modules/* where skipped in webpack static build, to improve performance (via webpack externals option). The problem is that is going to cause some issue for most people that will require stuff from node_modules like CSS, SVG or other non-JS files. (#639 - @MoOx)
  • Added: better webpack build notifications. We replaced webpack-error-notifications by [webpack-notifier( (which add compat for Windows). You don't have to do anything as it's embedded in Phenomic dev server. (#527 - @MoOx)

0.16.0 - 2016-08-23


  • 🔨 Breaking change: "phenomic/lib/content-loader" should now be replaced by a value imported from "phenomic" (import { phenomicLoader } from "phenomic"). Following this, phenomic loader configuration should be directly in phenomic section, not phenomic.loader or phenomic.contentLoader.
  • 🎉 New feature: dynamic pages! You now have the ability to generate pages for all metadata used in your text files. This can be used to generate pages for tags, categories, authors etc. (Pagination is not handled yet, but will be in a near future).
  • 🎉 New feature: phenomic loader now supports plugins. Lots of flexibility has been added with this feature, unlocking a lot of possibilities!

🚀 Examples of update and changes:

ℹ️ Some works has been done on the documentation:


  • Changed: default markdown renderer updated to remark-autolink-headings@^4.0.0. This might fix issue with missing links for headings. (@MoOx)
  • Changed: default markdown renderer updated to remark-highlight.js@^4.0.0 This might fix issue with broken highlighted code. (@MoOx)
  • Changed: phenomic/lib/content-loader reference is deprecated in favor of import { phenomicLoader } from "phenomic". You can use phenomicLoader variable in webpack configuration to reference Phenomic loader. This change allows us more flexibility for the location of the code. (@MoOx)
  • Changed: loader will now read loader configuration directly from phenomic section, not in phenomic.loader or phenomic.contentLoader (@MoOx)
  • Removed: renderer option from content-loader (now phenomicLoader). See the new plugins option below for more information. If you want to do the same effect, you can use the following plugins

    import { phenomicLoader, phenomicLoaderPlugins } from "phenomic"
    // ...
      phenomic: {
        // ...
        plugins: [
          // this 3 default plugin can be replaced by the a preset. More info below
          phenomicLoaderPlugins.markdownInitHeadDescriptionPropertyFromContent // optional, now you can replace this if you don't use markdown!
          // phenomicLoaderPlugins.markdownTransformBodyPropertyToHtml
          // the commented plugin above is the default renderer
          // here is an example that can be used like the old renderer
          // method
          ({ result }) => {
            // the difference here, is you need to return the entire new
            // (modified) result.
            // The `body` part is what your are looking for
            return {
              body: doYourThing(result.body),


  • Removed: raw and rawBody properties from page data. If you want those back, there are plugins ready for you:

    import {
    } from "phenomic"
    // ...then in the webpack config
      phenomic: {
        plugins: [

    See the new plugins option below for more information. (#547 - @MoOx)

  • Added: plugins option for the phenomic loader. This option allow more flexibility on how to handle and transform input passed to it. By default, almost the same behavior as before is executed via the following plugins:

      plugins: [

    See the configuration section in the documentation to know more how to customize this. If you want just add more plugins for specific behavior (and so keep the default plugins), you can spread some plugins/presets. (see documentation for more informations). (#260 - @MoOx)

  • Added: "phenomic" package now exposes new values
    • phenomicLoader (ex "phenomic/lib/content-loader")
    • phenomicLoaderPlugins, the list of all available plugins
    • phenomicLoaderPresets, that contains default and markdown presets (see documentation for more informations). (@MoOx)
  • Added: More routes can be pre-rendered! Previously, only files consumed via phenomic-loader (former content-loader) where generated as HTML. Now your routes are consumed and pre-rendered when possible! This is super convenient to define pages that will list content by tags, categories, authors etc! Here is a simple example to add pages for each tags by editing web_modules/app/routes.js (if you still use default location):

    export default (
      <Route component={ LayoutContainer }>
        <Route path="tag/:tag" component={ ContainerThatWillListPostByTag } />
        <Route path="*" component={ PageContainer } />

    Obviously, you will need to define ContainerThatWillListPostByTag (and find a better name for it). Here is an example on a website that implemented this: → Example of implementation of some tags and authors pages. Please check out "Routing" section in the docs for more details. Good news: pagination is on the roadmap! (@MoOx)


  • Fixed: (boilerplate) postcss-browser-reporter was added on production only when it should have been the opposite! (@MoOx)
  • Changed: (boilerplate) LayoutContainer now import global CSS first (#571 - @AdamQuadmon)
  • Changed: (boilerplate) content-loader reference is now in a variable that can be imported (import { phenomicLoader } from "phenomic") (@MoOx)

0.15.0 - 2016-07-13


  • offline option has been rewritten. If you were using offline: true, you don't need to change anything, you will just have few bug fixes and a change to "network" first approach. Otherwise, please check details below and/or the online documentation. We hope you will enjoy this nice API!
  • default port is now 3333 in development
  • remark has been updated to 5.x version
  • boilerplate got some updates, mainly for stylelint


  • Removed: appcache option has now completely being removed in favor of offline (after being deprecated in 0.11.0). See new API below.
  • Changed: Offline option has been completely rewritten. Service Worker now uses a network first approach. This is to prevent having an outdated collection that will lead to request outdated entries urls that might not exist anymore (and that have not been cached yet, see #451). This is for the better. By the way, we now rely on offline-plugin to generate Service Worker and Appcache files. The part that registers the Service Worker is now included in the client bundle. Note that for a better caching, the default boilerplate now use [hash] in the filenames loaded via file-loader. We encourage you to do the same by using a parameter like loader: "file-loader?name=[path][name].[hash].[ext] // .... Offline API is now much more flexible and clear to setup thanks to the new cachePatterns. Here is an example of the new offline option:

      serviceWorker: true,
      appcache: {
        // fallback for SW, will cache onInstall and afterInstall pattern.
        // onDemand cannot be cache with appcache.
        onInstall: true,
        afterInstall: true,
      cachePatterns: {
        onInstall: [ "/", "phenomic.*" ], // cache App Shell on SW install
        afterInstall: [ "**", ":assets:" ], // cache all content
        onDemand: [ ], // since everything is cached by default (if offline: true)
        // you don't need to cache anything on demand.
        // but this option offers you a lot of flexibility, see documentation
        // for more examples
        excludes: [ "**/.*", "**/*.map", "**/*.html" ], // excludes useless files

    Using offline: true will use the configuration above. To know more about this option and all the possibility you have, please read the documentation. (#485 - @MoOx)

  • Changed: remark has been updated to ^5.0.0. This is a breaking change and since (for now) remark is still a dependency, you should be careful when upgrading if you are using a custom render method based on remark. Some plugins have also been updated to work with remark 5.x
    • remark-highlight.js has been updated to ^3.1.1
    • remark-html has been updated to ^5.0.0
  • Changed: default port is now 3333. This is to prevent weird behavior if you use offline option. Since 3000 is pretty common, not using it will avoid having your website Service Worker to be used for others projects. That said we advise you to choose your own port if you use offline option. (@MoOx)


  • Changed: postcss-browser-reporter is now disabled in production. Just in case you still have some PostCSS messages not handled yet. Here is the change you can do in your PostCSS config section in your webpack.config to do the same on your existing project:

      postcss: () => [
        require("postcss-cssnext")({ browsers: "last 2 versions" }),
    -    require("postcss-browser-reporter")(),
    +    ...!config.production ? [
    +      require("postcss-browser-reporter")(),
    +    ] : [],


  • Changed: stylelint has been updated to ^6.8.0 (@MoOx)
  • Changed: stylelint-config-standard has been updated to ^10.0.0 (@MoOx)
  • Changed: making date structure obvious in examples posts frontmatter. (#559 - @MoOx)

0.14.2 - 2016-06-12

  • Fixed: Security exception when accessing "/" via a (react-router) <Link to="/""> is now avoided. (#521 - @MoOx)

0.14.1 - 2016-06-12

  • Fixed: explicit update of react-router@^2.3.0 peer dependency (@MoOx)

0.14.0 - 2016-06-12

Finally, the navigation has now a proper scroll behavior

  • new page: scroll to top
  • back button: scroll position restored

For those which implemented a fix for this scrolling issue: you can just remove your workaround !

You will need at least react-router@^2.3.0.


  • Fixed: navigation now offers a proper scroll behavior. Not more weird page updates. (#285 - @MoOx)


  • Added: PageLoading now use "Loading..." has a <title> (@MoOx)

0.13.0 - 2016-06-07


No breaking changes!

  • You can just remove stuff from your .gitignore file since now static builded files are hidden
    • scripts/_
    • *.bundle.js
  • If you want global (normal) CSS (no CSS Modules), you can just update your webpack.config.js (if not done already) to add support for global CSS via *.global.css files.
    See the corresponding changes. Note that the scope has be restricted to web_modules. Feel free to adjust to your need.


  • Changed: node (static) bundle (phenomic.node.bundle.js) is now hidden (in node_modules/.cache/phenomic, thanks to find-cache-dir) (#439 - @MoOx)
  • Fixed: files should not be created anymore near your phenomic.node script (#439 - @MoOx)


  • Changed: (boilerplate) loader for CSS is only applied to local web_modules. If you want to consume CSS from node_modules you will need to define your own section and adjust the scope accordingly (depending on wether it's global CSS or CSS Modules...) (#516 - @MoOx)
  • Added: (boilerplate) *.global.css can be just normal CSS (not CSS Modules) (#443 and #95 - @MoOx)
  • Added: (boilerplate) add a default meta viewport tag (@MoOx)

0.12.4 - 2016-05-27

  • Fixed: regression with path-to-uri introduced in 0.12.3 (path.posix is undefined) #503

0.12.3 - 2016-05-27

  • Fixed: public joinUri function now correctly join uri with protocol #500

0.12.2 - 2016-05-20

  • Added: BodyContainer component.
    This component is now recommended to used wrap pages body, in replacement of previous usage of dangerouslySetInnerHTML.
    Previous method still works but have a known issue.
    To use this component, you can simply replace in your layouts the following code

      body &&
        dangerouslySetInnerHTML={ { __html: html } }

    By the following code

    <BodyContainer>{ body }</BodyContainer>

    Note that you will need to import BodyContainer like this

    import { BodyContainer } from "phenomic"

    Example of full diff

    import Helmet from "react-helmet"
    import invariant from "invariant"
    -import { joinUri } from "phenomic"
    +import { BodyContainer, joinUri } from "phenomic"
    class Page extends Component {
              head.title &&
              <h1>{ head.title }</h1>
            { header }
    -        {
    -          body &&
    -          <div
    -            dangerouslySetInnerHTML={ { __html: html } }
    -          />
    -        }
    +        <BodyContainer>{ body }</BodyContainer>
            { props.children }
            { footer }


0.12.1 - 2016-05-09

  • Added: setup now show examples for values to enter.
  • Fixed: twitter and repo url in setup accept empty values (#445)
  • Fixed: Should not show "Offline support is disabled in development mode" when offline isn't enabled (#448)


  • Updated: stylelint has been updated to ^6.0.0
  • Updated: stylelint-config-standard has been updated to ^7.0.0

0.12.0 - 2016-05-05


Don't be afraid by the length of this release notes. It's for the better.

Most noticeable change occurs in the scripts folder. It might be a good idea is to take a look at the new folder of the default boilerplate:

  • There is now just 2 files: phenomic.browser.js (client runtime) and phenomic.node.js (for static build).
  • webpack configs can be moved at the root of you project and merged into a single one webpack.config.babel.js. Phenomic specific configuration can be removed (eg: entry) and is now injected via Phenomic itself.

Example of update from phenomic 0.10 to 0.12


  • Fixed: Meta description should not contains new lines (#414)
  • Removed: layouts now must be passed via props to PageContainer component. This change has been introduced in 0.10.0 but old way (via a parameter in the former scripts/build.js and scripts/index-client.js) was still accepted. If you do not have a warning in 0.10.0 or newer, you won‘t be affected by this change.
  • Removed: dev server does not pre-render anymore. During development, only client side version is used. This is to avoid huge performance issue introduced in statinamic@0.7.0. We might re-enable pre-rendering in a near future. See change below for more information (#301)
  • Changed: dates of the front matter are now always strings, for now, until we serve pages as JavaScript (and not JSON). By default the front-matter parsing method recognize dates as JavaScript dates but when converted to JSON we end up with string. The problem is that during the static build, we use date in memory (real dates) and on the client, strings are used. So, to ensure consistency, between static build and client build we are now forcing string (#397)
  • Changed: major refactoring to fix huge performance issue introduced in statinamic@0.7.0 (#301). At the same time we introduced some internal changes, we have reduced the required boilerplate and make some changes in order to simplify everything:

    • Removed: scripts/config.js. Configuration is now builded from a "classic" webpack config. See change related to the webpack config below.
    • Removed: scripts/webpack.config.client.js content should be merged with your webpack.config.babel.js (please read the change below).
    • Changed: scripts/webpack.config.babel.js is now expected by default to be found at the root of your project, like a classic webpack config. Webpack configuration parts specific to Phenomic are now injected by Phenomic itself. Note that your config must export a makeConfig function. This is required so Phenomic can easily create dynamic configurations. This also prepare the upgrade to webpack@2.0.0 (which is in beta for a while, but starts to be mature) that natively allow webpack config to be exported as a function. The path can be specified via an option (via CLI or config).
    • Removed: scripts/build.js in favor of scripts/phenomic.node.js. The path can be specified via an option (via CLI or config). Note that this file will be builded as scripts/phenomic.node.bundle.js for performance. (New boilerplate (git)ignores *.bundle.js files).
    • Changed: scripts/index-client.js is now scripts/phenomic.browser.js. The path can be specified via an option (via CLI or config).
  • Changed: react-helmet@^3.0.0 is now required. This brings us the ability to use all latest react-helmet's methods, including: base, link, meta, script and htmlAttributes. Check out react-helmet‘s documentation for more information. Except new features, no real breaking changes (except that react-helmet don‘t includes some (may be) required polyfills by default). You can upgrade by doing npm install react-helmet@^3.0.0 --save (#348)

  • Changed: PHENOMIC_PATHNAME is now PHENOMIC_USER_PATHNAME. But no need to update that in your configuration as it's injected automatically. See changes in the boilerplate. (#412)
  • Changed: devPort option must be a integer.
  • Changed: content-loader options that are defined in the phenomic section of the webpack configuration should be defined under contentLoader, not loader (even if this one is still supported for now).
  • Changed: content-loader options are now taken from query AND phenomic.contentLoader section (both are merged).
  • Added: unknown CLI args now throw errors (#363)
  • Added: new injected constants in process.env:
    • process.env.PHENOMIC_USER_URL: your website homepage url (package.json/homepage field)
    • process.env.PHENOMIC_USER_PATHNAME: the base path of your website/app
    • process.env.PHENOMIC_NAME: Phenomic pretty name
    • process.env.PHENOMIC_VERSION: Phenomic version
    • process.env.PHENOMIC_HOMEPAGE: Phenomic homepage url
    • process.env.PHENOMIC_REPOSITORY: Phenomic repository url (#412 & #361)
  • Added: Warning for Service Worker when not using HTTPS (#406)


  • Fixed: Meta og:url must be a full url (#432
  • Removed: NODE_ENV and PHENOMIC_PATHNAME have been removed from the boilerplate. These are now automatically defined. (#412)
  • Changed: big changes in the scripts folder. Read note above.
  • Changed: lint command now ignore gitignored files in to be sure you don‘t lint some builded files. Note the --ignore-path .gitignore part: "lint:js": "eslint --ignore-path .gitignore --fix ."
  • Changed: content-loader options are defined in the phenomic.contentLoader section of the webpack configuration so you can use functions (eg: custom renderer).
  • Added: Polyfill CDN to make sure your website work with old browsers as well. (#348)
  • Added: (boilerplate) meta generator tag (#361)
  • Added: Improve React's performance in production build by using babel-preset-react-optimize (#377)
  • Added: Use dynamic values for GitHub and Twitter. (#419)

0.11.0 - 2016-04-19


  • Removed: (boilerplate) layouts/index.js. It is not used since 0.10.0. (#401)
  • Added: Run lint process in parallel with npm-run-all (#402)
  • Added: (boilerplate) more layouts and components so new users have more example to show list of entries:

    • Homepage layout that include a list of posts
    • Post layout
    • PagesList component to easily show page preview
    • PagePreview to display page meta


0.10.2 - 2016-04-14

  • Fixed: replacement of some references that have been missed during the rename:

    • STATINAMIC (in .js)
    • statinamic (in .css). To be sure, run the following commands.
    npm remove --save-dev statinamic
    npm install --save-dev phenomic@^0.10.2
    find . -type f \( -iname \*.css -o -iname \*.js -o -iname \*.json \) -not \( -path './.git/*' -o -path './node_modules/*' \) \
      -exec sed -i '' 's|Statinamic|Phenomic|g' {} \;
    find . -type f \( -iname \*.css -o -iname \*.js -o -iname \*.json \) -not \( -path './.git/*' -o -path './node_modules/*' \) \
      -exec sed -i '' 's|statinamic|phenomic|g' {} \;
    find . -type f \( -iname \*.css -o -iname \*.js -o -iname \*.json \) -not \( -path './.git/*' -o -path './node_modules/*' \) \
      -exec sed -i '' 's|STATINAMIC|PHENOMIC|g' {} \;
  • Fixed: boilerplate now ship latest version of react-router, since react-router@2.2.2 fixes the issue that create homepage to be not rendered. (#393)

0.10.1 - 2016-04-14

  • Fixed: boilerplate comes with react-router@2.1.1 until react-router#3307 is fixed (#393)
  • Fixed: dev server show wrong log message about used port Port 3000 is not available. Using port 3000 instead. (#392)

0.10.0 - 2016-04-13


  • You can safely update from statinamic to phenomic without any changes in your code except renaming the "S|statinamic" references (see instructions below).
  • Only one major breaking change, but previous method will probably still be supported until 1.0
  • More stuff in the default boilerplate (404, loading...)

Example of update from statinamic 0.9 to phenomic 0.10


  • Changed: project has been renamed due to a possible confusion with a PHP CMS called statamic. Read more. For an easy migration, you can simply run the following commands

    EDIT: the commands below are not enough, see release 0.10.2.

    npm remove --save-dev statinamic
    npm install --save-dev phenomic
    find . -type f \( -iname \*.js -o -iname \*.json \) -not \( -path './.git/*' -o -path './node_modules/*' \) \
      -exec sed -i '' 's|Statinamic|Phenomic|g' {} \;
    find . -type f \( -iname \*.js -o -iname \*.json \) -not \( -path './.git/*' -o -path './node_modules/*' \) \
      -exec sed -i '' 's|statinamic|phenomic|g' {} \;

    If you want to double check what files will be changed, just run

    find . -type f \( -iname \*.js -o -iname \*.json \) -not \( -path './.git/*' -o -path './node_modules/*' \)

    This will look for S|statinamic occurence and will replace it by P|phenomic in all .js and .json files that are not in .git or in node_modules.

  • Changed: layouts should not be defined in build and client scripts anymore. This method will be deprecated in a future version. Instead please directly pass layouts in the routes definitions with a HoC.
    What are HoC? Higher order Component, more about this:

    Here is an example (based on the default boilerplate):

    import React, { Component } from "react"
    import { Route } from "react-router"
    import LayoutContainer from "../LayoutContainer"
    import PhenomicPageContainer from "phenomic/lib/PageContainer"
    import Page from "../layouts/Page"
    import PageError from "../layouts/PageError"
    import PageLoading from "../layouts/PageLoading"
    import Homepage from "../layouts/Homepage"
    class PageContainer extends Component {
      render() {
        const { props } = this
        return (
            { ...props }
            layouts={ {
            } }
    export default (
      <Route component={ LayoutContainer }>
        <Route path="*" component={ PageContainer } />

    You should take a new look to the default boilerplate.

  • Added: Use node-portfinder to avoid error when port is used (#320)


  • Fixed: PageError warning about missing PropTypes (#357).

  • Changed: Bump css-loader to ^0.23.0. This may improve performance a little bit (#374)

  • Changed: PageError is nicer and now looks like documentation 404.

  • Changed: Production build now produces short CSS classnames. You should apply this change for a smaller HTML file. (#385)

  • Changed: upgrade of stylelint and stylelint-config-standard to latest 5.x versions

  • Added: a PageLoading component is now provided and include 2 indicators:


  • Added: link to 404 and loading page in the footer, so new users can see and try those easily.


Before 0.10, project was named Statinamic.

0.9.3 - 2016-04-04


  • Removed: Remove unused define environment variables in webpack client config (#315)

0.9.2 - 2016-03-22

  • Fixed: Missing babel-register package. (#335)

0.9.1 - 2016-03-21

  • Fixed: default boilerplate have a correct .gitignore file (not .npmignore) (#323)

0.9.0 - 2016-03-21

Example of update from 0.8 to 0.9


Breaking changes

  • md-collection-loader has been renamed to content-loader.
  • Default markdown parser is now remark but you can use anything you want, even a non markdown parser (eg: latex, asciidocs...). markdownIt configuration is not supported any more but you can still use the same engine, see details below.
  • scripts/webpack.config.*.js now needs to export function that accept config as the first parameter.
  • scripts/config.js is now responsible for exporting webpack configurations.
  • (minor) redux-devtools and redux-thunk have been removed (redux will become private soon anyway, or might even be dropped).

Minor changes

  • Less boilerplate for commands to start/build.


  • No more duplicates in collection.
  • No more main.*.css files in dist.
  • Anchors in url are not being removed when clicking a link with an anchor.
  • Network errors are not reported as 404 anymore, but as network errors.


  • Changed: simplified boilerplate and "start" and "build" commands ! Be sure to checkout new (smaller) boilerplate.
    • scripts/webpack.config.*.js now needs to export function that accept config as the first parameter.
    • scripts/config.js is now responsible for exporting webpack configurations.
    • You can replace start and build npm scripts by statinamic start/build
    • scripts/build.js do not need to expose webpack configuration anymore (since it's included in config object).
    • You can now remove awkward babel env configuration from your babel configuration. It's now handled secretly by default. (that's why config must expose your webpack configurations)
    • You webpack configuration can now skip some tiny weird part specific to statinamic.
  • Changed: Use localhost as default address to open new browser tab (for Windows compatibility since Windows doesn't resolve as localhost/ (#257)
  • Changed: md-collection-loader has been renamed to content-loader.
  • Changed: content-loader now use remark as the default markdown engine.

    • If you want to use the new engine, just remove your markdownIt section in your scripts/webpack.config.babel.js configuration. You will also probably need to update in your CSS references to .markdownIt-Anchor to .statinamic-HeadingAnchor.
    • If you want to keep your current engine, just take the content of your markdownIt section, wrap it in a function and return .render() method.

      • Remove this of your scripts/webpack.config.babel.js

        // ...
        markdownIt: (
            html: true,
            // ...
            .use(/* ... */)
      • Add in the configuration of content-loader (former md-collection-loader)

        // ...
        { // statinamic requirement
          test: /\.md$/,
          loader: "statinamic/lib/content-loader",
          query: {
            context: path.join(config.cwd, config.source),
            // WRAP HERE
            renderer: (text) => (
                html: true,
                // ...
                .use(/* ... */)
                .render(text) // ADD THIS
            // ...
  • Changed: Remove redux devtools and process.env.CLIENT environment variables. Redux will probably become part of the private API, which will reduce the boilerplate. In order to do that, we will gradually remove Redux from all public interface (#40). Here is the instruction to pull this change:

    • Remove redux-devtools, redux-devtools-log-monitor and redux-devtools-dock-monitor from your dependencies list.
    • Remove these variables in webpack.config.client.js, DefinePlugin section:

      • process.env.REDUX_DEVTOOLS
      • process.env.CLIENT : This is totally up you. You can keep it if you use it. We recommended you to use a more portable way to do this:
      ---if (process.env.CLIENT) {
      +++if (typeof window !== "undefined") {
        // client-side specific code

    See (#261) for details.

  • Removed: unused redux-thunk middleware. (#279)
  • Added: content-loader now accept any renderer. You can provide your own callback to transform the text content into html via the renderer option. See Configuration section of the documentation.
  • Added: Support React to 15.x
  • Fixed: statinamic/lib/enhance-collection do not create duplicates anymore (#200)
  • Fixed: network errors will not appear as 404 error anymore
  • Fixed: main.*.css files are not produced anymore by the default boilerplate (#214)
  • Fixed: url with anchors are NOT being replaced with url without anchors anymore (#284)
  • Added: statinamic/lib/enhance-collection will warn if filter callback don’t return a boolean

Boilerplate (minor changes/improvements)

  • Changed: Use include instead exclude to catch files to transform. See changes in boilerplate/scripts/webpack.config.babel.js
  • Changed: syntax change for css loaders section. See changes in boilerplate/scripts/webpack.config.babel.js
  • Changed: content-loader (former md-collection-loader) now don't use JSON.stringify anymore. See changes in boilerplate/scripts/webpack.config.babel.js (#209)
  • Changed: upgrade to eslint@2 and friends.
  • Fixed: assets loader use the right context (no big deal with default paths, but still). See changes in boilerplate/scripts/webpack.config.babel.js

0.8.2 - 2016-02-27

  • Fixed: 404 page overide webpack hmr route (#204)
  • Added: Offline support via APPCACHE (#153)
  • Added: dev server now show stack strace for errors via react-redbox (#199)

0.8.1 - 2016-02-25

  • Fixed: URLs which does not have the required trailing slash are now adjusted. This prevent relative links in loaded page content to be wrong.
  • Fixed: infinite loop for page not found (#186)
  • Fixed: dev server redirection if trailing slash is missing works again.
  • Added: dev server now send 404.html if there is any in collection when url is not in collection (#181)


  • Fixed: Avoid warning of babel-plugin-webpack-loader in boilerplate (#185)

0.8.0 - 2016-02-24

Example of update from 0.7 to 0.8

  • Changed: use react-router basename feature. All urls in collection do not contain base pathname anymore and all url in markdown or component should not have it anymore (#165)
  • Changed: build script now require an exports value that must contains path to layouts, metadata and routes. This values should be strings. See changes in boilerplate/scripts/build.js (#145)
  • Fixed: Redux devtools don't cause invalid checksum anymore (#152)
  • Fixed: Homepage url is not prerendered as // if you don't have a pathname in your base url (package.json/homepage) (#104)
  • Fixed: ability to pass custom webpack devServer config (#157)
  • Added: Intercept clicks on markdown links so they will not trigger full page reload (#67)
  • Added: Generate meta description and bundle it to collection See boilerplate/web_modules/layouts/Page/index.js for an example. (#79)
  • Added: cli option to server static dist build npm run build -- --server (#163)
  • Added: during development for pre-rendering, dev server will refresh all files for each render (#145)
  • Added: custom routes are supported if you use a route field in your markdown front matter. See example in boilerplate/content/ (#47)
  • Added: hot loading support for markdown content. See changes in boilerplate/scripts/index-client.js (#11)
  • Added: boilerplate now enable source maps by default during development. See changes in boilerplate/scripts/webpack.config.babel.js (#170)

Under the hood

  • Changed: codecov is used for code coverage instead of coverall.

0.7.1 - 2016-02-12

Minor release since the only change only affects new setup (so this is not really a breaking change).

  • Changed: better init setup command (#129)
  • Fixed: process.env.NODE_ENV is adjusted by --production CLI flag (#133)
  • Fixed: during development (dev server), after a change and a page reload/new page, <script> tags are now correct (#136)
  • Added: allow to disable automatically open new tab when start dev server (#135)

0.7.0 - 2016-02-12

Lot's of changes in the boilerplate (scripts/*). You should better watch the default boilerplate and grab most of it, then add back your original modifications. This changes have been introduced for the better. Pages are now pre-rendered during development and static build should be faster than before.

  • Removed: collection.json file does not exist anymore. The collection is now inlined in generated html pages, even during development so we can use and access the collection directly and it avoid a server/client request.
  • Removed: All injected constantes like __DEV__ and __PROD__ have been replaced by process.env.* call to make code more universal (eg: if (__DEV__) => if (process.env.NODE_ENV !== "production")).
  • Changed: remove mkdirp in favor of fs-extra (#126)
  • Changed: logs are now handled by debug (#124)
  • Changed: Move opinionated deps to optionalPeerDependencies (#99)
  • Changed: the static build does not require a 3 steps process anymore. No more statinamic-static.js script. Every webpack transformations are now handled via babel-plugin-webpack-loaders. to avoid the old painful/slow process. See boilerplate changes (look for BABEL_ENV=statinamic and babel configuration in package.json and in webpack client config).
  • Changed: collection is now passed in the React context], not in the store anymore.
  • Changed: pageComponents are now called layouts. All references should be renamed accordingly. See boilerplate changes.
  • Changed: defaultComponent prop of PageContainer is now defaultLayout
  • Changed: layouts are now passed in the React context, not in the store anymore. So you need to pass them in the client script now (see boilerplate change).
  • Changed: react-router has been upgraded to v2.0.0 (#95)
  • Changed: redux as been upgraded to v4.x (#91)
  • Fixed: Dev server now redirects pages without trailing slash (eg: You call http://.../some/thing; will redirect to http://.../some/thing/) (#22)
  • Added: the entire configuration is now inspected so you do not provide unexpected types or unrecognized configuration values (#120)
  • Added: assets option to add static assets such as images, video (#94)
  • Added: statinamic section in package.json can be used to define core options like CNAME.
  • Added: CNAME option to generate a CNAME file according to your homepage (#24)
  • Added: nojekyll option to create .nojekyll file.
  • Added: verbose option to create get more informations during development.
  • Added: devHost and devPort options so you can choose your url during development.
  • Added: Development server now generate pre-rendered pages on the fly.
  • Added: Allow to pass extra middlewares and store enhancers to redux store (#102)


Lot's of change due to how static generation is handled without a 3 steps process:

  • Removed: boilerplate scripts/index-static.js (and so scripts/statinamic-static.js)
  • Changed: shorter start and build script (#127)
  • Changed: web_modules/app/store.js don't have references to pageComponents nor collection.
  • Changed: boilerplate web_modules/app/layouts.js => web_modules/layouts/index.js
  • Changed: boilerplate web_modules/Page/ => web_modules/layouts/Page/
  • Changed: boilerplate web_modules/PageError/ => web_modules/layouts/PageError/
  • Changed: boilerplate Layout wrapper is now called LayoutContainer
  • Changed: boilerplate static npm script has been renamed as build to make the build step easier to find.
  • Changed: webpack entries now use hashed name by default
  • Added: boilerplate includes cssnext instead 2 PostCSS plugins (#87)
  • Added: boilerplate includes stylelint and lint CSS with a standard configuration (#86)
  • Added: boilerplate now support a new field from markdown files to specify the <title> tag without affecting the body page title (<h1>) (See Writing section of the documentation for more information) (#76)

0.6.1 - 2016-01-19

  • Fixed: avoid rerendering on homepage without base url
  • Added: documentation is now included in the npm package in statinamic/docs/content

Under the hood

  • Changed: use babel-preset-stage-1 only (stage-0 is not really safe) (#68)
  • Fixed: static class properties (semicolon required) (babel/babel#3225)

0.6.0 - 2016-01-06

  • Changed: boilerplate is now non-transpiled and in statinamic/boilerplate (#66)
  • Changed: switch to babel@^6.0.0 (#42)
  • Changed: boilerplate now rely on babel-preset-react-hmre to get hot loading and visual errors (#52)
  • Fixed: "statinamic setup" message say that dependencies are installed when they actually are (#65)
  • Added: default Page component now warn about missing title with the filename
  • Added: non-transpiled sources are added to npm package, just in case

Under the hood

0.5.1 - 2015-11-07

  • Fixed: windows compatibility issues

0.5.0 - 2015-11-06

  • Removed: statinamic/lib/enhance-collection do not add siblings by default. You will need to pass { addSiblingReferences: true } in the options to get next and previous references to collection items.
  • Added: statinamic/lib/enhance-collection can now filter keys using a RegExp.
  • Added: when --production is used, process.env.NODE_ENV is automatically set to production.

0.4.3 - 2015-11-04

  • Fixed (in boilerplate): collection cache can now be used for static rendering (ref putaindecode#499)
  • Fixed: escape end of script tags in JSON of __INITIAL_STATE__ (ref putaindecode#501)

0.4.2 - 2015-11-03

  • Fixed: feed should now contains all entries (same bug as fixed in 0.4.1, but for rss feed instead of collection.json)

0.4.1 - 2015-11-03

  • Fixed: collection.json should now contains all entries, even for the static build (round 2)

0.4.0 - 2015-11-02

  • Fixed: add missing npm-install-package dependency (#44)
  • Removed: NotFound and Loading props of PageContainer
  • Changed: Statinamic setup command now saves peer deps as dev deps (#45)
  • Added: PageError component can be used in PageContainer when page have errors.
  • Added: PageLoading component can be used in PageContainer when page are loading.

0.3.0 - 2015-10-30

  • Changed: some peer deps versions updated
  • Changed: markdown-as-json-loader is now md-collection-loader
  • Added: ability to generate rss feeds using md-collection-loader

0.2.0 - 2015-10-29

  • Removed: useless whitespace in collection.json
  • Changed: path(name) of the base url now have a trailing slash
  • Changed: some changes in the files related to redux
    • lib/createStore -> lib/redux/createStore
    • lib/ducks/* -> lib/redux/modules
  • Fixed: collection is not limited to 8~10 items anymore
  • Fixed: peerDependencies have been adjusted to minimal requirements
  • Fixed: fetched collection.json now rely on the base url path
  • Added: setup command to setup the project (for now only install required appropriate peerDeps)
  • Added: MetadataProvider to send the data you want to the React context in a metadata attribute.
  • Added: __BASE_URL__ is now send as a constant.
  • Added: statinamic/lib/prepare-defined-values helper to easily use JS object with webpack.DefinePlugin
  • Added: defaultHead option to markdown-as-json-loader loader to provide default values
  • Added: some documentation :)

0.1.0 - 2015-10-21