A Mixture-of-Experts model only activates a few experts per token. MoE-Direct keeps them
on your NVMe and streams them in on demand. No re-quantization. No routing change.
No modified weights.
One consumer desktop - 32 GB RAM, one RTX 5080, a Gen5 NVMe - and three models it has no business holding in memory, the largest about thirteen times its RAM:
| the model | routed-expert data on disk | what that desktop measured | grade |
|---|---|---|---|
| Qwen3.5-122B, Q4_K_M | 72.8 GB | 5.59-5.69 tok/s sustained decode, about 2.3x the same binary reading the same weights through plain mmap | OFFICIAL - release-gate pass |
| gpt-oss-120b, MXFP4 | 61 GB | 12 of 12 greedy responses token-identical to the stock read path | OFFICIAL |
| Kimi K2.6, 1T-class, mixed-quant | 436 GB | 1.03 tok/s, coherent output, server ready in about 19 s | PROBE - performance gate not passed |
The grades mean what they say: OFFICIAL is the frozen release-gate protocol on the
reference machine, with the verdict stated. PROBE is a deliberate measurement with a
written protocol that is not a gate run - it promotes nothing, and the Kimi figure is one
you should not plan interactive work around.
The token-identity check is scoped - greedy decoding on gpt-oss-120b; on Qwen3.5-122B the
separate check is run-to-run reproducibility, and no parity claim is made for sampled decoding
or for K2.6. On the default packed path every expert byte is verified against your original GGUF
before it is ever used (the opt-in virtual path copies nothing and verifies its manifest and
addresses instead), and the server never bulk-loads experts up front. Which build and conditions every number was
measured under: Measurements and each release's notes.
Unedited single take (2:49): cold boot to answer on the 447 GB Kimi K2.6 - server loaded in about 19 seconds, the NVMe sustaining multi-GB/s reads, system RAM under 32 GB the whole way - then the same run on Qwen3.5-122B. Task Manager stays on screen the whole time.
What this is, honestly:
The exact boundary — what is changed and what is provably not touched (the math, the routing, the weights, your files) — is stated once, in How it works. Known rough edges live in Limitations and FAQ.
You need Windows 10/11 x64, an NVMe SSD, disk space of about twice the model size on the default packed path (the opt-in virtual repack needs the model plus a manifest and its plan report, measured at about 6 MB for the 122B test model and about 16 MB for the 397B one), and a GGUF from the supported list.
Download the runtime zip (moe-direct-<version>-win-x64.zip) and SHA256SUMS.txt from
Releases, right-click the zip, Properties, tick Unblock, then extract
with Windows "Extract All" into a new, empty folder. Checking the download is one paste, not
a hex comparison. In Explorer, open the folder that holds both downloaded files, right-click
empty space > Open in Terminal (PowerShell), then paste:
$e,$n=((Get-Content .\SHA256SUMS.txt -Raw).Trim() -split '\s+');$a=(Get-FileHash ".\$n" -Algorithm SHA256).Hash;if($a -eq $e){'OK: hash matches'}else{'MISMATCH: download again'}
If you skip it, the launcher's own sealed-manifest check still catches files changed or corrupted inside the extracted bundle on every start - what it cannot do is check the zip you just downloaded against the published checksum; that is what this paste is for. A checksum from the same page proves the download is intact, not who published it - releases are unsigned for now, so publisher trust rests on the GitHub account and the HTTPS path.
Download every shard of one exact tested GGUF and revision from
docs/models.md, and keep all shards in one folder. Place your GGUF
under <drive>:\moe-models\<any-folder>\ and double-click Start-MoeDirect.cmd. Pick your
model with the arrow keys.
Approve the one-time repack (the launcher shows the exact disk cost and time before writing anything), press Enter when the status screen appears, and connect any OpenAI-compatible client to the printed URL.
That is the whole loop. The first run repacks once (minutes to ~18 minutes here, with live progress); every later run goes straight to serving. A cold session's first conversation is the slowest by design; later turns reuse the prefix cache, and a restored exact prefix can skip that first-prefill entirely.
Prefer watching first? The setup walkthrough is a single real-time take with chapters, including the waits.
Windows SmartScreen will warn you: these preview builds are unsigned, so "Windows protected your PC" is the expected message, not a verdict on your download. Verify the SHA-256 and decide for yourself. We never ask you to disable Defender or SmartScreen. Details, including managed-PC cases, are in Getting started.
Full detail for every step, including what success looks like on screen: docs/getting-started.md. Connecting a chat client or an agent: docs/clients.md.
| Model | Experts | Expert store | Tier |
|---|---|---|---|
| Qwen3.5-122B-A10B Q4_K_M — start here | 256 (top-8) | 72.8 GB | reference-validated |
| gpt-oss-120b MXFP4 | 128 (top-4) | 61 GB | format-validated |
| Qwen3.5-35B-A3B Q4_K_M | 256 (top-8) | 19.5 GB | format-validated |
| Qwen3.5-397B-A17B Q4_K_M | 512 (top-10) | shown before write | format-validated |
| Kimi K2.6 447 GB mixed-quant | 384 (top-8) | 436 GB | format-validated |
| DeepSeek-V4-Flash-0731 MXFP4/Q8_0 | 256 (top-6) | shown before write | format-validated |
reference-validated means both the byte-exact format gate and the frozen performance gate
passed on the reference machine; format-validated means the byte-exact gate passed and any
speed number is an observation. An unlisted GGUF of a known architecture can also be served
through the experimental template path, clearly labelled.
Exact repositories, pinned revisions, minimum cache budgets, prefetch states and the template path: docs/models.md.
Every number ships with the conditions it was measured under; these are the headlines.
| What | Result | Evidence |
|---|---|---|
| Qwen3.5-122B sustained decode | 5.59-5.69 tok/s, frozen release gate passed; about 2.3x over the same binary's plain-mmap path | release-gate run |
| Qwen3.5-122B paired probe | 5.65-6.26 per probe, arm average 5.96 tok/s | paired probe |
| Output parity, direct-read vs stock path (gpt-oss-120b, greedy) | 12 paired responses, token IDs identical | paired run |
| Kimi K2.6 (1T class) from 32 GB RAM | 1.03 tok/s, coherent output | probe |
| Your weights after the one-time repack | byte-for-byte the source tensors: on the packed path every record is SHA-256 verified, and a virtual repack never copies them at all | fail-closed gate |
Results scale primarily with NVMe read throughput; treat them as data points from the reference machine (32 GB RAM, one RTX 5080, Gen5 NVMe), not as promises for yours. Which build each number came from, the full protocols and the grading rules: docs/measured-results.md, TECHNICAL.md and each release's notes.
Work ships one piece per release, when it is measured, not on a schedule.
PROBE: it compares in-place with prefetch
against in-place without it, not against the packed path, and it was measured on a working
tree that predates the release binary rather than re-run on this zip's.copy integrity reads PASS although
a virtual repack copies nothing; serving validation and the reference numbers are the
packed profile's; and a -Repro or -Smoke run can go as far as printing
performance gate : PASS, which is a packed verdict on a path that is not under that
gate at all. What actually checks a virtual repack is a separate 8-item plan gate and
the engine's own re-derivation, and that screen shows none of it. These gaps are
known, measured, and are exactly what the next release exists to close.What you are holding is the floor, not the ceiling.
Full detail on what has already shipped: docs/models.md, docs/measured-results.md, docs/warm-start.md and docs/disk-layout.md.
The status= line the launcher prints, every status code and its fix:
docs/troubleshooting.md.
| Read this for | File |
|---|---|
| Requirements, install, first run, what success looks like | docs/getting-started.md |
| Model list, pinned revisions, running an unlisted model | docs/models.md |
| How the direct-read path works | docs/how-it-works.md |
| All measurements, protocols and grades | docs/measured-results.md |
| Connecting chat clients and agents | docs/clients.md |
| Warm start and prompt precompute | docs/warm-start.md |
| What gets written to disk; update, reset, uninstall | docs/disk-layout.md |
| Status codes, troubleshooting, reporting problems | docs/troubleshooting.md |
| Known limitations and FAQ | docs/faq.md |
| The long version: every technique and every number | TECHNICAL.md |
And if you are curious how this actually gets built: some of my working records are up in docs/design-notes/, as-is. They are in Korean — I am a Korean developer, the design and the decisions are mine, and my AI assistants draft and cross-check under my direction — but each file opens with a short English TL;DR, and the notes preserve their round-by-round review history and references (the referenced private workspace files are not included). If that is your kind of thing, have a look.
Built on llama.cpp (MIT), base commit 0bd0ec6 (b10057) -
upstream copyright and license preserved; source releases keep all upstream notices. See
THIRD_PARTY_NOTICES.md.
MoE-Direct additions (c) 2026 tmxkzm1925-max, released under the MIT License. The MoE-Direct name identifies this project and its official builds - see TRADEMARKS.md. If you use this work, please cite it (CITATION.cff). Archived releases carry a DOI: 10.5281/zenodo.21739367.
Thanks. This project was built by one person with a great deal of machine help, and the help was not incidental. Anthropic's Claude and OpenAI's GPT models did design work, implementation and, just as usefully, adversarial review of each other's output, under human direction and with every change gated by the verification this project's documents describe. Having a second and a third reader who never got tired is most of the reason the checking here is as strict as it is.
Thanks are owed as well to the teams whose models this was measured against: Qwen, DeepSeek, Moonshot AI, OpenAI for gpt-oss, and Mistral. None of them are affiliated with this project and none of them have endorsed it. They published weights that one person with one desktop could actually study, and without that there would have been nothing here to run.
64 commits
PowerShell
56.2%
Python
43.7%
A Mixture-of-Experts model only activates a few experts per token. MoE-Direct keeps them
on your NVMe and streams them in on demand. No re-quantization. No routing change.
No modified weights.
One consumer desktop - 32 GB RAM, one RTX 5080, a Gen5 NVMe - and three models it has no business holding in memory, the largest about thirteen times its RAM:
| the model | routed-expert data on disk | what that desktop measured | grade |
|---|---|---|---|
| Qwen3.5-122B, Q4_K_M | 72.8 GB | 5.59-5.69 tok/s sustained decode, about 2.3x the same binary reading the same weights through plain mmap | OFFICIAL - release-gate pass |
| gpt-oss-120b, MXFP4 | 61 GB | 12 of 12 greedy responses token-identical to the stock read path | OFFICIAL |
| Kimi K2.6, 1T-class, mixed-quant | 436 GB | 1.03 tok/s, coherent output, server ready in about 19 s | PROBE - performance gate not passed |
The grades mean what they say: OFFICIAL is the frozen release-gate protocol on the
reference machine, with the verdict stated. PROBE is a deliberate measurement with a
written protocol that is not a gate run - it promotes nothing, and the Kimi figure is one
you should not plan interactive work around.
The token-identity check is scoped - greedy decoding on gpt-oss-120b; on Qwen3.5-122B the
separate check is run-to-run reproducibility, and no parity claim is made for sampled decoding
or for K2.6. On the default packed path every expert byte is verified against your original GGUF
before it is ever used (the opt-in virtual path copies nothing and verifies its manifest and
addresses instead), and the server never bulk-loads experts up front. Which build and conditions every number was
measured under: Measurements and each release's notes.
Unedited single take (2:49): cold boot to answer on the 447 GB Kimi K2.6 - server loaded in about 19 seconds, the NVMe sustaining multi-GB/s reads, system RAM under 32 GB the whole way - then the same run on Qwen3.5-122B. Task Manager stays on screen the whole time.
What this is, honestly:
The exact boundary — what is changed and what is provably not touched (the math, the routing, the weights, your files) — is stated once, in How it works. Known rough edges live in Limitations and FAQ.
You need Windows 10/11 x64, an NVMe SSD, disk space of about twice the model size on the default packed path (the opt-in virtual repack needs the model plus a manifest and its plan report, measured at about 6 MB for the 122B test model and about 16 MB for the 397B one), and a GGUF from the supported list.
Download the runtime zip (moe-direct-<version>-win-x64.zip) and SHA256SUMS.txt from
Releases, right-click the zip, Properties, tick Unblock, then extract
with Windows "Extract All" into a new, empty folder. Checking the download is one paste, not
a hex comparison. In Explorer, open the folder that holds both downloaded files, right-click
empty space > Open in Terminal (PowerShell), then paste:
$e,$n=((Get-Content .\SHA256SUMS.txt -Raw).Trim() -split '\s+');$a=(Get-FileHash ".\$n" -Algorithm SHA256).Hash;if($a -eq $e){'OK: hash matches'}else{'MISMATCH: download again'}
If you skip it, the launcher's own sealed-manifest check still catches files changed or corrupted inside the extracted bundle on every start - what it cannot do is check the zip you just downloaded against the published checksum; that is what this paste is for. A checksum from the same page proves the download is intact, not who published it - releases are unsigned for now, so publisher trust rests on the GitHub account and the HTTPS path.
Download every shard of one exact tested GGUF and revision from
docs/models.md, and keep all shards in one folder. Place your GGUF
under <drive>:\moe-models\<any-folder>\ and double-click Start-MoeDirect.cmd. Pick your
model with the arrow keys.
Approve the one-time repack (the launcher shows the exact disk cost and time before writing anything), press Enter when the status screen appears, and connect any OpenAI-compatible client to the printed URL.
That is the whole loop. The first run repacks once (minutes to ~18 minutes here, with live progress); every later run goes straight to serving. A cold session's first conversation is the slowest by design; later turns reuse the prefix cache, and a restored exact prefix can skip that first-prefill entirely.
Prefer watching first? The setup walkthrough is a single real-time take with chapters, including the waits.
Windows SmartScreen will warn you: these preview builds are unsigned, so "Windows protected your PC" is the expected message, not a verdict on your download. Verify the SHA-256 and decide for yourself. We never ask you to disable Defender or SmartScreen. Details, including managed-PC cases, are in Getting started.
Full detail for every step, including what success looks like on screen: docs/getting-started.md. Connecting a chat client or an agent: docs/clients.md.
| Model | Experts | Expert store | Tier |
|---|---|---|---|
| Qwen3.5-122B-A10B Q4_K_M — start here | 256 (top-8) | 72.8 GB | reference-validated |
| gpt-oss-120b MXFP4 | 128 (top-4) | 61 GB | format-validated |
| Qwen3.5-35B-A3B Q4_K_M | 256 (top-8) | 19.5 GB | format-validated |
| Qwen3.5-397B-A17B Q4_K_M | 512 (top-10) | shown before write | format-validated |
| Kimi K2.6 447 GB mixed-quant | 384 (top-8) | 436 GB | format-validated |
| DeepSeek-V4-Flash-0731 MXFP4/Q8_0 | 256 (top-6) | shown before write | format-validated |
reference-validated means both the byte-exact format gate and the frozen performance gate
passed on the reference machine; format-validated means the byte-exact gate passed and any
speed number is an observation. An unlisted GGUF of a known architecture can also be served
through the experimental template path, clearly labelled.
Exact repositories, pinned revisions, minimum cache budgets, prefetch states and the template path: docs/models.md.
Every number ships with the conditions it was measured under; these are the headlines.
| What | Result | Evidence |
|---|---|---|
| Qwen3.5-122B sustained decode | 5.59-5.69 tok/s, frozen release gate passed; about 2.3x over the same binary's plain-mmap path | release-gate run |
| Qwen3.5-122B paired probe | 5.65-6.26 per probe, arm average 5.96 tok/s | paired probe |
| Output parity, direct-read vs stock path (gpt-oss-120b, greedy) | 12 paired responses, token IDs identical | paired run |
| Kimi K2.6 (1T class) from 32 GB RAM | 1.03 tok/s, coherent output | probe |
| Your weights after the one-time repack | byte-for-byte the source tensors: on the packed path every record is SHA-256 verified, and a virtual repack never copies them at all | fail-closed gate |
Results scale primarily with NVMe read throughput; treat them as data points from the reference machine (32 GB RAM, one RTX 5080, Gen5 NVMe), not as promises for yours. Which build each number came from, the full protocols and the grading rules: docs/measured-results.md, TECHNICAL.md and each release's notes.
Work ships one piece per release, when it is measured, not on a schedule.
PROBE: it compares in-place with prefetch
against in-place without it, not against the packed path, and it was measured on a working
tree that predates the release binary rather than re-run on this zip's.copy integrity reads PASS although
a virtual repack copies nothing; serving validation and the reference numbers are the
packed profile's; and a -Repro or -Smoke run can go as far as printing
performance gate : PASS, which is a packed verdict on a path that is not under that
gate at all. What actually checks a virtual repack is a separate 8-item plan gate and
the engine's own re-derivation, and that screen shows none of it. These gaps are
known, measured, and are exactly what the next release exists to close.What you are holding is the floor, not the ceiling.
Full detail on what has already shipped: docs/models.md, docs/measured-results.md, docs/warm-start.md and docs/disk-layout.md.
The status= line the launcher prints, every status code and its fix:
docs/troubleshooting.md.
| Read this for | File |
|---|---|
| Requirements, install, first run, what success looks like | docs/getting-started.md |
| Model list, pinned revisions, running an unlisted model | docs/models.md |
| How the direct-read path works | docs/how-it-works.md |
| All measurements, protocols and grades | docs/measured-results.md |
| Connecting chat clients and agents | docs/clients.md |
| Warm start and prompt precompute | docs/warm-start.md |
| What gets written to disk; update, reset, uninstall | docs/disk-layout.md |
| Status codes, troubleshooting, reporting problems | docs/troubleshooting.md |
| Known limitations and FAQ | docs/faq.md |
| The long version: every technique and every number | TECHNICAL.md |
And if you are curious how this actually gets built: some of my working records are up in docs/design-notes/, as-is. They are in Korean — I am a Korean developer, the design and the decisions are mine, and my AI assistants draft and cross-check under my direction — but each file opens with a short English TL;DR, and the notes preserve their round-by-round review history and references (the referenced private workspace files are not included). If that is your kind of thing, have a look.
Built on llama.cpp (MIT), base commit 0bd0ec6 (b10057) -
upstream copyright and license preserved; source releases keep all upstream notices. See
THIRD_PARTY_NOTICES.md.
MoE-Direct additions (c) 2026 tmxkzm1925-max, released under the MIT License. The MoE-Direct name identifies this project and its official builds - see TRADEMARKS.md. If you use this work, please cite it (CITATION.cff). Archived releases carry a DOI: 10.5281/zenodo.21739367.
Thanks. This project was built by one person with a great deal of machine help, and the help was not incidental. Anthropic's Claude and OpenAI's GPT models did design work, implementation and, just as usefully, adversarial review of each other's output, under human direction and with every change gated by the verification this project's documents describe. Having a second and a third reader who never got tired is most of the reason the checking here is as strict as it is.
Thanks are owed as well to the teams whose models this was measured against: Qwen, DeepSeek, Moonshot AI, OpenAI for gpt-oss, and Mistral. None of them are affiliated with this project and none of them have endorsed it. They published weights that one person with one desktop could actually study, and without that there would have been nothing here to run.
64 commits
PowerShell
56.2%
Python
43.7%