Repository  -  API  -  Source


Express 4 included several breaking changes from Express 3. Keystone simplifies most of these changes, and if you're using keystone.start() to initialise your web server things will _probably just work_; however the more complicated your app, the more likely you will need to take these changes into account. Please review the Moving to Express 4 Guide for more information.

Admin UI forms rewritten in React.js

The Admin UI forms have been rebuilt from the ground up with React.js. This is part of a larger, ongoing effort to move the Admin UI entirely towards a rich, customisable single page web app.

The UI has been cleaned up and improved, and the field types should support the same features and behaviours as in 0.2.x. If any field types or features don't continue to work as expected, please open a GitHub Issue so we can fix it!


July 22, 2016
  • added; support for automatic SSL with Let's Encrypt, thanks Wout Mertens
  • fixed; Date field formatting, thanks Jared Collier
  • fixed; Filtering for related items, thanks Max Koryukov
  • fixed; Relationship initial value loading


June 19, 2016
  • fixed; Issue preventing you from specifying the pretty option in the locals setting


June 17, 2016
  • fixed; Boolean fields with noedit:false and hidden:true do not retain value
  • fixed; Default formatString for Datetime fields didn't show minutes with a leading 0
  • fixed; Date format option works correctly, thanks Jared Collier
  • fixed; Datetime format option works correctly, thanks Jared Collier
  • fixed; Double password-hashing issue when the Users list inherits from another list, thanks Jared Collier


May 4, 2016
  • added; support for Mailgun, thanks Wolfgang
  • fixed; issues with connect-mongo on Node 0.12, thanks gemscng


April 27, 2016
  • fixed; make localfiles previews properly show up in admin ui column, thanks Gabor K
  • improved; allow adding headers when sending email, thanks Joss Mackison

This is a hotfix release to allow for adding headers when sending emails.


March 23, 2016
  • fixed; issue when keystone is a dependency of a global package, thanks Robert Jensen
  • added; allow custom logging middleware, thanks Greg Meyer
  • improved; allow negative numbers in the number field, thanks Brett Newman
  • improved; allow seeding an s3file field with an application update, thanks Younes Riad
  • improved; allow the deletion of localfiles, thanks Jacob Jenkins
  • updated; update babel to v6, thanks Alexandre Joly
  • improved; tighten redirection destination sanitation after successful sign in, thanks Camille Reynders
  • improved; handle missing relations in the relationship field, thanks Wout Mertens
  • fixed; show validation errors in pre save, thanks gemng888
  • updated; update tinymce and add the imagetools, thanks Riyadh Al Nur
  • fixed; show notes in boolean field, thanks Camille Reynders


October 15, 2015
  • added; new hooks in the app middleware setup are available, see #1736 for documentation.
  • updated; all packages, including pre-build client side bundles


August 25, 2015
  • improved; internal cleanup and refactoring
  • added; new API routes for future use by the Admin UI, including signin and signout
  • added; support for selecting arbitrary document paths in List.getData
  • added; new search query generation functionality for List and Field classes
  • fixed; vertical alignment of Format menu icons in the WYSIWYG editor, thanks Jeffrey
  • fixed; validation issues with the GeoLocation field type, thanks Vintesh
  • fixed; use of 'select' and 'selectPrefix' options in CloudinaryImage type, thanks azterix
  • updated; grappling-hook @ v3.0.0, thanks Camille Reynders


August 3, 2015
  • improved; major speed increase for initialisation
  • improved; codemirror is now only loaded as required, thanks Carlos Colon
  • fixed; correctly handling blank values in the DateInput component
  • changed; switched to babyparse for CSV generation
  • fixed; docs links now point to keystone site
  • fixed; add Maps API key to request, allow override per model, check for server instead of browser key, thanks stosorio
  • fixed; added check for duplicate _revisions models, thanks Jeffrey
  • fixed; localFile .format property ignored by Admin U, thanks Javier Castro
  • fixed; href working correctly on LocalFiles Type, thanks Matthias Tylkowski
  • added; several new API endpoints for the Admin UI in preparation of the 0.4 release


June 26, 2015
  • fixed; height option for TextArea fields was not respected in the Admin UI, thanks Eóin Martin
  • fixed; API error string was missing not in message, thanks Daniel Cousens
  • improved; better instructions for installing missing session store modules
  • fixed; delete confirmation was not working (items could be deleted with a single click), thanks gerotakke
  • added; new utc option for Date and DateTime field types, see #1487 for more details.


June 12, 2015
  • fixed; issues with file field types not working correclty with getters, thanks Alexander Shemetovsky
  • fixed; bug saving lat / lng in location fields, thanks Al Connelly
  • fixed; issue saving blank values in money fields, thanks Harry Moreno
  • fixed; Admin UI issues caused by custom toJSON / toObject transforms configured for models
  • improved; optimised items list

All is not as quiet as this release implies; we are working aggressively through the next big update in the elemental-integration branch, which will see the Admin UI released as a Single Page Application built with Elemental UI components, and the foundation for much better customisation features to come.

If you are interested in being part of Keystone's development team and aren't in our Slack channel, ping @JedWatson to get an invite!


May 19, 2015
  • fixed; worked around an intermittent issue with the new browserify build process
  • added; new hooks updates, signin and signout, thanks Camille Reynders
  • added; parseFormat option for Date / Datetime field types, and more robust validation in DateArray
  • added; logger options setting, thanks Johnny Estilles

