
Security News
The Changelog Podcast: Practical Steps to Stay Safe on npm
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.
grunt-bumpup
Advanced tools
Update the version, date, and other properties in JSON files while preserving the original indentation style.

Updates the version, date, and other properties in your JSON files.
The properties are updated only when already present in the original JSON file. Plugin also detects and preserves the original indentation style.
Note: if you want to create tag, commit, or push to a git repository in addition to bumping version, please consider grunt-bump.
This is a Grunt 0.4 plugin. If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins.
Upholds the Semantic Versioning Specification.
Use npm to install and save the plugin into devDependencies.
npm install grunt-bumpup --save-dev
Once the plugin has been installed, it can be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-bumpup');
grunt bumpup
By default, the patch version is bumped.
You can specify a different release type bump in 1st argument:
grunt bumpup:[type]
And the build meta suffix in 2nd argument:
grunt bumpup:[type]:[buildmeta]
Available release types are:
x.0.0 part of a version string.0.x.0 part of a version string.0.0.x part of a version string. If a prerelease exists, will only remove the prerelease number.x.0.0 part of a version strring and append a prerelease version of 0 0.0.0-x'0.x.x part of a version strring and append a prerelease version of 0 0.0.0-x'0.0.x part of a version strring and append a prerelease version of 0 0.0.0-x'0.0.0-x part of a version string. If no prerelease exists, will also bump the patch 0.0.xFull possible version format: major.minor.patch-prerelease+buildmeta
The prerelease part is appended only in prerelease bump type, and removed when present in major, minor, or patch bumps.
The buildmeta suffix has to be passed manually:
grunt bumpup:[type]:1458
You can also ignore everything above and pass a valid semantic version directly:
grunt bumpup:1.1.0-2+1458
In your project's Gruntfile, add a section named bumpup to the data object passed into grunt.initConfig(). This is a
simple task, and does not conform to multi task options & files input types! All available configuration styles are
described below.
This is the most verbose form of the configuration:
grunt.initConfig({
	bumpup: {
		options: {
			// Options go here.
		},
		setters: {
			// Custom setters go here.
		},
		files: [
			// JSON files go here.
		],
	},
});
Default options and one JSON file:
grunt.initConfig({
	bumpup: 'package.json'
});
grunt.initConfig({
	bumpup: {
		file: 'package.json'
	}
});
Default options, and multiple JSON files:
grunt.initConfig({
	bumpup: ['package.json', 'component.json']
});
grunt.initConfig({
	bumpup: {
		files: ['package.json', 'component.json']
	}
});
Custom options and setters:
grunt.initConfig({
	bumpup: {
		options: {
			dateformat: 'YYYY-MM-DD HH:mm',
			normalize: false
		},
		setters: {
			// Overrides version setter
			version: function (old, releaseType, options) {
				return 'proprietary version';
			},
			// Adds a new setter for `timestamp` property
			timestamp: function (old, releaseType, options) {
				return +new Date();
			},
		},
		files: ['package.json', 'component.json']
	}
});
Type: Object
Default: {}
Map of grunt config property names that should be updated after bumping.
Usage: If you have a pkg convenience property from package.json, and you bump up something inside it, you need to
tell that to grunt so the next tasks in queue can use the updated data.
Example: Tell bumpup to update the pkg config property when bumping the package.json file.
grunt.initConfig({
	pkg: grunt.file.readJSON('package.json'),
	bumpup: {
		options: {
			updateProps: {
				pkg: 'package.json'
			}
		},
		file: 'package.json'
	}
});
Type: Boolean
Default: true
Whether to normalize all JSON files to have the same version. The version that is than bumped up and saved into all files is taken from the first file passed into the files array.
Type: Boolean
Default: false
Whether to add a newline at the end when writing a JSON file.
Type: String
Default: YYYY-MM-DD HH:mm:ss Z
A date format string used by moment.js' .format() method, which is in turn used in date
property setter. To see all available format tokens, read the
moment.js' format documentation.
Following is the list of valid moment.js ISO-8601 (computer and human readable) date formats.
YYYY-MM-DD
YYYY-MM-DDTHH
YYYY-MM-DD HH
YYYY-MM-DDTHH:mm
YYYY-MM-DD HH:mm
YYYY-MM-DDTHH:mm:ss
YYYY-MM-DD HH:mm:ss
YYYY-MM-DDTHH:mm:ss.SSS
YYYY-MM-DD HH:mm:ss.SSS
YYYY-MM-DDTHH:mm:ss Z
YYYY-MM-DD HH:mm:ss Z
The dates are set in the UTC timezone, so including the Z token is recommended.
You can define your own property setters by passing them as functions into setters object. For example, this will
update the timestamp property inside package.json:
grunt.initConfig({
	bumpup: {
		setters: {
			timestamp: function (oldTimestamp, releaseType, options, buildMeta) {
				return +new Date();
			}
		},
		file: 'package.json'
	}
});
You can also override the default setters for version and date properties if you want some more control, or
other than default behavior.
All setters receive the same 4 arguments:
major, minor, patch, prerelease, or a valid semantic version.Example showcasing simplified version & date setters:
grunt.initConfig({
	bumpup: {
		setters: {
			version: function (oldVersion, releaseType, options, buildMeta) {
				return semver.inc(oldVersion, releaseType) + '+' + buildMeta;
			},
			date: function (oldDate, releaseType, options, buildMeta) {
				return moment.utc().format(options.dateformat);
			}
		},
		file: 'package.json'
	}
});
Each setter has to return the new property value, or when something went wrong, grunt.fail.warn() an error and return
undefined.
Example "release" task alias that handles everything needed to build a new project release:
// Task configurations
grunt.initConfig({
	pkg: grunt.file.readJSON('package.json'),
	jshint: ...,
	uglify: ...,
	bumpup: {
		options: {
			updateProps: {
				pkg: 'package.json'
			}
		},
		file: 'package.json'
	},
	tagrelease: '<%= pkg.version %>'
});
// Loading the plugins
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-bumpup');
grunt.loadNpmTasks('grunt-tagrelease');
// Alias task for release
grunt.registerTask('release', function (type) {
	type = type ? type : 'patch';     // Default release type
	grunt.task.run('jshint');         // Lint stuff
	grunt.task.run('bumpup:' + type); // Bump up the version
	grunt.task.run('uglify');         // Minify stuff
	grunt.task.run('tagrelease');     // Commit & tag the release
});
// Alias task for release with buildmeta suffix support
grunt.registerTask('release', function (type, build) {
	var bumpParts = ['bumpup'];
	if (type) { bumpParts.push(type); }
	if (build) { bumpParts.push(build); }
	grunt.task.run('jshint');
	grunt.task.run(bumpParts.join(':'));
	grunt.task.run('uglify');
	grunt.task.run('tagrelease');
});
And now you can call it from CLI like this:
grunt release            // Default patch release
grunt release:minor      // Minor release
grunt release:minor:1458 // Minor release with buildtype suffix
grunt release:build:1459 // Only build suffix will be modified
FAQs
Update the version, date, and other properties in JSON files while preserving the original indentation style.
The npm package grunt-bumpup receives a total of 2,091 weekly downloads. As such, grunt-bumpup popularity was classified as popular.
We found that grunt-bumpup demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.

Security News
Experts push back on new claims about AI-driven ransomware, warning that hype and sponsored research are distorting how the threat is understood.

Security News
Ruby's creator Matz assumes control of RubyGems and Bundler repositories while former maintainers agree to step back and transfer all rights to end the dispute.