{"adoption": {"forks": 252, "observed_at": "2026-08-28T04:08:09.232760+00:00", "stars": 3542}, "canonical_url": "https://ross.abutalabs.com/products/surf", "card": {"archived": false, "artifact_type": "application", "description": "Personal AI Notebooks. Organize files & webpages and generate notes from them. Open source, local & open data, open model choice (incl. local).", "domain": ["developer-tools", "large-language-models", "web-development", "self-hosted", "privacy"], "enriched": true, "function": ["llm-inference", "rag", "chat-interface", "web-scraping", "pdf", "documentation", "search-engine", "data-visualization"], "health_score": 98, "homepage": "https://deta.surf", "language": "TypeScript", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["deta/surf"], "name": "deta/surf", "platform": ["windows", "cross-platform"], "pushed_at": "2026-08-24T17:05:49+00:00", "repo": "deta/surf", "stars": 3542, "tags": ["ai-notebook", "local-first", "knowledge-base", "note-taking", "ollama", "open-source", "smart-notes", "research-tool", "svelte", "rust", "typescript", "citations", "youtube-notes", "pdf-notes", "surflets", "knowledge-management", "natural-language-processing", "macos", "linux", "desktop", "electron"], "topics": ["local", "productivity", "rust", "svelte", "typescript", "claude", "deepseek", "gemma", "local-llm", "ollama", "openai", "knowledge-base", "knowledge-management", "llm"], "urls": [], "use_cases": ["generate notes from pdfs and youtube videos with ai", "organize research files and webpages into notebooks", "chat with my documents locally using local llms", "take ai-assisted notes with citations to sources", "research the web without switching between browser tabs", "create small interactive apps from my notes without coding", "summarize long pdfs and videos", "keep my notes private and stored locally in open formats"], "what_it_is": "Deta Surf is an open-source, local-first AI notebook for macOS, Windows, and Linux that lets users organize files, PDFs, websites, and YouTube videos into notebooks and generate smart notes from them with citations. It supports open model choice including OpenAI, Claude, DeepSeek, Gemma, and local LLMs via Ollama, and stores all data locally in open formats.", "when_to_avoid": ["you need a lightweight plain-text note app without AI features", "you want a mobile or web-only solution", "you dislike Electron-based desktop apps or need minimal resource usage", "you need mature, fully polished features - Surf is still in beta"], "when_to_choose": ["you want a local-first, private AI notebook with open data formats", "you want to bring your own LLM key or run local models via Ollama", "you research across mixed media like PDFs, websites, and videos and want citations back to sources", "you value open source and cross-platform desktop support"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/surf", "repo": "deta/surf", "role": "main", "score": 77}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.232760+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:34:28.042281+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "550dd18efc459393120cd55b3b16a5cb0837110c0ac47c4201105bc7de14c84e", "fetched_at": "2026-08-28T04:08:09.232760+00:00", "kind": "readme", "missing": false, "url": "https://github.com/deta/surf"}, {"content_hash": "fb33b2147a197c6aed3a276e087e128640860f492710d866b0fc4cf1f5ccc462", "fetched_at": "2026-08-29T09:28:59.454056+00:00", "kind": "homepage", "missing": false, "url": "https://deta.surf"}, {"content_hash": "57797f7b167cc02b6fed93560c54fab29b8ddd60c660b198912ba2e50b1af674", "fetched_at": "2026-08-29T09:28:59.456561+00:00", "kind": "site_page", "missing": false, "url": "https://deta.surf/faq"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.232760+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:34:28.042281+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "550dd18efc459393120cd55b3b16a5cb0837110c0ac47c4201105bc7de14c84e", "fetched_at": "2026-08-28T04:08:09.232760+00:00", "kind": "readme", "missing": false, "url": "https://github.com/deta/surf"}, {"content_hash": "fb33b2147a197c6aed3a276e087e128640860f492710d866b0fc4cf1f5ccc462", "fetched_at": "2026-08-29T09:28:59.454056+00:00", "kind": "homepage", "missing": false, "url": "https://deta.surf"}, {"content_hash": "57797f7b167cc02b6fed93560c54fab29b8ddd60c660b198912ba2e50b1af674", "fetched_at": "2026-08-29T09:28:59.456561+00:00", "kind": "site_page", "missing": false, "url": "https://deta.surf/faq"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:34:28.042281+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "550dd18efc459393120cd55b3b16a5cb0837110c0ac47c4201105bc7de14c84e", "fetched_at": "2026-08-28T04:08:09.232760+00:00", "kind": "readme", "missing": false, "url": "https://github.com/deta/surf"}, {"content_hash": "fb33b2147a197c6aed3a276e087e128640860f492710d866b0fc4cf1f5ccc462", "fetched_at": "2026-08-29T09:28:59.454056+00:00", "kind": "homepage", "missing": false, "url": "https://deta.surf"}, {"content_hash": "57797f7b167cc02b6fed93560c54fab29b8ddd60c660b198912ba2e50b1af674", "fetched_at": "2026-08-29T09:28:59.456561+00:00", "kind": "site_page", "missing": false, "url": "https://deta.surf/faq"}], "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.232760+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.232760+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.232760+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:34:28.042281+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "550dd18efc459393120cd55b3b16a5cb0837110c0ac47c4201105bc7de14c84e", "fetched_at": "2026-08-28T04:08:09.232760+00:00", "kind": "readme", "missing": false, "url": "https://github.com/deta/surf"}, {"content_hash": "fb33b2147a197c6aed3a276e087e128640860f492710d866b0fc4cf1f5ccc462", "fetched_at": "2026-08-29T09:28:59.454056+00:00", "kind": "homepage", "missing": false, "url": "https://deta.surf"}, {"content_hash": "57797f7b167cc02b6fed93560c54fab29b8ddd60c660b198912ba2e50b1af674", "fetched_at": "2026-08-29T09:28:59.456561+00:00", "kind": "site_page", "missing": false, "url": "https://deta.surf/faq"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.232760+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.232760+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:34:28.042281+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "550dd18efc459393120cd55b3b16a5cb0837110c0ac47c4201105bc7de14c84e", "fetched_at": "2026-08-28T04:08:09.232760+00:00", "kind": "readme", "missing": false, "url": "https://github.com/deta/surf"}, {"content_hash": "fb33b2147a197c6aed3a276e087e128640860f492710d866b0fc4cf1f5ccc462", "fetched_at": "2026-08-29T09:28:59.454056+00:00", "kind": "homepage", "missing": false, "url": "https://deta.surf"}, {"content_hash": "57797f7b167cc02b6fed93560c54fab29b8ddd60c660b198912ba2e50b1af674", "fetched_at": "2026-08-29T09:28:59.456561+00:00", "kind": "site_page", "missing": false, "url": "https://deta.surf/faq"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.232760+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.232760+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.232760+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:34:28.042281+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "550dd18efc459393120cd55b3b16a5cb0837110c0ac47c4201105bc7de14c84e", "fetched_at": "2026-08-28T04:08:09.232760+00:00", "kind": "readme", "missing": false, "url": "https://github.com/deta/surf"}, {"content_hash": "fb33b2147a197c6aed3a276e087e128640860f492710d866b0fc4cf1f5ccc462", "fetched_at": "2026-08-29T09:28:59.454056+00:00", "kind": "homepage", "missing": false, "url": "https://deta.surf"}, {"content_hash": "57797f7b167cc02b6fed93560c54fab29b8ddd60c660b198912ba2e50b1af674", "fetched_at": "2026-08-29T09:28:59.456561+00:00", "kind": "site_page", "missing": false, "url": "https://deta.surf/faq"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.232760+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.232760+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:34:28.042281+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "550dd18efc459393120cd55b3b16a5cb0837110c0ac47c4201105bc7de14c84e", "fetched_at": "2026-08-28T04:08:09.232760+00:00", "kind": "readme", "missing": false, "url": "https://github.com/deta/surf"}, {"content_hash": "fb33b2147a197c6aed3a276e087e128640860f492710d866b0fc4cf1f5ccc462", "fetched_at": "2026-08-29T09:28:59.454056+00:00", "kind": "homepage", "missing": false, "url": "https://deta.surf"}, {"content_hash": "57797f7b167cc02b6fed93560c54fab29b8ddd60c660b198912ba2e50b1af674", "fetched_at": "2026-08-29T09:28:59.456561+00:00", "kind": "site_page", "missing": false, "url": "https://deta.surf/faq"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:34:28.042281+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "550dd18efc459393120cd55b3b16a5cb0837110c0ac47c4201105bc7de14c84e", "fetched_at": "2026-08-28T04:08:09.232760+00:00", "kind": "readme", "missing": false, "url": "https://github.com/deta/surf"}, {"content_hash": "fb33b2147a197c6aed3a276e087e128640860f492710d866b0fc4cf1f5ccc462", "fetched_at": "2026-08-29T09:28:59.454056+00:00", "kind": "homepage", "missing": false, "url": "https://deta.surf"}, {"content_hash": "57797f7b167cc02b6fed93560c54fab29b8ddd60c660b198912ba2e50b1af674", "fetched_at": "2026-08-29T09:28:59.456561+00:00", "kind": "site_page", "missing": false, "url": "https://deta.surf/faq"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:34:28.042281+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "550dd18efc459393120cd55b3b16a5cb0837110c0ac47c4201105bc7de14c84e", "fetched_at": "2026-08-28T04:08:09.232760+00:00", "kind": "readme", "missing": false, "url": "https://github.com/deta/surf"}, {"content_hash": "fb33b2147a197c6aed3a276e087e128640860f492710d866b0fc4cf1f5ccc462", "fetched_at": "2026-08-29T09:28:59.454056+00:00", "kind": "homepage", "missing": false, "url": "https://deta.surf"}, {"content_hash": "57797f7b167cc02b6fed93560c54fab29b8ddd60c660b198912ba2e50b1af674", "fetched_at": "2026-08-29T09:28:59.456561+00:00", "kind": "site_page", "missing": false, "url": "https://deta.surf/faq"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:34:28.042281+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "550dd18efc459393120cd55b3b16a5cb0837110c0ac47c4201105bc7de14c84e", "fetched_at": "2026-08-28T04:08:09.232760+00:00", "kind": "readme", "missing": false, "url": "https://github.com/deta/surf"}, {"content_hash": "fb33b2147a197c6aed3a276e087e128640860f492710d866b0fc4cf1f5ccc462", "fetched_at": "2026-08-29T09:28:59.454056+00:00", "kind": "homepage", "missing": false, "url": "https://deta.surf"}, {"content_hash": "57797f7b167cc02b6fed93560c54fab29b8ddd60c660b198912ba2e50b1af674", "fetched_at": "2026-08-29T09:28:59.456561+00:00", "kind": "site_page", "missing": false, "url": "https://deta.surf/faq"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 22, "rhythm": 81}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 317, "days_push": 9, "days_rel": 126, "gap_med": 7, "n_releases_24m": 14}, "score": 77, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}