<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ravi Teja Surampudi</title>
    <description>The latest articles on DEV Community by Ravi Teja Surampudi (@ravi_tejasurampudi_d8b55).</description>
    <link>https://dev.to/ravi_tejasurampudi_d8b55</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4065042%2F7ab9d54d-2fd5-4135-9816-0f5f2358f045.jpg</url>
      <title>DEV Community: Ravi Teja Surampudi</title>
      <link>https://dev.to/ravi_tejasurampudi_d8b55</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ravi_tejasurampudi_d8b55"/>
    <language>en</language>
    <item>
      <title>Nylo: Building a Privacy-Minimized Analytics Layer Across Domains You Control</title>
      <dc:creator>Ravi Teja Surampudi</dc:creator>
      <pubDate>Thu, 06 Aug 2026 04:00:36 +0000</pubDate>
      <link>https://dev.to/ravi_tejasurampudi_d8b55/nylo-building-a-privacy-minimized-analytics-layer-across-domains-you-control-1nin</link>
      <guid>https://dev.to/ravi_tejasurampudi_d8b55/nylo-building-a-privacy-minimized-analytics-layer-across-domains-you-control-1nin</guid>
      <description>&lt;p&gt;Most organizations do not operate a single website.&lt;/p&gt;

&lt;p&gt;A typical customer journey might move through:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;company.com
    ↓
docs.company.com
    ↓
company-academy.com
    ↓
company-checkout.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;These properties may belong to the same organization, but browsers and analytics systems can treat each domain as a separate visitor and session.&lt;/p&gt;

&lt;p&gt;Cross-domain measurement is possible with major analytics platforms, but it normally ties the implementation to a specific vendor, transfers an existing measurement identifier through the destination URL, or depends on users authenticating.&lt;/p&gt;

&lt;p&gt;I built Nylo to explore another approach:&lt;/p&gt;

&lt;p&gt;Preserve pseudonymous continuity across domains an organization controls, without browser fingerprinting, third-party cookies, or requiring the visitor to log in.&lt;/p&gt;

&lt;p&gt;Nylo is not intended to identify a person. It is intended to answer a narrower question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did the same pseudonymous browser journey continue from one authorized domain to another?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What Nylo is&lt;/p&gt;

&lt;p&gt;Nylo consists of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A zero-dependency JavaScript client SDK&lt;/li&gt;
&lt;li&gt;A server-side event ingestion interface&lt;/li&gt;
&lt;li&gt;A pseudonymous identifier called a WaiTag&lt;/li&gt;
&lt;li&gt;A short-lived cross-domain token exchange&lt;/li&gt;
&lt;li&gt;DNS-based verification of participating domains&lt;/li&gt;
&lt;li&gt;Configurable event collection&lt;/li&gt;
&lt;li&gt;Storage adapters for different backend systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core analytics SDK is available under the MIT License. Production commercial use of the cross-domain WTX-1 functionality uses a separate commercial license.&lt;/p&gt;

&lt;p&gt;Nylo is designed to function as an analytics collection and continuity layer. It can eventually send events to an existing warehouse or analytics platform rather than requiring organizations to replace their reporting stack.&lt;/p&gt;

&lt;p&gt;How continuity works&lt;/p&gt;

&lt;p&gt;Consider a visitor moving between two independently registered domains:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visitor opens site-a.com
          |
          v
Nylo creates a pseudonymous WaiTag
          |
          v
Visitor follows an authorized link
          |
          v
A short-lived token is transferred
          |
          v
site-b.com verifies the token
          |
          v
Both events reference the same
pseudonymous journey
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Before enabling cross-domain continuity, the participating domains must be authorized.&lt;/p&gt;

&lt;p&gt;Nylo uses DNS TXT verification so that an organization must demonstrate control of a domain before it can participate in the exchange.&lt;/p&gt;

&lt;p&gt;This prevents an arbitrary website from adding the SDK and joining another organization's analytics namespace.&lt;/p&gt;

&lt;p&gt;What a WaiTag contains&lt;/p&gt;

&lt;p&gt;A WaiTag is generated using cryptographically secure randomness and domain-related context.&lt;/p&gt;

&lt;p&gt;It is not generated from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An email address&lt;/li&gt;
&lt;li&gt;A phone number&lt;/li&gt;
&lt;li&gt;A name&lt;/li&gt;
&lt;li&gt;An IP address&lt;/li&gt;
&lt;li&gt;Canvas characteristics&lt;/li&gt;
&lt;li&gt;Fonts&lt;/li&gt;
&lt;li&gt;WebGL output&lt;/li&gt;
&lt;li&gt;A device fingerprint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The server does not require a mapping between the WaiTag and a known individual.&lt;/p&gt;

