{"adoption": {"forks": 319, "observed_at": "2026-08-28T04:08:09.185226+00:00", "stars": 3541}, "canonical_url": "https://ross.abutalabs.com/products/farfalle", "card": {"archived": false, "artifact_type": "application", "description": "🔍 AI search engine - self-host with local or cloud LLMs", "domain": ["artificial-intelligence", "large-language-models", "self-hosted", "web-development"], "enriched": true, "function": ["search-engine", "llm-inference", "rag", "chatbot", "web-framework", "rate-limiting", "agent-framework"], "health_score": 20, "homepage": "https://www.farfalle.dev/", "language": "TypeScript", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["rashadphz/farfalle"], "name": "rashadphz/farfalle", "platform": ["self-hosted", "python", "cross-platform"], "pushed_at": "2024-09-27T07:52:45+00:00", "repo": "rashadphz/farfalle", "stars": 3541, "tags": ["perplexity-clone", "ai-search", "ollama", "litellm", "searxng", "fastapi", "nextjs", "generative-ui", "groq", "openai", "search", "natural-language-processing", "docker", "web-server", "nodejs"], "topics": ["fastapi", "nextjs", "perplexity", "react", "shadcn-ui", "tailwindcss", "gpt-4o", "groq", "openai", "generative-ui", "ollama", "llm", "search-engine"], "urls": [], "use_cases": ["self-host a Perplexity-style AI search engine", "answer questions with web search results using a local LLM", "run an AI search app with Ollama and llama3 or mistral", "build a private AI search without sending data to cloud providers", "compare search-augmented LLM answers across OpenAI, Groq, and local models", "deploy an AI answer engine with Docker"], "what_it_is": "Farfalle is an open-source, self-hosted AI-powered search engine that works like Perplexity, answering questions with cited web search results. It supports local LLMs via Ollama, custom models through LiteLLM, and cloud models from OpenAI and Groq, with multiple search providers including SearXNG, Tavily, Serper, and Bing.", "when_to_avoid": ["you need a managed hosted search API rather than a full web application", "you want a simple library to embed AI search into an existing app", "you need production-grade enterprise search with fine-grained access controls"], "when_to_choose": ["you want a self-hosted Perplexity alternative with full control over LLM and search providers", "you want to run AI search entirely locally with Ollama and SearXNG", "you need a Docker-deployable AI answer engine with chat history and expert search"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/farfalle", "repo": "rashadphz/farfalle", "role": "main", "score": 24}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.185226+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.700237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d77dd81d8d8f9d09478380f4541571caac3413d44531c61e3c3ab9816e97b120", "fetched_at": "2026-08-28T04:08:09.185226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rashadphz/farfalle"}, {"content_hash": "59bb447b000a030899dae5b564ed1ac2d251a8fae3f8aaf27469a74cf5ee4e39", "fetched_at": "2026-08-29T09:29:04.427046+00:00", "kind": "homepage", "missing": false, "url": "https://www.farfalle.dev/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.185226+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.700237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d77dd81d8d8f9d09478380f4541571caac3413d44531c61e3c3ab9816e97b120", "fetched_at": "2026-08-28T04:08:09.185226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rashadphz/farfalle"}, {"content_hash": "59bb447b000a030899dae5b564ed1ac2d251a8fae3f8aaf27469a74cf5ee4e39", "fetched_at": "2026-08-29T09:29:04.427046+00:00", "kind": "homepage", "missing": false, "url": "https://www.farfalle.dev/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.700237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d77dd81d8d8f9d09478380f4541571caac3413d44531c61e3c3ab9816e97b120", "fetched_at": "2026-08-28T04:08:09.185226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rashadphz/farfalle"}, {"content_hash": "59bb447b000a030899dae5b564ed1ac2d251a8fae3f8aaf27469a74cf5ee4e39", "fetched_at": "2026-08-29T09:29:04.427046+00:00", "kind": "homepage", "missing": false, "url": "https://www.farfalle.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:09.185226+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.185226+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.185226+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.700237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d77dd81d8d8f9d09478380f4541571caac3413d44531c61e3c3ab9816e97b120", "fetched_at": "2026-08-28T04:08:09.185226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rashadphz/farfalle"}, {"content_hash": "59bb447b000a030899dae5b564ed1ac2d251a8fae3f8aaf27469a74cf5ee4e39", "fetched_at": "2026-08-29T09:29:04.427046+00:00", "kind": "homepage", "missing": false, "url": "https://www.farfalle.dev/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.185226+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.185226+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.700237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d77dd81d8d8f9d09478380f4541571caac3413d44531c61e3c3ab9816e97b120", "fetched_at": "2026-08-28T04:08:09.185226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rashadphz/farfalle"}, {"content_hash": "59bb447b000a030899dae5b564ed1ac2d251a8fae3f8aaf27469a74cf5ee4e39", "fetched_at": "2026-08-29T09:29:04.427046+00:00", "kind": "homepage", "missing": false, "url": "https://www.farfalle.dev/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.185226+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.185226+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.185226+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.700237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d77dd81d8d8f9d09478380f4541571caac3413d44531c61e3c3ab9816e97b120", "fetched_at": "2026-08-28T04:08:09.185226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rashadphz/farfalle"}, {"content_hash": "59bb447b000a030899dae5b564ed1ac2d251a8fae3f8aaf27469a74cf5ee4e39", "fetched_at": "2026-08-29T09:29:04.427046+00:00", "kind": "homepage", "missing": false, "url": "https://www.farfalle.dev/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.185226+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.185226+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.700237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d77dd81d8d8f9d09478380f4541571caac3413d44531c61e3c3ab9816e97b120", "fetched_at": "2026-08-28T04:08:09.185226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rashadphz/farfalle"}, {"content_hash": "59bb447b000a030899dae5b564ed1ac2d251a8fae3f8aaf27469a74cf5ee4e39", "fetched_at": "2026-08-29T09:29:04.427046+00:00", "kind": "homepage", "missing": false, "url": "https://www.farfalle.dev/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.700237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d77dd81d8d8f9d09478380f4541571caac3413d44531c61e3c3ab9816e97b120", "fetched_at": "2026-08-28T04:08:09.185226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rashadphz/farfalle"}, {"content_hash": "59bb447b000a030899dae5b564ed1ac2d251a8fae3f8aaf27469a74cf5ee4e39", "fetched_at": "2026-08-29T09:29:04.427046+00:00", "kind": "homepage", "missing": false, "url": "https://www.farfalle.dev/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.700237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d77dd81d8d8f9d09478380f4541571caac3413d44531c61e3c3ab9816e97b120", "fetched_at": "2026-08-28T04:08:09.185226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rashadphz/farfalle"}, {"content_hash": "59bb447b000a030899dae5b564ed1ac2d251a8fae3f8aaf27469a74cf5ee4e39", "fetched_at": "2026-08-29T09:29:04.427046+00:00", "kind": "homepage", "missing": false, "url": "https://www.farfalle.dev/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.700237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d77dd81d8d8f9d09478380f4541571caac3413d44531c61e3c3ab9816e97b120", "fetched_at": "2026-08-28T04:08:09.185226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rashadphz/farfalle"}, {"content_hash": "59bb447b000a030899dae5b564ed1ac2d251a8fae3f8aaf27469a74cf5ee4e39", "fetched_at": "2026-08-29T09:29:04.427046+00:00", "kind": "homepage", "missing": false, "url": "https://www.farfalle.dev/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 61, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 860, "days_push": 705, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 24, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}