{"full_name":"storytold/figcraft","owner":"storytold","name":"figcraft","url":"https://github.com/storytold/figcraft","description":"FigCraft: interface design and prototyping; an open-source, clean-room reimplementation of collaborative design workflows in pure Rust","homepage":"https://getartcraft.com/apps/figcraft","topics":[],"language":"Rust","license":"Apache-2.0","avatar":"https://avatars.githubusercontent.com/u/76897702?v=4","created_at":"2026-10-09T16:02:13Z","pushed_at":"2026-11-09T14:44:02Z","metrics":{"stars":4764,"forks":1793,"watchers":34,"issues":696,"prs":1433,"releases":17,"issues_open":null,"issues_closed":null,"prs_open":null,"prs_closed":null,"prs_merged":null,"discussions":0},"growth":{"day":{"stars":42,"forks":17,"base_day":"2026-11-09"}},"history":{"dates":["2026-11-09","2026-11-10"],"stars":[4722,4764],"forks":[1776,1793],"watchers":[34,34],"issues_open":[null,null],"prs_open":[null,null]},"boards":{"new":149},"same_owner":[{"full_name":"storytold/artcraft","name":"artcraft","boards":{"daily":107,"weekly":63,"monthly":8,"weekly_rate":75,"monthly_rate":11}},{"full_name":"storytold/cadcraft","name":"cadcraft","boards":{"monthly":107,"weekly_rate":79,"monthly_rate":18,"new":66}},{"full_name":"storytold/craft-anything","name":"craft-anything","boards":{"daily":11,"weekly":2,"monthly":16,"daily_rate":14,"weekly_rate":1,"monthly_rate":8,"new":13}},{"full_name":"storytold/craft-launcher","name":"craft-launcher","boards":{"weekly_rate":47,"monthly_rate":80,"new":132}},{"full_name":"storytold/deckcraft","name":"deckcraft","boards":{"weekly_rate":95,"monthly_rate":42,"new":150}},{"full_name":"storytold/designcraft","name":"designcraft","boards":{"new":131}},{"full_name":"storytold/effectcraft","name":"effectcraft","boards":{"new":57}},{"full_name":"storytold/filmcraft","name":"filmcraft","boards":{"new":24}},{"full_name":"storytold/gridcraft","name":"gridcraft","boards":{"monthly":122,"weekly_rate":80,"monthly_rate":25,"new":77}},{"full_name":"storytold/lightcraft","name":"lightcraft","boards":{"new":31}},{"full_name":"storytold/pdfcraft","name":"pdfcraft","boards":{"new":19}},{"full_name":"storytold/photocraft","name":"photocraft","boards":{"daily":121,"new":2}},{"full_name":"storytold/soundcraft","name":"soundcraft","boards":{"weekly_rate":97,"monthly_rate":39,"new":168}},{"full_name":"storytold/vectorcraft","name":"vectorcraft","boards":{"new":41}},{"full_name":"storytold/wordcraft","name":"wordcraft","boards":{"weekly":163,"monthly":36,"weekly_rate":90,"monthly_rate":9,"new":26}}],"issues":[{"number":574,"title":"Import function fails with large Figma files","comments":9,"created_at":"2026-10-15T15:56:20Z"},{"number":2091,"title":"[Bug Report] [FigCraft] .fig import drops instance data: uniformScaleFactor, swapped instance size, align-self stretch","comments":6,"created_at":"2026-11-08T01:51:41Z"},{"number":492,"title":"Can't paste images from the clipboard or drag and drop them from a browser","comments":5,"created_at":"2026-10-15T09:46:21Z"},{"number":357,"title":"CraftHub: closing gap #2 (collaboration without accounts) — a decision brief for the administrators","comments":5,"created_at":"2026-10-14T20:49:26Z"},{"number":1875,"title":"Cut, Copy and Paste dosen't work inside vector edit, Missing automatic blend on sharp verticies, and improvement and colouring issues","comments":4,"created_at":"2026-11-02T11:18:03Z"},{"number":1856,"title":"FAILURE when trying to add multiple colors, effects and font sizes on a single text.","comments":4,"created_at":"2026-11-02T04:56:22Z"},{"number":1827,"title":"Wrap style (Auto / Balance / Pretty) is missing: text always wraps greedily","comments":4,"created_at":"2026-11-01T21:14:29Z"},{"number":1815,"title":"[Bug Report] [FigCraft] Blurring when zooming in and out,","comments":4,"created_at":"2026-11-01T18:51:58Z"}],"discussions":[],"latest_release":{"name":"FigCraft v0.16.0","tag":"v0.16.0","published_at":"2026-11-06T20:21:35Z","body":"## What's Changed\n* fix(collab): place keyed-list puts through an index within a batch by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1893\n* Reject fractional index in proto.interaction.remove and set by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1874\n* Reject fractional index in layout.setTrack by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1892\n* Reject invalid dashes in node.set instead of dropping entries by @Silvertree2010 in https://github.com/storytold/figcraft/pull/1899\n* perf(color): sort gradient stops once per diamond texture by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1894\n* perf(format): drop dangling Penpot token aliases with a worklist by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1897\n* M8: an ellipse whose start has gone round many turns keeps its sweep in .fig by @samhyun in https://github.com/storytold/figcraft/pull/1891\n* M7: a file tab's menu and the board bar's shape menu read in the light theme by @aleksei-suholita in https://github.com/storytold/figcraft/pull/1890\n* M8: a click with the Bend tool curves a sharp point, its handles along the line between its neighbours (#1875) by @TrevorBrown-dev in https://github.com/storytold/figcraft/pull/1877\n* M4: wrap style on a text layer: Auto, Balance and Pretty decide where its lines break (#1827) by @TrevorBrown-dev in https://github.com/storytold/figcraft/pull/1871\n* fix(format): index kiwi field lookups and bound schema and empty-array growth by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1896\n* fix(pathops): sanitize a brush's width profile once before sampling by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1948\n* perf(text): compute each glyph's cluster end once per run by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1963\n* perf(doc,engine): rebuild a widget by removing its children in one pass by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1967\n* perf(engine): look up a component's asset root once per usage report, and skip mode migration without instances by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1966\n* perf(collab): check a replaced list's entries against sets, not a scan per entry by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1962\n* fix(format): a saved file replaces its predecessor with the same permissions by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1957\n* fix(engine): never let document text close the generated HTML style element by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1955\n* perf(engine): keep each events.poll topic once by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1935\n* fix(doc): list a page once however often a file lists it by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1927\n* fix(layout): end the fill distribution loop when no child can freeze by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1926\n* fix(svg): refuse a document compressed twice and charge a refused embedded one by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1924\n* fix(mcp): render prompt placeholders in one pass over the template by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1922\n* fix(render): check the nesting limit for mask content and bound GIF frame buffers by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1925\n* perf(engine): list a few step names in a missing-reference error by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1941\n* perf(svg): hash an embedded image's bytes once per import by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1945\n* fix(doc): bound the string bytes an expression holds and stop concatenating at the cap by @dylanmtaylor in https://github.com/storytold/figcraft/pull/1950\n* fix(engine): hold a plugin's text.preview to the permissions of the command it previews by @dylanmtaylor in https://github.com/story"},"readme":true,"readme_zh":false,"news":[{"title":"Figcraft: An open-source, clean-room reimplementation of Figma","url":"https://github.com/storytold/figcraft","hn":"https://news.ycombinator.com/item?id=50069000","source":"Hacker News","lang":"en","date":"2026-10-13","points":3,"comments":0},{"title":"I ditched Figma for a free open-source clone, and it covers everything I actually use it for","url":"https://www.msn.com/en-us/news/other/i-ditched-figma-for-a-free-open-source-clone-and-it-covers-everything-i-actually-use-it-for/ar-AA2gyzaP","source":"XDA Developers on MSN","lang":"en","date":"2026-11-01"},{"title":"如何用FigCraft自建设计协作服务器？figcraft-server完整部署指南","url":"https://blog.csdn.net/gitblog_00289/article/details/168437917","source":"blog.csdn","lang":"zh","date":"2026-10-19"},{"title":"FigCraft CLI实战：无界面渲染、导出与批量处理文档的8个命令","url":"https://blog.csdn.net/gitblog_00152/article/details/168444954","source":"blog.csdn","lang":"zh","date":"2026-10-19"},{"title":"FigCraft 指南，用 Rust 写成的免费 Figma 替代品","url":"https://news.google.com/rss/articles/CBMikAFBVV95cUxOeWRIZm9jbS1pMERHTVBLeVhyWlpwOGdxSFpXMGI2Ti1lelFjeU9JTDIzY2RIYXgyRG8zLUhEbUlUajF6aHoxQ3ZmRGxwY2JfU196M0R3TlpLSnJhMUV1WHR0b2o5UFBHbHpCSnB1b2tRT2wyaGJxVVlzZ3hBcGFjeDB0UlJIX1o0SFRkbFFNVnA?oc=5","source":"Pasquale Pillitteri","lang":"zh","date":"2026-10-14"},{"title":"FigCraft guide, the free Figma alternative written in Rust","url":"https://news.google.com/rss/articles/CBMijwFBVV95cUxOYWdYbjVMS3lrelBYSkxhZU1vNHNCcUJicmNMeDB5SERERmhWRGtTZFc2ZnRuSHNfVVptVm0xVkZhb0lEeDdub0dwa0RsMVpoTTRrQzU0YS00U2hScWtTQkdNUWFubGhNTDdnZ244VEE4M0NUT3lmTXF1RTV0V19DaGhzNGt3NURtcEZSRlpVcw?oc=5","source":"Pasquale Pillitteri","lang":"en","date":"2026-10-13"},{"title":"ArtCraft launches WordCraft, GridCraft and DeckCraft, free Office clones in Rust","url":"https://news.google.com/rss/articles/CBMiowFBVV95cUxQckJPQWdYV0RtQzNQcmVXU2dPQnFpOG80Nm1HdTRvRXNyZ0RqbzlkNkhoQTI3RHFqTDVMdEVpekZPemtWdHVPYU1vTTZHQVhiaTB5bjQ1VEFtME0xalpMa0RqV3NxVUxWakc0dC1YeGdzMGo2TzdwWkRTbVRta0pJc0FldnZEUTFfOVpYRDVOS2t4aS12MWI3LWZIeThqTERjQjZj?oc=5","source":"Pasquale Pillitteri","lang":"en","date":"2026-10-10"},{"title":"open-codesign: The Open Source Claude Design Clones (2026)","url":"https://news.google.com/rss/articles/CBMigAFBVV95cUxOZmlDOXJOUGVTV3ZWdk9LbGJaeDg1T1I4emdPZU8zZy1YZmk3ZzlDTU9XcnhQUTFQaFpIQVN2MlF3N0pteHRQQncxMmdWZVBnQVRMTTN3M1JjODlUbkRJQXlvZEE2TzlqVU1OTm1lMEowYTBPMU5welRrVGJyQU4xaA?oc=5","source":"Pasquale Pillitteri","lang":"en","date":"2026-04-28"}],"stale":false,"snapshot_at":"2026-11-10T09:35:25Z","history_start":"2026-09-06"}