CODE SECURITY
Sep 17, 2025
Inside the Shai‑Hulud NPM Supply Chain Attack

Amartya Jha
Founder & CEO, CodeAnt AI
On September 14, the JavaScript ecosystem was rocked by a massive npm 2.0 supply-chain attack. Security researchers are calling it one of the largest malware incidents ever to hit the npm registry.

Source: https://x.com/ReversingLabs/status/1967576545838694497
TL;DR: What made “Shai-Hulud Attack” different
Self-spreading worm: The malware (nicknamed after the Dune sandworm) compromised 180+ open-source packages across multiple maintainers and kept spreading using stolen credentials.
Automatic propagation: Once inside a developer machine or CI, it harvested secrets and used them to publish more trojanized packages, turning the registry into a “trojan factory.”
High-profile impact: Popular public libraries (e.g., a color utility with ~8M+ monthly downloads) and internal packages from reputable companies were affected.
Credential theft at scale: NPM/GitHub tokens, API keys, and cloud creds were exfiltrated, enabling further compromise.
Ecosystem-level risk: A single tainted dependency rippled across projects with unusual speed and reach.
In this deep dive, we’ll break down:
How the Shai-Hulud npm supply-chain attack unfolded step by step.
Who was impacted and what was exposed.
Immediate and long-term actions engineering and security teams should take to mitigate damage.
Practical steps to fortify your software supply chain against future “npm 2.0”-style threats.
How the Shai-Hulud npm 2.0 Attack Unfolded
Researchers traced “patient zero” to an npm user named techsupportrxnt, whose package rxnt-authentication
was published with a malicious payload on September 14, 2025. The worm began with the compromise of a single maintainer’s npm account (likely through stolen credentials) and used that access to push a trojanized update.

Figure 1: Shai-Hulud npm Worm Timeline
Automatic execution: Once any infected package was installed by a developer or CI server, the malware executed immediately via a post-install script (a 3MB+ bundle.js
) embedded in the package.
Aggressive secret harvesting: This script searched local machines and CI environments for secrets, npm authentication tokens, GitHub personal access tokens, API keys, and cloud credentials (AWS, GCP, etc.). To accelerate scanning, it even repurposed a legitimate secret-scanning tool, TruffleHog, to comb file systems and environments for sensitive keys.
Exfiltration & persistence: Stolen credentials were sent to an attacker-controlled server and a public GitHub repository named “Shai-Hulud,” which contained encoded data.json
files of stolen secrets. It also implanted a malicious GitHub Actions workflow into victims’ repositories to persist beyond the initial infection, triggering on future CI runs to exfiltrate new secrets.
Exposure of private code: The malware attempted to make public copies of private repositories by appending “-migration” to repo names, likely to expose hardcoded secrets hidden in private codebases.
Self-propagation. With stolen npm publish tokens, the worm automatically:
downloaded the next package tarball,
injected the payload,
bumped version, and
Republished, compromising additional packages under affected scopes/orgs.
High-profile packages quickly became victims: the popular color library @ctrl/tinycolor
, packages under the @nativescript-community
namespace, multiple Angular/Ngx libraries, and even plugins under the @crowdstrike
scope. By exploiting developer trust and automated publishing, Shai-Hulud turned the npm supply chain into a “trojan factory,” its code would download the next package tarball, inject malware, bump the version, and republish, compromising new projects in a loop.
Why this was new? This wasn’t a one-off backdoor. It was a worm that used the ecosystem’s automation to spread.

Figure 2: Worm Propagation
Now let’s look at the impact, which developers, packages, and organizations were caught in its net, and what security teams must do next.
Scope and Impact
Within ~24 hours of discovery, 187+ packages were flagged; subsequent analysis points to hundreds affected.
Who/what was hit (examples)