&lt;p&gt;That distinction is important: Nylo attempts to preserve journey continuity, not establish real-world identity.&lt;/p&gt;

&lt;p&gt;Basic integration&lt;/p&gt;

&lt;p&gt;The browser integration starts with a script tag:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;
  &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://analytics.example.com/nylo.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
&lt;span class="nx"&gt;Applications&lt;/span&gt; &lt;span class="nx"&gt;can&lt;/span&gt; &lt;span class="nx"&gt;record&lt;/span&gt; &lt;span class="nx"&gt;explicit&lt;/span&gt; &lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="nx"&gt;Nylo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;track&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;signup_click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;plan&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;professional&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Nylo.trackConversion("purchase", 49.99);&lt;/p&gt;

&lt;p&gt;The current session state can also be inspected:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Nylo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getSession&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A server implementation supplies the persistence layer:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;NyloStorage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;createInteraction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;getCustomer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;getCustomerByApiKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nf"&gt;parseDomain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;mainDomain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;subdomain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nf"&gt;getDomainVerification&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;customerId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
  &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;unknown&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nf"&gt;isDomainVerified&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;customerId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
  &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This keeps Nylo independent of a particular database or warehouse.&lt;/p&gt;

&lt;p&gt;Where Nylo could be useful&lt;/p&gt;

&lt;p&gt;Nylo is primarily intended for organizations with several related web properties, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SaaS journeys&lt;/li&gt;
&lt;li&gt;Marketing site → Documentation → Academy → Product signup&lt;/li&gt;
&lt;li&gt;Multi-brand portfolios&lt;/li&gt;
&lt;li&gt;Parent company → Product brand → Shared commerce property&lt;/li&gt;
&lt;li&gt;Self-hosted analytics environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Organizations that want to control the collection server, storage system, retention policy, and downstream destinations.&lt;/p&gt;

&lt;p&gt;Anonymous journey analysis&lt;/p&gt;

&lt;p&gt;Situations where authentication is unavailable or unnecessary, but aggregate and pseudonymous journey continuity remains useful.&lt;/p&gt;

&lt;p&gt;Where Nylo should not be used&lt;/p&gt;

&lt;p&gt;Nylo is not designed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track people across unrelated organizations&lt;/li&gt;
&lt;li&gt;Create an advertising identity graph&lt;/li&gt;
&lt;li&gt;Replace a consent-management platform&lt;/li&gt;
&lt;li&gt;Circumvent browser privacy controls&lt;/li&gt;
&lt;li&gt;Infer a person's identity&lt;/li&gt;
&lt;li&gt;Guarantee regulatory compliance&lt;/li&gt;
&lt;li&gt;Replace a complete analytics reporting platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It should only connect domains that have been explicitly authorized and legitimately participate in the same measurement environment.&lt;/p&gt;

&lt;p&gt;Pseudonymous does not mean anonymous&lt;/p&gt;

&lt;p&gt;This is one of the most important architectural boundaries.&lt;/p&gt;

&lt;p&gt;A pseudonymous identifier may still fall within privacy and data-protection requirements, particularly when it is persistent or combined with behavioral information.&lt;/p&gt;

&lt;p&gt;Nylo minimizes the information used for continuity, but it does not eliminate an organization's obligations around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transparency&lt;/li&gt;
&lt;li&gt;Consent where required&lt;/li&gt;
&lt;li&gt;Data retention&lt;/li&gt;
&lt;li&gt;User deletion&lt;/li&gt;
&lt;li&gt;Access controls&lt;/li&gt;
&lt;li&gt;Purpose limitation&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Regional privacy laws&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The optional identify() API also needs to be treated separately. Associating a WaiTag with an account or customer identifier changes the privacy characteristics of the deployment.&lt;/p&gt;

&lt;p&gt;Nylo should be evaluated as a privacy-minimizing technology, not as a privacy or consent bypass.&lt;/p&gt;

&lt;p&gt;Current project status&lt;/p&gt;

