MrTechKing

5 min read

llmfit: Find Which AI Models Your Computer Can Actually Run (GitHub, Scanned)

Checks your CPU, RAM and GPU, then ranks hundreds of open models by how well each will run on your machine.

llmfit logo
✅
Scan: safe. Nothing malicious. The 3 critical advisories are in the test tooling of its optional web dashboard, not the tool itself, and benchmark sharing is opt-in and public. Scanned Nov 10, 2026; the full report is below.

Before you download a 20 GB model, it helps to know whether it will run. llmfit looks at your CPU cores, system RAM, graphics card and video memory, or the unified memory on Apple Silicon, then scores hundreds of open models for fit, speed, quality and context length on that hardware. It picks a sensible quantisation for each one and estimates tokens per second, so you can see at a glance which models will be quick, which will crawl and which will not load at all.

Run it with no arguments and you get an interactive terminal browser with your specs at the top and every model ranked below. From there you can filter, simulate other hardware, download a model and benchmark it for real against Ollama, llama.cpp, MLX, LM Studio or Docker Model Runner. There is also a classic command-line mode with JSON output for scripts and agents, and llmfit serve starts a web dashboard and a REST API.

llmfit is MIT-licensed and written in Rust, with about 39,000 stars and 181 contributors since February 2026. It moves fast: version 1.1.20, from 3 November 2026, is its 138th release.

Who it is for

People getting started with local AI who want to know what their laptop can handle, anyone choosing between models or quantisations, and builders deciding what hardware to buy for running models at home.

Getting started

1. Install on macOS or Linux with Homebrew (Windows: winget install --exact --id AlexsJones.llmfit)

brew install AlexsJones/llmfit/llmfit

2. Or try it without installing, with uv

uvx llmfit

3. Open the interactive browser ranked for your hardware

llmfit

4. Or print the top picks as JSON

llmfit recommend --json

There is also a curl | sh quick installer. It downloads the release binary from GitHub and uses sudo to place it in /usr/local/bin unless you pass --local; the package managers above avoid running a script at all.

Safety scan

We cloned AlexsJones/llmfit at commit 7d929f2 on Nov 10, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secret hits and no committed binaries across 792 files and about 125,000 lines, mostly Rust. The 2 pattern hits are usage comments at the top of install.sh showing the curl | sh command.
  • install.sh is about 195 lines. It fetches the latest release from GitHub and uses sudo to install into /usr/local/bin, or ~/.local/bin with --local. The three build.rs files embed the community benchmark data and app metadata into the binary at build time and download nothing.
  • 40 advisories. All 3 critical ones, 2 in tinypool and 1 in Vitest, are in llmfit-web/package-lock.json, and both are test runners for the web dashboard's code that are not part of the shipped tool. The same lockfile holds 10 of the 12 high ones, mostly build tools such as Vite, PostCSS and browserslist. The Rust tool itself has 2 high (quick-xml, slow parsing on crafted XML), 3 moderate and 3 unrated.
  • Benchmark sharing is opt-in. Results are saved locally first, and only if you press s before a run does llmfit sign in to GitHub through the device flow, fork the repo and open a public pull request with your result and hardware details. Leave it off and nothing is sent.
  • The hosts in the code are Hugging Face for model data and downloads, GitHub, Ollama and example addresses in tests. We found no analytics service.
  • 7 workflows, none using pull_request_target. 12 of 27 third-party actions are pinned to a commit. Dependabot is on and there is a contributing guide and code of conduct; no security policy.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious code2 pattern hits found and read; every one is listed under the raw findings.
