🍭 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)
broken: npm published a incomplete package which resulted in an error during
installation: Cannot find module '...phenomic/npm/postinstall.js'
- 🐛 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)
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!
- 💥 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 extendstylelint-config-standard
directly. (@MoOx)
- 🚨 Changed:
phenomic/lib/Link
has been relocated. To prevent issue in the future, it is now accessible withimport { Link } from "phenomic"
. The old reference still works but will show you a warning and will be removed in the future. (@MoOx)
-
🐛 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)
-
✨ Added:
Link
can now be used for unknow links (internal or external). Currentreact-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
andAphrodite
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)
-
🎉 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)
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)
- Fixed: remove React warnings related to new way to load pages (#868 - @MoOx)
- Added: Integration of the new styleint recommended config (#849 - @xuopled)
🎉 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 yourPageLoading
layouts, you will automatically receive partial data in the correct (future) layout (only head, body won't be defined untilisLoading
is != true).
Should not be a breaking change if you do still usePageLoading
.
If you still usePageLoading
, you can define a static property in some layouts to tell Phenomic to send anisLoading
props to your specific layout instead of usingPageLoading
for this specific transition.
You can refer to the minimal change you can do in the docs code if you want to replacePageLoading
usage by optimistic loading viaisLoading
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 ofwebpack.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)
- Fixed: Linter errors from base theme have been removed (#838 - @montogeek)
- Fixed: package.json is correctly populated during setup (#835 - @MoOx)
- Fixed: npm
postinstall
step (#833 - @MoOx)
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)
- 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
andbabel-plugin-transform-react-jsx-self
for easier React debugging
- Fixed: Service worker file was imported relatively, which only works at the root (@MoOx)
- 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)
- Fixed: RSS feed made using
PhenomicLoaderFeedWebpackPlugin
have all metadata, not just the link (@MoOx)
- 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)
- Fixed: windows support for 0.17.x (#799 - @MoOx)
- Fixed: assets=false does not break when offline is on (#794 - @thangngoc89)
- Fixed: keep query string parameters in URL (#798 - @DavidWells )
- Fixed:
Cannot find module 'webpack'
during setup (@MoOx)
- Fixed:
Cannot find module 'source-map-support/register'
(@MoOx)
🎉 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 (inpackage.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
❓ To know what is coming next, check out our public ROADMAP.
And do not hesitate to give feedbacks, it's important for the community ❤️.
-
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 userequire(“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)
- Changed:
phenomic/lib/PageContainer
has been relocated. To prevent issue in the future, is now accessible by doingimport { PageContainer } from "phenomic"
. If you want to import it with a different name, you can do it this way:(#433 - @MoOx)import { PageContainer as PhenomicPageContainer } from "phenomic"
- 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 yourpackage.json
phenomic
section. If you encounter weird issues, try disablingbabel-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
][https://www.npmjs.com/package/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 yourbabel.env
configuration. webpack 2 understand nativelyimport
statements 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 amakeConfig
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)
- Change for webpack
- Fixed: front matter
route
can use/
to define the homepage (#721 - @thangngoc89)
-
Removed:
eslint
"fix" option has been removed fromeslint-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
byreact-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 ofbabel-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)
- 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)
- Fixed:
Uncaught TypeError: (0 , _reactRouterScroll2.default) is not a function
We now only importuseScroll
from react-router-scroll (as we only use this).[email protected]
was exporting a default value,0.3.2
is not. (#627 - @MoOx) - Fixed:
SyntaxError: Unexpected token
when importing CSS fromnode_modules
. Previously,node_modules/*
where skipped in webpack static build, to improve performance (via webpackexternals
option). The problem is that is going to cause some issue for most people that will require stuff fromnode_modules
like CSS, SVG or other non-JS files. (#639 - @MoOx) - Added: better webpack build notifications.
We replaced
webpack-error-notifications
by [webpack-notifier
(https://www.npmjs.com/package/webpack-notifier) (which add compat for Windows). You don't have to do anything as it's embedded in Phenomic dev server. (#527 - @MoOx)
- 🔨 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, notphenomic.loader
orphenomic.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:
- Example of update from Phenomic 0.15 to 0.16
- Example of implementation of some tags and authors pages
ℹ️ Some works has been done on the documentation:
☺️ A new Getting started has been crafted. Please tell us what you think about it!- 🤗 We also have updated the Showcase page where you can filter projects by tags.
- ❤️ Do not hesitate to submit your website/app made with Phenomic!
-
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 ofimport { phenomicLoader } from "phenomic"
. You can usephenomicLoader
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 inphenomic.loader
orphenomic.contentLoader
(@MoOx) -
Removed:
renderer
option fromcontent-loader
(nowphenomicLoader
). See the newplugins
option below for more information. If you want to do the same effect, you can use the following pluginsimport { phenomicLoader, phenomicLoaderPlugins } from "phenomic" // ... phenomic: { // ... plugins: [ // this 3 default plugin can be replaced by the a preset. More info below phenomicLoaderPlugins.initHeadPropertyFromConfig phenomicLoaderPlugins.initHeadPropertyFromContent phenomicLoaderPlugins.initBodyPropertyFromContent 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 { ...result, body: doYourThing(result.body), } } ] }
(@MoOx)
-
Removed:
raw
andrawBody
properties from page data. If you want those back, there are plugins ready for you:import { phenomicLoader, phenomicLoaderPlugins, phenomicLoaderPresets, } from "phenomic" // ...then in the webpack config phenomic: { plugins: [ ...phenomicLoaderPresets.default, ...phenomicLoaderPresets.markdown, phenomicLoaderPlugins.initRawPropertyFromContent, phenomicLoaderPlugins.initRawBodyPropertyFromContent, ] }
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: [ phenomicLoaderPlugins.initHeadPropertyFromConfig, phenomicLoaderPlugins.initHeadPropertyFromContent, phenomicLoaderPlugins.initBodyPropertyFromContent, phenomicLoaderPlugins.markdownInitHeadDescriptionPropertyFromContent, phenomicLoaderPlugins.markdownTransformBodyPropertyToHtml, ]
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 valuesphenomicLoader
(ex "phenomic/lib/content-loader")phenomicLoaderPlugins
, the list of all available pluginsphenomicLoaderPresets
, that containsdefault
andmarkdown
presets (see documentation for more informations). (@MoOx)
-
Added: More routes can be pre-rendered! Previously, only files consumed via
phenomic-loader
(formercontent-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 editingweb_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 } /> </Route> )
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)
offline
option has been rewritten. If you were usingoffline: 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 ofoffline
(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 viafile-loader
. We encourage you to do the same by using a parameter likeloader: "file-loader?name=[path][name].[hash].[ext] // ...
. Offline API is now much more flexible and clear to setup thanks to the newcachePatterns
. Here is an example of the newoffline
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.xremark-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 useoffline
option. Since3000
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 useoffline
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 yourwebpack.config
to do the same on your existing project:postcss: () => [ require("stylelint")(), require("postcss-cssnext")({ browsers: "last 2 versions" }), - require("postcss-browser-reporter")(), require("postcss-reporter")(), + ...!config.production ? [ + require("postcss-browser-reporter")(), + ] : [], ],
(@MoOx)
-
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)
- Fixed: Security exception when accessing "/" via a
(
react-router
)<Link to="/"">
is now avoided. (#521 - @MoOx)
- Fixed: explicit update of
react-router@^2.3.0
peer dependency (@MoOx)
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)
No breaking changes!
- You can just remove stuff from your
.gitignore
file since now static builded files are hiddenscripts/_
*.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 toweb_modules
. Feel free to adjust to your need.
- Changed: node (static) bundle (
phenomic.node.bundle.js
) is now hidden (innode_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 fromnode_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)
- Fixed: regression with path-to-uri introduced in 0.12.3
(
path.posix is undefined
) #503
- Fixed: public
joinUri
function now correctly join uri with protocol #500
-
Added:
BodyContainer
component.
This component is now recommended to used wrap pagesbody
, in replacement of previous usage ofdangerouslySetInnerHTML
.
Previous method still works but have a known issue.
To use this component, you can simply replace in your layouts the following code{ body && <div dangerouslySetInnerHTML={ { __html: html } } /> }
By the following code
<BodyContainer>{ body }</BodyContainer>
Note that you will need to import
BodyContainer
like thisimport { 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 }
(#469)
- 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
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) andphenomic.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 in0.10.0
but old way (via a parameter in the formerscripts/build.js
andscripts/index-client.js
) was still accepted. If you do not have a warning in0.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
[email protected]
. 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
[email protected]
(#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 yourwebpack.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 mustexport
amakeConfig
function. This is required so Phenomic can easily create dynamic configurations. This also prepare the upgrade to[email protected]
(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 ofscripts/phenomic.node.js
. The path can be specified via an option (via CLI or config). Note that this file will be builded asscripts/phenomic.node.bundle.js
for performance. (New boilerplate (git)ignores*.bundle.js
files). - Changed:
scripts/index-client.js
is nowscripts/phenomic.browser.js
. The path can be specified via an option (via CLI or config).
- Removed:
-
Changed:
react-helmet@^3.0.0
is now required. This brings us the ability to use all latestreact-helmet
's methods, including:base
,link
,meta
,script
andhtmlAttributes
. Check out react-helmet‘s documentation for more information. Except new features, no real breaking changes (except thatreact-helmet
don‘t includes some (may be) required polyfills by default). You can upgrade by doingnpm install react-helmet@^3.0.0 --save
(#348) -
Changed:
PHENOMIC_PATHNAME
is nowPHENOMIC_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 thephenomic
section of the webpack configuration should be defined undercontentLoader
, notloader
(even if this one is still supported for now). -
Changed:
content-loader
options are now taken fromquery
ANDphenomic.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/appprocess.env.PHENOMIC_NAME
: Phenomic pretty nameprocess.env.PHENOMIC_VERSION
: Phenomic versionprocess.env.PHENOMIC_HOMEPAGE
: Phenomic homepage urlprocess.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
andPHENOMIC_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 thephenomic.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)
- Changed:
appcache
option has been deprecated and has been replaced by theoffline
option. You should update your configuration accordingly. Please refer https://phenomic.io/docs/advanced/offline-browsing/. (#343) - Added: Initial support for Service Worker via
offline
option. (#343, #405)
-
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 postsPost
layoutPagesList
component to easily show page previewPagePreview
to display page meta
(#71)
-
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 [email protected] fixes the issue that create homepage to be not rendered. (#393)
- Fixed: boilerplate comes with [email protected] 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)
- 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 passlayouts
in theroutes
definitions with a HoC.
What are HoC? Higher order Component, more about this:- https://medium.com/@bloodyowl/the-provider-and-higher-order-component-patterns-with-react-d16ab2d1636
- http://jamesknelson.com/structuring-react-applications-higher-order-components/
- http://natpryce.com/articles/000814.html
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 ( <PhenomicPageContainer { ...props } layouts={ { Page, PageError, PageLoading, Homepage, } } /> ) } } export default ( <Route component={ LayoutContainer }> <Route path="*" component={ PageContainer } /> </Route> )
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
andstylelint-config-standard
to latest 5.x versions -
Added: a
PageLoading
component is now provided and include 2 indicators:- A topbar via react-topbar-progress-indicator.
- A simple CSS loading spinner.
(#182).
-
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.
- Removed: Remove unused define environment variables in webpack client config (#315)
- Fixed: Missing babel-register package. (#335)
- Fixed: default boilerplate have a correct .gitignore file (not .npmignore) (#323)
→ Example of update from 0.8 to 0.9
md-collection-loader
has been renamed tocontent-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
andredux-thunk
have been removed (redux
will become private soon anyway, or might even be dropped).
- Less boilerplate for commands to start/build.
- No more duplicates in collection.
- No more
main.*.css
files indist
. - 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
andbuild
npm scripts bystatinamic start/build
scripts/build.js
do not need to expose webpack configuration anymore (since it's included inconfig
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 0.0.0.0 as localhost/127.0.0.1) (#257)
-
Changed:
md-collection-loader
has been renamed tocontent-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 yourscripts/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: ( require("markdown-it")({ html: true, // ... }) .use(/* ... */) )
-
Add in the configuration of
content-loader
(formermd-collection-loader
)// ... { // statinamic requirement test: /\.md$/, loader: "statinamic/lib/content-loader", query: { context: path.join(config.cwd, config.source), // WRAP HERE renderer: (text) => ( require("markdown-it")({ 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
andredux-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 therenderer
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
- Changed: Use
include
insteadexclude
to catch files to transform. See changes inboilerplate/scripts/webpack.config.babel.js
- Changed: syntax change for css loaders section.
See changes in
boilerplate/scripts/webpack.config.babel.js
- Changed:
content-loader
(formermd-collection-loader
) now don't useJSON.stringify
anymore. See changes inboilerplate/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
- 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)
- 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)
→ 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 tolayouts
,metadata
androutes
. This values should be strings. See changes inboilerplate/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 inboilerplate/content/404.md
(#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)
- Changed: codecov is used for code coverage instead of coverall.
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)
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 byprocess.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 forBABEL_ENV=statinamic
and babel configuration inpackage.json
and in webpack client config). - Changed: collection is now passed in the React context], not in the store anymore.
- Changed:
pageComponents
are now calledlayouts
. All references should be renamed accordingly. See boilerplate changes. - Changed:
defaultComponent
prop ofPageContainer
is nowdefaultLayout
- 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 tohttp://.../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 inpackage.json
can be used to define core options likeCNAME
. - Added:
CNAME
option to generate aCNAME
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
anddevPort
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 soscripts/statinamic-static.js
) - Changed: shorter start and build script (#127)
- Changed:
web_modules/app/store.js
don't have references topageComponents
norcollection
. - 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 calledLayoutContainer
- Changed: boilerplate
static
npm script has been renamed asbuild
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)
- Fixed: avoid rerendering on homepage without base url (#61)
- Added: documentation is now included in the npm package in
statinamic/docs/content
- Changed: use babel-preset-stage-1 only (stage-0 is not really safe) (#68)
- Fixed: static class properties (semicolon required) (babel/babel#3225)
- 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
- Changed: eslint config extends eslint-config-i-am-meticulous (#57)
- Changed: tests are now base on ava (#59)
- Added: code coverage using nyc & coveralls (#49)
- Fixed: windows compatibility issues
- 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 toproduction
.
- 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)
- Fixed: feed should now contains all entries (same bug as fixed in 0.4.1, but for rss feed instead of collection.json)
- Fixed:
collection.json
should now contains all entries, even for the static build (round 2)
- Fixed: add missing
npm-install-package
dependency (#44) - Removed:
NotFound
andLoading
props ofPageContainer
- Changed: Statinamic setup command now saves peer deps as dev deps (#45)
- Added:
PageError
component can be used inPageContainer
when page have errors. - Added:
PageLoading
component can be used inPageContainer
when page are loading.
- Changed: some peer deps versions updated
- Changed:
markdown-as-json-loader
is nowmd-collection-loader
- Added: ability to generate rss feeds using
md-collection-loader
- 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 ametadata
attribute. - Added:
__BASE_URL__
is now send as a constant. - Added:
statinamic/lib/prepare-defined-values
helper to easily use JS object withwebpack.DefinePlugin
- Added:
defaultHead
option tomarkdown-as-json-loader
loader to provide default values - Added: some documentation :)
💥