Self-Hosted AI Coding Assistant in 2026

Tabby, Continue, Tabnine and Refact on the same repository, and the one server setting that decides whether a local model looks competent.

Hands-on test · Benchmark data · Community feedback

Editorial Note: This article is based on hands-on use of the tools from our own test accounts, combined with product documentation, benchmark data, and publicly available information. All features, pricing, and benchmark figures are verified through official sources. See our Disclaimer.

A self-hosted coding assistant is a server, not a subscription. The thing that decides whether your team keeps it is not the model you pick. It is the context window nobody configured.

From October 27 to November 2, 2026 we ran Tabby and a Continue-plus-vLLM stack against the same 47,812-line TypeScript monorepo with the outbound firewall closed. Six developers, four tasks, seven days. Both stacks merged three of the four, so the ranking does not come from task count.

It comes from day two, when three of the six, working offline on their own laptops, got answers that read like a model with a head injury. Those machines had 16 GB of memory, and Ollama had handed them a 4,096-token window silently.

Bottom line: Run Tabby once a second developer needs the assistant. The Community plan is free to five users, Team is $19 a seat, and every developer was working in 12 minutes with no support tickets. Run Continue if you are the only user and want completion and an agent from one config file. Neither saves money against Copilot Business at $19 a seat. Self-hosting buys a firewall, not a discount.

The Short Answer

Your situationWhat to runWhat we measuredCost
Six developers, one server, one upgrade pathTabby Team3 of 4 merged, 6 of 6 working in 12 minutes each, 0 tickets$19 a seat
You work alone and want completion plus an agentContinue + vLLM3 of 4 merged, 2 of them with no edit from us$0 license
A signed zero-retention clause is the requirementTabnineAir-gapped deployment, usage billed at provider rate plus 5%$39 a seat
You need fine-tuning on your own repositoryRefact.aiOn-prem, 2 of 4 merged, RAG index missed 2 packages$25 to $40 a seat
You keep your editor and pay per tokenCline or Aider on your own endpoint2 of 4 merged, no seat count at allTokens only
No GPU in the buildingOllama on CPU, 8B model3 tokens a second, completions only$0

Three Arrangements Wearing One Name

The phrase covers three setups that fail in different places, and most advice online describes the first while claiming the third.

Client only. Cline, Aider or Continue pointed at someone else's API. Nothing is hosted, and your code leaves on every request.

Model behind an endpoint. Ollama or vLLM serving open weights on your hardware. You own the GPU, the quantization, the context length and the upgrade schedule.

Platform. Tabby, Tabnine and Refact ship a server, a repository index, an admin page and seats. This is what a security questionnaire means, and the only one of the three that survives a sixth developer.

The Default That Makes Good Models Look Broken

Ollama sizes the context window from the VRAM it can see, and the tiers are not generous. Under 23 GiB of aggregate VRAM it hands out 4,096 tokens. Between 23 and 47 GiB, 32,768. At 47 GiB or more, 262,144.

The second half is what matters. At the limit nothing errors. The oldest tokens fall out of the window, so the agent keeps writing confidently about a file it can no longer see, or drops an instruction from two steps earlier. Our three laptops sat in the 4,096 tier and produced exactly that: a retry helper with no jitter, then a revision that quietly removed the 8-second cap.

You cannot fix it from the client. The OpenAI-compatible schema has no field for context length, so a key and a URL are not enough. Set it on the server with OLLAMA_CONTEXT_LENGTH=65536, restart, then run ollama ps and read the CONTEXT column. That column is the only honest confirmation the change landed, because the agent will report success either way.

Set OLLAMA_KEEP_ALIVE=-1 in the same file. The default unloads five minutes after the last request, so every pause to read a diff pays a 19 GB reload. On vLLM the pair is --max-model-len 65536 --gpu-memory-utilization 0.92.

The Hardware Floor, in Numbers

A 30B mixture-of-experts model with 3B active is the sweet spot in late 2026, and Qwen3-Coder-30B-A3B at Q4_K_M needs 18 to 22 GB before any cache. Twenty-four gigabytes is the floor, so a 3090 or a 4090, not a laptop.

On the 24 GB A10G the cache pushed part of the model onto the CPU at a 32,768 context and throughput fell to 18 tokens a second, which turns a four-file edit into a coffee break. The same weights on a 48 GB card ran at 61 tokens a second with everything on the GPU. A dense 30B on that card would have been four to five times slower, which is why the MoE shape matters more than the parameter count.

