
ditto.site
Clone any website into clean code. Free & open source
700 followers
Clone any website into clean code. Free & open source
700 followers
Point Ditto at any public URL and get a faithful copy as clean, componentized Next.js or Vite code, in minutes. It's fully deterministic, so it's fast, cheap, and consistent. Components, tokens, interactions & hover states included. Free REST API + MCP server, open source.









@samraaj_bath1 Congrats on open sourcing this! For a marketing site with a few dozen pages, does Ditto crawl and clone the whole site graph in one pass, or is it strictly one URL at a time and I'd need to loop it myself? That can change the real time/API cost of an actual migration job!
ion design
@clement_avq Yep we have a parameter for single page vs multi page clones.
in prod we start with single page so we can show the customer something fast, and do multipage in teh background.
for repeatsed patterns (cms blogs, products, etcc) we recognize that and just make one of those entries at random. Soon we have a CMS extractor coming too :)
@samraaj_bath1 That background multi-page flow makes sense for speed! On the repeated-pattern sampling, how does Ditto decide two pages share the same template rather than just look similar? curious if there's a confidence threshold, or if it can silently pick the wrong page as the template for the whole set.
ion design
@clement_avq we do it based on URL patterns (blog/*)
@samraaj_bath1 simpler than I expected! Makes sense as a starting point, curious to see how that evolves once the CMS extractor ships. Thanks for walking through all of this!
A diff view between the generated code and a hand-written baseline would be super useful so you can quickly spot where Ditto makes questionable choices, especially around accessibility or semantic HTML.
ion design
@abdullahboyu Yea this is good in theory but hard in practice. CSS is one of those things where there are many ways to do the same thing. so diffs naturally diverge when u go into semantic, compiled languages.
we can diff the rendered DOM, but there's often a touch of drift with same visual output
Love how fast and clean the output is, especially that it keeps hover states intact. One thing that would make this even better is letting me diff the generated code against the live site as it changes, so I can spot regressions during maintenance without having to rebuild from scratch.
ion design
@beril3ljq good idea, but the thing is this is more for a starting point. We imagine the diff will be really hard ot manage over a longer scale rather than during a snapshot
Congrats on the launch! We had many secondary domains that were just forwarding to our main website, but now I will surely try Ditto so each one has its own landing page instead of a bare redirect. Quick question: for cloning the same source site to multiple domains, is the hosted API rate-limited or would you recommend self-hosting?
ion design
@amit_kalawani I'd typically recommend self hosting. since we host the api for free, we do have a queuing and job system so it's most reliable when you do it yourself
minimalist phone: reduce your screentime
How can you defend the fact that the page was copied? I often see people then start to argue about who is copying whom.
ion design
@busmark_w_nika We're a tool, i don't condone people stealing other people's stuff.
the main use case for ditto (which we use it for) is migration from locked website platforms. So a customer gets a clone of their own stuff they can port anywhere.
Hello!
That's a very interesting idea. How do you handle the issue of accessibility?
ion design
@francisco_rocha_cortes We get as much as we can from the rendered DOM
Clean componentized Next.js output from an arbitrary URL is the hard part that most scraper-to-code tools get wrong, they produce a flat HTML dump rather than anything a developer would actually want to maintain. Curious how the component boundary inference works, like whether it's doing semantic analysis of the DOM structure or something more heuristic.