Online ResourcesPrashant Chaudhary

Do Open-Source Video Ad Clients Follow VAST 4.3? An Empirical Study of Player Conformance

Online Resource 1: Client survey and selection record

Online Resource 1 to "Do Open-Source Video Ad Clients Follow VAST 4.3? An Empirical Study of Player Conformance" (Prashant Chaudhary, October 2026). Section 4.1 of the paper states the selection rule and the client set in summary. This document gives the full record behind it: the sixteen registry queries, the package counts at each step, the rule, the decision and reason for every candidate, the four eligible players that were not tested, the derivatives of vast-client-js, and the pattern in npm download counts that led the study not to use them. Paths are relative to the root of the replication repository. Each number is followed by the file it was copied from; a number marked "computed" was calculated for this document from the files named beside it.

1. What was surveyed and when

2. The sixteen queries

Source for every row: results/survey/npm-sweep-2026-10-16.meta.json, field "queries" (value = number of results the registry returned for that query). The request size was 250, so a value of 250 means the returned list was at the requested size; the files do not say whether more results existed.

Table R1.1. The sixteen queries

showing 16 of 16CSV
1vast parser250
2vast 4250
3vast wrapper250
4vast250
5vmap91
6vast tracker250
7iab vast250
8ssai vast250
9vast client250
10ad pod250
11vast xml250
12video ad250
13vast player250
14vpaid52
15simid13
16videojs vast250

Computed: the 16 values add up to 3,406 (13 queries at 250, plus 91, 52 and 13). Thirteen queries returned exactly the requested size. Only vmap, vpaid and simid returned fewer than 250, so only those three lists are known to be complete.

Filter applied to the pooled results (same file, field "filter"): a package is kept when its name, description or keywords match the regular expression \bvast\b|vmap|vpaid|simid|\bima\b. These are the five terms the paper names in Section 4.1 (VAST, VMAP, VPAID, SIMID, IMA).

3. Package counts at each step

Table R1.2. Package counts at each step

showing 10 of 10CSV
Result rows summed over the 16 queries (with repeats across queries)3,406 (computed)results/survey/npm-sweep-2026-10-16.meta.json
Unique packages before the keyword filternot storedno file states it
Packages after the keyword filter267results/survey/npm-candidates-2026-10-16.json (267 keys); paper Section 4.1
Plausible clients with metadata and dependency lists25results/survey/npm-metadata-2026-10-16.json (25 keys)
Packages unpacked and searched by hand10Section 1 above
Clients in the set before the survey4 (vast-client-js 6.5.0, video-ad-sdk 4.0.1, iab-vast-loader 2.5.1, Shaka Player 5.2.12)paper Section 4.1 (three established libraries, plus Shaka Player added by hand)
New candidates considered for testing7: vastlint-client 0.15.0 (passes all four conditions), rmp-vast 17.2.0 (fails condition 2), Google IMA HTML5 (fails condition 1), and four small players that pass all four conditionspaper Section 4.1; sections 5 and 6 below
New candidates tested3 (vastlint-client, rmp-vast, IMA)paper Section 4.1
New candidates eligible and not tested4paper Sections 4.1 and 7
Tested client set7 clients: vast-client-js, video-ad-sdk, iab-vast-loader, vastlint-client, rmp-vast, Shaka Player, Google IMA (computed: 4 chosen before the survey plus 3 new). Eight open-source configurations, seven in the browsers and five under Node.js; IMA adds one browser configurationthe README of the archive's reference results (configurations); paper Section 4.1 and Table 1

Tally of the 25 packages in the metadata file by decision (computed; sections 5 and 6 below list every package):

Table R1.3. Package counts at each step

showing 8 of 8CSV
Tested, or tested under another distribution2vastlint-client; rmp-vast (the npm name; the tested code is the GitHub 17.2.0 distribution)
Eligible, not tested4itube-modern-player, streamit-player, ts-video-player, stormcloud-video-player
Excluded: wrapper of the IMA SDK (condition 2)4@glomex/vast-ima-player, artplayer-plugin-vast, xgplayer-ads, @playkit-js/playkit-js-ima
Excluded: derivative of vast-client-js (condition 2)5@openplayerjs/ads, @arte/videojs-vast, ads-manager, videojsx-vast-plugin, @videointelligence/vast-client
Excluded: closed or unlicensed (condition 1)2@dailymotion/ad-sdk-web, @getstoryteller/react-native-storyteller-sdk-vast
Excluded: parser only or no release in 24 months (conditions 3 and 4)4@ygoto3/omap-vast-parser, videojs-vast-vpaid, vastacular, vast-player
Not assigned a decision in the survey4@ygoto3/omap-vmap-parser, @pavloniym/rmp-vast, vjs-vast, @trillboards/ads-sdk
Total25

