KeystoneJS is maintained by @JedWatson and an amazing team of contributors. All contributions are given credit here except for Jed's.
Release notes for Keystone 4 beta & release candidates can be found on the GitHub releases page.
Changes for production releases are included below.
- 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
- fixed; Issue preventing you from specifying the
pretty
option in thelocals
setting
- 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
- added; support for Mailgun, thanks Wolfgang
- fixed; issues with connect-mongo on Node 0.12, thanks gemscng
- 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.
- 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
- added; new hooks in the app middleware setup are available, see #1736 for documentation.
- updated; all packages, including pre-build client side bundles
- 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
andField
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
- 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
- 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 forDate
andDateTime
field types, see #1487 for more details.
- 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!
- fixed; worked around an intermittent issue with the new browserify build process
- added; new hooks
updates
,signin
andsignout
, thanks Camille Reynders - added;
parseFormat
option forDate
/Datetime
field types, and more robust validation inDateArray
- 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.
- 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
[email protected]
and you should now just use theless 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 usepath.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 includesh: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.
- fixed; worked around a breaking issue with the
bytes
package by downgrading it and including it in the pre-built Admin UI packages bundle
- 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
- fixed;
list.schema.path("field")
would not return the field schema before the List had been registered - fixed;
evalDependsOn
not working correctly withBoolean
field types - fixed; whitespaces issues in the Admin UI LESS file
- 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 askeystone.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
- 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
- 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
- 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 tokeystone.createItems(data, options, callback)
- added;
options.refs
can be provided as an option tokeystone.createItems(data, options, callback)
- added; focus issues with the WYSIWIG Html and Code fields
- changed;
lang
option becauselanguage
for theCode
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
andcreatedBy
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
- 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 thekeystone.set('express', ...)
andkeystone.set('mongoose', ...)
options
Also more tests and general cleanup. Thanks especially to Sebastian McKenzie and Johnny Estilles for their work on this release.
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.
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.
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!
- fixed; backwards-compatibility issues with older versions of connect-mongo
- fixed; file type / mimetype issues with S3File / AzureFile and LocalFile fields
- fixed; issues relating to using mongo and redis as session stores
- added; option to use the
importcss
plugin for TinyMCE; setwysiwyg importcss
, thanks aschwersenz - added;
MONGODB_URL
environment variable support, thanks jdr0dn3y
- fixed; issue setting
Boolean
fields tofalse
in the Admin UI - added;
cors
middleware is now available asKeystone.cors
- fixed; redis session middleware doesn't support callbacks, should now initialise correctly
- fixed; issues parsing options in keystone.Email, thanks Brett Newman
- fixed; regression in the Admin UI introduced in 0.2.37, sorry!
- 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
- 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.
- fixed; several issues with the
localfile
field type - improved;
localfile.options.format
is called with thefield
context - improved;
localfile.href
is now available as a virtual - improved; switched to
fs-extra
so missing paths forlocalfile
uploads will be created automatically - improved;
localfiles
field type has been completely overhauled, now in line withlocalfile
and supportsprefix
andformat
options - removed; the autodetection of image file types in the
localfiles
field has been removed, use theformat
option instead (likelocalfile
) - fixed; admin UI template caching bug, may help improve Admin UI performance
- fixed;
callback
is now correctly optional inkeystone.Email.send()
, thanks Brett Newman - improved; a
ReferenceError
is now thrown when an invalid list is requested withkeystone.list
, thanks Sebastian McKenzie
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
- 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
- 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
- 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
- added;
TextArray
andNumberArray
field types, thanks bardzusny - added; Markdown editor headers buttons and customisation, thanks Alberto Gasparin
- added;
filename
andformat
optionss for the s3file field, thanks Aleksej Kamynin - added; Support for array values for
less
andsass
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
- fixed; Do not crash process for schema validation errors, thanks David Banham
- 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
- 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
andinitial
options for fields - fixed; issues retaining entered values in the Admin UI's create form after validation failures
- fixed; all remaining jshint warnings :)
- 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
- 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 forList
that enables tracking of standard metadata on documents, includingcreatedAt
,createdBy
,modifiedAt
,modifiedBy
, thanks Johnny Estilles - added;
_req_user
property is available on documents inpre('save')
middleware when theUpdateHandler
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
andadditionalOptions
options forwysiwyg
fields - fixed; static value support for
Relationship
fieldfilters
option, thanks Johnny Estilles
- fixed; issue #492 - errors uploading to cloudinary fields, thanks Johnny Estilles
- fixed; issues starting with SSL
- 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
- 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
- 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 toexpress.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 version1.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.
- 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 afterstart()
is called, thanks killerbobjr - improved; Keystone now throws an error when no cookie secret is provided
- 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 includenode-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
- 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
- added; callbacks passed to
View.render()
are now passederr, req, res
- fixed; console logging is suppressed when the option
logger
isfalse
- fixed; issues relating to session cookies
- fixed; a lot of minor code issues and cleanup
- improved; test coverage
- added; between filtering to date, datetime, money, and number field types, thanks Benjamin Lupton
- added; new color field, thanks Frederic Beaudet
- added; automated unit tests with TravisCI, thanks James Allen and Andri Möll
- added; .jshintrc config and better settings for .editorconfig, thanks James Allen and Benjamin Lupton
- added; code documentation for
/lib/view.js
class, thanks Talon - added; coverage report and default gulp task, thanks James Allen
- fixed; issues with Keystone.prototype.import, see #348, thanks ashleycorker
- fixed; issues with geo handling in Location fields, see #344, thanks mandb
- 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; Password.compare 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 customList.schema.methods.toCSV
implementations, provides the originaltoCSV
data for simpler customisation
...as 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.
- 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 passcallback
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
- added;
onHttpServerCreated
andonHttpsServerCreated
events now fired duringkeystone.start()
, allows for integration of things like socket.io
- 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
- 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 ofkeystone
- 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
- 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)
- 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
andTextarea
field types - added; support for
PUT
andDELETE
http methods inView.on
- fixed; minor issues to improve auto-creation of items
- improved; ability to chain
keystone.pre
,keystone.init
,keystone.start
,keystone.static
,keystone.routes
andkeystone.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
.
- 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 updatesnoedit
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)
- 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
- 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
]
- Supported types are [
- improved; you can now use Relationship fields with
multi: true
asinitial
fields - added; Relationship fields can now be used as filters in the Admin UI
- fixed; scope issue in Relationship field type, thanks Tom Walker
- added; new
localFile
field type, thanks Alan Shaw - added;
hidden: true
option for lists - fixed; uploading works again for
cloudinaryImages
fields
- 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 thankeystone.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
- added; more flexible environment variable defaults for mongo connection strings. It supports
env.MONGO_URI
,env.MONGO_URL
,env.MONGOLAB_URI
andenv.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
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
- 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
- fixed; problem with the new options implementation when cloudinary is not used
- 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 byexpress
, thanks JeremyFouriaux
- 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
- fixed; res.apiError was broken (when using
keystone.initAPI
) - fixed; minor tweaks to the Email class and default template
- updated; keystone-utils to 0.1.3
- added;
moment
andparse
underscore methods for thedate
anddatetime
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
- added; you can now provide a
paths
option to theUpdateHandler
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 anupdateHandler
, thanks bladey - fixed; support for extended characters in utils.pathToLabel (via
keystone-utils
), thanks itzaks
- added; new
s3file
field, thanks bladey
- 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
- misc bug fixes
- added; new
markdown
field type - improved; massive enhancements to the
cloudinaryimage(s)
fields, thanks bladey
- 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
- fixed; passing populateRelated string as 3rd argument of View.query
- improved; support for detecting presence of
req.body
/req.query
keys onView.on('post' || 'get')
- added; support for callbacks in the
keystone.View
class. available callbacks areerr
(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 unlesserr
ornone
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)
- e.g.
- 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
- set to
- improved; document id is now hidden in favour of the autokey (if there is one)
- press
alt
to see the document id
- press
- added; you can now navigate to the linked document in a relationship field (only updated on load, for now)
- improved; the
utils
library has been moved to its own npm package,keystone-utils
- changed; default date format changed from
YYYY-MM-DD
toDo MMM YYYY
, it's friendlier- the
format
option forDate
andDatetime
fields can be used to override this setting on a per-field basis
- the
- added; ability to use dependsOn with headers, thanks itzaks
- new syntax is
{ heading: 'Heading with dependency', dependsOn: { field: 'value'} }
- new syntax is
- 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 thestandard 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 +
- 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 forlocation
fields now supports a list of fields to include
- added; new embedly field type
- 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 underscore.map 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
- fixed; utils.htmlToText was removing without adding a space
- added; coffeescript file support in the importer, thanks itzaks