Figure 3: Hundreds of Packages, Millions at Risk
1. High-profile victims: These weren’t obscure libraries. Popular tools across frontend and backend were hit. For example:
ngx-bootstrap
(Angular UI library, ~300,000 weekly downloads)ng2-file-upload
(100,000 weekly downloads)@ctrl/tinycolor
(2+ million weekly downloads)Other packages in the
@ctrl
scope (Angular utilities, torrent clients, etc.)
Any one of these could have silently introduced malicious code into countless projects.
2. Enterprise developer accounts targeted: Even security-savvy organizations weren’t immune. An npm account associated with CrowdStrike was used to push contaminated updates for a dozen @crowdstrike/*
packages (mostly internal tools and config libraries). CrowdStrike confirmed it removed the packages and rotated keys immediately, and that these packages were not used in its flagship products. But it underscores a hard truth: if the supply chain is compromised, nobody is automatically safe.
Who was directly at risk? End-users were typically indirectly impacted. The primary targets were developers and CI systems during install/build. Any machine that ran npm install
on malicious versions during the window may have had secrets stolen.
Why it matters: With stolen GitHub tokens, attackers could access private source code or plant malicious commits. With stolen cloud keys, they could probe infrastructure and data. With npm publish tokens, they could push trojanized updates under a maintainer’s name. This “cascading compromise” makes it nearly impossible to predict the full spread given npm’s dense web of interdependencies.
3. Security industry verdict:
ReversingLabs called Shai-Hulud the “first self-replicating worm” in the npm ecosystem.
Wiz labeled it “one of the most severe JavaScript supply-chain attacks observed to date.”
Analysts noted it appears to have evolved from earlier incidents, like the August 2025 “s1ngularity” breach and the early September compromise of
chalk
anddebug
(2+ billion weekly downloads combined), but at a much larger, automated scale.
In short, Shai-Hulud proved that one phished maintainer can instantly turn into an attack vector for thousands of downstream apps, and that automation can supercharge the spread.
Faced with such a fast-moving and invasive supply-chain worm, what should organizations do immediately if they suspect exposure?
Immediate Steps for Affected Teams
If your organization uses Node.js or npm packages, now is the time to verify whether the Shai-Hulud supply-chain worm has touched your codebase. Even if you weren’t directly affected, treat this as a fire-drill for software supply-chain security.
Here’s a prioritized checklist for engineering leaders and security teams:

1. Identify and Remove Malicious Packages
Audit all dependencies, including transitive ones – to check if any compromised npm package versions slipped into your environments.
Use tools such as
npm audit
, software composition analysis (SCA) platforms, or your internal vulnerability scanners to detect tainted versions.Pay special attention to builds or deployments between September 14–16, 2025 (the attack window).
If you find any bad versions, remove them from node_modules, clear the npm cache, and reinstall using known safe releases (pin to the last clean version before the malicious update).
Although many of the trojanized versions have been unpublished from npm, remain vigilant, attackers may have uploaded multiple bad versions in a row.
2. Isolate and Rebuild Potentially Compromised Systems
Treat any developer machine or CI runner that installed tainted packages as potentially compromised.
At minimum, disconnect those systems and avoid using any credentials stored on them until sanitized.
Ideally, perform a clean rebuild of CI containers or reimage developer workstations to eliminate lingering malware (remember, the worm may have created persistent GitHub Actions workflows or other implants).
3. Revoke and Rotate Credentials Immediately
Assume any tokens or keys present in a compromised environment were stolen.
Revoke npm tokens, GitHub personal access tokens, SSH keys, cloud provider keys, and CI secrets.
Generate fresh keys and update them in your secure stores.
This step cuts off attackers’ access and prevents them from publishing new malware using a stolen npm token. (CrowdStrike proactively rotated all keys even though its main products weren’t impacted.)
4. Check for Indicators of Compromise (IoCs)
Search your GitHub org and developers’ personal accounts for telltale signs of Shai-Hulud:
Any repository named “Shai-Hulud”
Any repo or branch with “-migration” in its name or description
Review GitHub audit logs for suspicious behavior, such as unexpected repo creation or OAuth token use.
Check your npm account logs for unauthorized package publications or login attempts around that time.
5. Analyze Logs for Exfiltration
If you have network monitoring, look for outgoing requests to the webhook.site domain (used by the attackers as a drop point).
The malware also triggered GitHub API calls to create new repos; watch for such traffic patterns.
If you discover a rogue data.json in any “Shai-Hulud” repo, decode it from base64 to see what credentials or data might have been leaked.
6. Inform Stakeholders Promptly
If your organization was impacted, loop in your security team and activate your incident response plan.
Notify customers or partners if there’s any chance your software releases were affected.
Transparency is key: if you maintain a library that others depend on, and your account was breached, disclose promptly so downstream users can respond.
NPM’s security team and the wider open-source community have been quick to act, coordinate with them for package status updates or assistance.
Once the immediate fire is contained, the crucial question for engineering leaders is how to prevent a Shai-Hulud-style incident from happening to you. Let’s outline strategies to build resilience against future supply-chain threats.
Secure Your Software Pipeline Against the Next Attack
“Hope is not a strategy” is especially true for npm supply-chain security. After witnessing both the September 8 phishing-based npm attack and the September 16 Shai-Hulud worm, it’s clear no team can assume their software pipeline is safe by default. Below are key measures, spanning people, process, and technology, to strengthen your defenses.
1. Harden Developer Accounts and Credentials
Enforce 2FA everywhere. Every npm maintainer account and GitHub account in your org should require strong two-factor authentication. Prefer hardware security keys or WebAuthn over SMS or authenticator apps. Phishing can steal one-time codes, but not a hardware key.
Educate your team on phishing. Make sure no one enters credentials or 2FA codes into suspicious links. The “qix” maintainer was compromised by a look-alike domain (npmjs.help) that bypassed his OTP 2FA, hardware keys would have blocked it.
Use least-privilege tokens. Audit your automation tokens and API keys. Don’t use a broadly scoped npm token on a CI runner that only needs to install packages, use read-only or CIDR-restricted tokens where possible. Segment publishing credentials so compromise of one project doesn’t grant rights to all. Short-lived tokens further reduce risk.
Rotate secrets regularly. Implement time- or event-based rotation for CI secrets and access keys. Even if something was stolen silently, it may expire before attackers can use it. Moving toward “secretless CI/CD” (e.g., ephemeral OpenID Connect tokens for cloud deployments) also reduces exposure.
2. Tighten Software Composition Practices
Treat dependencies as untrusted code. Every npm package you install executes with your application’s privileges. Adopt a zero-trust stance for new packages or updates. Before pulling in a new open-source library, do a quick risk review: who maintains it, is the maintainer active, has it had malicious releases?
Add approval steps. Require a senior engineer’s review for PRs that add or bump dependencies, especially high-impact packages. An unexpected minor version release to a stable library could be a red flag.
Pin and lock dependencies. Use exact version pins or lockfiles to avoid auto-upgrading to compromised versions. Many teams use lockfiles and manual update processes for precisely this reason.
Disable post-install scripts where possible. In CI, consider running
npm install --ignore-scripts
to block postinstall scripts by default. This would have stopped Shai-Hulud’s payload from executing on build machines. Maintain an allow-list for packages that truly need install scripts.Monitor dependency releases. Watch for unusual activity, e.g., a flurry of new releases or a maintainer change. Some organizations implement a “cool-down period” (24–48 hours) before adopting new versions so the community can flag malicious updates first.
3. Strengthen CI/CD Pipeline Security
Lock down build environments. CI/CD runners should operate with “minimal necessary access.” Don’t grant build jobs access to high-value secrets unless absolutely required. Segment roles for publishing, testing, and deploying. Consider running builds in isolated network sandboxes and block outgoing internet access except to known registries, this can stop malware from phoning home.
Add integrity checks. Enable npm’s built-in integrity verification (sha512 hashes in package-lock.json) and consider PGP signatures or Sigstore as they become available. In the long run, adopting frameworks like SLSA (Supply Chain Levels for Software Artifacts) helps ensure provenance and integrity.
Continuously monitor builds. Implement alerts for unusual behavior. For example, if a build process that normally runs tests suddenly creates outbound network connections or new workflow files, trigger an alarm. Some teams plant Canary tokens or dummy secrets in build environments, if a tool like TruffleHog tries to exfiltrate them, you know you’ve been breached.
4. Invest in Supply-Chain Security Tooling
Maintain an SBOM and use SCA. Keep an up-to-date Software Bill of Materials (SBOM) for your applications. Modern Software Composition Analysis (SCA) tools can flag known malicious packages or anomalous behavior in near real time. During Shai-Hulud, vendors like Socket and Semgrep updated their rules quickly; automated SCA in your CI/IDE could warn you “this version of tinycolor is potentially malicious” as soon as someone tries to install it.
Centralize dependency management. Funnel package installs through an internal proxy or artifact registry so you can yank a malicious version across the org instantly and enforce policies (e.g., no installs of unpublished versions, allow-lists/deny-lists). This is essentially a “package firewall” for npm.
Use automated code review and analysis. Pair human reviews with AI-powered platforms that analyze code and dependencies for quality, security, and compliance issues. For example, CodeAnt.ai acts as an intelligent second set of eyes on every pull request, flagging dangerous patterns or suspicious changes (like a 3 MB obfuscated script in a minor update) that human reviewers might miss. Because CodeAnt understands context, it reduces false alarms and can differentiate legitimate large changes from truly anomalous insertions. It also offers one-click fixes and engineering metrics (including DORA metrics, outdated dependencies, or bypassed policies) so leaders can see both code health and team trends at a glance.
Hardening your pipeline isn’t a one-time exercise; it’s an ongoing process of people, process, and tooling. By combining basic hygiene (2FA, least privilege, dependency pins) with advanced supply-chain security and AI-powered code reviews, organizations can dramatically reduce the risk of the next Shai-Hulud. In the next section, we’ll show how to operationalize these practices into day-to-day development so they become habits, not exceptions.
From Reaction to Prevention, Securing Your npm Supply Chain
The recent npm supply chain attacks have made one thing crystal clear: software supply-chain security is no longer a niche concern; it’s a board-level issue. Trusted tools, registries, and workflows can be subverted overnight, whether by phishing a maintainer or infecting a build pipeline.
To protect your organization:
Implement the immediate steps first
Drive longer-term initiatives
Use automation defensively
One example is CodeAnt AI, that unifies code quality, security, and compliance intelligence. Instead of just scanning code, CodeAnt AI:
Contextually reviews pull requests and flags anomalies (like obfuscated scripts or suspicious new workflows) before they land.
Provides one-click fixes and detailed metrics so developers can act immediately without slowing velocity.
Gives engineering leaders visibility into outdated dependencies, security trends, and team performance, all from one dashboard.
By combining proven best practices with platforms like CodeAnt AI, you can:
Ship code at high velocity while ensuring every change is vetted against a knowledge base of security and compliance rules.
Gain continuous visibility into your engineering process and supply chain risk.
Make security improvements scalable and repeatable rather than one-off reactions.
Take action today:
Review your exposure to the Shai-Hulud attack window.
Implement the best practices above to harden your npm supply chain.
Evaluate CodeAnt AI or a similar AI-powered code review platform to institutionalize these defenses.
Your developers, and your customers, will thank you when your products stay both innovative and secure in the face of an evolving threat landscape. Try CodeAnt AI today!!!
The sandworms may be burrowing, but with robust guardrails and smart automation, your software factory can stay safe.
Appendix: Known Compromised Packages (IoCs)
The following IoCs were collected as part of RL’s investigation of this campaign.
package_name | version | SHA1 |
mcp-knowledge-base | 0.0.2 | 5a87d68716cf9d99ec90835d623559bead2a76d3 |
html-to-base64-image | 1.0.2 | b65a8f02bcc425e9f43f44c4062e57a7ed0bb4ac |
encounter-playground | 0.0.4 | a134cb5a9c3187c7e2419ce5981bc8365cfbb1d7 |
encounter-playground | 0.0.3 | edca8792f335b64b6929ef08b5d9bf812cc9ce77 |
encounter-playground | 0.0.2 | 88a1b7b4dfe55bfcf33ee73520506596c3b11f05 |
eslint-config-teselagen | 6.1.7 | cefb886c65d58dec552d217bf2e6bbfff900a067 |
react-jsonschema-form-conditionals | 0.3.20 | ec85986413119e60684a99f3100c9d481cfdf08c |
react-jsonschema-form-conditionals | 0.3.19 | 287a71e7df97b6c1cc10d51a4c18f8a1ce23cba0 |
react-jsonschema-form-conditionals | 0.3.18 | 48932e2c66fb9fd103cdd2a4c0bfb77483061511 |
tg-client-query-builder | 2.14.4 | 5ce815ae8dfdb07fb5ebbc50643410e5f63daa2a |
tg-redbird | 1.3.1 | caf629df8ec99ba641873e887a9d3e17bb2e040c |
thangved-react-grid | 1.0.3 | 7c1454a3907079182ce7441def94f21e7e3fb554 |
json-rules-engine-simplified | 0.2.3 | 967bcd5cf05a814b9e14895183fe1e00fe06c8fd |
json-rules-engine-simplified | 0.2.2 | c7d64660cd39ab9ae3a57cb2c9bbf7a89cf559c7 |
json-rules-engine-simplified | 0.2.1 | 2ad5fdb982e406b6817225f0a4edf30262a8ed3a |
rxnt-healthchecks-nestjs | 1.0.4 | cb81069ef7b290660f9f640a56cfab33bd5764df |
rxnt-healthchecks-nestjs | 1.0.3 | 4c65f7bf4974a2892e2867dad270777cc1b1f0e0 |
rxnt-healthchecks-nestjs | 1.0.2 | c5012da7a0588bf39f4666a83ce43e11f70eb655 |
rxnt-kue | 1.0.6 | 8b5f31b22ac158f488179c49e718043e6bef25ef |
rxnt-kue | 1.0.5 | 8960070bcf368cb548f80756e22170836028897d |
rxnt-kue | 1.0.4 | 05307d8af5bea87f5ec60aaadcdd7be5a0f2e3fd |
oradm-to-gql | 35.0.14 | dcea1fdaa6621072fed6962e3461e18c22f7261d |
oradm-to-sqlz | 1.1.2 | 1b6704faf237f65c83e1856c1c5f6efa9ec0e9ab |
oradm-to-sqlz | 1.1.3 | 9dd491b1b2faa10419198cadc25d0b30d46acba2 |
oradm-to-sqlz | 1.1.4 | 8b9873af85a6f4a5ab24d76dd97dc3fa83a53dd6 |
ove-auto-annotate | 0.0.9 | b7ba4864a1aab4ba632c9c0fe1fcdc2fb0c268c8 |
ve-bamreader | 0.2.6 | a9bd726a1c567cbf8be371de175298c2ba10b19b |
ve-editor | 1.0.1 | 74de479293d9a47cce99c13f25e15103d40fbd0f |
graphql-sequelize-teselagen | 5.3.8 | 59e3b10efec96f31c90a15d0b3cdb3c3a3474ed4 |
@teselagen/bounce-loader | 0.3.16 | 5cf876f82760193d2d068f3c5e1a24c7138002b1 |
@teselagen/file-utils | 0.3.21 | bb5d7c3f23e1b5218f7a718f0a627cd0e897f39a |
@teselagen/liquibase-tools | 0.4.1 | 9b9a438091a5647e4ceb336fea424a384756183e |
@teselagen/react-list | 0.8.19 | 40b9aa9f98dc6073e04a56fd9d3596e4abefc596 |
@teselagen/bio-parsers | 0.4.29 | eab6be69fbc87987a64474f67c237c728d792a70 |
@teselagen/ove | 0.7.39 | 1a510a951e0fc186b99e313d94ab6ab72a6cd9d0 |
@teselagen/range-utils | 0.3.14 | d8c0d20a17951f0b8a85c7cf5400d98841e17de6 |
@teselagen/react-table | 6.10.21 | 32547a2862896cb2f96ac23284fc5e979f0e2414 |
@teselagen/react-table | 6.10.20 | fd1dd0aee3ccb7fabd751e8a3d3ba99c493391bd |
@teselagen/react-table | 6.10.19 | c8ae5c76dc5837e18736678e928357a575a28a9f |
@teselagen/sequence-utils | 0.3.33 | a28500d7adbb44e9fb29cb64401077ccfa2725ea |
@teselagen/ui | 0.9.9 | 066b0294e11a90cfcb11dad16f3d5557712c7ebd |
react-complaint-image | 0.0.34 | 68e74c4250af9845f3c193b74e91124f2888de50 |
react-complaint-image | 0.0.33 | 640376c96617c1845378137b7a1d9cb74928ba20 |
react-complaint-image | 0.0.32 | 933d64001fc0459dae8a0449e08c662c734a6f0b |
react-jsonschema-form-extras | 1.0.3 | a87cbf0a4cefbce50aa699641df2b61a833bca97 |
react-jsonschema-form-extras | 1.0.2 | a28a7b4cd232a7935fdf9495b439a8d54ececbc6 |
react-jsonschema-form-extras | 1.0.1 | e7d43606eb9fa18f4996db691f2086541b9bd3f4 |
react-jsonschema-rxnt-extras | 0.4.6 | 9459764f29b525e068c890663c79ec7ef81e9496 |
react-jsonschema-rxnt-extras | 0.4.7 | 602a9c12e35b78e0608a163495b5bddb5c2dc0fe |
react-jsonschema-rxnt-extras | 0.4.8 | d36e5dd827d1b316e641a28bd4d1fb74b209d6f4 |
rxnt-authentication | 0.0.5 | 711cfa0503a965e901a943798923bd5a181eda67 |
rxnt-authentication | 0.0.4 | 4c6aaae6c2f7e6b34e72a35f19ba686a6df76660 |
rxnt-authentication | 0.0.3 | dc3c63c58f1f1fa2117b1657114b5d7e4c44c850 |
tg-seq-gen | 1.0.9 | d9f7f7f88fbc8094b721968d150af696913fa590 |
ng2-file-upload | 7.0.2 | 953dc4903d8a08f21d0a7cf49f01a1fe9f219434 |
ng2-file-upload | 7.0.3 | 18e323f15332a80e13037cf71fc632b4a7c79b27 |
ng2-file-upload | 8.0.1 | d3eaea409b77c9497adbf544563a2abb197f1d95 |
ng2-file-upload | 8.0.2 | ddbf3395f4d584e2a788b15061e85c2d17fb1509 |
ng2-file-upload | 8.0.3 | badf1b89443fc68e1369dd753eaeaac784e9df1b |
ng2-file-upload | 9.0.1 | 17b464cbf81e074aaed24eb87c02d567f56dcfce |
ngx-bootstrap | 18.1.4 | d02f0f2ea5c9b1c29e5f6aae4fa0677f99b03cde |
ngx-bootstrap | 19.0.3 | c68054201d511f2135750edaef49958b4587267f |
ngx-bootstrap | 19.0.4 | 317c491606e651a49db9873aed3a25fe2d7b9d6f |
ngx-bootstrap | 20.0.3 | f1501a45e6ac7d1e95c8a6ef9f192583b6d91a56 |
ngx-bootstrap | 20.0.4 | 897513887c92230ff0244cd51cd8f29664df28a5 |
ngx-bootstrap | 20.0.5 | f1a932205d020c521ea52de4159d5d340cdb7fcc |
ngx-bootstrap | 20.0.6 | 0f2d98464cdaa2211a27977596c0c0652862302a |
angulartics2 | 14.1.2 | 784dac6eae8261e32152f667286dc38e53b1bbcd |
@ctrl/deluge | 7.2.2 | cc7371ec3fc1ad9a62cb246e5885f13edf5fdeca |
@ctrl/golang-template | 1.4.3 | b64401062ed84bacab8d6de8d6865d05978cd713 |
@ctrl/magnet-link | 4.0.4 | 2eaf147ef0a371050f3f1cec559ab9d2862036ae |
@ctrl/ngx-codemirror | 7.0.2 | a5e233a8801faec95d35a703c0ca701e95048b35 |
@ctrl/ngx-csv | 6.0.2 | 48f74f6af4a5932945b41479c734560ace278999 |
@ctrl/ngx-emoji-mart | 9.2.2 | 1f86a2dd3636c1b3f6754bc8ad760c1154a8eeee |
@ctrl/ngx-rightclick | 4.0.2 | 8820c2a858b73c91eb9567355dba4b6911bb2eed |
@ctrl/qbittorrent | 9.7.2 | cd11335d66bed36e237b91ed2bc1b8ac0dc3c560 |
@ctrl/react-adsense | 2.0.2 | d7e800c37d67d878149fc7a6fb1569a654f928e5 |
@ctrl/shared-torrent | 6.3.2 | 35187a7ee832909f901a713be277bb636692f422 |
@ctrl/tinycolor | 4.1.1 | 31a8730a11fc6cbf1bbdd216d7053949e908c50f |
@ctrl/tinycolor | 4.1.2 | ffd87620395edb43ae3f51bc7b5852e575627721 |
@ctrl/torrent-file | 4.1.2 | c9011fb8316e2cc639099643d42909aa32f5f85b |
@ctrl/transmission | 7.3.1 | b6003fe43666d12f190d51f5279c44c480dd63e6 |
@ctrl/ts-base32 | 4.0.2 | eb901ee6b02a6ce51786241e300a30f82eae6dc5 |
encounter-playground | 0.0.5 | 4dc5ee4c3152541d892944c7599b81c8d6b1afd6 |
json-rules-engine-simplified | 0.2.4 | c86e40c248604f06e220675de5ea0af17711fc66 |
koa2-swagger-ui | 5.11.2 | 62092c345d57fe75256d0e2d1d0b694c8bc51bbf |
koa2-swagger-ui | 5.11.1 | 3ab7860deb3bde7a324c12cbbeb5532442f56709 |
@nativescript-community/gesturehandler | 2.0.35 | 74c548516d344a18949b85daa130f312e35bb6ce |
@nativescript-community/sentry | 4.6.43 | e536300e48ce92cf82a153caccfdc5dc98f8a847 |
@nativescript-community/text | 1.6.13 | 5d52b179e5fca147958aec81a2b9d321ce5fd60d |
@nativescript-community/ui-collectionview | 6.0.6 | 19fa34ce71349720cd9bda9ca3cb529bc31550c5 |
@nativescript-community/ui-drawer | 0.1.30 | 7d6141ba73cefa92d86ea24cc8f6699b8035e29e |
@nativescript-community/ui-image | 4.5.6 | 567c818f028102701b31822817136b8af42f461b |
@nativescript-community/ui-material-bottomsheet | 7.2.72 | 67c50e318598acccef483929398d27fecbde3c76 |
@nativescript-community/ui-material-core | 7.2.76 | 2c4f2019fc348539c97d75edcedd811e79bf1288 |
@nativescript-community/ui-material-core-tabs | 7.2.76 | 120e92669585a501b7676b3d4ca6239dd08c4f85 |
ngx-color | 10.0.2 | 30fc1482630d145d4bbd966ff1b8a61498694ca3 |
ngx-toastr | 19.0.1 | 91255a47be4f1a3bdee2646d82ca412087708cab |
ngx-toastr | 19.0.2 | f65a2f9c0276a4cce73cc0b95ebfebd05f2cc973 |
ngx-trend | 8.0.1 | dc9e84f92048b0aa78e0a17ae69708ee7aeee349 |
react-complaint-image | 0.0.35 | c2f0cc5734af74e244ff7ac34ea45387d813a22d |
react-jsonschema-form-conditionals | 0.3.21 | f1c23c1e76acbd07591e4708bc2f2768a9f754f2 |
react-jsonschema-form-extras | 1.0.4 | 0490214387616c1265447752310136352545831e |
rxnt-authentication | 0.0.6 | 3c5b060c1a124123a7480cd57d9db98b52a638c3 |
rxnt-healthchecks-nestjs | 1.0.5 | 0c708c8b4d02903233ce1d3913353e4ab9e33ce9 |
rxnt-kue | 1.0.7 | cab67ca4f2051efb640e5b73b5faea6c2b7af4a1 |
swc-plugin-component-annotate | 1.9.2 | 382b2e158f2f6a2efc70513bf8c7879715bf908a |
ts-gaussian | 3.0.6 | 932608d1ce4a27c9ee27ff94d68a0b511470eabb |
@ahmedhfarag/ngx-perfect-scrollbar | 20.0.20 | 5998c5fad96b4a1b91ae490ad4902680ca15a311 |
@ahmedhfarag/ngx-virtual-scroller | 4.0.4 | cfb5b91d5cd26eefa1bec6bf7f281d1f978d9b2f |
@art-ws/common | 2.0.22 | 36817c28b5af8368412e1a64d2f0152a433d2ac4 |
@art-ws/common | 2.0.28 | e2635f10661d8d085d803078a900d32f170ddf4b |
@art-ws/config-eslint | 2.0.4 | 576fa07c3562822a92f20954693ad5e10db2375c |
@art-ws/config-eslint | 2.0.5 | 0063c7524a71500459a9a66f906ab85146b440df |
@art-ws/config-ts | 2.0.7 | 6d934e3e5ba69ad11c985b7762a4d6c927fb3d98 |
@art-ws/config-ts | 2.0.8 | 398bda76a8948d47b8bee4412bc5464cb08cd62a |
@art-ws/db-context | 2.0.21 | 7faed5f3f91d69c9e75b102e43d00cbbfcb2e794 |
@art-ws/db-context | 2.0.24 | 345989a561fbde9bffe1bfbc5866f874fc9db923 |
@art-ws/di | 2.0.28 | 9d7217be91c6da2de9ebac80aa7f7234071697d4 |
@art-ws/di | 2.0.32 | 960aab3849afce2f6ab148cfdf8d37cb5e681f69 |
@art-ws/di-node | 2.0.13 | 0096cf6dd7d10755c76f66189b882b56d2d3bc0b |
@art-ws/eslint | 1.0.5 | 7c96e8d4e0fbe8acedfc56cd08e2adb66afeeed8 |
@art-ws/eslint | 1.0.6 | 73233bfb4ee82584594ae8388c2201d6ed16eee6 |
@art-ws/fastify-http-server | 2.0.24 | 6f3726f245f371b35541eded21a1b0ee113311fb |
@art-ws/fastify-http-server | 2.0.27 | f40fb715a308ccd0b38bafd3fdc537b4e0dbd404 |
@art-ws/http-server | 2.0.21 | 885408eaba607eae0b325332e16597c95105a071 |
@art-ws/http-server | 2.0.25 | e3f5f625c96b78c65361d4ce9997eb8fe269c7ba |
@art-ws/openapi | 0.1.12 | f0e85e8f6eae4967cad566908c6d5dacbbb41f2f |
@art-ws/openapi | 0.1.9 | 1d96e59c100997baa323f34b0584231bac7e5c6b |
@art-ws/package-base | 1.0.5 | 8df342eb91f9a325df8b6224af84019bf6cd1f6a |
@art-ws/package-base | 1.0.6 | 12a2badfe08b09efbbe86052b5938ba9965fad39 |
@art-ws/prettier | 1.0.5 | 5694d8c0c8368ead7cece24e0ae37b754df467de |
@art-ws/prettier | 1.0.6 | a9af7a973c11192c6656a9a175102beb497051f5 |
@art-ws/slf | 2.0.15 | 676be89a74e3bebde560fded35dabd0f8e00cd3b |
@art-ws/slf | 2.0.22 | daa020b17b23a7d9f83048a626ea8398bedad195 |
@art-ws/ssl-info | 1.0.10 | e210dab82f7709b9a01a2735ca88fdfd81f295d4 |
@art-ws/ssl-info | 1.0.9 | 85538b42f006e31ce802b5cc5fdb5000ecaf9998 |
@art-ws/web-app | 1.0.3 | a33d081002d21fa5105203df68d82df5d1857977 |
@art-ws/web-app | 1.0.4 | 4d07d9859fa20c5f287d699ddbe0ba1762ecf728 |
@basic-ui-components-stc/basic-ui-components | 1.0.5 | e1ebff1f43105fc3a3e3b005e16aecd5bf4f67be |
@ctrl/deluge | 7.2.1 | 087e06ddade4a3a91292f550173f8470c49b5c36 |
@ctrl/golang-template | 1.4.2 | 61a401e669a33cbd38ca717fda0e6bb86665e9bf |
@ctrl/magnet-link | 4.0.3 | aea3cb5108e29c7869890012d06a7396a8b29ec3 |
@ctrl/ngx-codemirror | 7.0.1 | 3563ab863a9df12638c628b00c36ca2acee6e547 |
@ctrl/ngx-csv | 6.0.1 | c4a7f650aa3281fbb8c518eeb5254929e00a3651 |
@ctrl/ngx-emoji-mart | 9.2.1 | d93c8c3688745239be212f87df64edb7e2284910 |
@ctrl/ngx-rightclick | 4.0.1 | 6f6b53f38e2e1880ed82810dc5fce39cdd942155 |
@ctrl/qbittorrent | 9.7.1 | 4223c5eb6d4d8b757e8be054c56417611d47098e |
@ctrl/react-adsense | 2.0.1 | cc289cc72e44d3863d4d099bc1a597fec17821c2 |
@ctrl/shared-torrent | 6.3.1 | ef42322bb763f24d44c9594c43812aa18c99dfe3 |
@ctrl/torrent-file | 4.1.1 | d64d6c775c37bf4c1a19c5ec9354f9caff435eaf |
@ctrl/ts-base32 | 4.0.1 | 93fe3f8a095b4d4000b95c8eecb029293bf6912f |
@hestjs/core | 0.2.1 | a4cf109edf9241d35ef736ee01b18b7490b6f52c |
@hestjs/scalar | 0.1.7 | 6ff5d0a39979ea1f20f10128cfda5db2efcf78fb |
@hestjs/validation | 0.1.6 | 311bd20dc28b1db74b26e9ee6fb0b99fe401ec5a |
@nativescript-community/arraybuffers | 1.1.6 | 9c06ae302b7fa55d679857b4f327abb63b4d48d9 |
@nativescript-community/arraybuffers | 1.1.7 | 320facebe79fcee01094aec1727a0584dd19728c |
@nativescript-community/arraybuffers | 1.1.8 | ecbdcb3eeb7185ab8ed904fc07bb77a3457b7b67 |
@nativescript-community/perms | 3.0.5 | 7f82d532cc23945265391d54097f9f480142c161 |
@nativescript-community/perms | 3.0.6 | 12fa3f0c96ca52b114448cc5caa73d37af104bff |
@nativescript-community/perms | 3.0.7 | 0072122333af7439c26a1667df5205d4d65af1b2 |
@nativescript-community/perms | 3.0.8 | 7e65df9d8bc61cc9698c79d5879f4b193cc7dfb1 |
@nativescript-community/perms | 3.0.9 | e71913b97f95d0ea503479bb43cd1178b3e33f10 |
@nativescript-community/perms | 3.0.9 | e71913b97f95d0ea503479bb43cd1178b3e33f10 |
@nativescript-community/sqlite | 3.5.2 | 8c9e509a486a243910491fa789ea8897a5b12c09 |
@nativescript-community/sqlite | 3.5.3 | 13fc4426a084e0046cdea50d6fa46af1d532b570 |
@nativescript-community/sqlite | 3.5.4 | cb45e25a49b4cd39f6d769d5c381701619707276 |
@nativescript-community/sqlite | 3.5.5 | c6a544ed98b9a84cd45e115248b1ae3af79f075d |
@nativescript-community/text | 1.6.10 | b624a8aa11fb92008a5d2833090735311b969877 |
@nativescript-community/text | 1.6.11 | 64ee393bc818f70708524859bc19401ee21b0013 |
@nativescript-community/text | 1.6.12 | f8e63b6947d2032e75964bac2e7072c6da8f72db |
@nativescript-community/text | 1.6.9 | 240bf4209c195b352661376736eb37c1848fc866 |
@nativescript-community/typeorm | 0.2.30 | 87e624c96b4e113bbeddb7c251687d614f70e8c3 |
@nativescript-community/typeorm | 0.2.31 | 7d7f924bc9eeafea04c11d49a2903ecf84eaebbb |
@nativescript-community/typeorm | 0.2.32 | f563abf96e6839d229feee7fe3f7505e8671252b |
@nativescript-community/typeorm | 0.2.33 | bd839fe0b70def1c8ac7b6f3c9d6e8be16d6ddc0 |
@nativescript-community/ui-document-picker | 1.1.27 | 647c831e11d264b78028e422e40d86bd8ce780de |
@nativescript-community/ui-document-picker | 1.1.28 | f131a88cdfc93b2cd3e0731b0b6583a7326f1e19 |
@nativescript-community/ui-label | 1.3.35 | a92eafa302c3b910196fabc7387ac1bf01df1ad7 |
@nativescript-community/ui-label | 1.3.36 | 22d7593d921a31bb662a81a99dab6dcb97af2c57 |
@nativescript-community/ui-label | 1.3.37 | 64a415ff23f6388ab9c3b9487841303c6bf38ede |
@nativescript-community/ui-material-bottom-navigation | 7.2.72 | b146a5c835f456b85f4c4b05003bee82deb2d4b5 |
@nativescript-community/ui-material-bottom-navigation | 7.2.73 | 026e4b7da1f1cee9ad99cb0fd6a1d255fe2b17a3 |
@nativescript-community/ui-material-bottom-navigation | 7.2.74 | d1ebfcb06fbab215f80a7689b99d880270f88cf5 |
@nativescript-community/ui-material-bottom-navigation | 7.2.75 | f1c163880151c3999cf23c2e39ad228ac71d503f |
@nativescript-community/ui-material-core | 7.2.72 | 1751fe471fe83e2ea704f227077ca0fd4b339858 |
@nativescript-community/ui-material-core | 7.2.73 | 71438f3f4e66f8a8e63a4009b39dfd62ceb1ee99 |
@nativescript-community/ui-material-core | 7.2.74 | a76e27340d18fa060f0ad2fb6356cdb33c0a517e |
@nativescript-community/ui-material-core | 7.2.75 | 90a6096f7c835adcaa6fd55a46d86a39c2d23e04 |
@nativescript-community/ui-material-core-tabs | 7.2.72 | 4df5a8002dc1f264f5403f4ae8846f5a9de3fa03 |
@nativescript-community/ui-material-core-tabs | 7.2.73 | 389ecdcdc731e939261a597f11026b7ee216c77f |
@nativescript-community/ui-material-core-tabs | 7.2.74 | e39aa69f9fb9a072988e045c8b8e69f3adcb8bd2 |
@nativescript-community/ui-material-core-tabs | 7.2.75 | fc9809b849ac8827de7268186c125203b48eaabf |
@nativescript-community/ui-material-ripple | 7.2.72 | 1abffe88070892b714cbd9b52903ede4b7f51301 |
@nativescript-community/ui-material-ripple | 7.2.73 | d42991857e0d782ce3b8cdc43ee2482e96b5884c |
@nativescript-community/ui-material-ripple | 7.2.74 | db10e35377f42be2016c15ed6caf95295f34aed0 |
@nativescript-community/ui-material-ripple | 7.2.75 | 90b442685ac930390102205534b9b15cc25f2d06 |
@nativescript-community/ui-material-tabs | 7.2.72 | e21082f89587b00ade4af8eaf248989f25b1ddfc |
@nativescript-community/ui-material-tabs | 7.2.73 | 996e65e1b433acace71844e61707068cad2e48dd |
@nativescript-community/ui-material-tabs | 7.2.74 | fa3d04c908bf3bf1e36485a8e9d4e901d9e5a57e |
@nativescript-community/ui-material-tabs | 7.2.75 | ccb7989988f61539928bc49637ec5aa76d350cb3 |
@nativescript-community/ui-pager | 14.1.35 | 177bee8c32779d3df154f52aa60ae32c65abfa53 |
@nativescript-community/ui-pager | 14.1.36 | 34523ccc99f97688db11eac7ede7f998c5998d5b |
@nativescript-community/ui-pager | 14.1.37 |