3 <title>npm-disputes</title>
4 <meta http-equiv="content-type" value="text/html;utf-8">
5 <link rel="stylesheet" type="text/css" href="../../static/style.css">
6 <link rel="canonical" href="https://www.npmjs.org/doc/misc/npm-disputes.html">
7 <script async=true src="../../static/toc.js"></script>
12 <h1><a href="../misc/npm-disputes.html">npm-disputes</a></h1> <p>Handling Module Name Disputes</p>
13 <h2 id="synopsis">SYNOPSIS</h2>
15 <li>Get the author email with <code>npm owner ls <pkgname></code></li>
16 <li>Email the author, CC <a href="mailto:support@npmjs.com">support@npmjs.com</a></li>
17 <li>After a few weeks, if there's no resolution, we'll sort it out.</li>
19 <p>Don't squat on package names. Publish code or move out of the way.</p>
20 <h2 id="description">DESCRIPTION</h2>
21 <p>There sometimes arise cases where a user publishes a module, and then
22 later, some other user wants to use that name. Here are some common
23 ways that happens (each of these is based on actual events.)</p>
25 <li>Joe writes a JavaScript module <code>foo</code>, which is not node-specific.
26 Joe doesn't use node at all. Bob wants to use <code>foo</code> in node, so he
27 wraps it in an npm module. Some time later, Joe starts using node,
28 and wants to take over management of his program.</li>
29 <li>Bob writes an npm module <code>foo</code>, and publishes it. Perhaps much
30 later, Joe finds a bug in <code>foo</code>, and fixes it. He sends a pull
31 request to Bob, but Bob doesn't have the time to deal with it,
32 because he has a new job and a new baby and is focused on his new
33 erlang project, and kind of not involved with node any more. Joe
34 would like to publish a new <code>foo</code>, but can't, because the name is
36 <li>Bob writes a 10-line flow-control library, and calls it <code>foo</code>, and
37 publishes it to the npm registry. Being a simple little thing, it
38 never really has to be updated. Joe works for Foo Inc, the makers
39 of the critically acclaimed and widely-marketed <code>foo</code> JavaScript
40 toolkit framework. They publish it to npm as <code>foojs</code>, but people are
41 routinely confused when <code>npm install foo</code> is some different thing.</li>
42 <li>Bob writes a parser for the widely-known <code>foo</code> file format, because
43 he needs it for work. Then, he gets a new job, and never updates the
44 prototype. Later on, Joe writes a much more complete <code>foo</code> parser,
45 but can't publish, because Bob's <code>foo</code> is in the way.</li>
47 <p>The validity of Joe's claim in each situation can be debated. However,
48 Joe's appropriate course of action in each case is the same.</p>
50 <li><code>npm owner ls foo</code>. This will tell Joe the email address of the
52 <li>Joe emails Bob, explaining the situation <strong>as respectfully as
53 possible</strong>, and what he would like to do with the module name. He
54 adds the npm support staff <a href="mailto:support@npmjs.com">support@npmjs.com</a> to the CC list of
55 the email. Mention in the email that Bob can run <code>npm owner add
56 joe foo</code> to add Joe as an owner of the <code>foo</code> package.</li>
57 <li>After a reasonable amount of time, if Bob has not responded, or if
58 Bob and Joe can't come to any sort of resolution, email support
59 <a href="mailto:support@npmjs.com">support@npmjs.com</a> and we'll sort it out. ("Reasonable" is
60 usually at least 4 weeks, but extra time is allowed around common
63 <h2 id="reasoning">REASONING</h2>
64 <p>In almost every case so far, the parties involved have been able to reach
65 an amicable resolution without any major intervention. Most people
66 really do want to be reasonable, and are probably not even aware that
67 they're in your way.</p>
68 <p>Module ecosystems are most vibrant and powerful when they are as
69 self-directed as possible. If an admin one day deletes something you
70 had worked on, then that is going to make most people quite upset,
71 regardless of the justification. When humans solve their problems by
72 talking to other humans with respect, everyone has the chance to end up
73 feeling good about the interaction.</p>
74 <h2 id="exceptions">EXCEPTIONS</h2>
75 <p>Some things are not allowed, and will be removed without discussion if
76 they are brought to the attention of the npm registry admins, including
77 but not limited to:</p>
79 <li>Malware (that is, a package designed to exploit or harm the machine on
80 which it is installed).</li>
81 <li>Violations of copyright or licenses (for example, cloning an
82 MIT-licensed program, and then removing or changing the copyright and
83 license statement).</li>
84 <li>Illegal content.</li>
85 <li>"Squatting" on a package name that you <em>plan</em> to use, but aren't
86 actually using. Sorry, I don't care how great the name is, or how
87 perfect a fit it is for the thing that someday might happen. If
88 someone wants to use it today, and you're just taking up space with
89 an empty tarball, you're going to be evicted.</li>
90 <li>Putting empty packages in the registry. Packages must have SOME
91 functionality. It can be silly, but it can't be <em>nothing</em>. (See
92 also: squatting.)</li>
93 <li>Doing weird things with the registry, like using it as your own
94 personal application database or otherwise putting non-packagey
97 <p>If you see bad behavior like this, please report it right away.</p>
98 <h2 id="see-also">SEE ALSO</h2>
100 <li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
101 <li><a href="../cli/npm-owner.html">npm-owner(1)</a></li>
106 <table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
107 <tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18> </td></tr>
108 <tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)"> </td><td style="width:40px;height:10px;background:#fff" colspan=4> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4> </td><td style="width:40px;height:10px;background:#fff" colspan=4> </td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)"> </td><td colspan=6 style="width:60px;height:10px;background:#fff"> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4> </td></tr>
109 <tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2> </td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td></tr>
110 <tr><td style="width:10px;height:10px;background:#fff" rowspan=2> </td></tr>
111 <tr><td style="width:10px;height:10px;background:#fff"> </td></tr>
112 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
113 <tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
115 <p id="footer">npm-disputes — npm@1.4.14</p>