The funnel is not strictly nested. Several packages with a decision are not among the 25: video-ad-sdk, iab-vast-loader and @dailymotion/vast-client were already in the set, and videojs-ima, videojs-ima-player, ima-ad-player, ima-wrapper, vast-xml, vast-builder, vastlint, @types/vast-client and react-native-vast-client are in the 267-package file but not in the 25-package file. Shaka Player is in neither file, because the npm queries did not return it. @ygoto3/omap-iab-client 0.0.6 is also in neither file (section 5, group G).

4. The selection rule

The four conditions are those of paper Section 4.1. A package is a client for this study when all four hold:

  1. An OSI-approved license in the published package.
  2. Its own VAST implementation, not a wrapper of vast-client-js, video-ad-sdk or the IMA SDK.
  3. It does at least one of Wrapper resolution or tracking. A parser that does neither is out of scope.
  4. A release on or after October 16, 2024 (24 months before the survey date).

Two further statements go with the rule:

Clients in the tested set that do not meet all four conditions, and why they are included:

Every tested client is reported in the paper.

5. Every candidate, its decision and its reason

Columns: version, last release and last-month downloads are copied from results/survey/npm-candidates-2026-10-16.json; license is copied from results/survey/npm-metadata-2026-10-16.json where the package is in that file. Group I lists the packages in the metadata file that were not assigned a decision, with only the facts in the data files.

A. In the client set before the survey (4)

Table R1.4. A. In the client set before the survey (4)

showing 4 of 4CSV
@dailymotion/vast-client6.5.0not in metadata file2026-09-30253,377notested (vast-client-js)established independent library, chosen before the survey
video-ad-sdk4.0.1not in metadata file2024-04-22379notestedestablished independent library, chosen before the survey; fails condition 4 today (last release 2024-04-22, before 2024-10-16); kept because it remains installed in players
iab-vast-loader2.5.1not in metadata file2021-02-25276notested (two configurations)established independent library, chosen before the survey, and the library behind IAB Tech Lab's VAST tester; fails condition 4 today (last release 2021-02-25); kept because it remains installed in players
shaka-player5.2.12 (tested release)not in the survey filesnot in the survey filesnot in 267-package filenot in filetested (browser layer only)added by hand: a widely used media player with its own VAST parser; not selected through the four conditions; the npm queries did not return it

B. New, tested (3)

Table R1.5. B. New, tested (3)

showing 4 of 4CSV
rmp-vast (GitHub distribution)17.2.0MIT2026-02-26not applicable (not on npm at this version)notested, two configurationsMIT, released 2026-02-26; fails condition 2 for fetching, parsing and the Wrapper chain (bundles @dailymotion/vast-client 6.4.2); kept as the production player built on vast-client-js
rmp-vast6.0.0MIT2022-06-24183yesnot tested at this versionthe npm package stops at 6.0.0, released 2022-06-24; the tested code is the GitHub 17.2.0 distribution
vastlint-client0.15.0Apache-2.02026-10-132,293yestestedpasses all four conditions: Apache-2.0, released 2026-10-13; a session runtime from the VASTlint project, by Aleksander Sekowski; 52 versions in the metadata file
Google IMA HTML5 SDK3.794.0 (archived)proprietarynot applicablenot applicablenotested as closed comparisonproprietary, so it fails condition 1; kept as a closed comparison; browser only; pinned by archiving the served ima3.js with its sha256

C. New, pass the rule, not tested (4)

Table R1.6. C. New, pass the rule, not tested (4)

showing 4 of 4CSV
itube-modern-player0.15.1MIT2026-10-13413yeseligible, not testedVAST 2 to 4, InLine and Wrapper, quartile pixels; Bitbucket repository
streamit-player1.1.0Apache-2.02026-10-15255yeseligible, not testedVAST 2.0 to 4.2, VMAP, SIMID; also an IMA path
ts-video-player0.1.10MIT2026-10-1523,336yeseligible, not testedsmall VAST module; its download count (23,336) is one of the three near-equal figures in section 8
stormcloud-video-player0.8.79MIT2026-10-135,055yeseligible, not testedown VAST path plus IMA; no repository listed

D. Excluded: wrappers of the IMA SDK (condition 2)

Table R1.7. D. Excluded: wrappers of the IMA SDK (condition 2)