Also, our site and documentation have been split out into their own repository: keystonejs/keystonejs-site. Please contribute any changes, additions and issues to that new repo going forward.


May 17, 2015
  • added; Babel object-assign plugin for the Admin UI browserify build process
  • improved; The whole Admin UI JS build system has been rewritten and should now be completely stable and much faster than any previous setup. You can enable development mode with the KEYSTONE_DEV=true environment variable
  • fixed / changed; the LESS config api was changed with less-middleware@2.0.0 and you should now just use the less options setting, thanks Francesco Nero. Old options will log warnings if you use them.
  • fixed; The path to react-select's less file is now dynamically detected, see #1384
  • fixed; The href method of localfile/s shouldn't use path.join, see #1406
  • fixed; display issues with Type.GeoPoint and Type.Location, thanks Al Connelly
  • added; SVG Support for Cloudinary Image fields, thanks Christian Nolte
  • fixed; Disabled drag and drop sorting in list view when filters are applied, thanks Michael
  • improved; Now using grappling-hook, thanks Camille Reynders
  • improved; The Location field throws an error if googleLookup fails, thanks Daniel Cousens
  • fixed; issues with schema inheritance and schemaPlugins, thanks Robert Clark
  • fixed; default formatString for Datetime fields now includes h:m:s a, thanks Al Connelly
  • fixed; Keystone.prototype.static(app) was removed in 0.3.7, has been reintroduced for backwards-compatibility
  • changed; react-alt-text is now its own npm package
  • changed; The Admin UI is being consolidated into /admin and many files have moved, thanks to Milos Dakic for helping with this.

Also in this release: Keystone is completely free of ESLint warnings thanks to the incredible efforts of Camille Reynders and Jed Watson.


April 23, 2015
  • fixed; worked around a breaking issue with the bytes package by downgrading it and including it in the pre-built Admin UI packages bundle


April 23, 2015
  • changed; switched from pre-built admin scripts to pre-built browserify packages and on-demand admin UI scripts w/ browserify-middleware
  • fixed; TinyMCE image upload fail due to "Bad response", thanks Alberto Gasparin
  • fixed; case-insensitive user lookup in .session.signin(), thanks Johnny Estilles
  • fixed; Reloading tinyMCE if dependencies matches dependsOn, thanks Christian Nolte


April 14, 2015
  • fixed; list.schema.path("field") would not return the field schema before the List had been registered
  • fixed; evalDependsOn not working correctly with Boolean field types
  • fixed; whitespaces issues in the Admin UI LESS file


April 12, 2015
  • changed; Switched from SJCS to ESLint for project linting and style checking
  • changed; Item data is now loaded via JSON API in the Admin UI, fixes escaping edge-case issues and paves the way forward
  • added; List history feature for tracking document revisions
  • added; Schema inheritance for lists, thanks Robert Clark
  • added; yearRange option for Date fields, thanks Robert Clark
  • fixed; intermittend ordering issues with Relationship fields, thanks Robert Clark
  • added; format option for Url fields to prevent stripping http/https, thanks Daniel Zurawski
  • added; color preview in list view, thanks Teemu Sirkiä
  • added; ability to add mandrill template content, thanks Brett Newman
  • added; original file name is saved for AWS uploads, thanks Subash Pathak
  • fixed; wysiwyg cloudinary images key is no longer required to be global, can be set per-field, thanks Alberto Gasparin
  • fixed; refactored doSignin(), now exposed as keystone.session.signinWithUser(), thanks Johnny Estilles
  • fixed; Use filename without suffix as default publicID for cloudinary, thanks @aschwersenz
  • added; support for custom headers in S3 File Fields, thanks Chris Montoro
  • added; currency option for the Money field, thanks @douglasf
  • fixed; markdown field collapse behaviour, thanks Pat Cavit
  • fixed; wysiwyg & file field collapse behaviour, thanks Robert Clark
  • fixed; scripts are no longer minified in dev mode


March 10, 2015
  • fixed; missing less variable for react-select was breaking the less>css build, thanks everyone involved and esparragito for the fix
  • fixed; the missing line numbers in CodeMirror are back again, thanks Carlos Colon


March 8, 2015
  • added; new DateArray field type, thanks Liam Wooding
  • added; new editor Object config option for Code fields, thanks Pat Cavit
  • added; new wysiwyg Object config option for Html fields, thanks Pat Cavit
  • changed; limits lifted for relationship autocomplete results
  • changed; makefile deprecated in favor of npm scripts, thanks Pat Cavit
  • changed; asyncdi updated and moved into its own npm package, fixes thanks to Camille Reynders
  • fixed; collapse logic for relationship (many: true) and Array-type fields, thanks Pat Cavit
  • fixed; Rendering of uneditable relationship fields, thanks Camille Reynders
  • fixed; OpenShift deployment issues, thanks Johnny Estilles
  • fixed; item name rendering issues in Admin UI / Edit view, thanks Camille Reynders
  • fixed; LocalFile field issues, thanks Camille Reynders
  • fixed; Markdown field collapse logic and other UI issues, thanks Pat Cavit
  • fixed; validation override error in UndateHandler, thanks douglasf
  • fixed; validation logic issues with Number fields


