Skip to content

Package text: say what each package does in the words people search for - #15

Merged
jwrosewell merged 4 commits into
rcfrom
docs/package-text
Nov 13, 2026
Merged

jwrosewell merged 4 commits into
rcfrom
docs/package-text

Conversation

@jwrosewell

@jwrosewell jwrosewell commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

What changed and why

Developers find packages on npm by searching for the job they need done, with words such as user agent parser, device detection, IP geolocation, and geoip. The six main Device Detection and IP Intelligence packages described themselves mostly in terms of the 51Degrees Pipeline API, so those searches matched them poorly. This pull request rewrites the description and keywords of each package so they say what the package does in the words people search for.

  • Each description opens with what the package is and the language it is for ("Device Detection and User-Agent parser for Node.js" or "IP Intelligence and IP geolocation for Node.js"). It then says what the package finds and how it runs, being on-premise or in the cloud for the two base packages, the 51Degrees cloud service with a Resource Key for the cloud packages, and a data file on your server for the on-premise packages. The existing fact that each package is built on the 51Degrees Pipeline API is kept.
  • Each description ends by naming the products the package is an alternative to, "An alternative to UAParser.js, DeviceAtlas, and WURFL." for Device Detection and "An alternative to MaxMind and IPinfo." for IP Intelligence, so that people searching for those products find these packages. James Rosewell decided on 9 November 2026 to name the competitors as written (UAParser.js, DeviceAtlas and WURFL for Device Detection, MaxMind and IPinfo for IP Intelligence), in every language.
  • Device Detection and IP Intelligence are written with capitals because they are product names.
  • The keywords add the hyphenated terms people search for, for example user-agent-parser, client-hints, ip-geolocation, and ip-to-country. Existing keywords are kept, including the names of other products (WURFL and DeviceAtlas on the Device Detection packages, MaxMind and ipinfo on the IP Intelligence packages), so that people searching npm for those products find these packages. The first commit removed them and the second commit puts them back exactly as they were.
  • Both package.json and remote_package.json change for each package. ci/build-package.ps1 moves remote_package.json over package.json before it packs, so remote_package.json holds the text that npm shows. The two descriptions had drifted apart and now match.
  • Only the description and keywords fields change. No other field, no version number, and no lock file is touched.

Before and after