showing 8 of 8CSV
videojs-ima2.6.0not in metadata file2026-02-06171,277noexcludedIMA wrapper; covered by testing IMA itself
@glomex/vast-ima-player1.21.2Apache-2.02024-09-1018,746yesexcludedIMA wrapper; also last release 2024-09-10 (condition 4)
artplayer-plugin-vast1.0.0MIT2024-10-12233yesexcludedIMA wrapper, via @glomex/vast-ima-player; also last release 2024-10-12 (condition 4)
xgplayer-ads3.0.26MIT2026-07-15527yesexcludedIMA wrapper
@playkit-js/playkit-js-ima1.7.4AGPL-3.02026-08-06934yesexcludedIMA wrapper
videojs-ima-player0.6.9not in metadata file2026-07-208,536noexcludedIMA wrapper
ima-ad-player0.5.7not in metadata file2024-10-27640noexcludedIMA wrapper
ima-wrapper1.0.8not in metadata file2023-02-20139noexcludedIMA wrapper

E. Excluded: derivatives of vast-client-js (condition 2; listed in section 7)

Table R1.8. E. Excluded: derivatives of vast-client-js (condition 2; listed in section 7)

showing 6 of 6CSV
@openplayerjs/ads3.6.5MIT2026-09-011,123yesexcluded, listeddepends on @dailymotion/vast-client (metadata file)
@arte/videojs-vast1.5.4Apache-2.02026-02-06245yesexcluded, listeddepends on @dailymotion/vast-client (metadata file)
ads-manager1.2.16Apache-2.02025-02-16400yesexcluded, listeddepends on @dailymotion/vast-client (metadata file)
videojsx-vast-plugin1.0.4MIT2022-04-21249yesexcluded, listeddepends on the old npm package vast-client (metadata file)
@videointelligence/vast-client4.0.6MIT2024-06-21144yesexcluded, listedfork of an old vast-client-js release (repository field points to dailymotion/vast-client-js)
react-native-vast-client2.5.1not in metadata file2019-12-16386noexcluded, listedfork of an old release (repository sina-moammar/vast-client-js); not in the 25-package metadata file

F. Excluded: closed or unlicensed (condition 1)

Table R1.9. F. Excluded: closed or unlicensed (condition 1)

showing 2 of 2CSV
@dailymotion/ad-sdk-web2.8.0none declared2026-09-29968yesexcludedno license field
@getstoryteller/react-native-storyteller-sdk-vast12.1.1custom (see package)2026-10-13471yesexcludedlicense field points to a custom license text, not an OSI license

G. Excluded: parser only, or no release in 24 months (conditions 3 and 4)

Table R1.10. G. Excluded: parser only, or no release in 24 months (conditions 3 and 4)

showing 7 of 7CSV
@ygoto3/omap-vast-parser0.0.3MIT2024-03-2823,042yesexcludedparser only; last release 2024-03-28; a dash.js ad player parser
@ygoto3/omap-iab-client0.0.6not in the survey files2024-03-28not in the survey filesnoexcludedlast release 2024-03-28 (condition 4); this package is not in results/survey/npm-candidates-2026-10-16.json or the metadata file
videojs-vast-vpaid3.0.0-beta.8MIT2017-03-311,264yesexcludedlast release 2017; video-ad-sdk predecessor
vastacular0.2.0MIT2016-02-11558yesexcludedlast release 2016
vast-player0.2.10MIT2017-09-05632yesexcludedlast release 2017
vast-xml1.3.0not in metadata file2015-02-02618noexcludedwriter, not a client
vast-builder4.0.1not in metadata file2019-03-203,182noexcludedwriter, not a client

H. Excluded: not clients

Table R1.11. H. Excluded: not clients

showing 3 of 3CSV
vastlint0.15.0not in metadata file2026-10-132,908noexcludedvalidator, not a client (vastlint-client is the client)
@types/vast-client3.0.4not in metadata file2023-11-0725,721noexcludedtype definitions
vast2.0.18not in metadata file2026-10-0385,042noexcludedthe English word "vast" (a state container library)

I. In the 25-package metadata file, not assigned a decision

Table R1.12. I. In the 25-package metadata file, not assigned a decision

showing 4 of 4CSV
@ygoto3/omap-vmap-parser0.0.1MIT2023-12-1323,077yesnonerelease 2023-12-13, before 2024-10-16, so it fails condition 4; description says VMAP parser
@pavloniym/rmp-vast17.0.1-esm-v3MIT2025-08-07530yesnone4 versions, repository pavloniym/rmp-vast; the name and description match rmp-vast, which suggests a repackaging of it; not inspected
vjs-vast0.0.1MIT2020-06-14137yesnonerelease 2020-06-14 (fails condition 4); repository MailOnline/videojs-vast-vpaid
@trillboards/ads-sdk2.4.9MIT2026-09-012,256yesnoneMIT, release 2026-09-01; description says a digital signage (DOOH) advertising SDK; dependencies are react, react-dom, react-native and react-native-webview; not inspected

