jcubic/chat-gpt: a bookmarklet that saves ChatGPT conversations as HTML files
ChatGPT conversation saving bookmark
At a glance
- What is it?
- This is a small JavaScript bookmarklet, distributed under GPL-3.0, that turns the ChatGPT web page into a saved file on disk. It is a good fit if you want local copies of conversations and a bad fit if you want an official API, a browser extension, or anything that works outside chatgpt.com.
- Who is it for?
- Use jcubic/chat-gpt if you keep conversations in the ChatGPT web app and want plain HTML copies on your own disk, and if you accept that a bookmarklet is only as stable as OpenAI's DOM. Do not use it if you need unattended archiving, a mobile browser, or a supported API.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 11 days ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What jcubic/chat-gpt actually solves
ChatGPT's web interface keeps conversations inside OpenAI's account. There is no built-in export button described anywhere in this project's README, and the project exists precisely because the author wanted copies on local disk. The README says the goal is "to allow saving the chatGPT conversation as files on the disk", and the starting point was a DEV.to article titled "Save ChatGPT as HTML file". The author then moved it to GitHub so it could be updated when OpenAI changes the web application.
That last sentence is the honest description of the problem class. This is not an archiving product with a data model. It is a patch against a moving target. The intended user is someone who already has a ChatGPT session open in a desktop browser, wants the current conversation as a file, and is willing to click a bookmark to get it. There is no server component, no account, no sync service, and no CLI.
How the bookmarklet mechanism works
A bookmarklet is JavaScript stored as a bookmark URL. The README points to the Wikipedia article on bookmarklets for background, and defines it plainly: "Bookmarklet is a JavaScript code that run as URL from your bookmarks." When you click it while a ChatGPT page is focused, the browser executes that code in the page context rather than navigating somewhere.
The repository layout matches this. bookmark.js holds the code you copy into a bookmark, index.html is the landing page at jcubic.github.io/chat-gpt/ where the link can be dragged, style.css styles that page, and assets/ holds the icon. There is also an experimental.js file at the top level, though the README does not describe what it does, so treat it as undocumented.
The data flow is short: the script runs inside the loaded ChatGPT page, reads the conversation out of the DOM, and triggers a file download through the browser. Nothing is uploaded by the bookmarklet. The README does not describe which selectors it uses, how it walks the message tree, or what happens on very long threads. Because the extraction happens against the rendered page, the script depends on ChatGPT's markup staying compatible; the README says the project was moved to GitHub so it could be updated "when OpenAI change their web application", which is an admission that breakage is expected rather than exceptional.
Installing the bookmarklet and saving your first conversation
There is no package manager step. Installation means creating a bookmark whose URL is the contents of bookmark.js. The README describes two routes: copy the code from that file into a new bookmark yourself, or open the project website and drag the link to your bookmarks.
If you want the code in a local file before pasting it, the README points at the bookmark.js file in the repository, which is reached from the project page at https://jcubic.github.io/chat-gpt/ or from the repository at https://github.com/jcubic/chat-gpt. Open that file, then create a bookmark in your browser and paste the whole contents as the URL field. The README notes that if you do not know how to do this manually, the website offers a drag and drop link instead. Either way the result is the same: a bookmark whose address is JavaScript rather than a web address.
Then open a conversation on ChatGPT, click the bookmark, and the browser should start a download. The README says the output is an HTML file, and the repository's contribution instructions confirm the workflow: "run the bookmark, download the file and add it to the repository in current date folder". That instruction is for contributors, but it tells you what a successful run looks like: one downloaded HTML file per conversation.
To check that the saved file is complete, open it directly in the browser. It is a static HTML document, so it renders without a ChatGPT session.
Where the bookmarklet approach breaks down
The failure mode is structural, not incidental. A bookmarklet runs against the DOM of a page you do not control. When OpenAI ships a markup change, extraction can return partial conversations or nothing at all, and the fix has to be made in bookmark.js and re-copied into your bookmark. The README asks users to report when "the code doesn't work", which is the maintenance model in one sentence.
The repository's dated folders are the second signal. Directories run from 2022-12 through 2026-07-26, and the contribution guide explains the convention: each update gets a downloaded file in a folder named for the current date, linked from index.html, and this "act as a CHANGELOG". So the project's own history is a list of download samples rather than release notes. No releases are listed for this repository, and no version tags appear in the repository listing.
Practical limits follow from that. It runs in a desktop browser where you can click a bookmark; the README says nothing about mobile browsers or about automating the click. It saves the conversation you currently have open, not your whole history. And because the output is HTML, downstream processing means parsing HTML rather than JSON. If you need machine-readable exports or scheduled backups, this is the wrong tool.
How it differs from a browser extension or the OpenAI API
The closest alternative in kind is a browser extension that adds an export button to the ChatGPT interface. The difference is installation and reach rather than output: an extension is installed once from a store, can run automatically on page load, and can update itself, while this project requires you to paste code into a bookmark and re-paste it whenever the script changes. In exchange, the bookmarklet has no store review, no background permissions, and no install footprint; it is one bookmark you can delete.
A second alternative is exporting through the OpenAI API or an official account data export. That path produces structured data and does not depend on page markup, but it is a different product with its own access and cost model, and the README here does not mention the API at all. The honest comparison is that jcubic/chat-gpt trades durability for zero setup: you get a file in one click, and you accept that the click may stop working after an upstream change.
The README also links one third-party use case, "sync download chatGPT conversation with Amazon S3", credited to a scripting.com post from March 2023. That is a user-built pipeline around the downloaded file, not a feature of this repository.
Licence and what ongoing maintenance costs you
The README states the licence as "GNU GPL v3 or later", with copyright 2022-2025 Jakub T. Jankiewicz, and the repository carries a LICENSE file. GPL-3.0 is a copyleft licence, so if you redistribute a modified bookmarklet, the usual copyleft obligations attach to the derived work. Whether a bookmarklet pasted into your own browser counts as distribution is a question for a lawyer; this article is not legal advice, and the README gives no guidance on the point.
Maintenance cost is the more concrete issue. The last push to the repository was on 2026-09-05, so the project is current. But currency here means the author is still reacting to ChatGPT changes, not that the script is stable. Every upstream UI change is a potential break, and the fix lands in bookmark.js, which you have to re-copy into your bookmark because a bookmarklet has no update channel. The repository's own contribution rule, adding a dated folder with a downloaded sample and a link from index.html, is a manual changelog process, not an automated release pipeline. Budget for periodic re-installation rather than a one-time setup.
Editorial conclusion
Use jcubic/chat-gpt if you keep conversations in the ChatGPT web app and want plain HTML copies on your own disk, and if you accept that a bookmarklet is only as stable as OpenAI's DOM. Do not use it if you need unattended archiving, a mobile browser, or a supported API. Before relying on it, open the bookmarklet on your current ChatGPT session and confirm the download dialog appears, then check the saved file for the full thread; the README does not document rollback, and the repository keeps dated folders that act as its changelog.
Frequently asked questions
How do I install jcubic/chat-gpt in my browser?
Create a new bookmark and paste the contents of bookmark.js into its URL field, or open the project website and drag the link to your bookmarks bar. The README describes both routes. There is no package to install.
What file format does jcubic/chat-gpt save conversations in?
The README says the bookmarklet saves the conversation as an HTML file. The project started from an article titled "Save ChatGPT as HTML file". It does not produce JSON or Markdown.
Does jcubic/chat-gpt work when ChatGPT changes its interface?
The README states the project was moved to GitHub so it could be updated when OpenAI changes their web application, and it asks users to report when the code does not work. Breakage after an upstream change is expected, and fixes must be re-copied into your bookmark.
Can I use jcubic/chat-gpt to back up my entire ChatGPT history?
No. The bookmarklet runs on the conversation you currently have open and downloads that conversation. The README describes saving a conversation as a file on disk, not bulk export of an account.
What licence is jcubic/chat-gpt released under?
The README states GNU GPL v3 or later, copyright 2022-2025 Jakub T. Jankiewicz. The repository includes a LICENSE file.
Community notes