Skip to content

Package descriptions use the words people search for, and source links point at this repository - #27

Draft
jwrosewell wants to merge 6 commits into
rcfrom
docs/package-text
Draft

jwrosewell wants to merge 6 commits into
rcfrom
docs/package-text

Conversation

@jwrosewell

@jwrosewell jwrosewell commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

What changed

  • Package descriptions. The <description> in six pom files now says what each package does, in the words developers type when they look for a package like it, and ends by naming the products it is an alternative to. The detail, and a before and after table for each artifact, follow below.

  • Source links. The <scm> <url>, <connection>, and <developerConnection> in the four parent poms (pipeline/pom.xml, device-detection/pom.xml, ip-intelligence/pom.xml, and location/pom.xml) pointed at the earlier repositories pipeline-java, device-detection-java, ip-intelligence-java, and location-java. Those repositories are archived, so the source link on each package page was a dead end. Two changes fix that.

    1. All three elements now point at this repository in https form, https://github.com/51Degrees/51degrees-java for <url> and scm:git:https://github.com/51Degrees/51degrees-java.git for <connection> and <developerConnection>. The <connection> used git://, which GitHub permanently turned off on March 15, 2022. The <developerConnection> named info@51degrees.com as its host rather than GitHub.
    2. Each parent's <scm> now sets child.scm.connection.inherit.append.path, child.scm.developerConnection.inherit.append.path, and child.scm.url.inherit.append.path to "false". Child packages inherit these links, and without the attributes Maven adds each child's artifactId to them. The Maven model reference gives the default for <scm> <url> as "parent value [+ path adjustment] + (artifactId or project.directory property), or just parent value if scm's child.scm.url.inherit.append.path="false"", and says the same for the two connections. That is why the Maven Central page for com.51degrees:device-detection 4.5.128 links its source to https://github.com/51Degrees/device-detection-java/device-detection, which GitHub answers with 404. With the attributes, a child's links are the repository itself. The attributes need Maven 3.6.1 or later, and every runner image this repository's CI uses lists Maven 3.9.12 or later (see "How it was checked").

    The root pom's project <url> already pointed here, and no other pom has an <scm> block. After the merge with rc the module poms also carry that same repository as their <url>.

Package descriptions

Maven has no keywords field, so the description is the only place for the words developers search with, and Maven Central, mvnrepository.com, and web search all index it.

Developers search for phrases such as "user agent parser" (which search engines complete with "java"), "device detection", "User-Agent Client Hints", "ip geolocation", and "ip intelligence". The old text did not use "User-Agent", "User-Agent Client Hints", or "geolocation" at all.

The new text follows one pattern.

  1. It opens with the search phrases, "Device Detection and User-Agent parser for Java" or "IP Intelligence and IP geolocation for Java".
  2. It says what the package finds. Device Detection finds the device type and model, browser, operating system, and crawlers from the User-Agent and User-Agent Client Hints. IP Intelligence finds an IP address's likely location (country, region, town, and coordinates), connection type, and network.
  3. It says where the work happens. The cloud packages use the 51Degrees cloud service and need a Resource Key that says which properties to return, because the cloud request engine throws a PipelineConfigurationException without one (CloudRequestEngineBuilder). The on-premise engines read a data file on your server. The two aggregate packages, device-detection and ip-intelligence, depend on both their cloud and on-premise artifacts, so their text says they work either way.
  4. It keeps the existing detail that each package is built on the 51Degrees Pipeline API.
  5. It 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. The names are kept so that people searching for those products find these packages. The text names them without describing them. UAParser.js keeps its ".js" so that it cannot be read as the 51Degrees fork of that library.

Two things were dropped on purpose.

  • "High-performance", which is a claim the text cannot support.
  • "with no external service calls" on the Device Detection on-premise engine. Both on-premise engine builders take a DataUpdateService (Device Detection, IP Intelligence) and can download new data files when automatic updates are on (setAutoUpdate). "On your server" says where detection runs without ruling that out.

The <name> elements are unchanged because they are already clear.

Before and after

"Before" is the text in the 4.5.128 poms on Maven Central, which matches main.

com.51degrees:device-detection

device-detection/device-detection/pom.xml

