[{"data":1,"prerenderedAt":392},["ShallowReactive",2],{"project-44067409":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":45,"post_text":47,"what":48,"said":76,"maker_in_thread":176,"shape":185,"grid":187,"attempts":354,"same_week":355,"maker_shows":34,"maker_hidden":384,"reader_version":385,"card":386},"44067409","Defuddle","An HTML-to-Markdown alternative to Readability","title","Show HN: Defuddle, an HTML-to-Markdown alternative to Readability","https:\u002F\u002Fgithub.com\u002Fkepano\u002Fdefuddle","github.com","kepano",1747950054,2025,418,68,109,3837,3,"legend","languages","html parsing library","library",[24,25,26,27,28],"html to markdown","readability alternative","content extraction","web clipper","javascript library","mixed",0.222,{"positive":32,"neutral":33,"mixed":34,"critical":35},9,12,1,4,26,{"execution":38,"idea":40,"pricing":43,"design":44},{"positive":39,"critical":18},2,{"positive":41,"critical":42},7,0,{"positive":42,"critical":42},{"positive":42,"critical":34},[18,42,42,42,42,46,46,46,42,18,18,18,34,18,42,42,42,42,42,42,18,18,42,46,34,46,42,46,18,34,18,46,18,46,18,46,34,42,42,42],5,"Defuddle is an open-source JS library I built to parse and extract the main content and metadata from web pages. It can also return the content as Markdown.\n\nI built Defuddle while working on Obsidian Web Clipper[1] (also MIT-licensed) because Mozilla's Readability[2] appears to be mostly abandoned, and didn't work well for many sites.\n\nIt's still very much a work in progress, but I thought I'd share it today, in light of the announcement that Mozilla is shutting down Pocket. This library could be helpful to anyone building a read-it-later app.\n\nDefuddle is also available as a CLI:\n\nhttps:\u002F\u002Fgi",{"problem":49,"audience":58,"pricing":59,"motivation":63,"time_to_build":58,"stack":67,"openness":73,"stage":74,"team_size":75},{"value":50,"source":51,"evidence":52},"Extracting main content and metadata from web pages, where Mozilla Readability fails on many sites","maker",[53,55],{"id":54},"post",{"id":56,"by":11,"text":57},"44076210","Currently I am relying on manual testing and user feedback, but yes, I'd like to add tests. Defuddle works quite differently from Readability. Readability tends to be overly…",null,{"value":60,"source":51,"evidence":61},"Free, MIT-licensed",[62],{"id":54},{"value":64,"source":51,"evidence":65},"Built while working on Obsidian Web Clipper because Readability appeared abandoned and worked poorly on many sites",[66],{"id":54},[68],{"value":69,"source":70,"evidence":71},"JavaScript","inferred",[72],{"id":54},"open_source","beta","unknown",{"praise":77,"objections":97,"requests":119,"questions":135,"alternatives":147},[78,86],{"value":79,"source":80,"evidence":81},"Markdown extraction quality is the most reliable seen","commenter",[82],{"id":83,"by":84,"text":85},"44069553","Tsarp","Been using the obsidian clipper since it was out and this is a really neat. The per website profile based extraction is awesome. Even if you are not a obsidian user, the markdown…",{"value":87,"source":80,"evidence":88},"Better than Readability for many sites",[89,93],{"id":90,"by":91,"text":92},"44068175","creakingstairs","I was just looking at obsidian web-clipper's source code because I've been quite impressed at its markdown conversion results and came across Defuddle in there. I'll be using for…",{"id":94,"by":95,"text":96},"44075195","miketromba","Excellent work. A modern alternative to readability was much needed. This is especially useful for building clean web context for LLMs. Thanks for open-sourcing this!",[98,105,112],{"value":99,"source":80,"evidence":100},"Doesn't work well on many webpages",[101],{"id":102,"by":103,"text":104},"44071442","ioma8","Tried it on some webpages, doesnt work well.",{"value":106,"source":80,"evidence":107},"Runs into errors in Chrome service workers with linkedom",[108],{"id":109,"by":110,"text":111},"44105636","honodk123","This looks great! I would love to give Defuddle a try as a Readability replacement. However, for my use case I want to do in a Chrome extension background script (service…",{"value":113,"source":80,"evidence":114},"No tests or datasets to show accuracy",[115],{"id":116,"by":117,"text":118},"44072833","binarymax","Really nice work. I appreciate the example with JSDOM as that’s exactly how I use readability, and this looks like a nice drop-in replacement. Question: How did you validate…",[120,124,128],{"value":121,"source":80,"evidence":122},"Support for Chrome extension service workers",[123],{"id":109,"by":110,"text":111},{"value":125,"source":51,"evidence":126},"Add tests",[127],{"id":56,"by":11,"text":57},{"value":129,"source":80,"evidence":130},"Bookmarklet packaging",[131],{"id":132,"by":133,"text":134},"44074813","infogulch","Since it's written in javascript is there any chance it could be packaged as a bookmarklet?",[136,140],{"value":137,"source":80,"evidence":138},"How to validate accuracy against Readability",[139],{"id":116,"by":117,"text":118},{"value":141,"source":80,"evidence":142},"Whether it works on LLM chat share links",[143],{"id":144,"by":145,"text":146},"44069486","pugio","I would love something which reliably extracted a markdown back\u002Fforth from all the main LLM providers. I tried `defuddle` on a shared Gemini URL and it returned nothing but the…",[148,155,162,169],{"value":149,"source":80,"evidence":150},"Readability",[151],{"id":152,"by":153,"text":154},"44067833","fkfyshroglk","For those not in the know: [Readability](https:\u002F\u002Fgithub.com\u002Fmozilla\u002Freadability)",{"value":156,"source":80,"evidence":157},"Trafilatura",[158],{"id":159,"by":160,"text":161},"44067933","tmpfs","Interesting as I was researching this recently and certainly not impressed with the quality of the Readability implementations in various languages. Although Readability.js was…",{"value":163,"source":80,"evidence":164},"go-readability and go-trafilatura",[165],{"id":166,"by":167,"text":168},"44069666","acrophobic","> ...it being Javascript didn't suit my project. If you're using Go, I maintain Go ports of Readability[0] and Trafilatura[1]. They're actively maintained, and for Trafilatura,…",{"value":170,"source":80,"evidence":171},"Substance",[172],{"id":173,"by":174,"text":175},"44080010","novoreorx","I built a similar project called Substance [^0]. Unlike most readability tools that try to solve the problem once and for all, it takes a different approach. It provides a…",{"comments":35,"answered":18,"key":177},[178,179,182],{"id":56,"text":57},{"id":180,"text":181},"44067563","Are there any in particular you can recommend?",{"id":183,"text":184},"44067555","The input is there to test the url option — which I admit is a bit confusing, so I have removed it for now. I haven't found a good and free way to proxy requests from a GitHub…",{"commenters":186,"max_depth":46,"maker_replies":35,"first_comment_mins":32,"lifespan_hours":16},48,[188,190,194,197,198,201,204,207,209,211,215,218,221,224,228,230,231,233,235,239,242,246,249,252,254,257,258,261,264,268,271,274,278,281,285,289,291,295,299,303,307,309,310,313,317,321,325,327,331,335,337,340,342,346,348,351,353],[159,42,18,189,160,42],"project\u002Fneutral\u002Fexecution",[191,42,42,192,193,42],"44068881","other\u002Fneutral\u002Fnone","fabmilo",[195,42,42,192,196,42],"44069691","thm",[166,42,42,192,167,42],[199,42,42,192,200,42],"44074885","breadchris",[202,42,42,192,203,42],"44093855","derekperkins",[205,42,42,192,206,42],"44073557","winddude",[90,34,46,208,91,42],"project\u002Fpositive\u002Fidea",[83,39,46,210,84,42],"project\u002Fpositive\u002Fexecution",[212,39,42,213,214,42],"44070414","commenter\u002Fneutral\u002Fnone","audessuscest",[216,18,46,208,217,42],"44069116","jeanlucas",[219,18,42,192,220,42],"44069243","T0Bi",[222,18,42,192,223,42],"44070635","emaro",[225,18,18,226,227,42],"44073822","project\u002Fneutral\u002Fpricing","kouru225",[229,18,18,226,217,42],"44077743",[116,35,18,189,117,42],[56,35,42,232,11,34],"maker\u002Fneutral\u002Fexecution",[109,35,34,234,110,42],"project\u002Fcritical\u002Fexecution",[236,46,18,237,238,42],"44068897","project\u002Fmixed\u002Fexecution","shrinks99",[240,241,42,213,167,42],"44069268",6,[243,241,42,244,245,42],"44070178","other\u002Fcritical\u002Fnone","khasan222",[247,241,42,213,248,42],"44074098","fabrice_d",[250,241,42,251,245,42],"44074594","commenter\u002Fcritical\u002Fnone",[253,241,42,213,248,42],"44077799",[255,41,42,192,256,42],"44067500","rcarmo",[180,41,42,213,11,34],[259,41,42,192,260,42],"44067702","khimaros",[173,262,42,263,174,42],8,"other\u002Fneutral\u002Fidea",[265,32,18,266,267,42],"44070952","project\u002Fneutral\u002Fidea","Andr2Andr",[269,32,18,266,270,42],"44071023","degosuke",[272,32,18,266,273,42],"44071044","rollcat",[275,276,42,192,277,42],"44070577",10,"jonplackett",[279,276,42,192,280,42],"44070598","miki123211",[282,283,46,208,284,42],"44071519",11,"severusdd",[286,33,34,287,288,42],"44067492","project\u002Fcritical\u002Fdesign","busymom0",[183,33,42,290,11,34],"maker\u002Fneutral\u002Fdesign",[292,293,46,208,294,42],"44071791",13,"ricardonunez",[296,297,42,192,298,42],"44071191",14,"ulrischa",[300,301,46,208,302,42],"44068328",15,"inhumantsar",[304,305,18,226,306,42],"44067897",16,"billconan",[308,305,42,232,11,34],"44067987",[144,305,34,234,145,42],[311,305,42,192,312,42],"44070609","bambax",[314,315,18,266,316,42],"44074395",17,"ahsd1",[318,319,46,208,320,42],"44071129",18,"timdeve",[322,323,18,266,324,42],"44068470",19,"90s_dev",[132,326,18,266,133,42],20,[328,329,46,210,330,42],"44068895",21,"khaki54",[332,333,18,189,334,42],"44070898",22,"revskill",[94,336,46,208,95,42],23,[338,336,42,192,339,42],"44075609","elcritch",[102,341,34,234,103,42],24,[343,344,42,192,345,42],"44068190",25,"input_sh",[347,344,42,192,217,42],"44069125",[349,344,42,192,350,42],"44069732","sn0n",[352,344,42,192,345,42],"44071189",[152,36,42,192,153,42],[],[356,361,366,371,375,379],{"id":357,"name":358,"points":359,"category":360},"44118023","Desktop Docs",597,"productivity",{"id":362,"name":363,"points":364,"category":365},"44110584","simonwillison.net",529,"ai",{"id":367,"name":368,"points":369,"category":370},"44103839","Lazy Tetris",438,"games",{"id":372,"name":373,"points":374,"category":365},"44112326","AutoThink",397,{"id":376,"name":377,"points":378,"category":370},"44101175","Porting Terraria and Celeste to WebAssembly",338,{"id":380,"name":381,"points":382,"category":383},"44080803","rotary_dial_kmod",337,"hardware",false,"v2",{"id":387,"name":5,"line":6,"ai":384,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":388,"top":18,"kw":389,"maker":11,"domain":10,"tier":19,"attempts":42,"strip":390,"url":9,"mix":391,"praise":79,"objection":99,"sub":21},44067409,0.22,[24,25,26,27,28],"3000055503331300000033051505313535351000",[32,33,34,35],1793991121275]