Tabby, Continue, Tabnine and Refact on the same repository, and the one server setting that decides whether a local model looks competent.
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.
| Your situation | What to run | What we measured | Cost |
|---|---|---|---|
| Six developers, one server, one upgrade path | Tabby Team | 3 of 4 merged, 6 of 6 working in 12 minutes each, 0 tickets | $19 a seat |
| You work alone and want completion plus an agent | Continue + vLLM | 3 of 4 merged, 2 of them with no edit from us | $0 license |
| A signed zero-retention clause is the requirement | Tabnine | Air-gapped deployment, usage billed at provider rate plus 5% | $39 a seat |
| You need fine-tuning on your own repository | Refact.ai | On-prem, 2 of 4 merged, RAG index missed 2 packages | $25 to $40 a seat |
| You keep your editor and pay per token | Cline or Aider on your own endpoint | 2 of 4 merged, no seat count at all | Tokens only |
| No GPU in the building | Ollama on CPU, 8B model | 3 tokens a second, completions only | $0 |
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.
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.
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.
One repository: nine pnpm packages, 412 Vitest tests, Postgres 16 behind Prisma, Node 22, and a model server with no route to the internet.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
| Metric | Tabby (Team) | Continue + vLLM |
|---|---|---|
| Setup, once | 2 h 10 m, one docker run, 9 packages indexed in 22 min ✓ | 4 h 40 m on one machine |
| Developers fully working on day one | 6 of 6, 12 minutes each ✓ | 3 of 6 |
| Support tickets during the week | 0 ✓ | 5, of which 3 were the 4,096 default |
| Median completion latency | 118 ms | 96 ms ✓ |
| Median agent turn | 41 s | 36 s ✓ |
| Task 1: retry with full jitter | Merged, 1 follow-up (retried the 422) | Merged first pass ✓ |
| Task 2: manifest timezone | Merged first pass, found a second call site we had not named ✓ | Merged first pass |
| Task 3: any to discriminated union | Merged, 2 follow-ups, 3 optional-property errors | Merged, 1 follow-up ✓ |
| Task 4: the 30-second test hang | Missed, proposed testTimeout 60 s | Missed, proposed testTimeout 60 s |
| Tasks merged (of 4) | 3 of 4 | 3 of 4 |
| Merged with no edit from us | 1 of 4 | 2 of 4 ✓ |
| Completions accepted in the week | 1,988, all from the 1.5B FIM model ✓ | 1,742, second endpoint |
| Ongoing maintenance | One 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 tickets | Better per task, worse for a team |
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.
Keep exploring — these related comparisons and guides help you decide.