Install-time code3 Cargo build scripts. 2 installer scripts (one can call sudo)
Committed binariesNone.
CI workflows7 workflows. None use pull_request_target. 15 of 27 third-party actions pinned to a tag rather than a commit.
Network hosts14 distinct hosts referenced from source; most often huggingface.co, github.com, ollama.example.com, ray.example.com. No URLs to bare IP addresses.
Known vulnerabilities40 advisories across 900 pinned packages: 3 critical, 12 high, 19 moderate, 3 low, 3 unrated. Cargo.lock: 659 packages, 8 advisories; llmfit-python/uv.lock: 45 packages, 3 advisories; llmfit-web/package-lock.json: 196 packages, 29 advisories.
Project hygieneHas automated dependency updates, licence file, contributing guide. Missing security policy, CodeQL.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Pattern hits (2)
WhereRuleMatch
install.sh:3download-piped-to-shell# Usage: curl -fsSL https://raw.githubusercontent.com/AlexsJones/llmfit/main/install.sh | sh
install.sh:4download-piped-to-shell# curl -fsSL ... | sh -s -- --local # Install to ~/.local/bin (no sudo)
Installer scripts (2)
Worst known vulnerabilities (24 of 40)
AdvisorySeverityPackageSummary
GHSA-5gmw-xhrv-c9v3criticaltinypool@1.1.1Tinypool: Prototype Pollution gadget in worker options leads to Remote Code Execution
GHSA-85c8-ppgw-ccprcriticaltinypool@1.1.1Tinypool: Prototype Pollution Gadget to RCE in run() options
GHSA-5xrq-8626-4rwpcriticalvitest@2.1.9When Vitest UI server is listening, arbitrary file can be read and executed
RUSTSEC-2026-0194highquick-xml@0.38.4Quadratic run time when checking a start tag for duplicate attribute names
RUSTSEC-2026-0195highquick-xml@0.38.4Unbounded namespace-declaration allocation in `NsReader` enables memory-exhaustion denial of service
GHSA-73wf-gq98-2v4ghighbrowserslist@4.28.1Browserslist: Uncaught crash / prototype write via untrusted browserslist-stats.json custom stats (normalizeStats)
GHSA-c83g-rgw3-j3cxhighbrowserslist@4.28.1Browserslist: Unbounded memory growth (no cache eviction) via distinct query results, leading to eventual OOM
GHSA-28wg-ghj8-5hjvhighnanoid@3.3.11nanoid: non-secure generators can loop indefinitely with negative size
GHSA-2v37-7h3g-55p8highnanoid@3.3.11nanoid: custom generators can loop indefinitely when size is zero
GHSA-xwg4-73v4-xw9whighnanoid@3.3.11nanoid: Integer Overflow or Wraparound
GHSA-6g55-p6wh-862qhighpostcss@8.5.8PostCSS: Arbitrary file read and information disclosure via attacker-controlled sourceMappingURL in CSS comments
GHSA-r28c-9q8g-f849highpostcss@8.5.8PostCSS: Path Traversal in Previous Source Map Auto-Loading (sourceMappingURL) leads to Arbitrary .map File Disclosure
GHSA-68fv-2mgg-jv7qhighsource-map-js@1.2.1source-map-js allows event-loop denial of service through indexed source-map section offsets
GHSA-587h-7wmj-h5pmhighvite@5.4.21launch-editor: `fs.existsSync()` existence check can be bypassed on Windows
GHSA-96hv-2xvq-fx4phighws@8.19.0ws: Memory exhaustion DoS from tiny fragments and data chunks
GHSA-wrw7-89jp-8q8gmoderateglib@0.18.5Unsoundness in `Iterator` and `DoubleEndedIterator` impls for `glib::VariantStrIter`
GHSA-c9f9-cp8h-jcj5moderatermcp@3.7.0Unbounded response body buffering in Streamable HTTP clients
GHSA-7gcf-g7xr-8hxjmoderateserde_with@3.18.0serde_with: KeyValueMap serialization panics on empty sequence or map entries
GHSA-6w46-j5rx-g56gmoderatepytest@8.3.5pytest has vulnerable tmpdir handling
GHSA-6w46-j5rx-g56gmoderatepytest@8.4.2pytest has vulnerable tmpdir handling
GHSA-82fw-gwwq-j7x9moderate@vitest/mocker@2.1.9Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock
GHSA-qxg6-89mg-rqv8moderate@vitest/mocker@2.1.9Vitest: Code injection via unauthenticated manual mock registration
GHSA-w5vr-8v7q-w6rvmoderatebaseline-browser-mapping@2.10.8baseline-browser-mapping process termination on invalid input causes denial of service
GHSA-67mh-4wv8-2f99moderateesbuild@0.21.5esbuild enables any website to send any requests to the development server and read the response

By the numbers

Stars38.9K
Forks2,511
Contributors181
Commits1,376
Open issues35
Open pull requests26
Releases138
Latest releasev1.1.20
LicenceMIT
Main languageRust
Project age8 months
Last pushNov 10, 2026
Tracked files792
Lines of code125K
Checkout size34 MB

Lines by language: Rust 75.5K, JSON 24.5K, Python 7,332, Markdown 6,408, JavaScript 5,568, YAML 3,087.

Questions

Is llmfit free?

Yes. llmfit is free and open source under the MIT licence, and it needs no account.

Does llmfit download or run models?

Only if you ask it to. By default it reads your hardware and scores models from its built-in data. From the interactive view you can choose to download a model and benchmark it through a runtime such as Ollama.

How accurate are the speed estimates?

They are estimates unless marked as measured. When you benchmark a model yourself, your real numbers replace the estimate, and community results for identical hardware ship in later releases.

What should I use to run the model it recommends?

Any of the runtimes it supports. Ollama is the simplest start, and we list it in this GitHub section along with llama.cpp and Jan.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.