The before text is what npm shows today for the latest version of each package (read from https://registry.npmjs.org/<name>/latest), which matches remote_package.json on main.

fiftyone.devicedetection

Field Before After
Description on npm, from remote_package.json Parse HTTP headers to detect the device type, model, operating system, browser, and crawler information Device Detection and User-Agent parser for Node.js. Detects the device, browser, operating system, and crawlers from HTTP headers such as the User-Agent and User-Agent Client Hints. Works on-premise with a data file or in the cloud. Built on the 51Degrees Pipeline API. An alternative to UAParser.js, DeviceAtlas, and WURFL.
Description in package.json Accurate device detection from HTTP headers, identifying device type, model, operating system, browsers, and bots. Same as remote_package.json
Keywords, both files 51degrees, device detection, user-agent, client hints, browser, os, device, cpu, mobile, phone, tablet, tv, bot, crawler, detect, WURFL, DeviceAtlas 51degrees, device-detection, user-agent, user-agent-parser, client-hints, browser-detection, mobile-detection, crawler-detection, device detection, client hints, browser, os, device, cpu, mobile, phone, tablet, tv, bot, crawler, detect, WURFL, DeviceAtlas

fiftyone.devicedetection.cloud

Field Before After
Description on npm, from remote_package.json Device detection cloud services for the 51Degrees Pipeline API Device Detection and User-Agent parser for Node.js. Detects the device, browser, operating system, and crawlers from HTTP headers such as the User-Agent and User-Agent Client Hints. Uses the 51Degrees cloud service with a Resource Key. Built on the 51Degrees Pipeline API. An alternative to UAParser.js, DeviceAtlas, and WURFL.
Description in package.json Cloud-based device detection for Node.js using the 51Degrees Pipeline API. Identify devices, operating systems, browsers, and bots from HTTP headers. Same as remote_package.json
Keywords, both files 51degrees, device detection, user-agent, client hints, browser, os, device, cpu, mobile, phone, tablet, tv, bot, crawler, cloud, WURFL, DeviceAtlas 51degrees, device-detection, user-agent, user-agent-parser, client-hints, browser-detection, mobile-detection, crawler-detection, device detection, client hints, browser, os, device, cpu, mobile, phone, tablet, tv, bot, crawler, cloud, WURFL, DeviceAtlas

fiftyone.devicedetection.onpremise

Field Before After
Description on npm, from remote_package.json Device detection on-premise services for the 51Degrees Pipeline API Device Detection and User-Agent parser for Node.js. Detects the device, browser, operating system, and crawlers from HTTP headers such as the User-Agent and User-Agent Client Hints. Reads a data file on your server. Built on the 51Degrees Pipeline API. An alternative to UAParser.js, DeviceAtlas, and WURFL.
Description in package.json On-premise device detection for Node.js using the 51Degrees Pipeline API. Detect devices, operating systems, browsers, and bots locally from HTTP headers. Same as remote_package.json
Keywords, both files 51degrees, device detection, user-agent, client hints, browser, os, device, cpu, mobile, phone, tablet, tv, bot, crawler, WURFL, DeviceAtlas 51degrees, device-detection, user-agent, user-agent-parser, client-hints, browser-detection, mobile-detection, crawler-detection, device detection, client hints, browser, os, device, cpu, mobile, phone, tablet, tv, bot, crawler, WURFL, DeviceAtlas

fiftyone.ipintelligence

Field Before After
Description on npm, from remote_package.json IP intelligence services for the 51Degrees Pipeline API IP Intelligence and IP geolocation for Node.js. Finds an IP address's likely location (country, region, town, and coordinates), connection type, and network. Works on-premise with a data file or in the cloud. Built on the 51Degrees Pipeline API. An alternative to MaxMind and IPinfo.
Description in package.json IP intelligence for Node.js using the 51Degrees Pipeline API. Determine the network, and location properties of an IP address. Same as remote_package.json
Keywords, both files 51degrees, ip intelligence, ip, geolocation, geoip, network, asn, vpn, proxy, tor, hosting, location, country, MaxMind, ipinfo 51degrees, ip-intelligence, ip-geolocation, geoip, ip-lookup, asn, ip-to-country, ip intelligence, ip, geolocation, network, vpn, proxy, tor, hosting, location, country, MaxMind, ipinfo

fiftyone.ipintelligence.cloud

Field Before After
Description on npm, from remote_package.json IP intelligence cloud services for the 51Degrees Pipeline API IP Intelligence and IP geolocation for Node.js. Finds an IP address's likely location (country, region, town, and coordinates), connection type, and network. Uses the 51Degrees cloud service with a Resource Key. Built on the 51Degrees Pipeline API. An alternative to MaxMind and IPinfo.
Description in package.json Cloud-based IP intelligence for Node.js using the 51Degrees Pipeline API. Determine the network, and location properties of an IP address. Same as remote_package.json
Keywords, both files 51degrees, ip intelligence, ip, geolocation, geoip, network, asn, vpn, proxy, tor, hosting, location, country, MaxMind, ipinfo 51degrees, ip-intelligence, ip-geolocation, geoip, ip-lookup, asn, ip-to-country, ip intelligence, ip, geolocation, network, vpn, proxy, tor, hosting, location, country, MaxMind, ipinfo

fiftyone.ipintelligence.onpremise

Field Before After
Description on npm, from remote_package.json IP intelligence on-premise services for the 51Degrees Pipeline API IP Intelligence and IP geolocation for Node.js. Finds an IP address's likely location (country, region, town, and coordinates), connection type, and network. Reads a data file on your server. Built on the 51Degrees Pipeline API. An alternative to MaxMind and IPinfo.
Description in package.json On-premise IP intelligence for Node.js using the 51Degrees Pipeline API. Determine the network, and location properties of an IP address locally. Same as remote_package.json
Keywords, both files 51degrees, ip intelligence, ip, geolocation, geoip, network, asn, vpn, proxy, tor, hosting, location, country, MaxMind, ipinfo 51degrees, ip-intelligence, ip-geolocation, geoip, ip-lookup, asn, ip-to-country, ip intelligence, ip, geolocation, network, vpn, proxy, tor, hosting, location, country, MaxMind, ipinfo

How it was checked

  1. Each of the 12 edited manifests parses with Python's json module.
  2. A script loaded each manifest before and after the edit and confirmed that every field other than description and keywords is identical, in the same key order.
  3. git diff shows 14 changed lines in each file for the first commit, and for the second commit only the description line, the comma after the last keyword, and the two restored keywords in each file, and for the third commit only the description line of each Device Detection file, and git ls-files --eol shows the files still use LF line endings in the repository.
  4. The descriptions were checked against the code. The base builders, deviceDetectionPipelineBuilder.js and ipIntelligencePipelineBuilder.js, create a cloud pipeline when given resourceKey and an on-premise pipeline when given dataFile. The cloud builders take a resourceKey. The Device Detection getting started examples use the User-Agent and User-Agent Client Hints, and the metadata example names Crawler as a component alongside Hardware, Software Platform, and Browser. The IP Intelligence examples read country, town, latitude, longitude, and registered name, and the metrics example lists ConnectionType.
  5. 80a833b9 merges rc at 24592ac, with no conflict, so the comparison with rc is still the 12 manifests and only their description and keywords.

Build

Full build 43476815280 on the head 80a833b passed. All seven Setting 'PullRequestSha' lines are 80a833b, and each of the six Ubuntu, Ubuntu ARM and Windows jobs on Node 22 and 24 ran 1,355 unit tests passed with 2 skipped, and 132 integration tests passed with 4 skipped. macOS was left out of this draft's full build under the 9 November decision. The rc head is built with macOS before it merges into main.

Versions

No version number changes. The version field in each manifest stays 1.0.0, because ci/build-package.ps1 sets the published version with npm version when it packs. npm shows the new text once the next version of each package is published.

With the per-package release plan in #37, a change only to description and keywords releases nothing, so npm shows the new text once each package is next released for another reason. All six packages here have code changes on rc since 4.5.102, so the next release carries the new text.

Developers search npm with words such as user agent parser, device
detection, and IP geolocation. The descriptions of the six Device
Detection and IP Intelligence packages now say what each package does in
those words, and the keywords add the matching terms. Existing keywords
that are still true are kept, and keywords naming other companies'
products are removed.

Both package.json and remote_package.json change, because
ci/build-package.ps1 publishes remote_package.json and the two files
should match. Only the description and keywords fields change, and no
version number moves.
People searching npm for WURFL, DeviceAtlas, MaxMind, or ipinfo should
find these packages too. The keywords naming those products are restored
exactly as they were, and each description now ends with the products
the package is an alternative to. Only the description and keywords
lines change, and no version number moves.
@jwrosewell
jwrosewell changed the base branch from main to rc November 3, 2026 14:55
The Device Detection descriptions now say "An alternative to UAParser.js,
DeviceAtlas, and WURFL." The 51Degrees fork is called 51Degrees UAParser,
so the bare name could read as our own package. Only the description line
changes, and no version number moves.
@jwrosewell
jwrosewell marked this pull request as ready for review November 13, 2026 19:08
@jwrosewell
jwrosewell merged commit 7cbf8bc into rc Nov 13, 2026
2 checks passed
@jwrosewell
jwrosewell deleted the docs/package-text branch November 13, 2026 19:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant