Local · private · free
Tungsten — local, private AI code editor
A fork of Visual Studio Code with two AI models inside the application. Completion, explanations, refactors and fixes all run as processes on your own machine. The default build makes no outbound network request for AI at all — no account, no API key, no telemetry.
What it is
Tungsten is Visual Studio Code with the AI built into the editor instead of bolted on as an extension, and with the models shipped in the box instead of rented from an API. The assistant is called Freya.
Everything an editor asks a model to do all day — finish this line, guess
the missing brace, explain this, rename that, write the commit message —
happens on 127.0.0.1. There is nothing to sign up for, nothing
to install afterwards and no monthly bill, because the compute is yours.
Two models, and the line between them
Both ship inside the app. The split is not about size — it is about whether you had to write an instruction, or the model is just continuing what is already on screen. A base model cannot follow an instruction, and an instruct model is worse at fill-in-the-middle, so neither lane is collapsed into the other to save a download.
Completion lane
Continuing what you wrote
Qwen2.5-Coder-1.5B base
- Runs on
- 127.0.0.1:11435
- Lifetime
- Loaded at startup, stays warm
- Memory
- ~940 MB resident
- Context
- 4,096 tokens
- Does
- Inline completion, whole blocks, return values, type signatures, next-edit prediction, ghost-text syntax fixes, commit messages
- Called
- On every keystroke
Instruct lane
Doing what you asked
IBM Granite-3B-Code-Instruct
- Runs on
- 127.0.0.1:11436
- Lifetime
- Loads on first use, released after 5 min idle
- Memory
- ~2.0 GB resident, while in use
- Context
- 8,192 tokens
- Does
- Explain, inline edit, semantic fixes, generate tests, refactor presets, better names, second opinion, the chat
- Called
- When you ask
Two child processes of the same llama-server binary on two
ports. Sharing one port would mean a fill-in-the-middle request occasionally
landing in the instruct model — which returns nonsense, not an error. The 3B
is on demand because 940 MB and 2.0 GB resident at once leaves no
room for the editor on an 8 GB machine.
Why local
Not as a slogan. Three concrete consequences, in the order they show up when you actually use it.
Your employer's code stays put
The interesting question about an AI editor is never which model it uses. It is which third party ends up holding your source. Here the answer is none: the model is a child process, and the port is loopback.
It works on a plane
Completion, explanations, refactors and commit messages all work with the network switched off. Nothing degrades when the connection does, because nothing depended on it.
The cost is fixed at zero
No per-token bill, no seat, no quota to watch. Autocomplete firing on every keystroke is only sane when a keystroke is free.
What we claim, and can show
- No outbound network request for AI. Both models are child
processes on
127.0.0.1. A test walks the real import graph from the extension entry point and fails the build if any reachable module contains a URL to anything but localhost. - No telemetry, no crash uploads, no update checks, no marketplace
pings.
product.jsoncarries none ofenableTelemetry,updateUrl,appCenterorextensionsGallery. - Nothing is written without a diff. One module is the only route from "the model suggested something" to "the file changed", and applying re-checks that the text has not moved since.
- No account, no key, no licence check. There is no server to talk to, so there is nothing to authenticate against.
What we do not claim
- Not silent on the network in an absolute sense. Chromium's own resolver may use DNS-over-HTTPS. That is the browser engine underneath the editor, not Tungsten.
- Extensions you install are your own business. Tungsten cannot make a third-party extension local, and installing one is a decision it does not audit for you.
- A 3B is not a frontier model. It is good at the jobs on this page and it will not architect your system for you. Where a bigger model would obviously win, we say so rather than pretend.
- Not code-signed. Windows will call the publisher unknown. See below — that is a budget decision, stated plainly, not an oversight.
Features
What is actually in the build, with the keybinding where there is one and the model that answers.
Inline completion
Fill-in-the-middle from the base model: whole blocks, return values, type signatures. Warm from startup, so a suggestion lands in a couple of hundred milliseconds rather than after a cold load.
Completion lane · 1.5B
Next-edit prediction Tab
After you change a line, it predicts where the following change belongs and what should go there — the timestamp that has to follow the counter, the second branch of the condition you just added.
Completion lane · 1.5B
Ghost-text syntax fix Tab
When the parser reports a missing brace or comma, the fix appears as faint text you accept with Tab. Measured at 171–230 ms: the parser already knows exactly what is missing, so there is nothing to reason about.
Completion lane · 1.5B
Semantic fix
For a type or logic error, from the lightbulb on the error. Slower and
differently shaped: the recent git diff goes along with the
file, because fixing it means understanding what the last change was
trying to do. Comes back as a diff to approve.
Instruct lane · 3B
Inline edit Ctrl+K
Select code, describe the change in a sentence, approve the diff. Ctrl+K Ctrl+I works with no selection and takes the line the cursor is on.
Instruct lane · 3B
Refactor presets Ctrl+K Ctrl+R
The refactors you actually reach for, as a pick list rather than a prompt you have to phrase — extract, invert, simplify, split.
Instruct lane · 3B
Explain selection
What this code does, in prose, without leaving the editor or pasting it into a browser tab belonging to someone else.
Instruct lane · 3B
Generate tests
Tests for the selected code, in the framework the repository already uses, detected rather than guessed.
Instruct lane · 3B
Suggest a better name
For the variable, function or type under the cursor. Small, and the thing you want twenty times a day.
Instruct lane · 3B
Second opinion
A review pass over a selection: what looks wrong, what looks unhandled, what a reviewer would ask about.
Instruct lane · 3B
Guide chat
A guide to the editor — settings, keybinds, features, and small coding questions. It has no tools and cannot touch your files, deliberately: a 3B sold as an autonomous agent promises what it cannot keep, and real changes belong where the selection and the diff already are.
Instruct lane · 3B
Commit messages
Reads git diff --staged and drafts a message into the commit
box, from the sparkle button in Source Control. You edit and commit
yourself — Freya never commits.
Completion lane · 1.5B
Local secret scanning
Pattern matching, no model, no network. Flags private keys, cloud and
provider tokens and JWTs on paste (with undo), continuously in Problems,
and in the staged diff before a commit. Placeholders like
process.env.X are not flagged, and .env files
are not nagged about — that is where secrets belong.
No model at all
Works in untrusted folders
Opening a folder you have not trusted does not silently switch the AI off: both lanes keep working, because they only read what you selected and only talk to a process Tungsten started. What a hostile workspace cannot do is redirect which binary launches or where text goes — those settings are locked from workspace scope, and a test fails the build if a new one is added unlocked.
Two kinds of error, two kinds of fix
Errors are split by what kind of error they are, and that split is why the common case feels instant. The boundary lives in one function that both sides call, so the two halves cannot drift apart.
| Syntax error missing }, ,, ; | Semantic error types, logic | |
|---|---|---|
| Model | 1.5B, fill-in-the-middle | 3B instruct |
| When | While you type | When you click the error |
| Shown as | Faint ghost text, Tab to accept | A diff to approve |
| Measured | 171–230 ms | ~6 s |
| Why | The parser already knows what is missing | Needs the types and the recent diff to understand intent |
System requirements
The bundled llama.cpp build is CPU-only on purpose. A 1.5B is
fast enough on a CPU, and running on any machine matters more than
running fastest on some — the package carries a dozen CPU variants picked
at runtime, so a processor without AVX2 works too.
OS
Windows 10 / 11
x64. macOS and Linux are not built yet.
CPU
Any x64
AVX2 not required.
Memory
8 GB
16 GB is more comfortable.
Disk
≈ 4.5 GB
Most of it the two models.
GPU
None
Not used, not needed.
Network
None
Only to download it once.
Download
Two forms of the same build, and the only difference is whether the 3B is already inside the installer. GitHub caps a release file at 2 GiB, which is what the split is for.
≈ 1.2 GB · one .exe
Windows installer
Ships with the completion model, so autocomplete works the moment it opens. The 3B instruct model is fetched the first time you use an instruct feature — with a pinned SHA-256 that is verified, and from a URL you can point at your own mirror.
Download for WindowsSource · MIT
Build it yourself
Tungsten builds the way Visual Studio Code builds. The model weights are not in git — a gigabyte of weights does not belong in history — so a script fetches the runtime with checked hashes, and prefers a GGUF you already have via Ollama over downloading another copy.
View on GitHubWindows will say "unknown publisher"
Tungsten is not code-signed, so SmartScreen reports the publisher as unknown. That is expected, not a symptom. A Windows code-signing certificate costs several thousand kronor a year and that money went into the product instead. The installer says the same thing to your face before it installs anything, and points at the source so you can check it yourself.
Questions
Is Tungsten free?
Does my code leave my machine?
Do I need to install a model or sign up for an API key?
Which models does Tungsten run, and why two?
How fast is autocomplete?
Do I need a GPU?
What are the system requirements?
Can Freya edit files or run commands on its own?
Why does Windows say the publisher is unknown?
Does binding Ctrl+K break the VS Code chords?
Is Tungsten related to Microsoft or to VS Code?
Does Tungsten use the ODEN search API?
Free, and it stays free
There is no paid tier planned, because there is no cost to cover: the inference happens on your hardware. Tungsten is MIT licensed, like the Visual Studio Code source it is built from.
Bundled components: llama.cpp (MIT),
Qwen2.5-Coder-1.5B (Apache-2.0),
IBM granite-3b-code-instruct (Apache-2.0).
All three permit redistribution in a packaged app.
Tungsten is not affiliated with, endorsed by, or supported by Microsoft.
Also from ODEN: the web search API for LLMs ·
API documentation ·
engineering notes