Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 2268 lines (1941 sloc) 136 KB


v6.82.5 2018 October 1

  • Prevent plugin false could not be loaded errors, now it will output the path that failed to be found, as expected

v6.82.4 2018 September 8

  • Report the correct error for missing action requests
  • Ensure docpad-plugintester dependency is latest

v6.82.3 2018 September 8

  • Swapped out promptly for inquirer, which brings back Node v6 support (regression since v6.82.1)

v6.82.2 2018 September 8

  • Add logging support to the pluginloader to make debugging plugin resolutions easier
  • Fixed failures of plugin loading and creation not being reported correctly
  • Ensure all dependencies are the latest right now, to help fix false negatives in plugin resolution
  • Close thread #248

v6.82.1 2018 September 7

  • Fixed initialising new projects (regression from v6.82.0)
  • docpad init will now prompt for skeletons (before v6.82.0 this was done via docpad skeleton, which was removed)
  • Upgraded remaining dependencies
    • Upgraded promptly dependency from v2 to v3
    • Swapped superagent for node-fetch
    • Close issue #1091

v6.82.0 2018 September 7

  • This release focuses on eliminating the situation where DocPad would initiate with invalid configuration that would then need to be overwritten later, this could cause plugins to not load correctly, invalid configuration persisting, and general instability until the correct configuration was loaded. Now the correct configuration is loaded from commencement.
  • Due to new dependency requirements, the minimum supported Node version is now Node version 6, which drops support for Node versions 0.10, 0.12, and 4.
  • Fix DocPad not working on windows (regression since v6.81.0)
  • Progress indicator will now pause once the action has completed, and resume on new actions, this allows for cleaner shutdowns with no change of ability
  • Graceful shutdown is now offered by the destroyOnExit configuration option, which uses process.on('beforeExit', docpad.onBeforeExit) to destroy DocPad gracefully. This is now possible as we don't have to support Node 0.10. Before we had to do graceful shutdowns in a more complex and manual manner, which resulted in less graceful shutdowns.
  • DocPad will now longer output The action completed successfully., as unless an error has displayed, then evidently everything remains successful
  • Debug log file will now only be removed if it needs to be replaced with another one
  • Fixed --no-color CLI argument and color configuration option not working
    • Closes issue #938
    • Color now correctly defaults to environment support
    • Also now supports --colour and --no-colour
    • Removed --prompts CLI argument and prompts config option in favour of the --progress CLI argument and progress config option (as that is all prompts did really)
  • The CLI has been rewritten and simplified
    • The commander package has been swapped out for the cac package
    • Customisation of the out path via a CLI option now occurs via --outPath to remove ambiguity with docpad render out file customisation
    • Introduced --verbose and --debug CLI options, such that one can do --silent --debug
    • For docpad render there is no longer a delay to check for stdin, however if you are using stdin, you must now provide the --stdin CLI argument
      • stdin reading abilities has been moved into the docpad renderStdin method, and render has gained support for it, as well as support for writing an output file
    • Global CLI options are now parsed before DocPad is instantiated, to ensure configuration is correct from initiation, rather than incorrect at instantiation then made correct later
      • This removes built in support for customising this, however, no one should be customising global CLI options anyway
      • As expected, consoleSetup event fires after DocPad is ready, and commands can be added to the cac instance in the event options
        • CLI commands are executed after this event resolves
  • Configuration parsing improvements
    • Paths will now be resolved when requested, rather than having their resolutions cached, this results in more reliable path resolution across configuration changes
    • Fixed user configuration never actually being applied (regression since v6.80.1)
    • Fixed user configuration never loading if it was in your home folder yet you had Dropbox present
    • Fixed the loaded user and env configuration debug messages still saying loading
    • The method loadConfigPath now receives a string as its first argument
    • The method getConfigPath has been replaced with the new getPath('config')
    • Leftover DocPad configuration and Plugin configuration will now be correctly removed, before it would linger due to new configuration always being merged into the old, now new configuration swaps out the old
  • Plugins are now determined via your project's package.json dependencies, rather than scanning the node_modules directory
    • This new approach is dramatically faster, and also allows us to concisely warn on plugin skips
  • Instantiation has removed unneeded complexity (and paired with the aforementioned CLI changes) this ensures DocPad always results in a valid state
    • Removed the configuration option loggers that allowed users to swap our caterpillar for something else
      • No one used it, nor is it optimal to do so. It just introduced a lot of unnecessary complexity and fragility
      • Removed the method setLoggers
    • Constructing DocPad will now always perform the load and ready actions
      • Removed the construction option action that allowed one to override the initiation actions
      • Removed the docpadLoaded event. It was poorly named, non-optimal, and only used by a single outdated plugin.
    • Fixed docpad clean not cleaning a custom outPath
      • DocPad now also outputs which paths were cleaned
      • Path cleaning now uses a more robust way of ensuring DocPad doesn't clean a parent outPath
      • Closes issue #727
  • The Plugin Loader class has been abstracted out to pluginloader and made generic
    • Removes require('docpad').PluginLoader use require('@bevry/pluginloader') instead
    • Removes the methods: loadPluginsIn, loadedPlugin
    • Removes the configuration options: pluginsPaths, enableUnlistedPlugins, skipUnsupportedPlugins, warnUncompiledPrivatePlugins, enabledPlugins
    • Closes issue #391
  • Removed the --force CLI option, it was unnecessary customisation
    • Simplified the installer methods: initGitRepo, initNodeModules, installNodeModule, uninstallNodeModule
  • Removed some long standing deprecations
    • Removed require('docpad').BasePlugin use require('docpad-baseplugin') instead
    • Removed require('docpad').createInstance use require('docpad').create instead
    • Removed docpadUtil.setImmediate (existed for node 0.8 compat which hasn't been there since DocPad 6.72) use setImmediate instead
  • Renamed docpad.inspector to docpad.inspect and removed docpadUtil.inspect
  • Removed the unstable node.js version warning from DocPad v6.55.6
  • Removed leftover .babelrc file that was causing everything to be compiled against es2015 instead of what we desire from our package.json configuration
  • Updated base files and editions using boundation

v6.81.0 2018 August 21

  • This release accomplishes the removal of some long standing deprecations, for background reading refer to:
  • Changes:
    • Added runBefore and runAfter events
    • DocPad is now verbose about when it has to perform an mtime change
  • Migrations / Removals:
    • Progress on issue #691 and issue #391
    • Close issue #1081
      • Removed the deprecated dynamic server abilities
      • Abstracted out the static server abilities into the new serve plugin
      • Removes the properties: serverExpress, serverHttp, filesByUrl, filesBySelector, filesByOutPath
      • Removes the methods: getServer, setServer, destroyServer, getFileByUrl, getFileByRoute, getPort, getHostname, getServerUrl, getSimpleServerUrl, serverDocument, serverMiddlewareHeader, serverMiddlewareRouter, serverMiddleware404, serverMiddleware500, server
      • Removes the events: serverBefore, serverExtend, serverAfter
      • Removes the options: databaseCachePath, port, hostname, maxAge, serverHttp, serverExpress, extendServer, middlewareStandard, middlewareBodyParser, middlewareMethodOverride, middlewareExpressRouter, middleware404, middleware500
      • Removes the document properties: dynamic
      • will now default to an empty string
      • Removes the docpad-server executable, and the docpad server action
    • Removed the deprecated ability to load uncompiled plugins
    • Removed the deprecated DocPad database cache, it never worked well
      • Removes the properties: databaseTempCache
      • Removes the methods: getDatabaseSafe
      • Removes the generate event properties: cache
    • Removed the deprecated docpad-compile executable, no one used it
    • Removed leftover hashKey property
  • New Deprecations:
    • require('docpad').require('testers') will be removed in an upcoming release
      • Use require('docpad-plugintester') instead
      • A warning will be outputted
    • require('docpad').BasePlugin will be removed in an upcoming release
      • Use require('docpad-baseplugin') instead
      • No warning will be outputted

v6.80.9 2018 August 20

  • require('docpad').require('thing') now only supports the thing testers

v6.80.8 2018 August 19

v6.80.7 2018 August 17

  • docpad render command now behaves as expected, and omission of the filename now shows the error that before failed to report
    • Fixes the ERR_INVALID_ARG_TYPE error when using stdin
  • DocPad now shuts down much more gracefully and comprehensively
  • Fixed failures not being represented in the exit code
  • Fixes active requests and active handles from being outputted on shutdown when not needed
  • Fixed ENOTCONN error from being outputted when not necessary
  • Signal interrupt (ctrl+c) shutdowns now occur more gracefully and set the exit code appropriately
    • The first signal interrupt will queue a shutdown
    • The second signal interrupt will commence a shutdown immediately
    • The third signal interrupt will terminate completely
    • Closes issue #698
  • Errors that occured before the locale was ready are now reported
    • Required precompiling the locale, as such it has moved from locale/en.cson to source/lib/locale/
    • Closes issue #1012
  • DocPad shut downs are now quicker by default (1 second quicker)
    • Shutdown delay was reduced and made customisable via the new destroyDelay configuration option
  • Errors will now report their causations thanks to Errlop
  • For DocPad users and plugin developers, if you ever need to make timers/timeouts/intervals, please use docpad.timer to make and destroy them, that way DocPad can ensure they are cleaned up so they don't prevent shutdown
  • consoleSetup errors are now reported correctly
  • Uncaught exceptions are now fatal errors by default, which will cause DocPad to shut down
  • DocPad will now no longer output The action completed successfully when something went wrong with the action
  • Removed the internal methods docpad.destroyRegenerateTimer, docpad.createRegenerateTimer, docpadUtil.wait, consoleInterface.destroy
  • Introduced the configuration options catchOurExceptions, catchUncaughtExceptions, setExitCodeOnFatal, setExitCodeOnError, setExitCodeOnRequest, destroyDelay, destroyOnSignalInterrupt, regenerateDelay, slowFilesDelay, slowPluginsDelay
  • Added locale strings destroyDocPad, destroyedDocPad
  • Updated dependencies

v6.80.6 2018 July 20

v6.80.5 2018 July 20

  • Progress totals are now accurately reflect item completions
  • progressbar has been replaced with progress-title
    • This is far more robust and simple, offers greater and more detailed progress updates (ie. progress updates for file system watching), and even supports progress updates inside DocPad's debug mode
  • Fixed progress bar sometimes lingering after a generation
  • Updated dependencies

v6.80.4 2018 July 19

  • Fixed Error: extendr only supports extending plain objects, an input was not a plain object when scaffolding a new project (bug introduced in v6.80.0)

v6.80.3 2018 July 13

  • If a task completed, but had already completed earlier, you will now get more detailed debugging information to help you locate the cause
  • Updated dependencies

v6.80.2 2018 July 13

  • Fixed Buffer() is deprecated due to security and usability issues

v6.80.1 2018 July 13

  • Fixed Cannot set property initialConfig of #<LessPlugin> which has only a getter

v6.80.0 2018 July 12

v6.80.0-beta 2018 March 7

  • This is a beta release, while it is in beta, assume there will be breaking changes
  • DocPad is now compiled with CoffeeScript v2
    • To use it with CoffeeScript v1 plugins, you will need to set the following environment variable EDITIONS_SYNTAX_BLACKLIST=esnext
      • You can do this on unix systems by running DocPad like so: env EDITIONS_SYNTAX_BLACKLIST=esnext docpad run
      • Otherwise you will encounter TypeError: Class constructor BasePlugin cannot be invoked without 'new'
    • To upgrade your plugin to v2, run boundation on it
    • If you use optional arguments in your plugin or event functions, such as fn (opts={}, next) then it must be changed to fn (opts, next) as otherwise the completion callback will not be passed, as the fn.length will be 0 and ambi will not be able to detect it is an asynchronous function - details
  • Turns out dynamic documents always had invalid content types
    • As dynamic documents are a deprecated feature, the setting of the malfunctioning header has been removed, and a warning is now outputted when they are used
  • Configuration loading is merged more accurately - details
  • Logger references are now removed when they are destroyed, and if logging occurs without loggers, the message will be outputted to the console (unless it seems to be a debug message, in which case it will be outputted only if you are not debugging)
  • stdin errors changed to log level 6
  • Removed DocPad's custom --profile handling, as there are now more modern ways of debugging node apps
  • Removed safeMode option as it was never implemented completely
  • Internal TaskGroup property on models has been renamed to the more appropriate createTaskGroup
  • Updated dependencies
    • closes
    • major benefits are offered by these upgrades:
      • extendr - object merging is now more reliable
      • taskgroup, caterpillar, watchr, scandirectory - huge performance increases and reliability, should be about 50%
        • thread on taskgroup performance
        • caterpillar performance comes from a more streamlined logging process, before there was some redundant effort
        • watchr and scandirectory have had a near complete refactoring, as well as implemented the super fast readdir-cluster
    • these deps were not upgraded:
      • express - requires a future DocPad v7 - details
      • promptly - drops support for earlier node versions that DocPad still supports
      • superagent - drops support for earlier node versions that DocPad still supports

v6.79.4 2017 March 31

  • Fixed DocPad having stdin errors on exit under certain circumstances
  • Updated base files

v6.79.3 2017 March 29

  • Fix the this.emitSerial errors when running plugin tests
    • This was due to event-emitter-grouped v2.5.0 busting joe v1.6.0 which we pinned, so pinned joe to ~1.6.1 and joe-reporter-console to ~1.2.1

v6.79.2 2017 March 28

  • Fix out/lib/testers.js being omitted in published package (regression since v6.79.1)
    • Without this file plugin tests break, so this fixes that
  • Fix src/ being included in published package (regression since v6.79.1)
    • This reduces package size once again
  • Thanks to Sebastian Domagała for his assistance

v6.79.1 2017 March 28

  • Updated base files
    • This prefixes DocPad's own ./package.json scripts with our: to prevent npm v4's use of prepare from causing DocPad installs to fail under development conditions
  • Thanks to Sebastian Domagała for his assistance

v6.79.0 2016 September 27

  • Bumped coffee-script dependency version
  • Fixed possible docpad not defined issue on loadLocale

v6.78.6 2016 June 27

  • Set joe version to fixed 1.6.0 and event-emitter-grouped to 2.4.3 to handle issue 1047

v6.78.5 2016 June 15

  • Recompiled with latest dev dependencies

v6.78.5 2015 September 26

  • Fixed missing next parameter for methods fixNodePackageVersions, installNodeModule and uninstallNodeModule.

v6.78.4 2015 September 16

  • Fixed path option is deprecated error when cloning a skeleton
  • Changed donation message, maybe this one will be more successful
  • Updated dev dependencies
  • Updated base files

v6.78.3 2015 August 21

v6.78.2 2015 August 21

  • Profilers must now be specified by DOCPAD_PROFILER variable
  • Prevent waiting handles from being outputted in silent mode (prevents a common render test failure)
  • Use hostenv for PORT and HOSTNAME variables
  • Listen to hostname by default (will be outputted as localhost)
  • Updated dependencies
  • Updated base files

v6.78.1 2015 March 20

  • Fixed queryEngine is undefined error (regression since v6.78.1)

v6.78.0 2015 March 18

  • You can now module.exports = function(docpad){ return {/* your docpad configuration */} }

v6.77.1 2015 March 18

v6.77.0 2015 March 18

  • Replaced lodash with underscore
    • Backbone (our dependency) already includes underscore, so makes sense to reduce our footprint
  • Removed these deprecated exports:
    • require('docpad').DocPad
    • require('docpad').Backbone
    • require('docpad').queryEngine
    • docpadInstance.View
  • Added progress configuration option that you can use to disable progress bars

v6.76.1 2015 March 17

  • Fixed testers wanting chai (regression since v6.76.0)

v6.76.0 2015 March 17

  • Regenerate timer is now closed correctly (regression since v6.48.0)
  • Close stdin after destroy when using the console interface
  • Output anything we could be waiting for after destroy using the console interface
  • Rather than including all of lodash, we now just include the modules we need
  • Updated profiling for the latest tools
  • Quicker execution of certain spawned commands
  • Updated dependencies

v6.75.2 2015 March 16

  • Better error handling when updating user config fails
  • Better error messages when CSON handling fails

v6.75.1 2015 March 16

  • Better input availability detection

v6.75.0 2015 March 16

  • Better CSON config and meta parsing
  • Updated dependencies

v6.74.0 2015 March 14

v6.73.5 2015 February 23

v6.73.4 2015 February 23

  • Only display prompts and check for updates when we are in an interactive terminal by default

v6.73.3 2015 February 23

  • Improved debugging of TaskGroups
  • Fixed crash when MAC was not available (regression since v6.72.0)
    • Fixes Travis CI problems, hopefully fixes Heroku Problems
  • Fixed changed log level configuration not applying in subsequent configuration updates (regression since always?)
    • Fixes warnings appearing in CLI render commands (regression since always?)
  • Better create and createInstance methods (inspired from TaskGroup's)
  • Better expectation tests that now show differences
  • Fixed CLI tests using old DocPad (they now use --global flag) (regression since always?)
  • Updated dependencies

v6.73.2 2015 February 20

  • If an error occurs during the initialisation actions, DocPad will only suicide if there was no completion callback to handle the error
  • More robust way of writing errors in case stderr doesn't exist or isn't writeable

v6.73.1 2015 February 20

  • Fixed DocPad creation via API returning 2 (regression since v6.71.0)
    • For some reason, having DocPad::inspect defined broke it, as such DocPad::inspect is now DocPad::inspector
  • Fixed double binding of some prototype methods
  • Simpler DocPad.create and DocPad.createInstance functions
  • The --no-color option now works (introduced in v6.71.0)

v6.73.0 2015 February 20

  • Got rid of the file, our new main file is the DocPad class itself lib/docpad
  • Updated dependencies

v6.72.1 2015 February 20

  • Fixed possibility of DocPad not exiting on exiting on a error
  • More robust error writing
  • jshint compliance

v6.72.0 2015 February 20

  • Fixed fetching of skeletons (regression since v6.70.0)
  • Added the ability to uncompiled warn warnings off for private plugins by setting warnUncompiledPrivatePlugins to false
  • Added better warnings when loading a plugin fails for whatever reason
  • Better reporting of warnings
  • coffeelint compliance
  • Updated dependencies

v6.71.1 2015 February 19

  • Output as the hostname when IPv6 addresses :: and ::1 are reported
  • Output as the hostname instead of localhost when is reported

v6.71.0 2015 February 19

  • Updated docpad-debug to work with latest debugging tools
  • DocPad will now output most things with colours when it is able to
  • Fixed TypeError: Object #<CSON> has no method 'parseCSON' error when parsing user configuration (regression from v6.70.0)
  • Fixed secondary URL redirect
  • Fixed incorrect writing of user configuration (regression from v6.70.0)
  • Re-added support for uncompiled plugins (regression from v6.70.0)
  • When an error occurs with the docpad.action API and a completion callback is specified, the error will no longer be logged
  • Fixed reporting of errors when something goes wrong when initialising a selected skeleton
  • Fixed potential crash under random circumstances caused by 3rd party dependency
    • Also removed the [longjohn] package as a precaution for when caterpillar can't fix the issue
    • More information on issue #926

v6.70.1 2015 February 12

v6.70.0 2015 February 12

  • Added support for Node 0.12 and IO.js
  • Dropped support for Node 0.8. Minimum supported Node version is now 0.10.
  • CSON has been updated to v2, this means that your docpad.cson files will no longer work with functions
    • If you have functions inside your docpad.cson file:
      • Rename docpad.cson to
      • Export your configuration inside by doing: module.exports = {your configuration data}
      • Example file.
  • Updated dependencies

v6.69.2 2014 December 17

v6.69.1 2014 September 18

v6.69.0 2014 June 16

  • Updated dependencies

v6.68.1 2014 June 5

  • longjohn is now an optional dependency, as for some people it was not loading, also made it use ~ instead of ^ as maybe those users are using old npm versions

v6.68.0 2014 June 1

  • File and document messages are now localised
  • Better error messages when parsing the meta data fails
  • Will now output an error when a document or file model was instantiated outside of docpad.createModel as instantiating directly will mean they will be missing necessary properties and events

v6.67.0 2014 June 1

  • We now output the link to the bug report guide with error messages
  • We now include longjohn in debug mode for better stack traces

v6.66.0 2014 May 23

  • Meta header separators can now contain additional characters, providing there is still a character that repeats at least 3 times

    This allows you to do things like:

    /* ---
    works: "yes"
    --- */
    window.alert("<%- %>")

    Or even more concisely:

    works: "yes"
    window.alert("<%- %>")

    Big thanks to pflannery for pushing for this with #814

v6.65.0 2014 May 17

  • Independent rendering (including layout rendering) now occurs on a clone, allowing independent renderings on the same file to occur at the same time
    • This fixes an issue where a recursive render on a file will cause a stalemate
  • More detailed errors when something goes wrong with rendering a file
  • Deprecated docpad.cloneModel(document), you can now use document.clone() safely
  • Deprecated apply option for document.render, now use document.clone().action('render') instead
  • Fixed broken docpad.addModel and docpad.addModels (broken since their introduction in v6.55.0)
  • Updated dependencies

v6.64.3 2014 May 4

v6.64.2 2014 April 21

  • Updated dependencies

v6.64.1 2014 April 21

v6.64.0 2014 March 4

  • Fixed a possible issue with @include template helper not working when the renderPasses config option changes
  • DocPad will now auto-set the site.url template data to the calculated site URL (e.g. http://localhost:9778) if it is falsey
    • This allows you to do environments: development: templateData: site: url: false inside your DocPad configuration files, to always use the correct site url regardless of environment

v6.63.8 2014 February 26

  • Fixed "Object # has no method err" (regression since v6.37.7)

v6.63.7 2014 February 21

  • Fixed IE9 and below not understanding the charset we send
  • Better debugging for invalid watch states
  • Fixed DocPad failing to serve files after the initial generation once the docpad configuration file has been modified
  • Updated dependencies

v6.63.6 2014 February 18

  • Fixed npm v1.4.3 from using ^ instead of ~ when installing and updating docpad plugins

v6.63.5 2014 February 18

  • Fixed invalid TaskGroup ~3.3.7n dependency version (regression since v6.63.1)

v6.63.4 2014 February 18

  • Don't use HTTPS URLs for fetching latest version and exchange data (as HTTPS URLs may not always be available)
  • Updated dependencies

v6.63.3 2014 January 30

  • Regenerate every options are now customisable via regenerateEveryOptions
  • Regenerate every options now default to partial:false, populate:true
    • Before there were no defaults, meaning that they always did a non populating, partial, regeneration (regression exposed due to the fix in v6.61.0)

v6.63.2 2014 January 30

  • Don't show generate success message if an error occurred

v6.63.1 2014 January 30

  • Fixed gobbling of error messages during contextualizeFiles, renderFiles or writeFiles (regression since v6.59.2)
  • All task groups and tasks we define are now named (makes for easier debugging)
  • Updated dependencies

v6.63.0 2014 January 28

  • Disabled database writing by default (set databaseCache to false instead of 'write" by default)
    • We never used it, still many nuances with reading to figure out, so it doesn't make sense incurring the performance penalty of the write while there is no use for it
    • Enable writing manually by setting databaseCache to "write"
    • Enable writing and reading manually by setting databaseCache to true

v6.62.0 2014 January 28

  • Stylesheets are more efficiently generated
    • Files with the outExtension: 'css' are now the only ones included in the stylesheet collection
    • Stylesheets no longer have referencesOthers to true on them by default, this is now left up to plugin authors to do
    • Thanks to Dimitar Kolev-Dick for issue #789

v6.61.0 2014 January 27

v6.60.4 2014 January 27

v6.60.3 2014 January 16

  • Fixed toUTCString errors (regression since v6.60.0)

v6.60.2 2014 January 16

  • Don't include --save-dev when installing plugins (regression since v6.59.3)

v6.60.1 2014 January 16

  • Updated dependencies

v6.60.0 2014 January 16

v6.59.6 2013 December 20

  • Non-CoffeeScript plugin testers can now rejoice, you can now easily extend the tester classes by using TesterClass.extend({})

v6.59.5 2013 December 20

  • Non-CoffeeScript plugin authors can now rejoice, you can now easily extend the BasePlugin class by using var MyPlugin = BasePlugin.extend({})

v6.59.4 2013 December 20

v6.59.3 2013 December 20

v6.59.2 2013 December 19

  • More reliable delay of requests while the initial generation is still performing
  • Removed the deprecated writeSource meta data header, writeSource is now only available via the API usage
  • Added new generated event that will fire once the initial generation has completed

v6.59.1 2013 December 19

  • Fixed listening on heroku (regression since v6.58.2)

v6.59.0 2013 December 19

  • Removed the deprecated ensureFile, ensureDocument, ensureModel/ensureFileOrDocument methods, use addFile, addDocument, and addModel instead
  • Improved watching, should hopefully fix #738, #742, #739
  • Updated dependencies

v6.58.2 2013 December 18

  • Can now change the hostname that we listen to via the hostname configuration option
  • Updated dependencies

v6.58.1 2013 December 17

v6.58.0 2013 December 16

  • Deprecated and removed the parseBefore and parseAfter events
    • Files are now parsed as they are loaded in, rather than only when they reach the generation cycle
    • See issue #736 for discussion and upgrade options
  • Dynamic documents now have access to templateData that plugins have extended (regression since always)
  • Documents that want to be rendered, but not written, are now rendered (possible regression since v6.55.0)
  • Moved the missing layout error check from contextualize step to render step, as the layout may not be there if we are still loading documents

v6.57.3 2013 December 16

  • Contextualize will now also be called during a file's load action to help injected files being contextualized

v6.57.2 2013 December 12

  • Updated dependencies

v6.57.1 2013 December 9

  • Fixed delay of requests not working when documents are still performing their initial generation (regression since v6.57.0)

v6.57.0 2013 December 3

  • Improved the caching of on-the-fly collections and fixed the name setting of collections
    • Possible b/c break: DocPad::getCollections() will now return an [collection, ...] array, rather than an {name: collection} object. To get the name of a collection, you should now do

v6.56.0 2013 November 29

  • The database cache introduced in v6.55.0 is set to write (write-only) by default now until we fix out the kinks
    • To enable read mode, use the --cache command line option when running DocPad, or set the databaseCache configuration option to true

v6.55.9 2013 November 29

v6.55.8 2013 November 28

  • Fixed Node.js v0.8 compatibility (regression since v6.55.3)

v6.55.7 2013 November 28

  • ??? was already published...

v6.55.6 2013 November 28

  • Output a huge warning banner when running DocPad against an unstable version of Node.js

v6.55.5 2013 November 27

  • Fixed Configuration changes require a docpad cleanto regenerate files (regression since v6.55.0)

v6.55.4 2013 November 27

  • Fixed Offline changes to layout do not re-render the layout's children (regression since v6.55.0)
  • Removed layoutId internal file attribute in favour of new layoutRelativePath internal file attribute
  • Added hasLayout special collection
  • docpad update will now also perform docpad clean for you to ensure the database cache is cleaned between versions

v6.55.3 2013 November 27

  • Fixed possible "(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral." error under certain circumstances (regression since always?)

v6.55.2 2013 November 27

  • Fixed Changes to layout do not re-render the layout's children (regression since v6.55.0)

v6.55.1 2013 November 26

  • Fixed databaseCache config property (introduced in v6.55.0)

v6.55.0 2013 November 26

  • DocPad will now cache the database to .docpad.db after generation, and load it up upon initial generation
    • This removes the huge performance burden of the initial scan, load, parse, render
    • The writeSource attribute can now be considered under review for deprecation
    • This can be turned off by setting the configuration option databaseCache to false
    • You can customise the path of the database cache file via the databaseCachePath configuration option
    • The database cache will be cleared on docpad clean
    • NOTE: If you remove files when DocPad is shut down, DocPad will not pick it up the changes, to fix do one of the following:
      • Run docpad clean to reset the database cache
      • Disable the database cache by setting the databaseCache configuration option to false
      • Or just make sure when you are working on your DocPad site, you have docpad run running
      • This potential problem is planned on being fixed in a later version, for now an immediate release with these huge performance gains far outweigh a delayed release with the fix
  • DocPad will now only re-render things that have explicitly changed or not been written yet
    • This removes a huge performance burden when pulling in virtual documents
    • To use this when importing documents, make sure you set the mtime attribute
  • Added --silent option that sets prompts: false for disabling all prompts
  • The following changes have been made to the DocPad prototype
    • addModel(model, opts) was added
    • addModels(models, opts) was added
    • createModels(models, opts) was added
    • ensureModel(model, opts) is now the same as createModel(model, opts)
    • generatePrepare, generateLoad, generateRender, generatePostpare, populateCollections were consolidated into generate(opts, next)
  • The following changes have been made to the events:
    • generateBefore, populateCollectionsBefore, populateCollections, generateAfter now receive the options: initial, reset, and collection
  • The following changes have been made to the models:
    • rtime (render time), wtime (write time) attributes have been added
    • date, mtime, ctime, rtime, wtime attributes if set will always be Date instances
    • action method has been added
    • load, parse, contextualize, render, write, writeSource should now be called via file.action('the action name', opts, next) instead
  • Updated dependencies

v6.54.10 2013 November 21

v6.54.9 2013 November 19

v6.54.8 2013 November 18

v6.54.7 2013 November 17

v6.54.6 2013 November 13

  • The removeWhitespace and contentRemoveRegex tester config options now make sense
    • They are now executed against the value we are comparing, rather than on all the values in serialised form
  • docpad install will no longer update git, http, https and other remote dependencies

v6.54.5 2013 November 7

  • Fixed background task error reporting (regression since always???)
  • Fixed template helpers not being able to reference other template helpers
  • Better debugging support due to name tasks and task groups
  • Updated dependencies

v6.54.4 2013 November 1

  • Much more detailed progress bars
  • Updated dependencies

v6.54.3 2013 November 1

  • Fix incorrect @latest within npm install docpad@6 @latest --save when running docpad update and docpad install
    • You'll probably want to run npm uninstall --save latest to make sure that the incorrectly installed latest dependency is removed

v6.54.2 2013 October 30

v6.54.1 2013 October 28

v6.54.0 2013 October 27

  • Backwards compatibility change: Notifications are now handled by plugins instead of the core
  • Backwards compatibility change: i18n support is now handled via the encoding and iconvlite dependencies instead of iconv
    • This enables windows support for i18n
    • Just like before, you turn on i18n abilities by setting the detectEncoding configuration option to true (still false by default)
    • Thanks to Sim Jiason and Eduán Lávaque for issue #627
  • Added renderCollectionBefore and renderCollectionAfter events
  • Fixed the connect.multipart() will be removed in connect 3.0 warning
    • Replaced the bodyParser middleware with the urlencoded and json middlewares
  • Added 404 Not Found notices to the console
  • Updated dependencies

v6.53.4 2013 October 11

  • Fixed DocPad version being undefined in some instances causing plugins to skip (regression since v6.53.3)

v6.53.3 2013 October 10

  • No need to load in the DocPad package.json file each load
  • We now output whether or not we are a global or local installation with docpad --version

v6.53.2 2013 October 10

  • Watching improvements
  • Updated dependencies

v6.53.1 2013 October 1

  • Fixed ReferenceError: config is not defined on subscribe (regression since v6.53.0)
  • Fixed autodetection of name and username (regression since v6.53.0)
  • Updated dependencies

v6.53.0 2013 September 17

  • Absolute paths should no longer end up joined when the configuration is reloaded
  • Improved locale support
    • Can now merge locales together
  • Fixes subscribe and tos metrics
    • We now load the user information within the load action, rather than inside the ready action
    • Closes issue #623

v6.52.2 2013 September 16

  • Possible fix for Error: A task's completion callback has fired when the task was already in a completed state, this is unexpected error
  • Will now output the progress of iconv install if detectEncoding is true and iconv isn't installed
  • Updated dependencies

v6.52.1 2013 September 8

  • Fixed "structure already exists" errors after successful docpad init and docpad skeleton completion (regression since v6.51.0)
  • Better errors when a skeleton fails via the global docpad run

v6.52.0 2013 September 8

  • Pay more attention to getmac errors
  • Ensure completion callback (when specified) is always fired for the DocPad::error and DocPad::track methods
  • Fixed DocPad::getBlocks returning the DocPad instance instead of the blocks
  • Added DocPad::getIgnoreOpts method to help clean up some code
  • Removed all calls to process.exit by instead destroying DocPad properly causing an automatic shutdown if that is what is desired
  • Fatal errors are now written to stderr instead of stdout
  • Updated dependencies

v6.51.6 2013 August 30

  • When using writeSource don't write the header if there is no meta data
  • Added support for writeSource: "once"

v6.51.5 2013 August 30

  • Fixed syntax errors in docpad configuration file not being reported correctly (regression since v6.49.0)
  • If a configuration file fails to load we will now tell you which one it was

v6.51.4 2013 August 29

  • Fixed TypeError: Cannot call method 'getLocale' of undefined when destroying (regression since v6.49.0)

v6.51.3 2013 August 29

  • Fixed docpad uninstall <pluginName> (feature introduced in v6.51.0)

v6.51.2 2013 August 29

  • Fixed certain plugin tests that require skeleton initialisation (regression since v6.52.0)
  • When using --global flag we won't kill the global instance when starting a skeleton

v6.51.1 2013 August 29

  • Fixed docpad upgrade

v6.51.0 2013 August 29

  • Better upgrade docpad upgrade and update docpad update experience
  • DocPad will now run the local installation if it exists (avoid this by using the --global flag)
  • Added the ability to uninstall plugins via docpad uninstall <pluginName>
  • Updated dependencies

v6.50.1 2013 August 28

v6.50.0 2013 August 20

  • Upgraded from commander v1.3 to v2 (removes commander prompts)
  • We now use promptly for prompts
  • Updated dependencies

v6.49.2 2013 August 20

  • Fixed File::deleteSource
  • Plugin tester will now try to init the plugin test directory if there are tests defined (useful for plugins which tests start from scratch)
  • Updated dependencies

v6.49.1 2013 August 14

v6.49.0 2013 August 12

  • DocPad will now shutdown and destroy itself more thoroughly
  • Added the event docpadDestroy for plugins that are doing anything long-running so they can destroy themselves thoroughly too

v6.48.1 2013 August 9

v6.48.0 2013 August 5

  • Moved regenerateEvery timer into generate rather than setConfig to avoid action stacking
  • DocPad will now warn you when your project's local DocPad version does not match the global version

v6.47.0 2013 July 31

  • Added FileModel::deleteSource
  • Added support for specifying inline content within the styles block
  • Fixed DocPad::parseFileDirectory

v6.46.5 2013 July 28

v6.46.4 2013 July 27

  • Fixes
    • Fixed virtual documents firing duplicated events
      • Plugins should now use DocPad::cloneModel(model) instead of model.clone() as the latter can't bind events correctly
    • Fixed Object #<Model> has no method 'setDefaults' error (bug since v6.46.3)
    • Fixed the 500 middleware not working
  • Changes
    • The documents collection is now defined by render:true, write:true rather than being paths and isDocument:true based
    • The files collection is now defined by render:false, write:true rather than being paths and isFile:true based
    • The html collection now checks for write:true instead of isDocument:true or isFile:true
    • The stylesheet collection now checks for write:true instead of isDocument:true or isFile:true
  • Additions
    • Added ability to do getCollection('database') to get the global database
    • Added naming to collections to easily identify which collection we are in when debugging
    • Added render alias for documents directory
    • Added static alias for files directory
    • Added logging for event emits
    • Re-added DocPad::parseDocumentDirectory and parseFileDirectory (removed from v6.46.0) which wraps around the new ways of doing things
    • Added DocPad::createModel(attrs,opts) and updated DocPad::createDocument and DocPad::createFile to use it
    • Added DocPad::ensureModel(attrs,opts) and updated DocPad::ensureDocument, DocPad::ensurefile, and DocPad::ensureFileOrDocument to use it
    • Added DocPad::attachModelEvents(model) to attach the required docpad events to a model

v6.46.3 2013 July 25

  • Moved Base::setDefaults to FileModel::setDefaults
  • Removed superfluous loading logging messages
  • The attributes parser, header, body, and content are now set correctly to null instead of undefined if there is no data
  • Correctly set meta attributes when also setting default attributes (bug since v6.42.2)
  • Added support for outPath, outDirPath and rootOutDirPath to be null
  • Added unit tests for virtual document loading
  • Fixed removeWhitespace tester option default
  • Added contentRemoveRegex tester option
  • Fixed debug log lines always being DocPad.log (bug since always)

v6.46.2 2013 July 24

  • Fixed regenerations not regenerating referencing documents (bug since v6.46.0)
  • Fixed documents not including the default attributes of files (bug since always)
  • Corrected naming of releativeOutBase to relativeOutBase on file model defaults (introduced in v6.45.0)

v6.46.1 2013 July 23

  • Added populateCollectionsBefore event

v6.46.0 2013 July 23

  • Awesomeness for everyone
    • Added support for creating brand new virtual documents
    • File data will now just set the buffer
      • Removed getData and setData on models
    • Can now docpad install multiple plugins at once
    • Plugin loading will now validate the peerDependencies requirements along with the old engines
    • docpad init will now initialise to the complete docpad version and npm v1.3
    • You can now tell a file to update it's source file by setting writeSource: true in it's meta data
  • Awesomeness for developers
    • We now require all plugins to conform to the v2 for DocPad v6 standard, otherwise they will be skipped
      • This is to ensure compatibility with docpad update and docpad install <plugin> which are the new standards for installing plugins
    • parseDirectory will no longer:
      • load files, this is now handled by the generate process instead
      • add files to the database, this can be done via the completion callback or via passing over the collection the files should be added to: parseDirectory({collection:docpad.getDatabase()})
    • Removed parseDocumentDirectory use parseDirectory({createFunction:docpad.createDocument}) instead
    • Removed parseFileDirectory use parseDirectory({createFunction:docpad.createFile}) instead
    • Document::writeRendered removed as File::write will now write the output content
    • Added File::writesource
    • Added PluginTester::getConfig() and PluginTester::getPlugin()
  • Updated dependencies

v6.45.1 2013 July 23

v6.45.0 2013 July 6

  • New docpad update command to ensure that your local installations of DocPad and its plugins are up to date with their latest compatible version
  • docpad install [plugin] command now installs the latest compatible version
  • Added NodeFly support when using the --profile flag

v6.44.0 2013 July 2

  • Model Improvements
    • Way better support for virtual documents (files that do not have a physical path)
    • Cleaned up and fortified the normalization and contextualize procedures
    • At least one of these file attributes must be specified: filename, relativePath, fullPath
      • relativePath if not set will default to fullPath or filename
      • filename if not set will default to the filename of fullPath or relativePath
      • fullPath will not default to anything, as it is now optional (providing better support for virtual documents)
    • The following file attributes are auto set but can be over-ridden by custom meta data: date, name, slug, url, contentType, outContentType, outFilename, outExtension, outPath
    • The following file attributes are forcefully auto set: extensions, extension, basename, outBasename, relativeOutPath, relativeDirPath, relativeOutDirPath, relativeBase, relativeOutBase, outDirPath
    • Added these new file attributes: outBasename, relativeOutBase, fullDirPath
    • Updated a lot of log messages to support virtual documents
    • buffer is now correctly set as a File option
    • File::setMeta(attrs) can now accept meta backbone models instead of just javascript objects
    • File and Document methods now use extract-opts for their arguments just like DocPad already does
    • Removed the incorrect dangling file attributes: path and dirPath
    • Added new FileModel::clone method for making a clone of the file, attributes, opts, events and all will be cloned
  • Core Improvements
    • Added getFileById(id, opts={}) template helper and docpad class method
    • Plugins can now alter the load, contextualize, render, and write collections
    • Added a new lib/util file for containing misc functions
    • Added DocPad::destroy() method for shutting down the server and whatnot
      • Currently only shutdowns the server, we still need to add the rest of the things
  • Testing Improvements
    • RendererTester is now more helpful when comparing differences between outputs
    • DocPad tests now use the new docpad destroy method that allows graceful shutdown rather than the previous ungraceful process.exit(0)
      • Still needs to be applied to plugin tests

v6.43.2 2013 June 30

  • Fixed locale is not defined error when running docpad init on an existing website

v6.43.1 2013 June 29

  • Fixed docpad init config error

v6.43.0 2013 June 29

  • Huge improvements to the skeleton install process
    • Install process is much more reliable
    • Skeleton dependencies will now install correctly if node_modules already exists
    • Missing module errors when doing an initial clone of a skeleton should now be fixed
    • Removed the unused and non-working -s, --skeleton option
  • Activities that wait on remote activity will now output a please wait message
  • You can now install plugins via the docpad install [pluginName] command
  • Installing dependencies via the docpad install command now works again
  • The -f, --force flag now works as expected (enabling the npm --force flag)
  • Fixed an issue with arrays not being dereferenced correctly in configuration
    • This fixes initial run issues with skeletons that have custom file structures
  • Added --offline flag that will help docpad run without an internet connection
  • Added an interval timer to load, contextualize, render, and write actions to determine what files we are waiting on
  • Dependency upgrades

v6.42.3 2013 June 26

  • Swapped out synchronous file system calls for asynchronous ones
  • Fixed DocPad version number undefined in X-Powered-By response header
  • Added the ability to turn off the X-Powered-By meta header by setting the poweredByDocPad to false in your configuration

v6.42.2 2013 June 25

  • Fixed backslash and slash inconsistencies on windows in regards to searching

v6.42.1 2013 June 25

  • Fixed backslash and slash inconsistencies on windows in regards to urls
  • docpad render will no longer output warning levels

v6.42.0 2013 June 25

  • Better lazy loading of modules
  • Updated dependencies

v6.41.0 2013 June 25

  • Made debugging, tracing, and profiling easier
    • Added docpad-debug for easy debugging
    • Added docpad-trace for easy tracing
    • Added --profile for easy profiling
    • See our debug guide for details

v6.40.0 2013 June 24

  • Removed excessive dirname usage
  • Updated dependencies

v6.39.0 2013 June 20

  • Abstracted out the file fetching in DocPad::serverMiddlewareRouter into DocPad::getFileByRoute(url, next) for others to use in their custom routes
  • Updated dependencies

v6.38.1 2013 June 7

  • Fix compilation issue with CoffeeScript v1.6.3
  • Updated dependencies

v6.38.0 2013 May 30

  • Added docpad init action to initialize your directory with an empty docpad project

v6.37.1 2013 May 30

  • Added scripts.start property to no-skeleton's package.json file

v6.37.0 2013 May 29

  • Plugin tester file is now optional when specifying something like testerClass: 'RendererTester' inside your plugin test file
  • enableUnlistedPlugins is now set to true when running plugin tests (it was false before)
    • This allows us to remove the need for the plugin tester file for most situations

v6.36.2 2013 May 28

  • You will now be warned if your custom collection is invalid
  • Child collections will now be of the correct class type

v6.36.1 2013 May 28

  • Fixed TypeError: Object has no method 'unbindEvents'

v6.36.0 2013 May 28

  • Rewrote the error-reporting, analytics, newsletter, and identification handling
  • Fixed a bug with the plugin version not being set on the plugin instance correctly

v6.35.0 2013 May 25

  • We now respect plugin priorities again
    • Thanks to Neil Taylor for pull request #511
    • Set plugin priorities by priority: 500 or whatever in your plugin class
    • Set event specific priorities by eventNamePriority: 500 or whatever in your plugin class
  • Updated dependencies

v6.34.2 2013 May 13

  • We now support docpad run on empty directories when offline
    • Before it would crash because it could not load the exchange data, now it will continue anyway
  • Removed cli-color dependency
  • Progress bar will now be destroyed when a notice or higher importance message is logged

v6.34.1 2013 May 9

  • Fixed ReferenceError: docpad is not defined

v6.34.0 2013 May 8

v6.33.0 2013 May 6

  • We now load the exchange file based on which DocPad version we are running
  • Updated dependencies

v6.32.0 2013 May 2

  • Now uses Caterpillar v2
  • We now write a docpad-debug.log file when running with the -d flag, submit this when you file a bug report :)
  • Fixed colors not showing on custom Terminal color schemes
  • Fixed a double progress bar issue when a log message occurs when the progress bar is being written
  • Removed setLogger() instead you should do getLogger() and pipe the results to where you need
  • Added getLoggers() to fetch all the different logger streams we are using, generally there are:
    • logger the stream we write log messages to
    • console the stream that is outputted to stdout
    • debug the stream that is outputted to the debug log file

v6.31.6 2013 April 26

  • X-Powered-By now also includes the DocPad version number

v6.31.5 2013 April 26

  • Progress bars now obey the prompts configuration option instead of v6.31.2 environment hack

v6.31.4 2013 April 25

  • Fixed "ReferenceError: existingModel is not defined" when you have outPath conflicts

v6.31.3 2013 April 25

  • Moved progress bar code into bevry/progressbar
    • Fixes issues with progress bars on Ubuntu and Windows

v6.31.2 2013 April 25

  • Do not show progress bars on production environments

v6.31.1 2013 April 25

  • Fixed cannot get length of undefined error
  • Added progress bar (instead of snores) for during generation when using the default log level (6)

v6.31.0 2013 April 24

  • DocPad will now warn you when you have files of the same outPath
  • File and Document IDs will now always be their cid (before they use to be their relativePath on occasion)
  • Fuzzy searching no longer searches for the id
  • Server is now able to serve cached pages while a non-initial generation is occurring
  • We no longer replace tabs with 4 spaces for the content of files and documents (we still do it for YAML meta data headers on documents)
    • This means if you're a plugin developer, you may need to update your plugin's test's out-expected folder accordingly
      • If this is too difficult, we've added a removeWhitespace config option for your plugin tester, set it to true, see here for usage
  • Change events will now fire when adding a url to a file
  • URL cache index for serving files is now generated via change events, rather than after generation

v6.30.5 2013 April 23

  • The no skeleton option will now create a node_modules directory, and package.json and files

v6.30.4 2013 April 16

  • Testing of plugins now works when the plugin directory is the full plugin name

v6.30.3 2013 April 10

  • Updated dependencies

v6.30.2 2013 April 7

v6.30.1 2013 April 6

  • Updated dependencies

v6.30.0 2013 April 5

  • Progress on issue #474
  • balUtil, chai, expect, assert, request are no longer exposed to plugin testers, you'll need to include them yourself from now on
  • Updated dependencies

v6.29.0 2013 April 1

v6.28.0 2013 March 25

  • Removed native prototype extensions
    • Thanks to David Baird for issue #441
    • If you were using toShortDateString, then we'd recommend this gist instead
    • If you were using toISODateString, just replace it with toISOString

v6.27.0 2013 March 25

v6.26.2 2013 March 23

  • Fixes TypeError: Object #<Object> has no method 'removeListener'
  • Can now customise the watchOptions that are used to construct the watchr instances we create
  • Updated dependencies

v6.26.1 2013 March 12

  • We now gather statistics on the node version and platform you are using to better understand where issues are coming from
  • Updated dev dependencies

v6.26.0 2013 March 12

  • Node v0.10.0 support - fixes the "Arguments to path.join must be strings" errors
  • The requirement of "plugins must have their own package.json file with version and main defined within them" is now enforced
  • Updated dependencies

v6.25.0 2013 March 10

  • Database is now persistent
  • We now destroy unused collections

v6.24.2 2013 March 8

  • Fixed regression from v6.24.1 that caused new installs or very old upgrades to get stuck in the TOS section

v6.24.1 2013 March 8

  • Typo fixes
    • Fixes getMixpanelInstance() always re-creating the mixpanel instance instead of just doing it once
    • Fixes DocPad::getBlocks
    • Thanks to Richard A for pull request #450
  • Fixed mixpanel country and language always being au and en
  • Updated dependencies

v6.24.0 2013 March 6

  • Configuration changes and improvements
    • Can now load the configuration before the console interface is setup, allowing us to have plugins that extend the console interface
      • Currently explicit commands only
    • Configuration can now load multiple times safely
    • Plugins now have initialConfig, instanceConfig, and a setConfig(instanceConfig=null) helper and their configuration will be reloaded via setConfig each time the docpad configuration is reloaded
      • NOTE: This means no modifying config directly in your constructor as the changes won't persist, instead modify them via the setConfig call after calling super
        • See the partials plugin for an example of this
    • Thanks to Olivier Bazoud for issue #63 and thanks to Avi Deitcher, Sergey Lukin, Zeno Rocha for issue #39
  • Added docpad action <actions> command line action
  • When passing arrays to blocks we now clone the array to avoid modifying the argument

v6.23.0 2013 March 6

v6.22.0 2013 March 6

  • Better port assignment to testers - changeset
  • We now identify anonymous users (while respecting their anonymity) - changeset

v6.21.10 2013 February 6

  • Updated dependencies
    • watchr ~2.3.4 to ~2.3.7
      • Works better for projects that have a large amount of files

v6.21.9 2013 February 6

  • We now completely ignore growl failures
  • We now alert the user of watch failures but still ignore them overall (as to not bring down the entire app)
  • Updated dependencies
    • growl ~1.6.1 to ~1.7.0
    • express ~3.0.6 to ~3.1.0
    • watchr ~2.3.4 to ~2.3.5
      • Fixes a bug with uncaught watching exceptions

v6.21.8 2013 February 5

  • Swapped out underscore dependency for lodash
  • Underscore is no longer provided to testers
  • File::getMeta now aliases to File.getMeta().get if arguments have been supplied
  • No longer does deep clones on template data per file render (just shallow clone now)
  • Fixed a bug that keeps exists attribute on File always true
  • Updated dependencies
    • bal-util ~1.16.3 to ~1.16.3
    • watchr ~2.3.3 to ~2.3.4
      • Way better performance and reliability

v6.21.7 2013 January 25

  • Fixed port not defaulting correctly on the docpad-server executable since v6.21.5
  • Updated dependencies

v6.21.6 2013 January 25

  • Better debugging around server starting

v6.21.5 2013 January 24

  • Supports Node v0.9
  • Added renderSingleExtensions option
    • Note: currently this will render src/documents/ from CoffeeScript to JavaScript as intended, HOWEVER the outfile will be out/ instead of the expected out/script.js. We will likely have to do an extension mapping for single extensions.
  • Added experimental docpad-compile executable
  • Updated dependencies

v6.21.4 2013 January 16

v6.21.3 2013 January 9

  • Fixed ignored files sometimes triggering reloads
  • Added ignorePaths, ignoreHiddenFiles options
  • Added DocPad::isIgnoredPath, DocPad::scandir, DocPad::watchdir helpers

v6.21.2 2013 January 8

v6.21.1 2013 January 6

  • Added support for running multiple plugin tests for the same plugin

v6.21.0 2013 January 2

  • Cleanup focused around loading, parsing, and writing of files and documents
  • Added
    • DocPad::flowDocument
    • DocPad::loadDocument
    • exists attribute on File model
  • Fixed Document::writeSource

v6.20.1 2012 December 24

v6.20.0 2012 December 17

  • Better watch handling
  • Updated dependencies

v6.19.0 2012 December 15

  • Renamed ignorePatterns configuration option to ignoreCommonPatterns and added new ignoreCustomPatterns configuration option
  • Updated dependencies
  • Updated optional dependencies
  • Updated dev dependencies
    • chai 1.3.x to 1.4.x

v6.18.0 2012 December 14

  • Added regeneratePaths configuration option
  • Include now returns expected results if the content hasn't been rendered yet
  • Updated QueryEngine v1.4.x to v1.5.x
  • Backbone dependency now moved to our dependencies from QueryEngine's. Version set explicitly to v0.9.9.
    • If you have any plugins or whatever that used the myCollection.getByCid function, change that call to myCollection.get
  • Improved help URLs

v6.17.3 2012 December 5

v6.17.2 2012 December 5

v6.17.1 2012 December 4

  • Updated misc internals to use the new File::getOutContent call

v6.17.0 2012 December 4

  • Cleaned up the way we handle buffers, data, and meta data - more efficient and simpler api
  • Updated
    • File::getMeta to create meta if it doesn't exist yet
  • Removed
    • Document::initialize didn't do anything
    • Document::getMeta didn't do anything
    • File::readFile merged into File::parse
    • File::parseData renamed to File::parse and cleaned significantly
  • Added
    • Base::setDefaults to update attributes that haven't been set
    • File::setMeta to update the meta more easily than File.getMeta().set
    • File::setMetaDefaults to update the meta attributes that haven't been set
    • File::getContent to get the content or buffer
    • File::getOutContent to get the rendered content, or content, or buffer
    • File::getStat to get the stat
    • File::setBuffer to set the buffer
    • File::getBuffer to get the buffer

v6.16.0 2012 December 4

  • The amount of render passes is now customisable via the renderPasses configuration option, defaults to 1
    • Increment this value depending on how many levels of cross-document references you have (e.g. 2 passes for C includes B, B includes A)
  • The render pass functionality has been changed to render all documents that don't reference anything else first, then for each additional render pass, render documents that do reference others
    • Previously it would render both types of documents in the one batch, which resulted in hit and miss results
    • Doing this, we now safely have the default renderPasses value set to 1 which has the same effect as the traditional 2 render pass
    • Refer to issue #359 for more information

v6.15.0 2012 December 3

v6.14.0 2012 November 29

  • Added DocPad::getFileByUrl(url) and updated the middleware router to use it
    • Big performance gain on request response time

v6.13.4 2012 November 29

  • reportErrors and reportStatistics are now false if test is included in the process.argv

v6.13.3 2012 November 28

  • Fixed the include template helper
  • DocPad::getFileAtPath now does fuzzy finding
  • FilesCollection::fuzzyFindOne now also fuzzy matches against the url and accepts sorting and paging arguments

v6.13.2 2012 November 27

  • Reduced the extension not rendering error to a warning

v6.13.1 2012 November 26

  • Fixed up growl notifications

v6.13.0 2012 November 26

  • Added Terms of Service and Privacy Policy confirmation
  • Added statistic tracking so we can better understand usage allowing us to improve DocPad is much greater ways
  • Added automatic locale detection for OSX
  • Improved error reporting
  • Will now error if you try to run an action that doesn't exist (instead of defaulting to the run action instead)
  • Updated dependencies
  • Added dependencies
  • Moved dependencies to dev dependencies

v6.12.1 2012 November 23

  • Fixed update check, been broken since v6.7.3
  • Updated bal-util dependency from 1.13.13 to 1.14.x

v6.12.0 2012 November 23

  • When creating new documents or files, if it is inside an unknown path we will now default to creating a document instead of a file
  • We now send growl notifications when errors occur
  • We now error and provide suggestions when an extension transform doesn't do anything
  • Watching stability has been improved significantly
  • Parser headers that don't include spacing now work again (e.g. ---cson instead of --- cson)
  • Removed default comparator on FilesCollection due to performance improvement it provides
  • Added
    • Document::parseFileDirectory(opts,next)
    • Document::parseDocumentDirectory(opts,next)
    • FilesCollection::fuzzyFindOne(data)

v6.11.1 2012 November 16

  • Changes made to help get the docpad server up and running as soon as possible:
    • server action is now run before generate action
    • if a request is made while a generation is occurring, the request will be put on hold until the generation completes
  • We now pass the option reset to the generateBefore event
    • Lets you know if the generation is a complete generation (reset is true) or a differential generation (reset is false)

v6.11.0 2012 October 29

  • Updated QueryEngine dependency from 1.3.x to 1.4.x
    • Should see speed improvements
  • Added docs directory to .npmignore

v6.10.0 2012 October 29

  • Updated QueryEngine dependency from 1.2.3 to 1.3.x
    • Should see better memory usage and speed improvements
  • Now tells you how many files we have when doing a complete render

v6.9.2 2012 October 26

  • Swapped yaml dependency for yamljs
  • Better error output on custom error objects

v6.9.1 2012 October 25

  • Added reloadPaths configuration option
    • When a change occurs in one of the reload paths then we will reload docpad
  • Added getBlocks and setBlocks
  • Added getCollections and setCollections
  • Will now output how long the generation took

v6.9.0 2012 October 25

  • Updated dependencies
  • Removed ability to require uncompiled plugins
    • This is due to the CoffeeScript 1.4.x from 1.3.x upgrade
  • skeletonNonexistant now tells us the path it checked

v6.8.4 2012 October 25

  • Added getEnvironment and getEnvironments template helpers

v6.8.3 2012 October 22

v6.8.2 2012 October 19

  • Updated the document meta data extraction regex
    • It will now treat data that is wrapped in anything that repeats 3 or more times, as meta data allowing you to use whatever is appropriate for the markup you are currently in (before we only supported --- and ###)

v6.8.1 2012 October 19

v6.8.0 2012 October 18

  • Added support for .env files
    • If a .env file is present in your website path, we will add its key values to process.env
    • More information on .env files here
  • Improved localisation
  • Removed unused model requirement inside document model file

v6.7.4 2012 October 10

  • PORT environment variable now comes before infrastructure specific port variables
  • Can now do docpad-server --action generate,server,watch --port 8080

v6.7.3 2012 October 8

  • Fixed logging when a fatal error occurs during initialisation
  • We now do warnings when plugins do invalid naming conventions
  • We now display the plugin versions in the plugin listing information when debugging
  • More localization progress

v6.7.2 2012 October 3

  • Fixed custom middleware (via the serverExtend event) being loaded too late (after the express router middleware)

v6.7.1 2012 October 2

  • Can now use the url property in meta data to specify a custom URL to use
  • Collection creation functions in the DocPad Configuration Files now scope to the DocPad Instance
  • Fixed the 400 and 500 middlewares

v6.7.0 2012 October 2

  • Server changes:
    • Updated Express.js from v2.5 to v3.0
      • If you're doing custom routing, you'll want to check the Express.js Upgrade Guide
      • There are now two server objects: serverExpress and serverHttp - get them using docpadInstance.getServer(true), set them using docpad.setServer({serverExpress,serverHttp}) - server in events, and docpadInstance.getServer() return the serverExpress object for backwards compatibility (however things like require the serverHttp object)
      • Closes #311, #308, #272, #274
      • Help by dave8401 and Ben Harris
    • Abstracted out the different middlewares to serverMiddlewareHeader, serverMiddlewareRouter, serverMiddleware404, and serverMiddleware500
    • Added the following options to the server actions:
      • serverExpress for a custom express.js server
      • serverHttp for a custom http server
      • middlewareStandard set it to false for us to not use any of the standard middleware (body parse, method override, express router)
      • middlewareBodyParser set it to false for us to not add the bodyParser middleware
      • middlewareMethodOverride set it to false for us to not add the methodOverride middleware
      • middlewareExpressRouter set it to false for us to not add the Express.js router middleware
      • middleware404 set it to false for us to not add our 404 middleware
      • middleware500 set it to false for us to not add our 500 middleware
    • Example API usage can be found here
  • Added standalone attribute to files (defaults to false)
    • If you set to true, changes to the file will only cause re-rendering of that file alone
  • Added a progress indicator during generation

v6.6.8 2012 September 29

  • Fixed watching setup not completing under some conditions
    • Bumped watchr minimum version to v2.1.5

v6.6.7 2012 September 28

  • Added built-in support for AppFog and CloudFoundry ports

v6.6.6 2012 September 24

  • Further improved file text/binary detection

v6.6.5 2012 September 18

v6.6.4 2012 September 4

v6.6.3 2012 September 3

  • Fixed date and name always being their automatic values

v6.6.0-6.6.2 2012 August 28

  • Added docpad-debug executable for easier debugging
  • Will now ask if you would like to subscribe to our newsletter when running on the development environment
  • Beginnings of localisation

v6.5.7 2012 August 26

  • Fixed "cannot get length of undefined" intermittent error
    • Due to an incorrect variable name inside DocPad::ensureDocumentOrFile

v6.5.6 2012 August 19

  • Added regenerateEvery configuration option

v6.5.0-6.5.5 2012 August 10

  • IMPORTANT: Renamed extensionRendered to outExtension, filenameRendered to outFilename, and contentTypeRendered to outContentType and moved them from the Document model to the File model
  • The serverExtend event will now also emit the express dependency if used
  • No longer attempts to install plugins dependencies every time, this is outside the scope of DocPad and in the standard use cases already handled via npm
  • No longer accepts npmPath, gitPath, and nodePath as configuration options, instead these should be environment variables at NPM_PATH, GIT_PATH, and NODE_PATH respectively (without the underscore is also acceptable)
  • Eliminated ambiguity with renderSingleExtensions
    • if true it will render markdown, .md and
    • if 'auto' it will render markdown but not .md and
    • auto is now used on the docpad render command
  • Can now specify a custom configuration file vis the command line using -c, --config <configPath>
  • Can now specify a custom outPath via the command line using -o, --out <outPath>
  • Can now set template data via req.templateData
  • Can now customise the action that the docpad-server executable performs by setting the DOCPAD_SERVER_ACTION environment variable
  • Fixed Document::writeSource
  • Fixed require('docpad').createInstance (was accidentally dropped in v6.2.0)
  • Fixed no readme npm warning
    • Removed markdown files from .npmignore as they are now required for the new npm website listing
  • Fixed the regeneration not picking up changes when modifying a referenced stylesheet
    • Added a new stylesheet collection that contains any stylesheet file (including pre-processors) and sets their referenceOthers property to true
  • Fixed contextualizeBefore and contextualizeAfter events not firing
  • Fixed contentType being looked up twice

v6.4.1 2012 July 19

  • Added new source attribute to the file model, as the content attribute on the document model is actually the body not the original content like it is in the file model

v6.4.0 2012 July 19

  • We now support 404 Not Found and 500 Internal Server Error error pages thanks to Nick Crohn for pull request #251
  • Fixed #269 where the docpad render command wouldn't work
  • Fixed #268 where files which names start with a . from having a . appended to their output filename

v6.3.3 2012 July 18

  • Fixed binary file output
    • Added binary files to the test suite so this won't happen again
    • Was due to the dereference on the new clear introduced in v6.3.0
      • As such, we now store the data attribute for files outside of the attributes, use getData and setData(data) now instead of get('data') and set({data:data})

v6.3.2 2012 July 18

  • Fixed install action

v6.3.1 2012 July 18

  • Fixed extendCollections being called before the plugins have loaded when using the CLI

v6.3.0 2012 July 18

  • Added support for multiple environments
  • Top-level configuration assumed to reflect the production environment, other environments will extend from it
    • This is because getting a production environment configuration inside your development environment is fine, however getting a development environment configuration inside your production environment is catastrophic - as such, having the top-level configuration reflect the production environment handles this assumption correctly
  • Added environment configuration support to plugins and their configuration
  • Removed package.json > docpad > plugin configuration mode for a plugin's package.json, they should use the config property in their class instead
  • Added isEnabled() to the plugin class, this reflects the enabled property in the plugin configuration, if it is false, then no events are executed for that plugin
  • Killed the docpad cli action, no one used it and introduced a lot of complexity to the codebase
  • Added populateCollections event, use this to insert things into our collections and blocks
  • Added docpadLoaded event which fires whenever our configuration is re-loaded
  • Added support for overriding the extension attribute via your document's meta data
  • Added support for the renderSingleExtensions attribute in documents
  • Fixed clean action from not behaving as expected
    • Had the wrong indexOf indice value in the check
  • Fixed default attributes not being kept inside document and file attributes when cleared
    • Turns out Backbone's Mode::clear() wipes everything, rather than reset to the default attributes and values

v6.2.0 2012 July 10

  • Dropped node v0.4 support
    • Minimum required version is now 0.6
  • Dropped npm dependency
  • Configuration merging now deep extends plain javascript objects
  • Added environment specific configuration support
    • By default we use process.env.NODE_ENV for the environment, falling back to development
    • Specify your environment specific configuration in environments[env]
    • By default, our production environment sets maxAge to one day, and checkVersion to false
    • Use getEnvironment to get the current environment
  • Added new extendCollections event
  • Added check during clean action to ensure we don't remove outPath if it is higher than our rootPath
  • Added docpad-server binary to shortcut heroku deployment
  • Scripts collection now supports adding plaintext javascript
  • consoleSetup options are now consoleInterface and commander instead of interface and program
  • DocPad's main file is now out/ and the exported require is now limited to files in the out directory (not higher)

v6.1.3 2012 July 8

  • Fixed extendTemplateData event firing before our plugins have finished loading

v6.1.2 2012 July 8

  • Fixed DocPad::getBlock

v6.1.1 2012 July 8

  • Added html collection
  • Dependency updates
    • chai from v1.0 to v1.1

v6.1.0 2012 July 8

  • End user changes
    • Added support for using no skeleton on empty directory
    • Action completion callback will now correctly return all arguments instead of just the error argument
    • Filename argument on command line is now optional, if specified it now supports single extension values, e.g. markdown instead of
    • When using CoffeeScript instead of YAML for meta data headers, the CoffeeScript will now be sandboxed
      • If you are wanting to get stuff outside the sandbox write a configuration file
  • Document and File model changes
    • Now work fine without any path specified
    • render split into renderExtensions, renderDocument and renderLayout
    • renderExtensions now supports the option renderSingleExtensions when specified, will prepend the extension null, allowing supported plugins to render single extensions
    • render now supports the option actions which is an array of actions to perform
    • we now do not clear the contentRendered, contentRenderedWithoutLayouts, and rendered properties between render passes
  • DocPad prototype changes
    • New Events
      • extendTemplateData, opts: templateData, extend(objs...)
    • Attached Classes
      • Base, Model, Collection, View, QueryCollection
      • FileModel, DocumentModel
      • FilesCollection, ElementsCollection, MetaCollection, ScriptsCollection, StylesCollection
      • PluginLoader, BasePlugin
    • New Collection Helpers
      • getFiles(query,sorting,paging)
      • getFile(query,sorting,paging)
      • getFilesAtPath(path,sorting,paging)
      • getFileAtPath(path,sorting,paging)
    • New Render Helpers
      • loadAndRenderDocument(document,opts,next)
      • renderDocument(document,opts,next)
      • renderPath(path,opts,next)
      • renderData(data,opts,next)
      • renderText(text,opts,next)
    • New Template Data Helpers
      • referencesOthers(flag)
      • getDocument()
      • getPath(path,parentPath)
      • getFiles(query,sorting,paging)
      • getFile(query,sorting,paging)
      • getFilesAtPath(path,sorting,paging)
      • getFileAtPath(path,sorting,paging)
  • Added the following to the export
    • Backbone, queryEngine
  • Dependency updates

v6.0.14 2012 June 27

  • Configuration variables documentPaths, filesPaths, and layoutsPaths are now relative to the srcPath instead of the rootPath
    • pluginsPaths is still relative to the rootPath

v6.0.13 2012 June 27

  • Added getFileModel, getFileUrl, getFile template helpers

v6.0.12 2012 June 26

  • More robust node and git path handling
  • Dependency updates

v6.0.11 2012 June 24

  • We now output that we are actually installing the skeleton, rather than just doing nothing
  • We now also always output the skeleton clone and installation progress to the user
  • Skeletons are now a backbone collection

v6.0.10 2012 June 22

  • Fixed CLI on certain setups

v6.0.9 2012 June 22

  • Many minor fixes and improvements
  • Available DocPad events are now exposed through docpadInstance.getEvents()
  • DocPad configuration is now exposed through docpadInstance.getConfig()
  • Removed DocPad::getActionArgs in favor of balUtil.extractOptsAndCallback
  • Configuration events now have a context that persists and do not pile up if configuration is reloaded
  • DocPad constructor now returns err and docpadInstance to the completion callback if it exists
  • Fixed a problem with grouped actions not completing under some circumstances
  • Will now watch configuration files for changes, if a change is detected, regenerate everything
  • Cleaned up the server action a bit
  • Added a new serverExtend event so listeners can now extend the server before the docpad routes are applied
  • Dependency updates

v6.0.8 2012 June 21

  • Configuration changes
    • DocPad now checks the following paths for a configuration file docpad.js,, docpad.json, docpad.cson, and will go with whichever one it finds first
      • If you use coffee or js extensions, remember to prefix your file with module.exports =
    • Fixed instance configuration not always coming first
    • Removed configPath configuration option. Use the array based configPaths instead.
    • rootPath and configPaths will now be properly respected if specified in your package.json file under the docpad property
    • Configuration files can now bind event handlers using the events hash
  • Event changes
    • Completion callbacks are now optional for event listeners, if omitted event listener will be treated as synchronous
    • Added new docpadReady event that fires once docpad has finished initializing and loading its configuration, will provide the opts {docpad} where docpad is the docpad instance
  • Server changes
    • If a document has multiple urls, and it is accessed on the non primary url, we will 301 (permanent) redirect to the primary url
  • Dependency updates

v6.0.7 2012 June 20

  • When watching files, and you modify a layout, docpad will now re-render anything using that layout - closes #242

v6.0.6 2012 June 19

  • Greatly simplified the event architecture
    • We now inherit from the simpler balUtil.EventEmitterEnhanced instead of balUtil.EventSystem, and have moved queue code into balUtil.Group as docpadInstance.getRunner()
    • Actions when called directly do not queue, they only queue when called through docpadInstance.action
  • docpadinstance.loadConfiguration is now an action called load
  • Fixed the run action not completing due to a missing callback

v6.0.5 2012 June 19

  • Updated QueryEngine from version 1.1 to 1.2
  • Fixed watch error when deleting files, or changing a directory

v6.0.4 2012 June 19

  • Fixed skeleton action

v6.0.3 2012 June 19

  • Fixed server action when used in combination with a custom server

v6.0.2 2012 June 11

  • Now fetches the DocPad v6 exchange file

v6.0.1 2012 June 11

  • Fixed plugin generation tests

v6.0.0 2012 June 11

  • Breaking changes that may affect you
    • Removed documentsPath, filesPath, layoutsPath configuration options for their array based alternatives documentsPaths, filesPaths, layoutsPaths
    • Removed require from templateData as it needs to be specified in your project otherwise it has the wrong paths
    • Removed database, collections, blocks from templateData for their helper based alternatives getDatabase(), getCollection('collectionName'), getBlock('blockName')
    • Removed String::startsWith, String::finishesWith, Array::hasCount, Array::has as we never used them
    • Removed DocPad::documents and templateData.documents, now use getCollection('documents')
  • New features
    • Differential rendering
    • Extendable CLI
    • Template helpers
  • Other changes
    • Better error handling
    • Moved to Joe for unit testing

v5.2.5 2012 May 18

  • Fixed layout selection when two layout's share similar names - Closes #227

v5.2.4 2012 May 18

  • Upgraded chai dev dependency from 0.5.x to 1.0.x
  • Fixed a dereferencing issue
  • Plugin testers will now run the install and clean actions when creating the DocPad instance

v5.2.3 2012 May 18

  • DocPad will no longer try and use a skeleton inside a non-empty directory
  • DocPad will now only include the CoffeeScript runtime if needed (for loading CoffeeScript plugins)

v5.2.2 2012 May 17

  • Fixed #208 - Multiple file extensions being trimmed
  • Fixed #205 - Name collisions are causing not all files to be copied
  • Changed file id to default to the relativePath instead of the relativeBase
  • Finding layouts now uses id: $startsWith: layoutId instead of id: layoutId

v5.2.1 2012 May 8

  • Fixed a complication that prevents src/public from being written to out
    • Added automated regression tests to ensure this will never happen again
  • Added documentsPaths, filesPaths, and layoutsPaths configuration variables
  • Simplified model code
  • Cleaned up some async code

v5.2.0 2012 May 4

  • We now pre-compile our CoffeeScript
  • Added the ability to specify a docpad.cson configuration file inside your website
    • This file will also be watched for changes, and if a change is made, we'll reload it and regenerate :)
  • Database/Collections have been cleaned up
    • files, layouts and documents are all added to the database
    • documents and layouts are represented by the Document model which extends the File model
    • files are represented by the File model
    • documents are accessible via the collections.documents which is a live child collection of database
    • files are accessible via the collections.files which is a live child collection of database
    • layouts are accessible via the collections.layouts which is a live child collection of database
  • You can create your own live child collections by specifying them in your configuration file, e.g. add this to your docpad.cson file:
    # Collections
        pages: (database) ->
            database.findAll(pageOrder: $exists: true)
        posts: (database) ->
            database.findAll(tags: $has: 'post')
  • Templates now have access to a new function called include. It will include the renderedContent (or if unavailable to content) of the file. In eco, you would use it like this: <%- @include('filename.ext1.ext2.ext3') %>
  • Blocks are now Collections too! You can call .add on them, and use .toHTML() to grab them as HTML (.join will do the same thing for b/c)
  • This should be a completely backwards compatible release, let us know if you any issues on the

v5.1.2 2012 April 26

  • Fixed some UTF8 encoded files from being detected as binary
  • Fixed documents with no extension being outputted with an undefined extension

v5.1.0-5.1.1 2012 April 25

  • Fixed EventEmitter warning
  • Binary files can now be placed within the src/documents directory
  • Removed eyes devDependency
  • Models now use CoffeeScript's class extend, instead of Backbone's extend

v5.0.5 2012 April 14

  • Added .npmignore file
  • Added document.contentType and document.contentTypeRendered
  • Fixed document.contentRendered on files that do not have layouts
  • Added tests for:
    • Checking that ignored: true documents are properly ignored
    • That ignored common pattern files/dirs are properly ignored
    • That attributes are being applied properly

v5.0.1-v5.0.4 2012 April 14

  • Updated balUtil from 1.4 to 1.5
    • Fixes some scandir bugs
  • Updated watchr from 1.0 to 2.0
    • This should make watching re-generation a lot faster
  • Added a warning if you have no plugins loaded and are trying to do a generate
  • Fixed ignored check on documents

v5.0.0 2012 April 14

  • Models are now Backbone Models
  • Upgraded Query-Engine version from 0.6 to 1.1
  • Plugins are now managed by npm and are no longer bundled with DocPad
    • You will need to add them to your website's package.json and install them via npm install docpad-plugin-#{pluginName}
    • We now scan the node_modules and plugins directories of your website for docpad plugins
      • These paths can be customised via the pluginsPaths variable in the docpad configuration
    • DocPad detects if something is a plugin by checking for the docpad-plugin keyword in the package.json file, or if the file follows the #{pluginName} naming convention
  • CoffeeScript dependency is now bundled inside, instead of being an external dependency
  • A website's npm dependencies are now installed as part of the initialisation process
  • This is a big backwards compatibility break, previous skeletons and plugins need to upgraded

v4.1.1 2012 April 9

v4.1.0 2012 April 6

  • Feedr Plugin now exposes @feedr.feeds to the templateData instead of @feeds
  • Exchange data now moved to the docpad-extras repository
  • Fixed broken balupton.docpad skeleton repo url

v4.0.0-4.0.3 2012 April 6

  • Added support for partials, with the new Partials Plugin
  • Added support for caching remote assets, with the new Cachr Plugin
  • Added support for caching and parsing remote feeds, with the new Feedr Plugin
  • Added support for independent plugin unit tests
  • Added support for specifying templateData for the docpad configuration
  • Skeletons are no longer cached
    • Caching skeletons was causing far too many problems
  • Will now always use the local npm installation
  • Added gitPath and nodePath to docpad configuration
  • Split a document's title into title and name
    • Use title for page titles (e.g. <title>page title</title>)
    • Use name for navigation listings
    • This was introduced as sometimes you want a different title for your page title, than for your navigation page names
  • Cleaned up the plugin event system
    • Got rid of triggerPluginEvent and now we use balUtil's emitSync and emitAsync
    • This for the time being, also remove the use of plugin priorities. We suggest keeping your priorities in there, in the case that we re-introduce the functionality in the future.
  • When an error occurs we will send an error report back to DocPad using AirBrake
    • To turn this off, set reportErrors in your docpad configuration to false
  • Files, Documents, Layouts and Partials are now proper "models" and are now found in the lib/models directory
  • Moved out some unstable or not as popular plugins to the docpad-extras repository, plugins moved are:
    • Admin
    • Authenticate
    • AutoUpdate
    • Buildr
    • HTML2Jade
    • Move
    • PHP
    • REST
    • Roy
    • Ruby

v3.3.2 2012 March 18

  • Fixed missing interpolation on new version notification
  • Fixed the scandir error with the skeletons path when doing the first run on windows
  • Updated paths to use path.join instead of always using forward slashes

v3.3.1 2012 March 18

  • Fixed Pygments plugin highlighting the code multiple times for documents with layouts
  • Added isLayout and isDocument flags to Document and Layout prototypes

v3.3.0 2012 February 29

  • Fixed ruby rendering with ruby v1.8
  • The enabledPlugins config option will now correctly only overwrite the default values if you have set it to be a string
    • Before it would always incorrectly overwrite the default value if set, which would cause some experimental disabled-by-default plugins to enable
  • Added a Pygments Syntax Highlighting plugin
    • It is disabled by default as not everyone would want syntax highlighting, to enable it, add the following to your website's package.json file:
      "docpad": {
          "enabledPlugins": {
              "pygments": true
    • Thanks to Doug Neiner for urging it along
  • Added a new renderDocument plugin event
    • It is fired after the extensions are rendered, but before the document is rendered inside its layout
    • Useful for things that modify the rendered result of a document, e.g. syntax highlighting, paging, etc
  • Closes
    • #146 - Require RubyGems on Ruby 1.8
    • #137 - An error occurred: Cannot find module 'uglify-js'
    • #34 - As a User, I want server-side syntax highlighting, as pygments rocks

v3.2.8 2012 February 26

  • Stopped docpad render from outputting the welcome message
  • Removed try..catchs from plugins, you should do this too
    • The checking is now higher up in the callstack, which provides better error reporting and capturing
  • Fixed a problem with the error bubbling that was preventing template errors from being outputted
  • Fixed the "too many files open" issue thanks to bal-util's openFile and closeFile utility functions
  • Closes
    • #143 - No errors on wrong layout

v3.2.0-3.2.7 2012 February 15

  • Cleaned architecture
  • Added unit tests (uses mocha)
  • Better source code documentation
  • Moved changelog from to as it was starting to get a bit long
  • Added File.writeRendered
  • Added File.contentRenderedWithoutLayout
  • Watching will no longer watch hidden files
  • Added support for
  • Added the ability to render files programmatically via the command line
    • See the readme for usage instructions and more information
  • Backwards compatibility breaks
    • File property names have been changed
    • New plugin structure
  • Added offline installation support
  • Added skeleton selection
  • Added npm scripts for testing, installing and updating
  • Closes
    • #130 - As a Maintainer, I want unit tests, so that I can automatically ensure everything works
    • #127 - As a User, I want support for Move, so I can write my javascript in my preferred language
    • #122 - As a User, I want to be able to get the rendered content without the layout, so that I can include it inside other documents
    • #98 - As a User, I want offline creation, so I can create new docpad projects offline
    • #97 - Watching is unusable when combined with hidden files from IDEs and SVN
    • #57 - Offline Setup: Skeletons needs to be cached for future offline installs
    • #55 - As a User, I want support for Moustache, so that I can use my preferred markup

Unreleased v3.

  • Added an interactive cli
  • Closes
    • #125 - As a User, I want an Interactive CLI, so that I can do more with DocPad's CLI

Unreleased v3.

  • Added a new event system
  • Closes
    • #60 - DocPad needs a better event system

v2.6 2012 January 2

  • Transferred DocPad's ownership from Benjamin Lupton to Bevry (Benjamin's company)
    • Things that have changed
      • It is now easier for us to manage DocPad, its extensions, collaborators and future repositories
      • DocPad is now supported and backed by a commercial entity, meaning that it won't go away
    • Things that won't change
      • DocPad will remain free as in beer, and free as in freedom
      • DocPad will remain awesome
    • If you are working on a cloned version of docpad, be sure to update your docpad's git repo address
  • Fixed plugin priorities #115
  • Updated dependencies

v2.5 2011 December 15

  • Swapped out Dominic Baggott's Markdown.js for Isaac Z. Schlueter's Github-Flavored-Markdown
    • Now adds support for inline html in markdown files
      • Closes #107
  • Fixed plugin installation on windows
    • Had to disable the AutoUpdate and Html2Jade plugins
    • Had to use the global npm instance on windows
    • Closes #111, #110
  • Fixed the error: Object #<Object> has no method 'error'
  • Can now pass over options to the coffeekup renderer inside the coffee plugin
    • E.g. set docpad: plugins: coffee: coffeekup: format: true to have it tidy the html output
    • Thanks to Changwoo Park
  • Disabled the following plugins by default
    • Admin
    • Authenticate
    • Rest
    • AutoUpdate
    • Buildr
    • Html2Jade
  • Updated dependencies

v2.4 2011 November 26

  • AutoUpdate plugin
    • Automatically refreshes the user's current page when the website is regenerated
    • Very useful for development, though you probably want to disable it for production
    • Enabled by default

v2.3 2011 November 18

  • Heroku server support
  • Added extendServer configuration option
    • Now, by default, even if the server is provided, we will extend it. If you do not want this, set this configuration option to false.
  • Made it easier to load docpad as a module
  • Instead of crashing when an uncaught error happens, it'll output it and keep running
  • The log messages and next handling in docpad.action has been cleaned up
    • Now those log messages are contained within the default next handler, so if you provide a custom default next handler you'll have to do your own success log messages
  • NPM is now installed locally
    • This is to ensure it's availability on cloud servers
  • DocPad will now try and figure out the node executable location to provide greater compatibility on cloud servers
  • If the plugin installations are taking a while, you'll get informed of this, rather than just staring at a blank blinking cursor
  • Roy plugin
    • Adds Roy to JavaScript support .js.roy

v2.2 2011 November 14

  • Windows support!
  • Now uses Benjamin Lupton's Watchr as the watcher library
    • Provides windows support
  • Now uses Tim Caswell's Haml.js as the haml library
    • Provides windows support
  • Bug fixes
    • Works with zero documents
    • Works with empty package.json
    • Fixed mime-type problems with documents

v2.1 2011 November 10

  • Support for dynamic documents
    • These are re-rendered on each request, must use the docpad server
    • See the search example in the kitchensink skeleton
  • Removed deprecated @Document, @Documents, and @Site from the templateData (the variables available to the templates). Use their lowercase equivalents instead. This can cause backwards compatibility problems with your templates, the console will notify you if there is a problem.
  • Fixed docpad --version returning null instead of the docpad version

v2.0 2011 November 8

  • Upgrade guide for 1.x users
  • Tested and working on Node 0.4, 0.5, and 0.6
  • Configurable via package.json
    • DocPad is now configurable via its and your website's package.json file
  • New plugin architecture
    • Plugins must now be isolated in their own directory
    • Plugins can now have their own package.json file
      • Use this for specifying plugin configuration, dependencies, etc
    • Plugin events have been renamed to before/after
      • New before/after events have been added
    • docpad and logger are now local variables, rather than passed arguments
      • Arguments are still kept for backwards compatibility - this may change
  • Generation changes
    • Rendering is now a 2-pass process
    • Contextualize is now a sub-step of parse, instead of it's own main step
      • Better simplicity, less complexity
    • Documents can now have multiple urls
      • These are customisable via the document's urls array property
  • Plugin Changes
    • REST plugin supports saving document data via POST (disabled by default)
    • Administration plugin adds front-end admin functionality (disabled by default)
    • SASS plugin
    • Coffee Plugin
      • Removed CoffeeCSS support as it had problems

v1.4 2011 October 22

  • Template engines now have access to node.js's require
  • Less Plugin
  • Fixed NPM warning about incorrect property name
  • Logged errors will now also output their stacktraces for easier debugging
  • If an error occurs during rendering of a document, docpad will let us know which document it happened on

v1.3 2011 October 3

  • Parsing is now split into two parts parsing and contextualizing
    • Contextualizing is used to determine the result filename, and title if title was not set
  • The code is now more concise
    • File class moved to lib/
    • Prototypes moved to lib/
    • Version checking moved to the bal-util module
  • File properties have changed
    • basename is extensionless
    • filename now contains the file's extensions
    • id is now the relativeBase instead of the slug
    • extensionRendered is the result extension
    • filenameRendered is the result filename: `"#{basename}.#{extensionRendered}"
    • title if now set to filenameRendered if not set
  • Added support for different meta parsers, starting with CoffeeScript and YAML support. YAML is still the default meta parser
  • The YAML dependency is specifically set now to v0.2.1 as the newer version has a bug in it
  • Fixed multiple renderers for a single document. E.g.
  • Now also supports using ### along with --- for wrapping the meta data
  • Supports the public alias for the files directory

v1.2 2011 September 29

v1.1 2011 September 28

  • Added Buildr Plugin so you can now bundle your scripts and styles together :-)
  • The action method now supports an optional callback
  • Added a try..catch around the version detection to ensure it never kills docpad if something goes wrong
  • Skeletons have been removed from the repository due to circular references. The chosen skeleton is now pulled during the skeleton action. We also now perform a recursive git submodule init and update, as well as a npm install if necessary.

v1.0 2011 September 20

v0.10 2011 September 14

v0.9 2011 July 6

  • No longer uses MongoDB/Mongoose! We now use Query-Engine which doesn't need any database server :)
  • Watching files now working even better
  • Now supports clean urls :)

v0.8 2011 May 23

  • Now supports multiple skeletons
  • Structure changes

v0.7 2011 May 20

  • Now supports multiple docpad instances

v0.6 2011 May 12

  • Moved to CoffeeScript
  • Removed highlight.js (should be a plugin or client-side feature)

v0.5 2011 May 9

  • Pretty big clean

v0.4 2011 May 9

  • The CLI is now working as documented

v0.3 2011 May 7

  • Got the generation and server going

v0.2 2011 March 24

v0.1 2011 March 16

You can’t perform that action at this time.