196 lines (150 sloc) 9.35 KB



  • Test against Ruby 2.5 (#2166)
  • Update Rubocop and Yard (#2161)
  • Discover template in local directory if applicable (#2157)
  • Better error message when init fails to clone git repo (#2159)
  • Allow bundle path to be specified in init command (#2154)
  • Add ExtensionManager#active? to check if extension is active (#2156)
  • Resolve Haml 5 warnings (#2149)
  • Clear lazy map after resolving Tilt templates (#2132)
  • Fix ignore of I18n files (#2143)
  • Fix redirect destination lookup (#2140)
  • Add LD-JSON to MinifyJavascript content types allowed to be compressed (#2138)
  • chmod before closing file to fix compatibility with JRuby (#2133)
  • Keeps full file path for chained templates (#2117)
  • Use i18n fallbacks when looking up localized paths (#2116)
  • Compat with latest rails/activsupport < 5.2 (#2095)
  • Update "Port in use"-message for PreviewServer (#2089)
  • I18n: Keep fragment and query in url_for (#2062)
  • Add support for locale suffixes to link_to (#2065)
  • Allow absolute :data_dir paths. Addresses #2042


  • Fix some issues with Ruby 2.4.0


Fix #1951. A failed build would "clean" all files in build. Possibly breaking change, "clean" and "after_build" are only run for sucessful builds.


Fix #2019. Always logging boolean on starting up.


  • Change how config options are passed to Thor. Removes new Thor warnings from #2017


  • Fix broken ignore { |p| true } form.


  • Upgrade to Rack 2.


  • Fix unicode issues in URL deeplinks.
  • Add prefix option to asset_hash (#1949)


  • Fix --watcher-* CLI flags.
  • Allow spaces in paths to work with link_to. Fixes #1914
  • Add support for dotenv
  • Fix asset_url with asset_hash (#1919)
  • Allow partial lookups without a current_resource (#1912)


  • Expose development? and production? helpers to template context.
  • require the try core extension (#1911)
  • Fix contract for Sitemap::Store.register_resource_list_manipulator (#1907)
  • Loosen contract on Resource#source_file to Maybe[String] (#1906)
  • Let collection loops access ConfigContext for helpers. #1879
  • Use https:// to clone templates (#1901)
  • Allow numbers to be unique page_ids (#1886)
  • Prevent infinite loop when encountering files where base filename is a possible templating engine


  • Upgrade fastimage to 2.0
  • Fix shutdown of external_pipeline commands when config.rb is changed. #1877
  • Allow calls to app. to work as collections after initial config parse. #1876


  • Fix file recursion when looking for possible asset dependencies. Major preview server performance improvement.


  • Unify default extensions for all URL processing extensions. #1855
  • Fix URL regex for content: context of CSS. #1853
  • Make sure CLI config over-rides config.rb order.
  • Fix relative assets in some contexts. #1842


  • Expose all top-level config options to CLI (flags now match config. latency -> watcher_latency, etc).
  • Fix directory indexes with .htm and .xhtml files. #1821


  • Add page_id concept. Using the id key in frontmatter, proxy or page will set an ID on a resource which can be referenced by url_for and link_to.
  • Allow looking for Gemfile when setting up a project to fail gracefully.
  • Send correct exit code when external_pipeline fails during build.
  • Fix error when customizing layouts_dir. #1028
  • Fix collections (commands in loops) not being processed by page command. #1226
  • Correctly asset_hash sourcemap references.


  • Fix bad code that made /__middleman/ break.


  • Add rewrite_ignore option to asset_hash, asset_host, cache_buster & relative_assets. This proc let's you opt-out of the extension behavior on a per-path basis.
  • gzip extension now compresses svgs by default
  • Fix the encoding option.
  • Fix relative paths on image_tag helper.
  • Correctly exit with error code on failed init
  • Fixed asset_hash when path has query string or #hashes
  • Fix new extension template
  • Don't parse frontmatter on ignored files.
  • Fix displaying frontmatter on /__middleman/sitemap
  • Add skip_build_clean config which when set to a block, will avoid removing non-generated paths from build, like .git #1716
  • Minor performance improvements
  • DRY-up config.rb-specific commands like ignore or path.
  • Fix automatic images with absolute (or images dir missing) paths in markdown. Fixes #1755
  • Fix asset_host in combination with Google Analytics snippet. #1751
  • Show an error message when git CLI is not available. #1765
  • Correctly show file names of GZIP'ed assets. #1364
  • Build file output is now parallel-ized! Use middleman build --no-parallel to disable.
  • Make template file extensions that get layouts by default configurable via config[:extensions_with_layout]
  • Remove = from inline url matcher. This means paths in HTML attributes MUST be quoted. Fixes #1780


  • Add :locales and :data source types to the list of files which trigger a live-reload.
  • Rename i18n lang and langs to locale and locales.
  • Avoid matching URLs across new lines. #1689
  • Load Middleman Directory when doing init over SSL
  • Fix external_pipeline first runs running out of sequence.


  • Rather than applying layouts to all files which are not .txt, .css, .js, .json: the new behavior is to only default layouts to active for .html
  • Switch from Ruby Sass to SassC.
  • relative_assets extension overrides local relative: false option to stylesheet/javascript tag helpers.
  • Add before_server-hook to the preview server which is run before the Webrick server is started
  • Add -d to middleman server to make it run as daemon
  • Trigger "Possible File Change" events on files which share an output or template type with a changed file. Allows LiveReload to update on partial changes.
  • Added import_file SOURCE, TARGET and import_path SOURCE_FOLDER to copy resources from outside the project in. Does NOT do file change watching. Perfect for bower_components.


  • Removed ability to use JSON as frontmatter. Still allowed in data/ folder.
  • Added YAML data postscript. Like frontmatter, but reversed. Attach content after the key/value data as a :postscript key to the data structure (if Hash).


  • Fixed regression causing exceptions to be silently thrown away outside of --verbose mode in the dev server.
  • Pull in --ssl option from stable.
  • Replace hooks gem with custom callback solution.


  • Add resources class method to extensions to allow simple string-based resource generation.
  • rename app.add_to_instance to Extension.expose_to_application for adding extension-local methods to the shared app instance.
  • rename app.add_to_config_context to Extension.expose_to_config for adding extension-local methods to the sandboxed scope of config.rb
  • Add Extension.expose_to_template, which auto binds copies of extension-local methods into a Template context.
  • Remove side-loading of CLI tasks from tasks/
  • Add the option of naming config.rb as middleman.rb.
  • Builder extracted from Thor. after_build hook now passes an instance of a Builder instead of the Thor CLI.
  • New FileWatcher API.
  • Remove the partials_dir setting. Partials should live next to content, or be addressed with absolute paths.
  • Partials must be named with a leading underscore. _my_snippet.html.erb, not my_snippet.html.erb.
  • Removed the proxy and ignore options for the page command in config.rb. Use the proxy and ignore commands instead of passing these options to page.
  • The page command in config.rb can now be used to add data to the page via the data argument. It is accessed the same way as frontmatter data, via
  • Add support for environments with the -e CLI flag. Loads additional config from environments/envname.rb. Removed development? helper in favor of environment?(:development). Added server? helper to differentiate between build and server mode.
  • Removed with_layout. Use loops of page instead.
  • Removed Queryable Sitemap API
  • Removed css_compressor setting, use activate :minify_css, :compressor => instead.
  • Removed js_compressor setting, use activate :minify_javascript, :compressor => instead.
  • Removed ability to server folders of content statically (non-Middleman projects).
  • Prevent local templates being loaded when $HOME is not set
  • Removed "Implied Extension feature"
  • Remove 'upgrade' and 'install' CLI commands.
  • Gemfile may be in a parent directory of your Middleman project root (where 'config.rb' is).
  • All dependencies for your Middleman project must be expressed in Gemfile - Bundler is no longer optional.
  • Asciidoc information now available with the asciidoc local, which is a normal hash.
  • Remove page template local. Use current_resource instead.
  • Dropped support for providing a block to page & proxy.
  • Dropped support for instance variables inside templates.
  • Moved all rendering into TemplateRenderer and FileRenderer
  • Placed all template evaluation inside the TemplateContext class
  • Remove deprecated request instance
  • Remove old module-style extension support
  • Placed all config.rb evaluation inside the ConfigContext class
  • The preview server can now serve over HTTPS using the --https flag. It will use an automatic self-signed cert which can be overridden using --ssl_certificate and --ssl_private_key. These settings can also be set in config.rb