February 27, 2015
  • added; new Geopoint field type, thanks Sebastian McKenzie
  • added; lots of server-side field type unit tests
  • added; frame guard option, thanks Johnny Estilles
  • added; objects with IDs like { id: ObjectId } can now be provided as Relationship values in data to keystone.createItems(data, options, callback)
  • added; options.refs can be provided as an option to keystone.createItems(data, options, callback)
  • added; focus issues with the WYSIWIG Html and Code fields
  • changed; lang option because language for the Code field type as per the 0.3.x docs
  • changed; Code fields are now allowed to be initial fields
  • updated; TinyMCE to 4.1.7
  • updated; Many packages, see e561fa6
  • fixed; issues with the ipRangeRestrict option, thanks Johnny Estilles
  • fixed; relationship reorder is persisted even when the linked IDs haven't changed, thanks Robert Clark
  • fixed; check for existence req.user on DELETE action, thanks Josh Lasdin
  • fixed; updatedAt, updatedBy, createdAt and createdBy are no longer set on create w/ tracking if already set, thanks Sebastian McKenzie
  • fixed; bug with the datepicker that caused an infinite loop in some timezones
  • fixed; bug in deprecation warning helper, thanks Nicolas Dutil


February 13, 2015
  • fixed; validation and updating issues with Number, Money, TextArray and NumberArray Fields
  • fixed; slightly broken regex for resource redirection, thanks Nicolas Dutil
  • fixed; the S3File field now surfaces errors correctly, thanks Harry Moreno
  • changed; keystone.connect was broken in 0.3.0, it has been replaced by the keystone.set('express', ...) and keystone.set('mongoose', ...) options

Also more tests and general cleanup. Thanks especially to Sebastian McKenzie and Johnny Estilles for their work on this release.


February 6, 2015

This is a major new version of KeystoneJS. The changes are too many to simply enumerate here, however we've done our best to ensure compatibility and feature parity with 0.2.x. If you experience any unexpected issues or behaviours, please let us know by opening a Github Issue.

For notes regarding breaking changes in the release, please see our 0.2.x to 0.3.x Changes wiki page.

Thanks to all our contributors for the huge amount of effort that went into this release, and the ongoing work designing, programming, testing and documenting KeystoneJS.


January 20, 2015
  • fixed; backwards-compatibility issues with older versions of connect-mongo
  • fixed; file type / mimetype issues with S3File / AzureFile and LocalFile fields


January 18, 2015
  • fixed; issues relating to using mongo and redis as session stores
  • added; option to use the importcss plugin for TinyMCE; set wysiwyg importcss, thanks aschwersenz
  • added; MONGODB_URL environment variable support, thanks jdr0dn3y


December 31, 2014
  • fixed; issue setting Boolean fields to false in the Admin UI
  • added; cors middleware is now available as Keystone.cors
  • fixed; redis session middleware doesn't support callbacks, should now initialise correctly
  • fixed; issues parsing options in keystone.Email, thanks Brett Newman


December 20, 2014
  • fixed; regression in the Admin UI introduced in 0.2.37, sorry!


December 19, 2014
  • fixed; a bug where location field filters were not being applied in the Admin UI
  • fixed; a bug where boolean field filters were not being applied in the Admin UI


December 19, 2014
  • added; check for refsLookup existence to core/createItem, thanks Sebastian McKenzie
  • added; dump current list key and data onto createItems error, thanks Sebastian McKenzie
  • added; ability to bypass bcrypt hashing for password fields when required
  • added; SSL CA configuration option, thanks Brett Newman
  • added; static options option to control static middleware configuration, thanks Sebastian McKenzie
  • fixed; error thrown in the Admin UI when no user model is available
  • fixed; handle undefined boolean update values, thanks Carlos Colon
  • fixed; logging error for misconfigured Embedly fields
  • fixed; mimetype bug in S3 file field, thanks Harry Moreno
  • updated; multilanguage docs and new site architecture
  • improved; password field validation now in UpdateHandler

Huge thanks to @wuhaixing for the Chinese translation in this release.


December 7, 2014
  • fixed; several issues with the localfile field type
  • improved; localfile.options.format is called with the field context
  • improved; localfile.href is now available as a virtual
  • improved; switched to fs-extra so missing paths for localfile uploads will be created automatically
  • improved; localfiles field type has been completely overhauled, now in line with localfile and supports prefix and format options
  • removed; the autodetection of image file types in the localfiles field has been removed, use the format option instead (like localfile)
  • fixed; admin UI template caching bug, may help improve Admin UI performance
  • fixed; callback is now correctly optional in keystone.Email.send(), thanks Brett Newman
  • improved; a ReferenceError is now thrown when an invalid list is requested with keystone.list, thanks Sebastian McKenzie


December 2, 2014

This release fixes an issue in the Admin UI introduced in 0.2.34, our sincere apologies to anyone who was affected by this!

  • fixed; an issue to do with admin links introduced by the new custom nav functionality, thanks Camille Reynders