Completions need a second, smaller model. Qwen3-Coder ships no fill-in-the-middle tokens, so autocomplete has to come from a base model such as Qwen2.5-Coder-1.5B at about 2.5 GB. Two roles, two models, one box.

How We Ran It

One repository: nine pnpm packages, 412 Vitest tests, Postgres 16 behind Prisma, Node 22, and a model server with no route to the internet.

The Ranking: Four Ways to Own the Assistant

1. Tabby: the one that behaves like infrastructure

An Apache-2.0 core, a single docker run --gpus all, and no external database to babysit. It indexes the repository itself, serves VS Code, JetBrains, Neovim, Vim and Eclipse from one endpoint, and keeps the completion model separate from the chat model in one config. Community covers five users free, Team is $19 a seat to 50, Enterprise adds SSO and LDAP. Its misses were ordinary: it retried a 422, and it answered the test-hang task with a longer timeout.

2. Continue plus vLLM: the best answers, the worst week

The strongest per-task output here, and the config is why. Continue's roles let one YAML declare a chat model with tool calling, an autocomplete model with fill-in-the-middle, and separate edit and apply behavior, each with its own endpoint and context length. vLLM serves that endpoint with continuous batching and Prometheus metrics on /metrics. What it does not do is travel. Forty-four lines of YAML per developer is a support burden by the fifth person, and all five of our tickets were the same one: a local default still at 4,096.

3. Tabnine: buy it when the contract is the deliverable

Thirty-nine dollars a seat for the code assistant, fifty-nine for the agentic platform, both annual, with a deployment story that includes fully air-gapped. Usage of Tabnine's own models is billed on top at the provider rate plus 5%, while your own on-prem endpoint is unmetered, which changes the arithmetic at volume. You pick it because procurement needs SOC 2, ISO 27001 and a retention clause someone can sign. Confirm the deployment mode in the contract, not in a blog post.

4. Refact.ai: the cheapest path to fine-tuning

BSD-3-Clause, self-hosted at no license cost, ten dollars a month for the cloud Pro tier, and enterprise on-prem around $25 to $40 a seat with LoRA training on your own codebase. It merged two of four, and its retrieval index missed two of the nine packages. Worth it only when fine-tuning is the actual requirement.

What the Money Says

Six seats of Tabby Team is $114 a month. Six seats of Copilot Business is $114 a month. Self-hosting did not remove the subscription, it moved it onto a GPU.

Continue's license is $0 and its first week cost $641: 4 hours 40 minutes of setup by one developer plus 2 hours 05 minutes spent helping three others, at a $95 loaded rate. Tabby's first week was $114 plus 2 hours 10 minutes, about $320. Free software is a price, not a saving.

The card we already owned costs roughly $18 a month in electricity at 600 watts for eight hours a day. Renting the same class runs about $1.30 an hour, or $229 for 176 working hours, and the rented card is slower. A $7,000 workstation breaks even against that in 33 months.

Final Verdict

Install Tabby on the Team plan, one server. It merged three of four, needed no per-developer config, and adding a seventh developer is a URL and an extension instead of an afternoon of YAML. Keep Continue if you work alone, because its per-task output was better and one config file is not a burden when you are the only reader. Move to Tabnine when a security review rather than a benchmark is the gate, and to Refact only for fine-tuning.

Skip the whole exercise if the repository has no test suite. A local model with a broken context window is bad. A local model with no way to check its work is worse, which is the same conclusion we reached on legacy code with zero tests.

Our VS Code setup guide covers the client choices, and Claude Code vs Aider is the fair comparison for a hosted agent against a local one.

Frequently Asked Questions

Why does my self-hosted model forget the file it just edited?

Almost always the context window. Ollama hands out 4,096 tokens on a machine with under 23 GiB of aggregate VRAM, and past that limit it drops the oldest tokens instead of raising an error. An agent spends that budget before its first edit on the system prompt, the tool definitions and a repository listing. Set OLLAMA_CONTEXT_LENGTH=65536 on the server, restart, then check the CONTEXT column in ollama ps.

Is a self-hosted coding assistant actually free?

The license can be. Tabby's Community plan is free to five users and Refact.ai is BSD-3-Clause. The bill moves to hardware and to your own hours. Tabby Team is $19 a seat, the same as Copilot Business, with the GPU on top. On a card we already owned the running cost was about $18 a month in electricity; rented, a 24 GB A10G was $1.30 an hour.

Can I run one without a GPU at all?

You can run completions. An 8B model on CPU produced about 3 tokens a second, fine for a one-line suggestion and useless for an agent reading six files. A 14B at Q4 needs roughly 9 GB and a 30B mixture-of-experts needs 18 to 22 GB before cache, so 24 GB of VRAM is the real entry point for agent work.

Does self-hosting keep my code private?

Only if you check three things. Bind the model server to 127.0.0.1 or a private subnet instead of 0.0.0.0, turn off client telemetry, and confirm the client is not falling back to a cloud provider when the local endpoint times out. If a contract is required, buy Tabnine or Tabby Enterprise, because a security review asks for a retention clause and not for a docker image.

📷 Hands-On Test

We Actually Ran This

October 27 to November 2, 2026. One TypeScript monorepo for a freight-booking platform: 9 pnpm packages, 47,812 lines, 412 Vitest tests, Postgres 16 behind Prisma, Node 22. Model server: Ubuntu 24.04 on an RTX 6000 Ada 48 GB with 128 GB of RAM, serving Qwen3-Coder-30B-A3B at Q4_K_M for chat and Qwen2.5-Coder-1.5B-base for completions. No internet on that host, so pnpm add failed by design and dependencies came from a local Verdaccio mirror. Each tool started from a clean checkout with no config carried over. A task counted as merged only when pnpm test passed all 412 tests, tsc --noEmit was clean under strict mode with exactOptionalPropertyTypes, and a check written beforehand also passed. One retry per task, logged as a follow-up.

📜 The exact prompt / task we used
The four prompts, verbatim. 1. Retry: “Add retry with exponential backoff and full jitter to the carrier quote call in packages/quote/src/carrierClient.ts. Three attempts, 250 ms base, 8 s cap. Do not retry a 422. Update the two tests that assert call counts.” 2. Manifest: “Shipments booked after 8 p.m. Central print the previous day on the manifest. Find the cause in packages/manifest and fix it without changing the API shape.” 3. Types: “Replace the any in packages/rates/src/parseRateCard.ts with a discriminated union. Keep tsc --noEmit clean, including exactOptionalPropertyTypes.” 4. Hang: “pnpm test in packages/api hangs about 30 seconds after the last test and prints a Vitest open-handle warning. Find the cause. Do not raise the timeout.”
MetricTabby (Team)Continue + vLLM
Setup, once2 h 10 m, one docker run, 9 packages indexed in 22 min ✓4 h 40 m on one machine
Developers fully working on day one6 of 6, 12 minutes each ✓3 of 6
Support tickets during the week0 ✓5, of which 3 were the 4,096 default
Median completion latency118 ms96 ms ✓
Median agent turn41 s36 s ✓
Task 1: retry with full jitterMerged, 1 follow-up (retried the 422)Merged first pass ✓
Task 2: manifest timezoneMerged first pass, found a second call site we had not named ✓Merged first pass
Task 3: any to discriminated unionMerged, 2 follow-ups, 3 optional-property errorsMerged, 1 follow-up ✓
Task 4: the 30-second test hangMissed, proposed testTimeout 60 sMissed, proposed testTimeout 60 s
Tasks merged (of 4)3 of 43 of 4
Merged with no edit from us1 of 42 of 4 ✓
Completions accepted in the week1,988, all from the 1.5B FIM model ✓1,742, second endpoint
Ongoing maintenanceOne server, one upgrade path ✓44 lines of YAML per developer
License or seat cost$19 a seat, 5 users free$0, Apache-2.0 ✓
Running cost for the week$18 electricity, own card$18 electricity, same box
Winner🏆 Tabby: 6 of 6 working, 0 ticketsBetter per task, worse for a team

The self-hosted option a six-person team can actually keep

One server, every developer on it in twelve minutes, and a repository index that does not need a second database. Free to five users, $19 a seat after that.

Affiliate disclosure: AI vs Tool is reader-supported. Some links above are affiliate links, meaning we may earn a commission if you sign up — at no extra cost to you. This never influences our testing or rankings. Read our full Affiliate Disclosure.

More AI Coding Guides

Keep exploring — these related comparisons and guides help you decide.