{"adoption": {"forks": 226, "observed_at": "2026-08-28T04:08:12.013474+00:00", "stars": 3630}, "canonical_url": "https://ross.abutalabs.com/products/twinny", "card": {"archived": true, "artifact_type": "plugin", "description": "The most no-nonsense, locally or API-hosted AI code completion plugin for Visual Studio Code - like GitHub Copilot but 100% free.", "domain": ["developer-tools", "artificial-intelligence", "large-language-models", "text-editors"], "enriched": true, "function": ["llm-inference", "agent-framework", "rag", "chatbot"], "health_score": 10, "homepage": "https://twinny.dev", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "abandoned", "member_repos": ["twinnydotdev/twinny"], "name": "twinnydotdev/twinny", "platform": ["editor-plugin", "cross-platform"], "pushed_at": "2025-08-07T10:12:07+00:00", "repo": "twinnydotdev/twinny", "stars": 3630, "tags": ["vscode-extension", "code-completion", "copilot-alternative", "ollama", "local-ai", "fill-in-the-middle", "workspace-embeddings", "p2p-inference"], "topics": ["artificial-intelligence", "code-generation", "vscode-extension", "code-completion", "copilot", "codellama", "llama2", "ollama", "ollama-api", "code-chat", "free", "ollama-chat", "private", "llamacpp", "symmetry"], "urls": [], "use_cases": ["get free AI code completion in vscode without github copilot", "run code completion locally with ollama for privacy", "chat with an AI about my code inside the editor", "generate git commit messages automatically", "get refactoring and test suggestions from an LLM in vscode", "use workspace embeddings for context-aware AI coding help"], "what_it_is": "Twinny is a free, MIT-licensed Visual Studio Code extension providing AI code completion (fill-in-the-middle) and code chat, working with local Ollama/llama.cpp endpoints or hosted APIs like OpenAI and Anthropic. It includes workspace embeddings for context-aware assistance and a P2P 'Symmetry' network for sharing AI inference. The project has since been archived.", "when_to_avoid": ["you need actively maintained software - the project is archived", "you use an editor other than VS Code", "you need enterprise support or guaranteed updates"], "when_to_choose": ["you want a free, open-source Copilot alternative in VS Code", "you need offline/local AI completion via Ollama or llama.cpp", "you want code chat, commit message generation, and diff views in one extension"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/twinny", "repo": "twinnydotdev/twinny", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:31:53.669941+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85273267fb3e0e5d1366c793a5da9acad10a1405d3670ef5b0e84ae9fc0e202b", "fetched_at": "2026-08-28T04:08:12.013474+00:00", "kind": "readme", "missing": false, "url": "https://github.com/twinnydotdev/twinny"}, {"content_hash": "68b48fde30d835bca6a354282763b93b778fd0b0f3c239ece097e5b6b9e38abd", "fetched_at": "2026-08-29T09:26:34.400707+00:00", "kind": "homepage", "missing": false, "url": "https://twinny.dev"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:31:53.669941+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85273267fb3e0e5d1366c793a5da9acad10a1405d3670ef5b0e84ae9fc0e202b", "fetched_at": "2026-08-28T04:08:12.013474+00:00", "kind": "readme", "missing": false, "url": "https://github.com/twinnydotdev/twinny"}, {"content_hash": "68b48fde30d835bca6a354282763b93b778fd0b0f3c239ece097e5b6b9e38abd", "fetched_at": "2026-08-29T09:26:34.400707+00:00", "kind": "homepage", "missing": false, "url": "https://twinny.dev"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:31:53.669941+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85273267fb3e0e5d1366c793a5da9acad10a1405d3670ef5b0e84ae9fc0e202b", "fetched_at": "2026-08-28T04:08:12.013474+00:00", "kind": "readme", "missing": false, "url": "https://github.com/twinnydotdev/twinny"}, {"content_hash": "68b48fde30d835bca6a354282763b93b778fd0b0f3c239ece097e5b6b9e38abd", "fetched_at": "2026-08-29T09:26:34.400707+00:00", "kind": "homepage", "missing": false, "url": "https://twinny.dev"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:31:53.669941+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85273267fb3e0e5d1366c793a5da9acad10a1405d3670ef5b0e84ae9fc0e202b", "fetched_at": "2026-08-28T04:08:12.013474+00:00", "kind": "readme", "missing": false, "url": "https://github.com/twinnydotdev/twinny"}, {"content_hash": "68b48fde30d835bca6a354282763b93b778fd0b0f3c239ece097e5b6b9e38abd", "fetched_at": "2026-08-29T09:26:34.400707+00:00", "kind": "homepage", "missing": false, "url": "https://twinny.dev"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:31:53.669941+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85273267fb3e0e5d1366c793a5da9acad10a1405d3670ef5b0e84ae9fc0e202b", "fetched_at": "2026-08-28T04:08:12.013474+00:00", "kind": "readme", "missing": false, "url": "https://github.com/twinnydotdev/twinny"}, {"content_hash": "68b48fde30d835bca6a354282763b93b778fd0b0f3c239ece097e5b6b9e38abd", "fetched_at": "2026-08-29T09:26:34.400707+00:00", "kind": "homepage", "missing": false, "url": "https://twinny.dev"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:31:53.669941+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85273267fb3e0e5d1366c793a5da9acad10a1405d3670ef5b0e84ae9fc0e202b", "fetched_at": "2026-08-28T04:08:12.013474+00:00", "kind": "readme", "missing": false, "url": "https://github.com/twinnydotdev/twinny"}, {"content_hash": "68b48fde30d835bca6a354282763b93b778fd0b0f3c239ece097e5b6b9e38abd", "fetched_at": "2026-08-29T09:26:34.400707+00:00", "kind": "homepage", "missing": false, "url": "https://twinny.dev"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:12.013474+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:31:53.669941+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85273267fb3e0e5d1366c793a5da9acad10a1405d3670ef5b0e84ae9fc0e202b", "fetched_at": "2026-08-28T04:08:12.013474+00:00", "kind": "readme", "missing": false, "url": "https://github.com/twinnydotdev/twinny"}, {"content_hash": "68b48fde30d835bca6a354282763b93b778fd0b0f3c239ece097e5b6b9e38abd", "fetched_at": "2026-08-29T09:26:34.400707+00:00", "kind": "homepage", "missing": false, "url": "https://twinny.dev"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:31:53.669941+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85273267fb3e0e5d1366c793a5da9acad10a1405d3670ef5b0e84ae9fc0e202b", "fetched_at": "2026-08-28T04:08:12.013474+00:00", "kind": "readme", "missing": false, "url": "https://github.com/twinnydotdev/twinny"}, {"content_hash": "68b48fde30d835bca6a354282763b93b778fd0b0f3c239ece097e5b6b9e38abd", "fetched_at": "2026-08-29T09:26:34.400707+00:00", "kind": "homepage", "missing": false, "url": "https://twinny.dev"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:31:53.669941+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85273267fb3e0e5d1366c793a5da9acad10a1405d3670ef5b0e84ae9fc0e202b", "fetched_at": "2026-08-28T04:08:12.013474+00:00", "kind": "readme", "missing": false, "url": "https://github.com/twinnydotdev/twinny"}, {"content_hash": "68b48fde30d835bca6a354282763b93b778fd0b0f3c239ece097e5b6b9e38abd", "fetched_at": "2026-08-29T09:26:34.400707+00:00", "kind": "homepage", "missing": false, "url": "https://twinny.dev"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:31:53.669941+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "85273267fb3e0e5d1366c793a5da9acad10a1405d3670ef5b0e84ae9fc0e202b", "fetched_at": "2026-08-28T04:08:12.013474+00:00", "kind": "readme", "missing": false, "url": "https://github.com/twinnydotdev/twinny"}, {"content_hash": "68b48fde30d835bca6a354282763b93b778fd0b0f3c239ece097e5b6b9e38abd", "fetched_at": "2026-08-29T09:26:34.400707+00:00", "kind": "homepage", "missing": false, "url": "https://twinny.dev"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 35, "longevity": 79, "rhythm": 40}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["archived"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1108, "days_push": 391, "days_rel": 505, "gap_med": 21.5, "n_releases_24m": 9}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}