November 29, 2014
  • added; ability to specify custom navigation items in the header menu, thanks Camille Reynders
  • added; ability to specify multiple values for a dependsOn field with an Array, thanks Brett Newman
  • improved; more dynamic import extensions, thanks Sebastian McKenzie
  • fixed; several issues relating to validation in the UpdateHandler
  • fixed; issues deleting users, thanks Ignacio Lago
  • fixed; potential issues comparing csrf and password tokens, thanks Mickael van der Beek
  • fixed; incorrect whitespace in UI when ordering lists, thanks Tiago Martins
  • fixed; callback in Email class is now correctly optional, thanks Ignacio Lago
  • fixed; UI inconsistencies when deleting items, thanks Ignacio Lago
  • fixed; date formatting issues with tracking meta, thanks Jacques Lareau


November 4, 2014
  • fixed; Issues where the session store would not always wait for a database connection before initialising the web server
  • fixed; Compatibility issues with changes made to the azure-storage blobservice.js, thanks Pete Amundson
  • added; Mandrill templates and render support, thanks Ignacio Lago


October 16, 2014
  • fixed; Issues with less middleware options when using multiple paths
  • fixed; Error in Admin UI when filters are applied to a Relationship field, thanks Ignacio Lago


October 14, 2014
  • added; TextArray and NumberArray field types, thanks bardzusny
  • added; Markdown editor headers buttons and customisation, thanks Alberto Gasparin
  • added; filename and format optionss for the s3file field, thanks Aleksej Kamynin
  • added; Support for array values for less and sass options (allows multiple paths to be specified)
  • fixed; Invalid field types throw errors on init, making debugging easier
  • fixed; Keystone throws a warning when you add fields to a List that are implemented by the track option
  • fixed; Errors returned by schema.pre('remove') middleware don't display in the Admin UI, thanks Ian Dilling
  • fixed; Minor issued with the WYSIWYG editor in the Admin UI


October 2, 2014
  • fixed; Do not crash process for schema validation errors, thanks David Banham


September 30, 2014
  • fixed; localfiles implementation, thanks Darkin8
  • fixed; whitespace issues in the Admin UI when in production mode
  • added; proper ascending / descending UI for tracking sort
  • added; sorting UI for tracking date fields
  • added; can toggle display of created / updated dates in list view
  • added; displaying tracked metadata in the Admin UI
  • added; displaying current user in the footer
  • fixed; cross-platform issues moving files into place, thanks Alan Shaw
  • fixed; sortOrder type detection, thanks Darkin8
  • fixed; use buttons where possible for accessibility


September 12, 2014
  • added; thumbnail for embedly fields, thanks Pavel Vlasov
  • fixed; various cloudinary issues, thanks Johnny Estilles
  • added; cloudinary folders option, thanks Johnny Estilles
  • added; ability to filter relationship by any input field or _id, thanks Johnny Estilles
  • fixed; notes are now displayed for name fields, thanks Ignacio Lago
  • added; support for csrf headers, thanks Johnny Estilles
  • fixed; consistency issues with noedit and initial options for fields
  • fixed; issues retaining entered values in the Admin UI's create form after validation failures
  • fixed; all remaining jshint warnings :)


August 30, 2014
  • fixed; exception when deleting item that has many-many relation from list view, thanks Thomas Pedersen
  • fixed; issues related to sortOrder calculation, thanks Alberto Gasparin
  • updated; Markdown visual editor (bootstrap-markdown.js) to (v2.5.0), thanks Alberto Gasparin
  • improved; createItems is more robust when linking new items, thanks Carlos Colon
  • fixed; remaining link to create new items when a list is set to nocreate
  • fixed; Field watch option issues, thanks Markus Padourek
  • added; more options to customise the WYSIWYG editor toolbar, thanks Michael Abadilla
  • improved; users can no longer delete themselves, thanks Brett Newman
  • added; new option mongo replica set for using a MongoDB Replica Set, thanks Ivan Fuyivara
  • added; csv field delimiter option to specify a custom CSV field delimiter, thanks Louis-Michel Couture
  • improved; redirects and error handlers are now the last items set up in keystone.mount(), thanks Brett Newman


August 14, 2014
  • added; 'today' button in the datepicker for quick selection of the current day, thanks Markus Padourek
  • fixed; linked to/not linked to toggle not respecting currently applied filter
  • added; new track option for List that enables tracking of standard metadata on documents, including createdAt, createdBy, modifiedAt, modifiedBy, thanks Johnny Estilles
  • added; _req_user property is available on documents in pre('save') middleware when the UpdateHandler is used (which includes updates in the Admin UI), thanks Johnny Estilles
  • fixed; edge-case errors in lib/core/mount, thanks Johnny Estilles
  • fixed; AzureFile upload error, thanks Emmanuel Nelson
  • added; more details, including document name, included for relationship fields in CSV download, thanks Michael Abadilla
  • improved; general UI and code clean up
  • fixed; regression of ipRangeRestrict option
  • fixed; path nesting for Boolean fields works correctly
  • added; additionalPlugins and additionalOptions options for wysiwyg fields
  • fixed; static value support for Relationship field filters option, thanks Johnny Estilles


July 27, 2014
  • fixed; issue #492 - errors uploading to cloudinary fields, thanks Johnny Estilles
  • fixed; issues starting with SSL


July 25, 2014
  • fixed; issues saving location field values
  • fixed; filtering on select fields was broken in the Admin UI
  • added; list totals are recalculated after items are deleted, thanks Johnny Estilles
  • added; feature to select images from cloudinary, thanks Johnny Estilles
  • fixed; issues with field required / initial validation, thanks Oleg Shparber
  • fixed; better handling of default / alt behaviour for remove / delete functionality with cloudinary fields