&lt;p&gt;The repository currently includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The browser SDK&lt;/li&gt;
&lt;li&gt;Express server integration&lt;/li&gt;
&lt;li&gt;DNS verification&lt;/li&gt;
&lt;li&gt;SQLite and PostgreSQL examples&lt;/li&gt;
&lt;li&gt;Input validation and security utilities&lt;/li&gt;
&lt;li&gt;An interactive local demonstration&lt;/li&gt;
&lt;li&gt;MIT and commercial licensing documentation&lt;/li&gt;
&lt;li&gt;A security disclosure policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next engineering priorities are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated browser and server test coverage&lt;/li&gt;
&lt;li&gt;A hosted two-domain demonstration&lt;/li&gt;
&lt;li&gt;A published package and tagged releases&lt;/li&gt;
&lt;li&gt;Independent security review&lt;/li&gt;
&lt;li&gt;Compatibility testing across browser privacy modes&lt;/li&gt;
&lt;li&gt;Destination adapters for existing analytics platforms&lt;/li&gt;
&lt;li&gt;Clear consent and retention integration guidance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try it locally&lt;br&gt;
git clone &lt;a href="https://github.com/tejasgit/nylo.git" rel="noopener noreferrer"&gt;https://github.com/tejasgit/nylo.git&lt;/a&gt;&lt;br&gt;
cd nylo/examples&lt;br&gt;
npm install&lt;br&gt;
npm start&lt;/p&gt;

&lt;p&gt;Then open:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:5000/demo.html" rel="noopener noreferrer"&gt;http://localhost:5000/demo.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository is available at:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tejasgit" rel="noopener noreferrer"&gt;
        tejasgit
      &lt;/a&gt; / &lt;a href="https://github.com/tejasgit/nylo" rel="noopener noreferrer"&gt;
        nylo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Privacy-first cross-domain analytics. No cookies. No login. No PII.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;
  &lt;strong&gt;Nylo&lt;/strong&gt;&lt;br&gt;
  Privacy-first cross-domain analytics. No third party cookies. No login. No PII
&lt;/p&gt;
&lt;p&gt;
  &lt;a href="https://github.com/tejasgit/nylo/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667" alt="MIT License"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/aae95fbaa83bc6a3f4597f3a75da45ea46ec236fc324617f0e5a2f15e07fe750/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646570656e64656e636965732d302d627269676874677265656e"&gt;&lt;img src="https://camo.githubusercontent.com/aae95fbaa83bc6a3f4597f3a75da45ea46ec236fc324617f0e5a2f15e07fe750/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646570656e64656e636965732d302d627269676874677265656e" alt="Zero dependencies"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/9dc714f8d2ec89d4086a57e9512fe18bc3ce8504e31d4d4d15605912f15ceb78/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636c69656e745f53444b2d7e31324b422d677265656e"&gt;&lt;img src="https://camo.githubusercontent.com/9dc714f8d2ec89d4086a57e9512fe18bc3ce8504e31d4d4d15605912f15ceb78/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636c69656e745f53444b2d7e31324b422d677265656e" alt="SDK size"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Google killed third-party cookies. Your cross-domain analytics broke. The industry says you have two options: force users to log in (UID 2.0, LiveRamp) or lose individual-level data (Google Topics API).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nylo is a third option.&lt;/strong&gt; It tracks user behavior across your domains using pseudonymous identifiers that never resolve to personal information. No third party cookies, no fingerprinting, no PII. Individual-level resolution without knowing who anyone is.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What Nylo Is / Is Not&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;Is&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;Pseudonymous continuity across domains without login or PII&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;Is&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;A zero-dependency client SDK (~12KB) with server-side event ingestion&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;Is&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;Privacy-by-design: all 23 tracking features default to &lt;strong&gt;off&lt;/strong&gt;&lt;br&gt;
&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;Is not&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;Fingerprinting users (no canvas, font, WebGL, or device fingerprints)&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;Is not&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;Storing IP addresses or resolving identity to a person&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;Is not&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;A replacement for consent — it reduces the &lt;em&gt;need&lt;/em&gt; for it&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;Works best when&lt;/strong&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;…&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/tejasgit/nylo" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;I am specifically looking for feedback from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser security engineers&lt;/li&gt;
&lt;li&gt;Privacy engineers&lt;/li&gt;
&lt;li&gt;Analytics implementation specialists&lt;/li&gt;
&lt;li&gt;JavaScript SDK maintainers&lt;/li&gt;
&lt;li&gt;Developers operating multiple related domains&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful feedback would include concrete attack scenarios, browser compatibility failures, API design concerns, and examples of real cross-domain journeys that current analytics tools handle poorly.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>privacy</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
