<!doctype html>
<html>
  <title>npm-version</title>
  <meta http-equiv="content-type" value="text/html;utf-8">
  <link rel="stylesheet" type="text/css" href="../../static/style.css">

  <body>
    <div id="wrapper">
<h1><a href="../cli/npm-version.html">npm-version</a></h1> <p>Bump a package version</p>

<h2 id="SYNOPSIS">SYNOPSIS</h2>

<pre><code>npm version [&lt;newversion&gt; | major | minor | patch]</code></pre>

<h2 id="DESCRIPTION">DESCRIPTION</h2>

<p>Run this in a package directory to bump the version and write the new
data back to the package.json file.</p>

<p>The <code>newversion</code> argument should be a valid semver string, <em>or</em> a valid
second argument to semver.inc (one of &quot;patch&quot;, &quot;minor&quot;, or
&quot;major&quot;). In the second case, the existing version will be incremented
by 1 in the specified field.</p>

<p>If run in a git repo, it will also create a version commit and tag, and
fail if the repo is not clean.</p>

<p>If supplied with <code>--message</code> (shorthand: <code>-m</code>) config option, npm will
use it as a commit message when creating a version commit.  If the
<code>message</code> config contains <code>%s</code> then that will be replaced with the
resulting version number.  For example:</p>

<pre><code>npm version patch -m &quot;Upgrade to %s for reasons&quot;</code></pre>

<p>If the <code>sign-git-tag</code> config is set, then the tag will be signed using
the <code>-s</code> flag to git.  Note that you must have a default GPG key set up
in your git config for this to work properly.  For example:</p>

<pre><code>$ npm config set sign-git-tag true
$ npm version patch

You need a passphrase to unlock the secret key for
user: &quot;isaacs (http://blog.izs.me/) &lt;i@izs.me&gt;&quot;
2048-bit RSA key, ID 6C481CF6, created 2010-08-31

Enter passphrase:</code></pre>

<h2 id="SEE-ALSO">SEE ALSO</h2>

<ul><li><a href="../cli/npm-init.html">npm-init(1)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../misc/semver.html">semver(7)</a></li></ul>
</div>
<p id="footer">npm-version &mdash; npm@1.3.21</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
  .filter(function (el) {
    return el.parentNode === wrapper
        && el.tagName.match(/H[1-6]/)
        && el.id
  })
var l = 2
  , toc = document.createElement("ul")
toc.innerHTML = els.map(function (el) {
  var i = el.tagName.charAt(1)
    , out = ""
  while (i > l) {
    out += "<ul>"
    l ++
  }
  while (i < l) {
    out += "</ul>"
    l --
  }
  out += "<li><a href='#" + el.id + "'>" +
    ( el.innerText || el.text || el.innerHTML)
    + "</a>"
  return out
}).join("\n")
toc.id = "toc"
document.body.appendChild(toc)
})()
</script>
