 <blockquote> <p>1) Which operator should I better use in customer projects? ^ or ~ ?</p> </blockquote> <p>Prefer caret <code>^</code> over tilde <code>~</code> operator.</p> <blockquote> <p>2+3) What does it mean, when I specify: <code>"behat/behat": "~1.3"</code> </p> </blockquote> <p><code>~1.3</code> is equivalent to <code>&gt;=1.3 &lt;2.0.0</code>.</p> <p>In brief: </p> <p><strong><code>~</code> sets a minimum version and allows last version digits to go up, while keeping BC safety</strong>.</p> <p>In detail:</p> <ul> <li>it will fetch a version starting with the lowest version of the <code>1.3</code> series as lower boundary, probably <code>1.3.0</code></li> <li>it will proceed with <code>1.3.*</code>, <code>1.4.*</code> and so on (all versions)</li> <li>but it will remain below the upper version boundary of version <code>2.0.0</code></li> </ul> <p>The switch of an major version (here from <code>1.*.*</code> to <code>2.*.*</code>) indicates a possibly break in backward compatibility (see semantic versioning standard). The package manager will avoid to fetch breaking changes to keep your set of software dependencies working.</p> <blockquote> <p>Are there any other special cases, where I need to be careful when specifying the version number?</p> </blockquote> <p>There are special cases, for instance fetching "dev-master" and development dependencies with stability dev and other "special cases. </p> <p>But the question is too broad to provide a good answer. Ask again, when you run into trouble with "special cases".</p>