Description
Before Parse HTTP headers to detect the device type, model, OS, browser, and crawler information. This is an alternative to popular UAParser, DeviceAtlas, and WURFL packages.
After Device Detection and User-Agent parser for Java. Detects the device type and model, browser, operating system, and crawlers from 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.

com.51degrees:device-detection.cloud

device-detection/device-detection.cloud/pom.xml

Description
Before Cloud-based device detection for Java that uses the 51Degrees cloud service via the Pipeline API. Parses HTTP headers to identify device hardware, operating systems, browsers, and crawlers.
After Device Detection and User-Agent parser for Java, using the 51Degrees cloud service. Detects the device type and model, browser, operating system, and crawlers from the User-Agent and User-Agent Client Hints. Needs a Resource Key that says which properties to return. Built on the 51Degrees Pipeline API. An alternative to UAParser.js, DeviceAtlas, and WURFL.

com.51degrees:device-detection.hash.engine.on-premise

device-detection/device-detection.hash.engine.on-premise/pom.xml

Description
Before High-performance on-premise hash-based device detection engine for Java, built for the 51Degrees Pipeline API. Parses HTTP headers locally to identify device hardware, operating systems, browsers, and crawlers, with no external service calls.
After On-premise Device Detection engine and User-Agent parser for Java. Reads a 51Degrees Hash data file on your server to detect the device type and model, browser, operating system, and crawlers from the User-Agent and User-Agent Client Hints. Built on the 51Degrees Pipeline API. An alternative to UAParser.js, DeviceAtlas, and WURFL.

com.51degrees:ip-intelligence

ip-intelligence/ip-intelligence/pom.xml

Description
Before Provides IP Intelligence for the 51Degrees Pipeline API. This can be used as an alternative to legacy IP Intelligence services such as MaxMind or IPinfo.
After IP Intelligence and IP geolocation for Java. 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.

com.51degrees:ip-intelligence.cloud

ip-intelligence/ip-intelligence.cloud/pom.xml

Description
Before Provides IP Intelligence for the 51Degrees Pipeline API using the 51Degrees Cloud service. This can be used as an alternative to legacy IP Intelligence services such as MaxMind or IPinfo.
After IP Intelligence and IP geolocation for Java, using the 51Degrees cloud service. Finds an IP address's likely location (country, region, town, and coordinates), connection type, and network. Needs a Resource Key that says which properties to return. Built on the 51Degrees Pipeline API. An alternative to MaxMind and IPinfo.

com.51degrees:ip-intelligence.engine.on-premise

ip-intelligence/ip-intelligence.engine.on-premise/pom.xml

Description
Before Provides the On-premise IP Intelligence engine for the 51Degrees Pipeline API. This can be used as an alternative to legacy IP Intelligence services such as MaxMind or IPinfo.
After On-premise IP Intelligence and IP geolocation engine for Java. Reads a 51Degrees IP Intelligence data file on your server to find an IP address's likely location (country, region, town, and coordinates), connection type, and network. Built on the 51Degrees Pipeline API. An alternative to MaxMind and IPinfo.