Outside the JavaScript harness: native SDKs (the Media3 IMA extension, Kaltura native, Roku RAF) and Go or Python struct libraries, which neither resolve Wrappers nor track. A Go parser, haxqer/vast, is excluded because it is a data-binding library with no player duties to test.

6. The four eligible players that were not tested

Source: section 5, group C; paper Sections 4.1 and 7. They pass the four conditions: they are recent small players with embedded VAST engines.

Table R1.13. The four eligible players that were not tested

showing 4 of 4CSV
itube-modern-player0.15.1MIT2026-10-13VAST 2 to 4, InLine and Wrapper, quartile pixels; Bitbucket repository413
streamit-player1.1.0Apache-2.02026-10-15VAST 2.0 to 4.2, VMAP, SIMID; also an IMA path255
ts-video-player0.1.10MIT2026-10-15small VAST module23,336
stormcloud-video-player0.8.79MIT2026-10-13own VAST path plus IMA; no repository listed5,055

Why they were not tested: they embed VAST code in a larger player instead of offering it as a library (paper Section 4.1), and testing them is left to future work. The harness has no adapter for any of them: code/harness/adapters/ holds env, fakevideo, iabloader, normalize, run, vastclient, vastlint and videoadsdk, and code/harness/browser/ holds the browser entry points and adapters for the tested clients only. Whether the results generalize to these four players is not known (paper Section 7, External validity).

7. Derivatives of vast-client-js

Dependency facts come from results/survey/npm-metadata-2026-10-16.json, and repository facts for react-native-vast-client from results/survey/npm-candidates-2026-10-16.json.

Table R1.14. Derivatives of vast-client-js

showing 6 of 6CSV
@openplayerjs/ads3.6.52026-09-01depends on @dailymotion/vast-client and @dailymotion/vmap
@arte/videojs-vast1.5.42026-02-06depends on @dailymotion/vast-client and @dailymotion/vmap
ads-manager1.2.162025-02-16depends on @dailymotion/vast-client
videojsx-vast-plugin1.0.42022-04-21depends on the old npm package vast-client
@videointelligence/vast-client4.0.62024-06-21repository field points to dailymotion/vast-client-js; a fork of an old release
react-native-vast-client2.5.12019-12-16not in the metadata file; repository sina-moammar/vast-client-js; a fork of an old release

In addition, rmp-vast 17.2.0 bundles vast-client-js 6.4.2 and is tested (section 4). None of the six derivatives was run, so whether each inherits the timeout defect of vast-client-js (paper Section 5.1.3) is not tested. The version history in paper Section 5.4 shows that vast-client-js 5.0.0 does not crash, that 6.0.0 to 6.0.2 fail every plain Node.js request on an undefined window, and that 6.1.0 to 6.5.0 crash. A derivative that forks an old release or depends on the old vast-client package may therefore not be affected. The paper (Section 7, External validity) states that findings that trace to vast-client-js apply to players that bundle an affected release, and lists the derivatives as not tested.

8. npm download counts

What the paper says (Section 4.1, Sampling): download counts were not used to select clients, because three small packages in the survey show nearly equal monthly counts (about 23,000 each) that look like a mirror or an automated client.

The three packages (results/survey/npm-candidates-2026-10-16.json, last-month downloads at survey time; versions and first release from the metadata file):

Table R1.15. Npm download counts

showing 3 of 3CSV
@ygoto3/omap-vast-parser23,0422024-03-2842023-12-13
@ygoto3/omap-vmap-parser23,0772023-12-1322023-12-13
ts-video-player23,3362026-10-15112026-07-22

Computed from the table: the three figures lie within 294 downloads of each other (23,336 minus 23,042), about 1.3 percent. Two of the three come from one author (repository ygoto3/omap). No other package in the 267-package file has a count between 22,000 and 24,500.

Reading of the pattern: two of the packages have had no release for more than 30 months (last releases 2024-03-28 and 2023-12-13, against a survey date of 2026-10-16) and still report about 23,000 downloads a month, and ts-video-player is under four months old. This is consistent with a mirror or automated downloads, but that explanation was not tested.

How counts are used: not as a selection criterion. A separate context file, results/survey/npm-downloads-2026-09.json (retrieved 2026-10-09 from api.npmjs.org, September 2026), holds the counts shaka-player 1,562,574; @dailymotion/vast-client 237,487; iab-vast-parser 12,554; video-ad-sdk 388; iab-vast-loader 224. The paper's introduction uses the first two (about 1.6 million and about 237,000) as context for how widely the libraries are used.