[{"data":1,"prerenderedAt":486},["ShallowReactive",2],{"project-48478469":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":48,"post_text":49,"what":50,"said":97,"maker_in_thread":234,"shape":242,"grid":246,"attempts":449,"same_week":450,"maker_shows":302,"maker_hidden":478,"reader_version":479,"card":480},"48478469","Extend UI","open-source UI kit for modern document apps","title","Show HN: Extend UI – open-source UI kit for modern document apps","https:\u002F\u002Fwww.extend.ai\u002Fui","extend.ai","kbyatnal",1781107766,2026,252,81,191,4366,5,"legend","dev_tools","ui component library","library",[24,25,26,27,28],"document viewer","pdf viewer react","docx viewer","xlsx viewer","ui components","curious",-0.056,{"positive":32,"neutral":33,"mixed":34,"critical":35},13,32,2,17,64,{"performance":38,"execution":41,"idea":43,"design":45,"docs":47},{"positive":39,"critical":40},0,7,{"positive":39,"critical":42},6,{"positive":42,"critical":44},1,{"positive":46,"critical":44},3,{"positive":39,"critical":34},[44,44,44,46,46,46,46,39,39,46,18,18,44,44,46,44,46,44,46,46,46,46,39,18,18,46,46,18,18,46,46,18,46,18,44,46,44,44,46,34],"We're open-sourcing 14 components & examples today for PDF, DOCX, and XLSX viewers, plus bounding box citations, file upload, e-signature, and more. It's MIT licensed and fully customizable.\n\nDemo video here: https:\u002F\u002Fshare.extend.ai\u002FkRmSGKRF\n\nWhen we started, we tried every file viewer and document component library we could find. Unfortunately, none of them had all the functionality (and polish) that we wanted, so we ended up building our own for https:\u002F\u002Fextend.ai\u002F. It was only ever meant to be internal, but enough customers kept asking for it that we decided to open source it.\n\nIt's useful f",{"problem":51,"audience":57,"pricing":61,"motivation":62,"time_to_build":61,"stack":66,"openness":94,"stage":95,"team_size":96},{"value":52,"source":53,"evidence":54},"Building PDF, DOCX and XLSX viewers and document components that work at scale is hard","maker",[55],{"id":56},"post",{"value":58,"source":53,"evidence":59},"Developers building document processing agents, document intake flows, or internal tooling",[60],{"id":56},null,{"value":63,"source":53,"evidence":64},"Existing viewer libraries lacked needed functionality, and customers asked for the internal tool",[65],{"id":56},[67,78,84,88],{"value":68,"source":69,"evidence":70},"React","commenter",[71,75],{"id":72,"by":73,"text":74},"48481778","andrewlu0","thats fair and definitely something we can try supporting in the future. we started with React because of how familiar models are with shadcn and tailwind we hope this can be…",{"id":76,"by":73,"text":77},"48480902","Hi! I'm one of the engineers at Extend that worked on this - one of our other engineers created a Rust XLSX\u002FXLS parser that we ported to WASM to our @extend-ai\u002Freact-xlsx package…",{"value":79,"source":69,"evidence":80},"Next.js",[81],{"id":82,"by":73,"text":83},"48489672","Hey! Ah this was a mistake , i think i only used next for the routing so should be able to get rid of next as a dependency",{"value":85,"source":69,"evidence":86},"Rust compiled to WASM (XLSX parser)",[87],{"id":76,"by":73,"text":77},{"value":89,"source":69,"evidence":90},"react-pdf (PDF.js)",[91],{"id":92,"by":73,"text":93},"48484917","We use react-pdf for the viewer which I believe uses pdf JS under the hood We aren’t not trying to reinvent that engine, rather just provide a building block for people to plug…","open_source","launched","company",{"praise":98,"objections":121,"requests":168,"questions":198,"alternatives":217},[99,110],{"value":100,"source":69,"evidence":101},"Polished, well-designed components",[102,106],{"id":103,"by":104,"text":105},"48508994","kalms","Seeing a lot of criticism in here, some valid, some not. Just wanted to say that, to me, this is really well put together - and seems like a lot of thought went into this.…",{"id":107,"by":108,"text":109},"48482035","hobofan","Thanks, that looks awesome! We were looking to add DOCX and XLSX preview to our app, and were planning to do server-side conversion to PDF (which seems to be what most other apps…",{"value":111,"source":69,"evidence":112},"Useful for document workflows and open-sourcing it",[113,117],{"id":114,"by":115,"text":116},"48482164","dvt","Super cool. Working on a local AI tool specifically for document workflow automation (where context = screen\u002Fweb\u002Ffolders\u002Ffiles), and this could come in super useful. I do most of…",{"id":118,"by":119,"text":120},"48490188","codingconstable","its nice, people are harsh, you did something useful, thank you.",[122,141,156,160],{"value":123,"source":69,"evidence":124},"Site and demos perform poorly, lagging and CPU-heavy",[125,129,133,137],{"id":126,"by":127,"text":128},"48488175","lionkor","The performance is quite bad. There are some basics missing or broken. - no caching for file previews - no sorting by date in the file picker - no sorting by size in the file…",{"id":130,"by":131,"text":132},"48484807","pea","Looks cool but your home page heavily lags on my mbp m3 pro - you should maybe be lazy loading vs loading all your components upfront",{"id":134,"by":135,"text":136},"48485411","bduffany","The performance of the \"Layout blocks\" component is particularly bad. It consumes tons of CPU when scrolling.",{"id":138,"by":139,"text":140},"48487397","iamsaitam","The performance on the site is truly terrible, the top animation was probably going at 5fps when scrolling.",{"value":142,"source":69,"evidence":143},"React-only and built on Next.js, not framework-agnostic",[144,148,152],{"id":145,"by":146,"text":147},"48480673","spankalee","These should really be web components. Leaving out every framework other than React is really bad for the web.",{"id":149,"by":150,"text":151},"48487008","resurge","Not just React, but it apparently also depends on Next.js Dependency in package.json: - https:\u002F\u002Fgithub.com\u002Fextend-hq\u002Fui\u002Fblob\u002Fmain\u002Fapps\u002Fv4\u002Fpackage.json Dependencies in some…",{"id":153,"by":154,"text":155},"48481910","egeozcan","Why doesn't it mention anywhere that they are React components?",{"value":157,"source":69,"evidence":158},"File picker and document viewer missing basic features",[159],{"id":126,"by":127,"text":128},{"value":161,"source":69,"evidence":162},"Docs did not clearly state React dependency",[163,164],{"id":153,"by":154,"text":155},{"id":165,"by":166,"text":167},"48483957","hju22_-3","_Try_ to? Are you serious? We're not taking ambiguity due to phrasing, we're talking straight up not mentioning it on either the front page, on the show all page or even on the…",[169,177,187,194],{"value":170,"source":69,"evidence":171},"Web components or framework-agnostic support",[172,173],{"id":145,"by":146,"text":147},{"id":174,"by":175,"text":176},"48487079","sails","Experienced the same nightmare a few times over with citations. React\u002Fnext is limiting, we have rebuilt this for angular and now redid it again using lit for better…",{"value":178,"source":69,"evidence":179},"Performance optimisation of the site and demos",[180,184],{"id":181,"by":182,"text":183},"48484055","plastic041","Looks clean and works fine, but it needs optimization. Clicking \"Type\" in the \"schema builder\" example takes 1~2 seconds to open the popover in the landing page(macbook pro m4).…",{"id":185,"by":73,"text":186},"48489757","Heard the performance feedback will work on it today!",{"value":188,"source":69,"evidence":189},"Markdown file support",[190],{"id":191,"by":192,"text":193},"48483249","stinger","Does it\u002Fwill it support Markdown files?",{"value":195,"source":69,"evidence":196},"Better file picker sorting and search",[197],{"id":126,"by":127,"text":128},[199,210],{"value":200,"source":69,"evidence":201},"How does PDF rendering fidelity compare to alternatives",[202,206],{"id":203,"by":204,"text":205},"48484856","promiseofbeans","How is your PDF coverage? They are notoriously difficult things to render, with endless edge cases. Mozilla’s PSD.js is the status quo here, so what do you do better than them?",{"id":207,"by":208,"text":209},"48484104","phonon","How does it compare to https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=48436863 ?",{"value":211,"source":69,"evidence":212},"Whether pages are virtualised in the viewers",[213],{"id":214,"by":215,"text":216},"48481375","CraigJPerry","Those bounding box demos are decent. By quirk of fate i've spent the past 2 days prototyping some stuff on pdfjs. Just trying to figure out a game plan for handling bounding…",[218,223,227],{"value":219,"source":69,"evidence":220},"react-pdf \u002F PDF.js",[221,222],{"id":203,"by":204,"text":205},{"id":92,"by":73,"text":93},{"value":224,"source":69,"evidence":225},"Server-side conversion to PDF",[226],{"id":107,"by":108,"text":109},{"value":228,"source":69,"evidence":229},"ChromaFiler",[230],{"id":231,"by":232,"text":233},"48491884","carlosjobim","If you're on Windows, you can check out ChromaFiler, which takes Miller columns to the next level: https:\u002F\u002Fchroma.zone\u002Fchromafiler\u002F",{"comments":34,"answered":39,"key":235},[236,239],{"id":237,"text":238},"48489905","Your issues are mostly with the file picker, which is a brand new component that was just added yesterday in response to a feature request after launch:…",{"id":240,"text":241},"48493047","agreed! dogfooding is the best — we'll integrate this into our core product, which will force us to improve it very quickly",{"commenters":243,"max_depth":42,"maker_replies":34,"first_comment_mins":244,"lifespan_hours":245},45,143,98,[247,249,253,256,260,262,265,267,269,270,272,274,276,277,279,281,283,286,288,290,293,297,299,301,303,305,307,310,311,313,316,318,321,323,324,325,326,329,331,335,337,339,342,344,346,349,351,355,357,360,363,364,368,369,373,375,376,378,380,384,386,388,392,395,396,397,400,402,406,411,413,415,417,419,423,427,429,433,437,441,445],[126,39,44,248,127,39],"project\u002Fcritical\u002Fperformance",[250,39,46,251,252,39],"48488255","project\u002Fneutral\u002Fperformance","e12e",[254,39,44,248,255,39],"48488273","gobdovan",[257,39,39,258,259,39],"48488431","commenter\u002Fneutral\u002Fnone","rrr_oh_man",[261,39,44,248,255,39],"48489467",[263,39,46,264,73,39],"48489867","maker\u002Fneutral\u002Fperformance",[237,39,39,266,11,44],"maker\u002Fneutral\u002Fexecution",[268,39,46,266,127,39],"48491474",[240,39,39,266,11,44],[271,39,46,266,73,39],"48494072",[130,44,46,273,131,39],"project\u002Fmixed\u002Fperformance",[275,44,46,264,73,39],"48484933",[134,44,44,248,135,39],[114,34,18,278,115,39],"project\u002Fpositive\u002Fidea",[280,34,39,258,73,39],"48482295",[282,34,39,258,115,39],"48482389",[284,34,39,258,285,39],"48483358","petilon",[287,34,39,258,115,39],"48483601",[289,34,39,258,285,39],"48483759",[291,34,46,292,73,39],"48483822","project\u002Fneutral\u002Fexecution",[294,34,18,295,296,39],"48486060","project\u002Fpositive\u002Fnone","nhatcher",[214,46,18,298,215,39],"project\u002Fpositive\u002Fdesign",[300,46,46,251,73,39],"48481451",[174,302,18,278,175,39],4,[304,302,39,258,73,39],"48489772",[153,18,44,306,154,39],"project\u002Fcritical\u002Fdocs",[308,18,46,309,73,39],"48482075","maker\u002Fneutral\u002Fdocs",[165,18,44,306,166,39],[312,18,46,264,73,39],"48484126",[314,18,39,258,315,39],"48484753","digitaltrees",[149,18,44,317,150,39],"project\u002Fcritical\u002Fexecution",[319,18,44,317,320,39],"48488684","chrisweekly",[322,18,46,266,73,39],"48489850",[82,18,46,266,73,39],[138,42,44,248,139,39],[185,42,46,264,73,39],[327,40,46,273,328,39],"48488352","whitephoenix",[330,40,46,264,73,39],"48489798",[332,333,46,292,334,39],"48484236",8,"qreoct",[336,333,46,266,73,39],"48494495",[338,333,18,295,334,39],"48495489",[145,340,44,341,146,39],9,"project\u002Fcritical\u002Fidea",[72,340,46,343,73,39],"maker\u002Fneutral\u002Fidea",[345,340,39,258,315,39],"48484773",[347,340,39,258,348,39],"48485254","ranger_danger",[350,340,39,258,315,39],"48495162",[352,353,18,278,354,39],"48486350",10,"mklifelife",[356,353,46,343,175,39],"48491341",[358,359,18,298,232,39],"48485286",11,[361,359,39,362,73,39],"48485695","other\u002Fneutral\u002Fnone",[231,359,39,362,232,39],[365,366,46,292,367,39],"48480768",12,"warthog",[76,366,46,292,73,39],[370,366,46,371,372,39],"48481311","maker\u002Fneutral\u002Fnone","drivingmenuts",[374,366,39,258,115,39],"48483727",[107,32,18,278,108,39],[377,32,46,266,73,39],"48482106",[103,379,18,298,104,39],14,[381,382,46,309,383,39],"48486772",15,"rolls-reus",[385,382,46,309,73,39],"48489807",[387,382,39,258,383,39],"48494803",[389,382,46,390,391,39],"48489820","project\u002Fneutral\u002Fdesign","mkl",[118,393,18,394,119,39],16,"maker\u002Fpositive\u002Fidea",[203,35,46,292,204,39],[92,35,46,292,73,39],[207,398,46,399,208,39],18,"project\u002Fneutral\u002Fnone",[401,398,46,292,73,39],"48484162",[403,404,18,394,405,39],"48485295",19,"cactusplant7374",[407,408,44,409,410,39],"48493757",20,"project\u002Fcritical\u002Fdesign","Lord_Zero",[181,412,44,248,182,39],21,[414,412,46,251,73,39],"48484138",[191,416,46,399,192,39],22,[418,416,46,292,73,39],"48483846",[420,421,44,317,422,39],"48488678",23,"deafpolygon",[424,425,44,317,426,39],"48481542",24,"KolmogorovComp",[428,425,46,292,73,39],"48481631",[430,431,18,295,432,39],"48530583",25,"grahamstanes17",[434,435,44,248,436,39],"48489246",26,"dzonga",[438,439,44,317,440,39],"48490840",27,"greenleafone7",[442,443,18,295,444,39],"48488005",28,"wu1064442747",[446,447,44,317,448,39],"48489152",29,"peteforde",[],[451,455,460,464,468,473],{"id":452,"name":453,"points":454,"category":20},"48445554","Performative-UI",1181,{"id":456,"name":457,"points":458,"category":459},"48433756","Lathe",402,"productivity",{"id":461,"name":462,"points":463,"category":20},"48408854","Absurdly Optimized Pancakes",340,{"id":465,"name":466,"points":467,"category":20},"48447806","Gitdot",334,{"id":469,"name":470,"points":471,"category":472},"48396004","Uruky",236,"web_saas",{"id":474,"name":475,"points":476,"category":477},"48459837","Gravity",217,"languages",false,"v2",{"id":481,"name":5,"line":6,"ai":478,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":482,"top":18,"kw":483,"maker":11,"domain":10,"tier":19,"attempts":39,"strip":484,"url":9,"mix":485,"praise":100,"objection":123,"sub":21},48478469,-0.06,[24,25,26,27,28],"1113333003551131313333055335533535131132",[32,33,34,35],1793991156518]