July 20, 2014
  • improved; more Admin UI visual tweaks, thanks Joss Mackison
  • fixed; allowing nested values to be provided to the UpdateHandler for name and location fields
  • added; cloudinary folders feature, enabled with field option folder or defaulting to [prefix (if exists)]/[list path]/[path], thanks Johnny Estilles
  • added; ability to specify a field to use as the cloudinary public_id, thanks Johnny Estilles
  • added; cloudinary image replace on upload option, thanks Johnny Estilles
  • fixed; initial sortOrder on a sortable List, thanks Johnny Estilles
  • added; ability to read multiple static files from an Array, thanks Mike Grabowski
  • added; default values for text fields are displayed in the create items form now, thanks Brandon Taylor


June 29, 2014
  • fixed; autokey being added with a unique index when not specified as unique, thanks trentmillar
  • fixed; "bullet-proof" buttons in the email template were breaking because of a b/c in Jade 1.x, thanks Heracles Kasimis
  • fixed; view cache issue (see #430), thanks Aleksej Kamynin
  • added; new localfiles field type, thanks Tom Kremer
  • added; new file limit option, passed to express.limit middleware, thanks Fabrizio Fortunato
  • added; errorMessage option for UpdateHandler.process(), thanks Heracles Kasimis
  • added; support for connect-mongostore to support MongoDB replica sets as the session store database, thanks Abe
  • added; support for Redis as a session store via connect-redis
  • fixed; boolean fields with default: true are now checked when creating new items, thanks Aleksandr
  • updated; less-middleware is now updated to version 1.0.3 (new API)

With this release, connect-mongo has been removed from Keystone's package.json and all three supported session store packages are optional. If you specify one, be sure to include it as a dependency in your project's package.json (Keystone will warn you on startup if you haven't).

Because of the way npm resolved paths, if you are using Keystone in development mode (via npm link) and using a session store, you have to npm install <session-store> in your local Keystone folder as well or it won't find the package.


June 16, 2014
  • updated; Admin UI visual tweaks by Joss Mackison
  • added; new CSRF implementation for more granular control
  • fixed; several UI and functionality issues with the new list recent-searches feature
  • added; S3 file - ability to specify a protocol for the file url, thanks Cosmina
  • added; cookie signin option to control session persistence
  • added; session options option for better control over keys and stores, also exposes the final configuration after start() is called, thanks killerbobjr
  • improved; Keystone now throws an error when no cookie secret is provided


June 6, 2014
  • added; recent searches UI and functionality in the Admin UI, thanks Benjamin Lupton
  • fixed; strict type checking for field.options.required, see #393
  • added; CloudinaryImage.updateItem() allows updates from data, thanks Carlos Colon
  • added; native support for node-sass via the sass option, make sure you include node-sass in your project dependencies to use it. thanks Fabrizio Fortunato
  • fixed; field validation methods for location & password fields
  • fixed; keystone.createItems() now creates items in series, not parallel
  • added; support for dynamic queries for relationship values in keystone.createItems()
  • added; verbose logging and strict ref checking options for keystone.createItems()
  • improved; performance when using the id property as part of a field's autokey


May 28, 2014
  • added; ability to change the filename in Types.LocalFile by specifying the filename: function() {} option, thanks Stefan Aebischer
  • improved; read-only tinyMCE editor is used for htmlFields when noedit is true, thanks Frederic Beaudet
  • fixed; Extracting and scoping keystone.initAPI to work correctly when used directly as middleware
  • improved; Added better MongoDB indexes for schemaPlugins
  • improved; invalid config handling for fields
  • fixed; relationship filters now work correctly
  • added; ability to prefix all MongoDB Collection names, thanks David Björklund
  • improved; output stack traces with error logs, thanks Benjamin Lupton
  • fixed; issues signing in users by UserID directly (introduced in 0.2.18)
  • fixed; users without passwords (auth via facebook / github / etc) will not have their sessions persisted outside of the memory store.
  • added; support for using MongoDB as the session store. set 'session store': 'mongo' to enable this feature.
  • deprecated; support for providing the mongo option as an array. Use a MongoDB connection string instead, e.g. 'mongodb://localhost/db_name


May 22, 2014
  • added; callbacks passed to View.render() are now passed err, req, res
  • fixed; console logging is suppressed when the option logger is false
  • fixed; issues relating to session cookies
  • fixed; a lot of minor code issues and cleanup
  • improved; test coverage


May 19, 2014


May 14, 2014
  • fixed; issues with Keystone.prototype.import, see #348, thanks ashleycorker
  • fixed; issues with geo handling in Location fields, see #344, thanks mandb


May 13, 2014
  • fixed; Added note to fields that didnt have one, thanks Ötvös Richárd
  • fixed; Only show "Open Keystone" link to admins, thanks John Beppu
  • fixed; Password fields are formatted correctly on the list screen of the Admin UI
  • added; Support for custom MongoDB collection names (and other Schema options, see #292)
  • added; Support for clearing password fields (if not required)
  • added; is now available on the Field object
  • added; Support for loading fixture data with keystone.createItems() and in update scripts, see this gist for an example
  • added; Basic support for redirects, see #303 for details
  • added; Support for excluding the blank option in Select fields with the emptyOption option
  • improved; Nicer exception on EADDRINUSE error
  • added; Warning when required fields aren't initial, see #300
  • fixed; Truthy check for port breaks listening on any open port
  • fixed; Changed how updates are discovered and included, fixes previous issues with .DS_Store files
  • added; test script to package.json, spec reporter for Mocha tests and other test improvements, thanks David Banham
  • added; cookie secret to environment defaults init, thanks Tom Walker
  • added; separated Express setup from http server setup to enable easier Express sub-app mounting, thanks ryedin
  • fixed; Errors are caught on item deletion, thanks fbeaudet
  • fixed; Issues where Email.send() wasn't consistently async
  • added; Support for the argument row in custom List.schema.methods.toCSV implementations, provides the original toCSV data for simpler customisation well as several other miscellaneous fixes and improvements, thanks to all our contributors who keep making Keystone better!

Also; all dependencies are up to date with their latest published versions, except for express and less-middleware which require further testing to ensure compatibility.


April 16, 2014
  • added; new createItems() method to quickly populate data, see this gist for usage instructions and examples
  • improved; .toCSV() method for lists now uses dependency injection and can be asynchronous (just pass callback as the last argument)
  • added; basic implementation of field watching
  • fixed; issue with dateTime fields not updating correctly
  • added; perPage option for lists that controls the number of items displayed per page in the Admin UI, thanks Galaczi Endre Elek
  • added; gulp, and more tests! thanks Morgan Craft
  • improved; link fields are now anchors in the Admin UI list view, thanks DrMoriarty
  • fixed; height of admin header and signout link placement with a lot of lists in the navigation, thanks Ötvös Richárd
  • added; support for adding additional toolbar buttons to tinymce, thanks Eric


April 4, 2014
  • added; onHttpServerCreated and onHttpsServerCreated events now fired during keystone.start(), allows for integration of things like


April 3, 2014
  • added; initial field support for HTML and Markdown fields
  • improved; some client-side scripts (e.g. TinyMCE) are no longer included when they're not going to be used


April 2, 2014
  • added; .toCSV() method now supported on schemas to transform data when exported in the Admin UI
  • added; image and uploadimage plugin support for TinyMCE
  • added; cloudinary upload api for generic image uploads, thanks Branko Sekulic
  • added; csrf middleware support, thanks Lasana Murray
  • added; express is now available as a property of keystone
  • added; optional support for a the S3_REGION environment variable, thanks DrMoriarty
  • added; IP address range restrictions, thanks Robert Medeiros
  • added; support for express trust proxy setting, thanks Robert Medeiros
  • fixed; Boolean field notes were being escaped incorrectly


March 18, 2014
  • added; new AzureFile field type, thanks Juan Benavides Romero
  • added; new toolbar and preview mode for Markdown fields, thanks Thomas Pedersen
  • fixed; issue with the 'new item' button on the item details page in the Admin UI triggering autocreate functionality incorrectly, thanks Thomas Pedersen
  • fixed; redirect parameter for signin page now protects against open redirect attacks, thanks Oliver Jenkins
  • fixed; 'host is undefined' issue with certain configurations, see #241
  • fixed; accented characters are converted correctly when generating slugs, thanks to keystone-utils 0.1.7

(emergency version bump from 0.2.9 because of white-space issue with new Jade version)


March 12, 2014
  • fixed; issues getting path options correctly on Windows (was causing update issues)
  • fixed; support for tagging images uploaded to Cloudinary client-side in the Admin UI for CloudinaryImages fields, thanks Mike Causer
  • improved; filtering on Number fields can now find null values
  • fixed; height option now supported on Markdown and Textarea field types
  • added; support for PUT and DELETE http methods in View.on


March 11, 2014
  • fixed; minor issues to improve auto-creation of items
  • improved; ability to chain keystone.pre, keystone.init, keystone.start, keystone.static, keystone.routes and keystone.bindEmailTestRoutes
  • improved; callbacks / error handling in View class
  • improved; handling of MongoDB errors before app starts (now much more debuggable)
  • added; field notes are now parsed using marked so you can use markdown syntax if desired
  • added; new field type Code, uses the CodeMirror editor in the Admin UI, thanks Juan Benavides Romero
  • fixed; error thrown when requesting an invalid page in the Admin UI list view
  • fixed; correctly trigger mongoose middleware when removing items, thanks Chris Dion
  • added; ability to use custom paths for updates (issue #205)
  • added; optional callback to View.render (issue #215)
  • improved; tweaked some option keys, added a warning for deprecated options
  • added; ability to specify signin and signout redirect paths or functions
  • added; https server and ssl configuration now supported by keystone.start(), thanks snowkeeper
  • improved; tweaks to native signin UI, thanks jossmackison

This version also contains the new docs and website developed by @jossmackison and @jedwatson. To view the docs locally, open keystone/docs and run node docs.


February 25, 2014
  • improved; implementation of hidden option for fields
  • improved; refactored the Email class and implemented friendlier errors
  • improved; email test route binding, including ability to use a function to provide template locals to tests
  • added; custom template support in the Email class
  • added; email button mixin supports default styling and style overrides
  • improved; email locals and options can be combined in a single object argument
  • fixed; location field auto-improve error
  • fixed; relationship fields display old ID when related item is missing, thanks Mark Bayfield
  • added; autocreate option for Lists (see issue #21)
  • improved; signin page looks better when you're alredy signed in
  • improved; location.requiredPaths field option supports comma-delimited values
  • improved; UpdateHandler now updates noedit fields when they are explicitly provided (issue #194)
  • added; ability to specify custom validation / required messages in the UpdateHandler (issue #195)
  • added; ability to provide custom lists of required fields to the UpdateHandler (issue #196)


February 17, 2014
  • improved; dropdown styles are nicer
  • improved; default signin ui tweaks
  • improved; hidden lists warn when included in nav config option
  • fixed; hidden lists are accessible through the API
  • improved; warnings are thrown when autokey option config is invalid
  • improved; autokey values are now included in CSV exports
  • improved; markdown and html fields render nicely in the Admin UI list view


February 15, 2014
  • improved; new sign in/out screen design, thanks jossmackison
    • improved; the default error screen is now responsive, thanks jossmackison
  • improved; additional supported file types for CloudinaryImage fields, thanks James Allen
    • Supported types are [image/gif, image/png, image/jpeg, image/bmp, image/x-icon, application/pdf, image/x-tiff, image/x-tiff, application/postscript, image/vnd.adobe.photoshop]
  • improved; you can now use Relationship fields with multi: true as initial fields
  • added; Relationship fields can now be used as filters in the Admin UI
  • fixed; scope issue in Relationship field type, thanks Tom Walker


February 11, 2014
  • added; new localFile field type, thanks Alan Shaw
  • added; hidden: true option for lists
  • fixed; uploading works again for cloudinaryImages fields


February 5, 2014
  • fixed; "moment not defined" error in S3File field type, thanks Olivier Vaillancourt
  • added; ability to define attachments to emails via Mandrill, thanks Tom Walker
  • improved; log formatting and error output
  • fixed; default 404 handling, thanks Lepi
  • added; new keystone.import(path) method for recusrively requiring all .js / .coffee files in a path relative to the project root, e.g. keystone.import('models'). Similar to but simpler than keystone.importer().
  • improved; the default 404 and 500 error handlers have been cleaned up, and have a simple HTML template
  • added; filtering now implemented for location fields
  • improved; the list download > csv feature in the Admin UI now respects the current filters


February 4, 2014
  • added; more flexible environment variable defaults for mongo connection strings. It supports env.MONGO_URI, env.MONGO_URL, env.MONGOLAB_URI and env.MONGOLAB_URL, so whatever default you're using, it should be there.
  • added; the http server is now accessible as keystone.httpServer, thanks B. August
  • added; pre upload queue for s3file field type (set the pre.upload option, or call {list}.fields.{s3filefield}.pre('upload', ...))
  • added; initial (create form) support for location fields
  • added; initial (create form) support for markdown fields, thanks Jimmy Hillis
  • improved; much more flexible support for http server startup options, see #154


January 26, 2014

A bumper release for the new year! We've moved to v0.2.x because some packages have been updated to new minor versions that may cause compatibility issues, specifically:

KeystoneJS now requires mongoose 3.8.5+. Please test compatibility with your application before deploying this update to production.

This version also requires Jade 1.x, which includes some breaking changes from the 0.x branch, particularly to doctype definition. Updating your app should be simple, but again, be sure to test before deploying to production.

One of the other big changes in this release is the work done by Iulian Meghea breaking up all the field templates into individual files, in preparation for introducing field type plugins in the future.

  • lots of website, readme and documentation improvements
  • fixed; potential issue with flash errors erroring with TypeError: Cannot read property 'flash' of undefined, thanks James Allen
  • improved; Add options to s3file field type to support allowedTypes, thanks James Allen
  • added; host option to specify the ip address to listen on, thanks Jose Carvajal
  • improved; better error handling, see #144
  • fixed; placeholder for items without a name when creating a relationship in the admin UI, see #117
  • fixed; keystone error on blank date / date time fields, thanks Mark Bayfield
  • fixed; columns filter button position in development env, thanks Mike Causer
  • added; mongo connection defaults, see #124
  • improved; sign-out page text
  • fixed; hard-to-debug errors in schemaPlugins when callbacks are omitted
  • fixed; compatibility for location auto-improve w/ mongoose 3.8.2+
  • added; gravatar functionality for email fields, including gravatar display in the Admin UI's list and edit views, and a gravatarUrl underscore method, thanks Mike Causer
  • fixed; try/catch for missing Pre-route middleware, thanks Mark Bayfield
  • fixed; .env defaults for s3 config, see #143
  • fixed; check for cloudinary config when CloudinaryImage fields are initialised, see #28
  • added; current KeystoneJS version displayed in footer of Admin UI, see #130
  • updated; marked v0.3.0
  • updated; mongoose v0.8.5
  • updated; keystone-utils v0.1.5
  • updated; jade v1.1.5
  • updated; async v0.2.10
  • updated; moment v2.5.1
  • updated; less-middleware v0.1.15


December 30, 2013
  • fixed; incompatibility with mongoose 3.8.2+ for location fields has been resolved, thanks jbalde
  • fixed; compatibibility issues with Jade 1.0.0, preparing for update
  • improved; nicer default .env keys for mandrill and embedly api key config, falls back to legacy / heroku default key names


December 23, 2013
  • fixed; problem with the new options implementation when cloudinary is not used


December 23, 2013
  • fixed; correctly escaping HTML entities in names through the API
  • updated; keystone-utils to 0.1.4
  • fixed; better implementation of cloudinary config, fixes #69
  • improved; more robust / consistent initialisation of options with process.env variables
  • added; new custom engine option for using view engines not natively supported by express, thanks JeremyFouriaux


December 12, 2013
  • improved; the updateHandler will now allow required fields to be omitted from input data when an item already has a value for the field
  • improved; relationship fields now support custom labels and notes, thanks mbayfield
  • fixed; support for heading as a field path, thanks mbayfield


December 11, 2013
  • fixed; res.apiError was broken (when using keystone.initAPI)
  • fixed; minor tweaks to the Email class and default template


December 9, 2013
  • updated; keystone-utils to 0.1.3


December 4, 2013
  • added; moment and parse underscore methods for the date and datetime fields
  • fixed; bugs searching lists with name fields in the admin ui
  • fixed; sorting by name fields in the admin ui was not working correctly


December 3, 2013
  • added; you can now provide a paths option to the UpdateHandler to map custom field names to item field paths for processing
  • improved; default email templates have been redesigned, with new theme options and defaults, thanks jossmackison
  • improved; s3file fields expose a direct uploadFile underscore method, for use outside of an updateHandler, thanks bladey
  • fixed; support for extended characters in utils.pathToLabel (via keystone-utils), thanks itzaks


December 2, 2013
  • added; new s3file field, thanks bladey


November 27, 2013
  • added; new list.getUniqueValue(path, generator, limit, callback) method
  • added; lots of new documentation in the website
  • fixed; updating relationship fields from arrays
  • improved; updates to the Email class, adding default email templates (based on VIRB Ink, currently very basic)
  • removed; br() method from Email template locals (vendor prefixes not necessary in modern browsers anymore)

If you are currently using the br method in your email templates, make sure it is removed or your templates will break.

Note: To run the docs website locally, go to /docs and run node web. It will start up at http://localhost:8080


November 20, 2013
  • misc bug fixes


November 20, 2013
  • added; new markdown field type
  • improved; massive enhancements to the cloudinaryimage(s) fields, thanks bladey


November 20, 2013
  • added; keystone.content class and the start of a page-content management framework
  • added; new functionality for integrating front-end editing
  • fixed; minor issues with the list controls in the admin UI


November 19, 2013
  • fixed; passing populateRelated string as 3rd argument of View.query


November 18, 2013
  • improved; support for detecting presence of req.body / req.query keys on View.on('post' || 'get')
  • added; support for callbacks in the keystone.View class. available callbacks are err (when the first argument returned by the query callback is not null, takes a single argument which is the error), none (when the results array is empty or the results argument is null), then (called unless err or none is present and called, takes three arguments: err, results, next)
    • e.g. view.query(as, query, { err: errorHandlerCallback, none: noResultsCallback }) or
    • view.query(as, query).none(noResultsCallback).then(defaultCallback)


November 14, 2013
  • added; autokey now supports a unique option
    • set to true for unique keys within the whole collection, or a filters object for unique keys within a specific set of documents
  • improved; document id is now hidden in favour of the autokey (if there is one)
    • press alt to see the document id
  • added; you can now navigate to the linked document in a relationship field (only updated on load, for now)


November 7, 2013
  • improved; the utils library has been moved to its own npm package, keystone-utils
  • changed; default date format changed from YYYY-MM-DD to Do MMM YYYY, it's friendlier
    • the format option for Date and Datetime fields can be used to override this setting on a per-field basis


November 6, 2013
  • added; ability to use dependsOn with headers, thanks itzaks
    • new syntax is { heading: 'Heading with dependency', dependsOn: { field: 'value'} }
  • added; url parameter for the admin list view that updates all items in a list, optionally with data
    • /keystone/list?update
    • /keystone/list?update={"field":"value"}
  • added; ability to override changedOn value when using the standard meta fields
  • fixed; cell overflow is now hidden in the admin list view
  • added; support for additional cloudinary transformations
  • added; support for passing options to cloudinary transformation shortcut underscore methods
  • fixed; the default field validator now trims strings before testing for length when determining validity
  • changed; mongoose >3.6.20 is now required, allowing usage of 3.8 +


November 4, 2013
  • improved; added webp and progressive jpeg options to cloudinaryimage field
  • improved; added ability to pass options to cloudinaryimage underscore shortcuts (limit, fill, etc.)
  • fixed; underscoreMethods for fields that implement their own addToSchema method (were missing .format, etc)
  • improved; format function for location fields now supports a list of fields to include


November 3, 2013
  • added; new embedly field type


October 31, 2013
  • added; client-side deleting of items in the list view
  • added; ability to use custom validation methods with updatehandlers
  • improved; autokeys can now build a key from multiple paths, and support format strings
  • improved; autokeys now understand virtual paths (and will always regenerate if one is detected)
  • improved; default format settings for uneditable date fields
  • fixed; incorrect path in public file
  • site; minor updates
  • changed; switched to bcrypt-nodejs module becase of build issues on windows, thanks sullivanpt
  • improved; added intelliJ project files to .gitignore, thanks sullivanpt


October 24, 2013
  • fixed; utils.htmlToText was removing   without adding a space
  • added; coffeescript file support in the importer, thanks itzaks