{"adoption": {"forks": 872, "observed_at": "2026-08-28T04:09:19.799571+00:00", "stars": 5490}, "canonical_url": "https://ross.abutalabs.com/products/open-canvas", "card": {"archived": true, "artifact_type": "application", "description": "📃 A better UX for chat, writing content, and coding with LLMs.", "domain": ["artificial-intelligence", "large-language-models", "chatbots", "web-development", "developer-tools"], "enriched": true, "function": ["chatbot", "agent-framework", "llm-inference", "rag", "prompt-engineering", "chat-interface", "ui-components"], "health_score": 10, "homepage": "https://opencanvas.langchain.com/", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["langchain-ai/open-canvas"], "name": "langchain-ai/open-canvas", "platform": ["self-hosted"], "pushed_at": "2026-02-25T06:31:51+00:00", "repo": "langchain-ai/open-canvas", "stars": 5490, "tags": ["langgraph", "canvas-ux", "artifact-editing", "memory-agents", "nextjs", "open-source-llm-app", "ai-agents", "web-server", "nodejs", "typescript"], "topics": [], "urls": [], "use_cases": ["collaboratively write documents with an AI agent", "generate and edit code artifacts with an LLM", "chat with an assistant that remembers my style preferences across sessions", "start from an existing document and iterate on it with AI", "use custom quick-action prompts on my current artifact", "view rendered markdown while editing it live", "self-host an open-source alternative to OpenAI Canvas"], "what_it_is": "Open Canvas is an open-source web application for collaborating with LLM agents to write documents and code, inspired by OpenAI's Canvas. It features a built-in reflection agent with shared memory, artifact versioning, and side-by-side markdown/code editing.", "when_to_avoid": ["you need a fully hosted service with support - the official demo is no longer live or maintained", "you want a simple chatbot without document/artifact editing", "you cannot provide your own LLM API keys (OpenAI, Anthropic, etc.)", "you need a production-ready product rather than a reference application"], "when_to_choose": ["you want an open-source, self-hostable Canvas-style writing/coding assistant", "you need persistent user memory and reflections across chat sessions", "you want artifact versioning and mixed markdown/code editing in one workspace", "you want to study or extend a LangGraph-based agent application"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/open-canvas", "repo": "langchain-ai/open-canvas", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:19.799571+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:56:21.337332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c55c6b5bd2dac05c2676d727b8b6231a45d1f5315994244e8bbb6e0c7f413d", "fetched_at": "2026-08-28T04:09:19.799571+00:00", "kind": "readme", "missing": false, "url": "https://github.com/langchain-ai/open-canvas"}, {"content_hash": "8b44b13f3e5b628e1f12de683ce1cbea1b681c58aba4738a9d9bd2a446c07f7b", "fetched_at": "2026-08-29T08:51:45.615243+00:00", "kind": "homepage", "missing": false, "url": "https://opencanvas.langchain.com/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:19.799571+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:56:21.337332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c55c6b5bd2dac05c2676d727b8b6231a45d1f5315994244e8bbb6e0c7f413d", "fetched_at": "2026-08-28T04:09:19.799571+00:00", "kind": "readme", "missing": false, "url": "https://github.com/langchain-ai/open-canvas"}, {"content_hash": "8b44b13f3e5b628e1f12de683ce1cbea1b681c58aba4738a9d9bd2a446c07f7b", "fetched_at": "2026-08-29T08:51:45.615243+00:00", "kind": "homepage", "missing": false, "url": "https://opencanvas.langchain.com/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:56:21.337332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c55c6b5bd2dac05c2676d727b8b6231a45d1f5315994244e8bbb6e0c7f413d", "fetched_at": "2026-08-28T04:09:19.799571+00:00", "kind": "readme", "missing": false, "url": "https://github.com/langchain-ai/open-canvas"}, {"content_hash": "8b44b13f3e5b628e1f12de683ce1cbea1b681c58aba4738a9d9bd2a446c07f7b", "fetched_at": "2026-08-29T08:51:45.615243+00:00", "kind": "homepage", "missing": false, "url": "https://opencanvas.langchain.com/"}], "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:09:19.799571+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:19.799571+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:19.799571+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:56:21.337332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c55c6b5bd2dac05c2676d727b8b6231a45d1f5315994244e8bbb6e0c7f413d", "fetched_at": "2026-08-28T04:09:19.799571+00:00", "kind": "readme", "missing": false, "url": "https://github.com/langchain-ai/open-canvas"}, {"content_hash": "8b44b13f3e5b628e1f12de683ce1cbea1b681c58aba4738a9d9bd2a446c07f7b", "fetched_at": "2026-08-29T08:51:45.615243+00:00", "kind": "homepage", "missing": false, "url": "https://opencanvas.langchain.com/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:19.799571+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:19.799571+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:56:21.337332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c55c6b5bd2dac05c2676d727b8b6231a45d1f5315994244e8bbb6e0c7f413d", "fetched_at": "2026-08-28T04:09:19.799571+00:00", "kind": "readme", "missing": false, "url": "https://github.com/langchain-ai/open-canvas"}, {"content_hash": "8b44b13f3e5b628e1f12de683ce1cbea1b681c58aba4738a9d9bd2a446c07f7b", "fetched_at": "2026-08-29T08:51:45.615243+00:00", "kind": "homepage", "missing": false, "url": "https://opencanvas.langchain.com/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:19.799571+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:19.799571+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:19.799571+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:56:21.337332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c55c6b5bd2dac05c2676d727b8b6231a45d1f5315994244e8bbb6e0c7f413d", "fetched_at": "2026-08-28T04:09:19.799571+00:00", "kind": "readme", "missing": false, "url": "https://github.com/langchain-ai/open-canvas"}, {"content_hash": "8b44b13f3e5b628e1f12de683ce1cbea1b681c58aba4738a9d9bd2a446c07f7b", "fetched_at": "2026-08-29T08:51:45.615243+00:00", "kind": "homepage", "missing": false, "url": "https://opencanvas.langchain.com/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:19.799571+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:19.799571+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:56:21.337332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c55c6b5bd2dac05c2676d727b8b6231a45d1f5315994244e8bbb6e0c7f413d", "fetched_at": "2026-08-28T04:09:19.799571+00:00", "kind": "readme", "missing": false, "url": "https://github.com/langchain-ai/open-canvas"}, {"content_hash": "8b44b13f3e5b628e1f12de683ce1cbea1b681c58aba4738a9d9bd2a446c07f7b", "fetched_at": "2026-08-29T08:51:45.615243+00:00", "kind": "homepage", "missing": false, "url": "https://opencanvas.langchain.com/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:56:21.337332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c55c6b5bd2dac05c2676d727b8b6231a45d1f5315994244e8bbb6e0c7f413d", "fetched_at": "2026-08-28T04:09:19.799571+00:00", "kind": "readme", "missing": false, "url": "https://github.com/langchain-ai/open-canvas"}, {"content_hash": "8b44b13f3e5b628e1f12de683ce1cbea1b681c58aba4738a9d9bd2a446c07f7b", "fetched_at": "2026-08-29T08:51:45.615243+00:00", "kind": "homepage", "missing": false, "url": "https://opencanvas.langchain.com/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:56:21.337332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c55c6b5bd2dac05c2676d727b8b6231a45d1f5315994244e8bbb6e0c7f413d", "fetched_at": "2026-08-28T04:09:19.799571+00:00", "kind": "readme", "missing": false, "url": "https://github.com/langchain-ai/open-canvas"}, {"content_hash": "8b44b13f3e5b628e1f12de683ce1cbea1b681c58aba4738a9d9bd2a446c07f7b", "fetched_at": "2026-08-29T08:51:45.615243+00:00", "kind": "homepage", "missing": false, "url": "https://opencanvas.langchain.com/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:56:21.337332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a1c55c6b5bd2dac05c2676d727b8b6231a45d1f5315994244e8bbb6e0c7f413d", "fetched_at": "2026-08-28T04:09:19.799571+00:00", "kind": "readme", "missing": false, "url": "https://github.com/langchain-ai/open-canvas"}, {"content_hash": "8b44b13f3e5b628e1f12de683ce1cbea1b681c58aba4738a9d9bd2a446c07f7b", "fetched_at": "2026-08-29T08:51:45.615243+00:00", "kind": "homepage", "missing": false, "url": "https://opencanvas.langchain.com/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 69, "longevity": 49, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "archived"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 699, "days_push": 189, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}