How it was checked

  • Read each artifact's current text from the 4.5.128 pom on Maven Central, the latest version in each maven-metadata.xml (for example https://repo1.maven.org/maven2/com/51degrees/device-detection/4.5.128/device-detection-4.5.128.pom). The text matches main.
  • Checked each statement in the descriptions against the code in this repository.
    • The device properties DeviceType, HardwareModel, BrowserName, PlatformName, IsCrawler, and CrawlerName are in DeviceDataBase.
    • The IP properties Country, Region, Town, Latitude, Longitude, ConnectionType, RegisteredName, and RegisteredOwner are in IPIntelligenceDataBase.
    • OfflineProcessing passes sec-ch-ua headers to the on-premise Hash engine, and both getting-started web examples cover User-Agent Client Hints (cloud, on-premise).
    • The dependencies of the aggregate packages, the Resource Key check, and the data file update option are linked above.
  • Checked with gh repo view that pipeline-java, device-detection-java, ip-intelligence-java, and location-java are archived, and read the <scm> block of the 4.5.128 parent poms pipeline.device-detection and pipeline.ip-intelligence on Maven Central, which carry the old links.
  • Checked the Maven version CI uses. The CI scripts in ci/ call mvn on the GitHub-hosted runners named in ci/options.json and do not install Maven, so the runner image decides. The runner image manifests list Maven 3.10.0 for ubuntu-22.04 and macos-15, 3.9.16 for windows-latest and macos-15-intel, and 3.9.12 for ubuntu-22.04-arm. The Maven wrapper in .mvn/wrapper pins 3.9.16.
  • Ran help:effective-pom on device-detection/device-detection with Maven 3.9.16 through the wrapper, which reads the poms and builds nothing. The effective <scm> of com.51degrees:device-detection is https://github.com/51Degrees/51degrees-java for <url> and scm:git:https://github.com/51Degrees/51degrees-java.git for both connections, with no artifactId added.
  • Parsed all ten edited poms with Python's xml.etree.ElementTree. All of them parse and return the new description or <scm> values and attributes.
  • Searched the new description text for em dashes, semicolons, colons, numbers, and claims such as fastest or best, and found none.
  • Searched every pom.xml for github.com and for the earlier repository names. The only matches left are the example artifact IDs, such as device-detection-java-examples, and a comment in the root pom, which are names rather than links.
  • git diff shows one changed line in each of the six package poms. In each of the four parent poms it shows the <scm> opening tag, now three lines carrying the attributes, and the <url>, <connection>, and <developerConnection> lines. The files keep their LF line endings.
  • No build or test was run. James Rosewell decided on 9 November 2026 that pull requests changing only package text skip the full build, and merge on "UTM link lint", "Only rc into main" and an independent review.
  • The Maven Central pages can only show the new source links after the next release, so the link on the com.51degrees:device-detection page is worth checking then.

Merge with rc

The module poms on rc now carry a <url> of https://github.com/51Degrees/51degrees-java (from "Point package metadata at this repository and fix stale links", #42), which conflicted with this branch on the line beside each <description>. The branch now merges rc (merge commit d1d7f6d). In the six package poms it keeps the new <description> from this branch and the <url> from rc, so git diff origin/rc...HEAD shows the same ten files as before and in each package pom only the <description> line. The <scm> blocks on rc still named the archived repositories, so the <scm> change in the four parent poms is still needed.

Release effect

If the per-package release plan in #63 merges, a change to only <description> and <scm> releases nothing, so the new descriptions reach Maven Central with each package's next release for another reason.

Competitor names

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.

Not changed

  • No version number changed, and no versioning file was touched. The new text and links reach Maven Central with the next release.
  • The <name> elements and every other line of the ten poms.
  • The descriptions of the shared, translation, and parent poms (device-detection.shared, ip-intelligence.shared, ip-intelligence.translation, pipeline.device-detection, and pipeline.ip-intelligence) were out of scope. The device-detection.shared description was not rewritten and could be brought into line in a follow-up.
  • The example artifact IDs and the root pom comment that use the earlier repository names.

The pom description of device-detection, device-detection.cloud,
device-detection.hash.engine.on-premise, ip-intelligence,
ip-intelligence.cloud, and ip-intelligence.engine.on-premise now opens
with the phrases developers search for (Device Detection, User-Agent
parser, IP Intelligence, and IP geolocation). Each one then says what
the package finds, whether it uses the 51Degrees cloud service or reads
a data file on your server, and that it is built on the 51Degrees
Pipeline API.

The cloud packages say they need a Resource Key, because the cloud
request engine will not start without one. The on-premise engines no
longer say "with no external service calls", because both can download
data file updates when automatic updates are on. Claims the text cannot
support and the names of other companies' products are removed.

Names and versions are unchanged.
The scm url, connection, and developerConnection in the pipeline,
device-detection, ip-intelligence, and location parent poms pointed at
pipeline-java, device-detection-java, ip-intelligence-java, and
location-java. Those repositories are archived, so the source link on
each package page was a dead end. They now point at 51degrees-java.

