miinideckmiinideck
PricingUse casesBlog
Sign in
Tools

Combine HTML, CSS and JS into one file

Drop a .zip of the folder. Get one .html file back. Nothing is uploaded.

Drop a .zip of your page folder

Nothing leaves this tab.

index.html
style.css
app.js
logo.png
one file

Your single self-contained file will appear here.

Drop a .zip of your page folder

Nothing leaves this tab.

index.html
style.css
app.js
logo.png
one file

Your single self-contained file will appear here.

How it works

Zip the folder your page lives in — the HTML plus whatever it loads — and drop it on the panel. The tool finds the entry document, follows every reference that points inside the bundle, and pulls those files into the document itself: stylesheets become inline <style>, scripts become inline <script>, and images, fonts and other binary assets become data: URIs.

What comes back is one .html file with no external dependencies of its own. You can email it, put it on a USB stick, attach it to a form that only accepts a single upload, or hand it to a host. It opens by double-clicking, in any browser, with no server involved.

It all happens in this tab. The file is read locally by your browser and the result is built in memory — nothing is sent anywhere, which matters when the page is client work, an unreleased design, or a report you would not paste into a random web form.

The unpacking rules are the same ones our uploader runs, on purpose: the same entry-point choice, the same wrapper-folder strip, the same rejection of unsafe paths. So a bundle that folds cleanly here is one that will render and host correctly elsewhere, rather than a second implementation that quietly disagrees with the first.

What this tool doesn’t do

  • The output is always bigger than the input — usually 30-40% bigger when there are images. Binary files have to be base64-encoded to live inside a text document, and that encoding costs about a third. This is inherent to single-file pages, not something a better tool avoids.
  • References that point outside the bundle are left exactly as written. A Google Font, a CDN script, or an analytics tag stays external, because inlining it would mean fetching it — and this tool does not make network requests. If you need those inside too, download them into the folder first and point at them relatively.
  • It folds one entry document. A multi-page site keeps working only for the pages reachable without leaving that document; links to other .html files in the bundle will not resolve once the file is on its own.
  • It does not minify, optimise images, or bundle modules. If you want a build step rather than a fold, esbuild and Vite do that job far better, and a plugin like vite-plugin-singlefile is purpose-built for exactly this output.
  • It cannot help with anything that needs a server. A page that talks to a database, checks a login, or runs code on the backend is not a file you can hand over — Vercel and Netlify are the right tools for that shape.

Questions

How do I combine HTML, CSS and JavaScript into one file?

Put the page and everything it loads in one folder, zip that folder, and drop it here. The tool reads the entry HTML, follows each reference that points inside the bundle, and rewrites the document so the stylesheets sit in inline <style> tags, the scripts in inline <script> tags, and the images and fonts as data: URIs. You download one .html file. The alternative routes are a build tool or a script — this exists because neither is worth installing when you just need one file once.

Is this the same as a CSS inliner?

No, and the difference matters because most tools you will find are the other kind. An email CSS inliner takes rules out of a <style> block and writes them onto each element's style= attribute, so mail clients like Outlook render them. This tool goes the opposite direction: it takes files that live outside the document — style.css, app.js, logo.png — and brings them inside it. If you are fixing an HTML email, you want the other kind.

Why is the single file bigger than my folder?

Because images, fonts and other binary files have to be turned into text to live inside an HTML document, and base64 encoding adds roughly a third to their size. A folder with a few photographs will grow noticeably; a page that is mostly text and CSS will barely change. It is the price of the file being self-contained, and every single-file page pays it.

Will my fonts and images still work?

Anything that was in the zip, yes — those come along inside the file. Anything loaded from elsewhere stays a link to elsewhere, so a Google Font or a CDN script still needs a connection to render. The fastest way to check what you actually have: open the downloaded file with your Wi-Fi turned off. What renders is what travels.

Does my file get uploaded anywhere?

No. Your browser reads the zip locally, the folding happens in this tab's memory, and the download is generated from that memory. There is no account here, nothing is stored, and no request carries your file anywhere. That is how the tool is built, not a claim about anyone else.

What if I have a folder rather than a zip?

Zip it first — right-click the folder and choose Compress on a Mac, or Send to → Compressed folder on Windows. A zip is what preserves the folder structure, and the structure is exactly what the tool needs to resolve where style.css and images/logo.png were supposed to be.

Can I use this on a React or Next.js project?

Only after it is built. A project folder full of .jsx or .ts source is not a page yet — it needs its build step to become HTML, CSS and JavaScript. Run your build first and zip the output folder (usually dist or out). If you drop a source project here, the tool will recognise it and tell you, along with a prompt you can hand to an AI tool to get a buildable version.

What do I do with the single file once I have it?

Whatever needed one file in the first place: attach it to an upload form, email it, archive it, or put it on a host. If the goal is to send someone a link rather than a file, that is what miinideck does — drop the file and get a URL that search engines do not index. Without an account the link lasts 7 days and has no password; sign in (free) to add a password or set your own expiry.

Related

Preview a zipped site firstSee it render before you fold it.How inlining actually worksThe three mechanics, by hand.Self-contained HTML, end to endWhat makes a file travel alone.Put the file on a linkOne file, one private URL.
miinideck

HTML files, finally as links — for AI builders, agencies, and consultants. Default-noindex, default-private, default-yours.

Product

  • Pricing
  • Use cases
  • Try it free

Resources

  • Blog
  • Free tools
  • Featured on
  • Report abuse

Legal

  • Privacy
  • Terms
Listed onmiinideck listed on Product Huntmiinideck listed on Faziermiinideck listed on TheSaaSDirmiinideck listed on AIToolHuntmiinideck listed on LaunchNest
© 2026 miinideckMade for people who don't want their work indexed.