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.

Windows 10 / 11 · x64 MIT licensed No GPU required Version 1.131.0

Next-edit prediction: after the refill line changed, Freya proposes the timestamp update that has to follow it — from a model running on the same machine, with the network switched off.

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.json carries none of enableTelemetry, updateUrl, appCenter or extensionsGallery.
  • 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
Model1.5B, fill-in-the-middle3B instruct
WhenWhile you typeWhen you click the error
Shown asFaint ghost text, Tab to acceptA diff to approve
Measured171–230 ms~6 s
WhyThe parser already knows what is missingNeeds 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 Windows

Source · 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 GitHub

Windows 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?
Yes, and it stays free. There is no account, no licence key and no paid tier. It costs us nothing to run because it runs on your machine, not ours. Tungsten is MIT licensed, like the Visual Studio Code source it is built from.
Does my code leave my machine?
No. The default build makes no outbound network request for AI at all. Both models run as llama.cpp child processes bound to 127.0.0.1, on ports 11435 and 11436. This is enforced by a test that walks the real import graph from the extension entry point and fails the build if any reachable module contains a URL to anything other than localhost.
Do I need to install a model or sign up for an API key?
No. Both models ship inside the application: Qwen2.5-Coder-1.5B base for completion and IBM Granite-3B-Code-Instruct for instructions. Autocomplete works the first time you open a file, with no network connection and no account.
Which models does Tungsten run, and why two?
Qwen2.5-Coder-1.5B base handles anything that is a continuation of what you already wrote: inline completion, next-edit prediction, syntax fixes, commit messages. IBM Granite-3B-Code-Instruct handles anything phrased as an instruction: explain, rewrite a selection, fix a semantic error, generate tests, refactor, the chat. The split is not about size. A base model cannot follow an instruction, and an instruct model is worse at fill-in-the-middle.
How fast is autocomplete?
The completion model is loaded at startup and stays warm, so a suggestion arrives in roughly 200 to 400 ms on a CPU. The ghost-text syntax fix measures 171 to 230 ms. Instruct work is slower by nature: a semantic fix takes about 6 seconds, because the 3B loads on first use and has to read the surrounding types.
Do I need a GPU?
No. 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 selected at runtime, so a processor without AVX2 works too.
What are the system requirements?
Windows 10 or 11 on x64, 8 GB of RAM (16 GB is more comfortable), and about 4.5 GB of free disk space. No GPU and no network connection are required.
Can Freya edit files or run commands on its own?
No. Every surface that changes code shows you a diff first, and applying it re-checks that the file has not changed since the diff was opened. The chat has no tools at all: it cannot read files, write files or run commands. The autonomous agent that could do those things is retired.
Why does Windows say the publisher is unknown?
Tungsten is not code-signed. A Windows code-signing certificate costs several thousand kronor a year and that money went into the product instead. SmartScreen will warn you; the installer says the same thing before it installs anything, and links to the source so you can check it yourself.
Does binding Ctrl+K break the VS Code chords?
No. On a single Ctrl+K press the keybinding resolver collects every binding starting with that chord and runs the last one whose when clause matches. Inline edit is bound with when: editorHasSelection, so Ctrl+K opens inline edit while text is selected and stays a chord prefix otherwise. The trade-off, stated plainly: while a selection is active the Ctrl+K chords are not reachable. Ctrl+K Ctrl+I works either way.
Is Tungsten related to Microsoft or to VS Code?
Tungsten is a fork of the open-source Visual Studio Code repository and keeps Microsoft's upstream copyright intact under the MIT licence. It is not affiliated with, endorsed by, or supported by Microsoft. There is no marketplace connection, no telemetry endpoint and no update server.
Does Tungsten use the ODEN search API?
No. They are separate products from the same one-person company. Tungsten needs no network at all; ODEN is a hosted web search API for LLMs. Buying one has nothing to do with the other.

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.