The url keeps its https form and the connection its git:// form. The
developerConnection named info@51degrees.com as its host rather than
GitHub, so it now uses the https form of this repository.
@jwrosewell jwrosewell changed the title Package text says what each package does in the words people search for Package descriptions use the words people search for, and source links point at this repository Nov 3, 2026
The four parent poms now set child.scm.connection.inherit.append.path,
child.scm.developerConnection.inherit.append.path, and
child.scm.url.inherit.append.path to false on scm. Without them Maven
adds each child's artifactId to the inherited links, so the page for a
package such as com.51degrees:device-detection linked to a path that
GitHub answers with 404. The attributes need Maven 3.6.1 or later, and
every runner image in ci/options.json lists Maven 3.9.12 or later.

The connection now uses https, because GitHub permanently turned off
the unencrypted git:// protocol on March 15, 2022.
Each Device Detection description now ends "An alternative to UAParser,
DeviceAtlas, and WURFL." and each IP Intelligence description ends "An
alternative to MaxMind and IPinfo.", so that people who search for those
products find these packages.
@jwrosewell
jwrosewell changed the base branch from main to rc November 3, 2026 14:54
The sentence now reads "An alternative to UAParser.js, DeviceAtlas, and
WURFL.", which names the JavaScript library and cannot be read as the
51Degrees UAParser fork.
jwrosewell added a commit that referenced this pull request Nov 3, 2026
)

pipeline-java, device-detection-java, ip-intelligence-java,
location-java, device-detection-java-examples and
ip-intelligence-java-examples are archived, and the note at the top of
each README names the folder of this repository that now holds its
code. Four READMEs and 33 example source files still linked those
repositories, so each of the 39 links now points at the same file,
folder or README heading on main here.

Only the URLs change. The History section of the root README, two Java
string constants, the creator context demo page and its test, and the
four parent poms that the open package text pull request (#27) changes
keep their links.
jwrosewell added a commit that referenced this pull request Nov 4, 2026
* README: what it does, how to install it and where it came from (#26)

The README now opens with what the code does in the words developers search for, then the install command, try-it links and, where there are any, the repositories it was created from. It ends with a Find out more section, and the logo is a file in the repository. Everything else the README said is kept.

* Check that only rc merges into the default branch (#29)

* Point links to the archived Java repositories at their folders here (#31)

pipeline-java, device-detection-java, ip-intelligence-java,
location-java, device-detection-java-examples and
ip-intelligence-java-examples are archived, and the note at the top of
each README names the folder of this repository that now holds its
code. Four READMEs and 33 example source files still linked those
repositories, so each of the 39 links now points at the same file,
folder or README heading on main here.

Only the URLs change. The History section of the root README, two Java
string constants, the creator context demo page and its test, and the
four parent poms that the open package text pull request (#27) changes
keep their links.

* Drop the moved example folders and fix the native model example name (#33)

The examples moved to examples/, which the device detection and IP
Intelligence Doxyfiles already read, so the old folders go. Point the
location IMAGE_PATH at the shared documentation images, and name the
native model example console/NativeModelCloud.java in place of the
doubled example command.

* Link this repository from the native library message and the demo page (#32)

When the native library fails to load, both on-premise engines suggest
rebuilding the binary from the source code and instructions in
device-detection-java or ip-intelligence-java, which are archived. The
instructions for building the native binary are now in the README of
device-detection/ and ip-intelligence/ here, beside the engine source,
so the message links those folders.

The creator context demo page linked pipeline-java as the source of the
demo and of the code it runs on, and now links pipeline/ here. The test
that checks the page ends with somewhere to go next asserts the new
address.

* Link the hardware profile engine to its specification page (#34)

* Merged Pull Request '#36 update-packages/rc->rc: Update packages'

Co-authored-by: Automation51D <51DCI@51Degrees.com>

* Merged Pull Request '#35 update-submodules/rc->rc: Update submodules'

Co-authored-by: Automation51D <51DCI@51Degrees.com>

---------

Co-authored-by: Automation51D <60396166+Automation51D@users.noreply.github.com>
Co-authored-by: Automation51D <51DCI@51Degrees.com>
# Conflicts:
#	device-detection/device-detection.cloud/pom.xml
#	device-detection/device-detection.hash.engine.on-premise/pom.xml
#	device-detection/device-detection/pom.xml
#	ip-intelligence/ip-intelligence.cloud/pom.xml
#	ip-intelligence/ip-intelligence.engine.on-premise/pom.xml
#	ip-intelligence/ip-intelligence/pom.xml
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