Repository navigation
Releases: Abdul-Moiz31/ardvane
Release list
Ardvane 0.3.2
- The app icon starts Ardvane natively on Apple Silicon Macs. An app whose program is a script has no chip type,
so macOS could start it under Rosetta, and everything Ardvane ran inherited that: "Update protection" then failed
withxcrun: … need 'x86_64'because git couldn't load Apple's command line tools. The icon now asks macOS for
native execution and starts Ardvane natively itself. Re-create the icon once (Protection → Ardvane app icon →
Remove, then Add) to get the fixed one.
Ardvane 0.3.1
- "Update protection" works when Ardvane is opened from its app icon. macOS gives apps started from an icon a
minimal PATH, so the installer couldn't find Python ("Python 3.8+ is required") even though Ardvane itself was
running on it. The app now hands every script it starts the Python it runs on, the installer records it, and the
daily check uses that recorded Python too, so machine scans and daily checks no longer skip project checks for the
same reason. The message for a missing Python now gives the right fix.
Ardvane 0.3.0
The scanner can't be talked out of a finding any more. An October 2026 audit tried to sneak malware past it;
every way that worked is now caught, and covered by a test.
- A file that breaks the analysis (a malformed value, 100,000 nested brackets) is reported as "could not be analysed"
instead of stopping the scan. A scanner failure exits with code 4 and is shown as "could not scan" - never as clean,
and never as malware. - Linked
.vscode/.claudefolders and config files are read through the link. Files git ignores are still scanned
where editors and AI agents read them (.vscode,.claude, MCP files, config files, fonts). - Fake fonts are recognised by their structure, not just their first bytes: a file starting with
true;, padded with
non-English text or bigger than 2 MB no longer passes as a font. - Files too large to read fully are checked at both ends, and big config files are reported instead of skipped.
- Anything run with
nodethat isn't a script (an image, a data file, a preload) is checked as code. Code hidden after
line breaks or non-standard spaces,.VSCodefolders, JSON escapes such asfolder\u004fpen, comments in MCP
config and AI-agent status-line commands are all caught. - Named pipes no longer hang a scan.
- Safe clone now scans committed
node_modules/.venvfolders too, and prints the right command for a false alarm. - New
checkrepo --summaryfor scripts. No new false alarms on 90,000 real project files.
Git protection checks what you push, and notices when it is switched off.
git pushscans the commits being pushed, not the folder you happen to have open: an infected branch is blocked
even while a clean branch is checked out, and untracked files no longer block unrelated pushes. Your own pre-push
hooks still receive the list of refs.- The daily check now notices protection being turned off from an
[include]/[includeIf]file, a git hook replaced
or removed, a protection file deleted, a repository switching hooks off for itself (Husky folders are fine), and
the shell setup being removed.
Scan any GitHub repository, not only your account.
- Settings → GitHub → Repositories to scan: add repositories one by one (yours, your organization's, a
teammate's) asowner/name, a github.com link or agit@github.com:address, and remove them like folders. Every
branch of each one is scanned with each scan and daily check. A repository that can't be checked shows as a
warning, never as clean. ardvane check-github owner/namescans every branch of repositories from the terminal, without cloning them.- Settings changes are saved one at a time and lists change by "add" / "remove", so quick clicks or a second tab can
no longer lose a change.
A GitHub Action: the scanner on GitHub's servers.
uses: Abdul-Moiz31/ardvane@v0.3.0scans every push and pull request: malware fails the check and shows up on the
exact file. Withmode: all-brancheson a schedule it scans every branch through the GitHub API, plus any other
repositories you list, such as your whole organization. See docs/github-action.md.- Read-only, needs only
contents: read, and file names from the scanned repository can't inject workflow commands.
Ardvane's own CI runs the Action on itself.
Safe install: malicious packages are stopped before they install.
npm,npx,pnpm,yarn,bunandpipnow check every package an install would add - for npm the full
dependency tree, worked out in a private copy of the project without running anything - against Ardvane's list and
OSV.dev's database of malicious packages. A known-malicious package means nothing is installed.- Only public package names are sent to OSV.dev (never private-registry packages), answers are cached, and the online
check can be turned off under Settings → Detections. Everyday commands likenpm run devpass straight through, and
a failure of the check never stops your package manager. - One shell file holds the functions for macOS/Linux and Git Bash; PowerShell gets the same. The Protection page shows
whether safe install is on.
Detections that keep up between releases.
- Before each scan and daily check, Ardvane downloads a signed list of new detections - attacker servers and IPs,
malware fingerprints, code markers, malicious npm and PyPI packages - so it recognises new variants without an
upgrade. Settings → Detections shows the list you have and can turn updates off;ardvane update-detectionsupdates
from the terminal. - The list is used only with Ardvane's Ed25519 signature (verified by the app itself, no dependencies), only if newer
than the copy you have, and it can only add detections. A failed update keeps the last good copy. - Indicator matching now looks each finding up instead of trying every pattern, so a large list doesn't slow scans
down; the package checker and the scanner share one implementation.
Releases can't be faked.
- Every release carries a reproducible source archive signed with GitHub's build provenance. Only the release
workflow running onmaincan produce that signature, and the Homebrew tap now refuses any release without it -
so a stolen token that creates a release or pushes a tag can't ship code to brew users. - A release is refused if its version is older than the latest one, or if its tag already exists on another commit.
PyPI is built from the release tag, releases never run twice at once, and every GitHub Action is pinned to an
exact commit.
Detection feed
Ardvane's signed detection feed (see feed/README.md). Updated automatically; not a release of the app.
Ardvane 0.2.2
The GitHub check now sees everything. It used to stop at your first 100 repositories and skip repositories over
200 MB. A real infected 202 MB repository was missed that way.
- Every repository is listed, not just the first 100.
- No fixed size limit. Downloads are streamed to disk instead of memory, and stop only if less than 2 GB of disk space
would be left (or after 30 minutes). Single files over 20 MB, such as videos or models, are listed as not scanned. - New
--all-branchesoption: the worm pushes into every branch, not only the main one. - Harder to trick: files whose names differ only in upper/lower case are both scanned, one file with a name this
computer can't store no longer stops the whole branch from being scanned, and oversized archives ("tar bombs")
can't fill the disk. - More reliable: GitHub's rate limit stops the check once with a clear message, timeouts and empty repositories no
longer cause errors, and temporary folders left by an interrupted check are cleaned up. - Scan reports are saved in
~/.checkrepo/reports/scans, where the dashboard lists them, instead of inside the app's
folder (which an upgrade replaces). The end of a scan now saysardvane protectinstead of a script path.
Ardvane 0.2.1
- The "Ardvane has stopped" message now says how to reopen it: the app icon, or
ardvanein Terminal. - The dashboard waits 20 minutes (was 5) before closing itself, because browsers pause background tabs.
- "Add app icon" explains what it does: it adds Ardvane to your Applications folder (Start menu on Windows), so you
can open it from Launchpad, Spotlight or the Dock.
Ardvane 0.2.0
Install Ardvane with one command. No cloning needed.
brew install abdul-moiz31/ardvane/ardvane # macOS (Homebrew)
pipx install ardvane # macOS, Linux and WindowsThen run ardvane to open the dashboard.
- New terminal commands:
ardvane scan,ardvane check <folder>,ardvane protect,ardvane unprotect,
ardvane fixes,ardvane launcher. Runardvane --helpfor all of them. - Published to PyPI automatically with every release (trusted publishing, no stored passwords or tokens), and to
Homebrew through theabdul-moiz31/ardvanetap, which follows releases by itself. - The app icon now opens the installed
ardvanecommand, so it keeps working after upgrades.
Ardvane 0.1.0
The first release of Ardvane: free, open-source protection for developers against malware that spreads through code
(fake job interviews, malicious packages and the PolinRider worm). Everything runs on your own computer.
Get started
git clone https://github.com/Abdul-Moiz31/ardvane.git
cd ardvane
python3 app/dashboard.pyWhat's in 0.1.0
- Ardvane dashboard — status at a glance, scans with live progress, 30-day history, protection switches, reports
and offline guides. Runs on127.0.0.1only. - Scans your computer — malware locations, running malware, startup items, attacker connections, editor settings,
every git project and installed package. - Blocks infected code — safe
git clone, scans on pull / checkout, blocks infected pushes. - Hardening — editors can't auto-run code from a folder; npm packages can't run install scripts.
- Fixes with undo — ask first (default) or automatic. Malware is quarantined, never deleted.
- To-do list — every finding becomes practical steps; a later scan checks your fix worked; weekly GitHub-account checks.
- Daily check at the time you choose, with a notification.
- GitHub account check (optional) — uses the GitHub CLI when you're logged in; your token stays there.
Platforms: macOS and Linux; Windows is beta. Requires Python 3.8+ and git, nothing else.
Found a false alarm or tested on Windows? Please open an issue.