BleachBit

bleachbit.org
BleachBit

Clears cache and deletes temporary files very effectively. This frees up disk space, improves performance, but most importantly helps to protect privacy.

Open Source

BleachBit Source Code

Author

bleachbit

Description

BleachBit system cleaner for Windows and Linux

#antiforensics#bleachbit#ccleaner-alternative#disk-cleaner#gplv3#gtk#linux#privacy#python#security#windows

Homepage

https://www.bleachbit.org

License

GPL-3.0

Created

10 Mar 14

Last Updated

18 Jun 26

Latest version

v6.0.1

Primary Language

Python

Size

26,799 KB

Stars

5,958

Forks

390

Watchers

5,958

Language Usage

Language Usage

Star History

Star History

Top Contributors

Recent Commits

  • GitHub Action (17 Jun 26)

    Update localization files Automatically extracted from ./po/*.po

  • Muhammed Al-Basha (16 Jun 26)

    Translate to (Arabic) Currently translated at 100.0% (505 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/ar/

  • GitHub Action (14 Jun 26)

    Update localization files Automatically extracted from ./po/*.po

  • Theodoros Asimakopoulos (14 Jun 26)

    Translate to (Greek) Currently translated at 98.4% (497 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/el/

  • Cirnos (13 Jun 26)

    Translate to (Portuguese (Brazil)) Currently translated at 100.0% (505 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/pt_BR/

  • GitHub Action (13 Jun 26)

    Update localization files Automatically extracted from ./po/*.po

  • Libre (13 Jun 26)

    Translate to (Spanish) Currently translated at 100.0% (505 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/es/

  • Pierfrancesco Passerini (12 Jun 26)

    Translate to (Italian) Currently translated at 100.0% (505 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/it/

  • Aindriú Mac Giolla Eoin (13 Jun 26)

    Translate to (Irish) Currently translated at 100.0% (505 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/ga/

  • David D. (12 Jun 26)

    Translate to (French) Currently translated at 99.8% (504 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/fr/

  • Andrew Ziem (12 Jun 26)

    Merge branch 'dev2'

  • GitHub Action (11 Jun 26)

    Update localization files Automatically extracted from ./po/*.po

  • Mona Lisa (10 Jun 26)

    Translate to (Swedish) Currently translated at 100.0% (505 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/sv/

  • Akhil Raj (10 Jun 26)

    Translate to (Malayalam) Currently translated at 0.5% (3 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/ml/

  • Andi Chandler (10 Jun 26)

    Translate to (English (United Kingdom)) Currently translated at 100.0% (505 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/en_GB/

  • ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝) (10 Jun 26)

    Translate to (Latvian) Currently translated at 6.7% (34 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/lv/

  • Akhil Raj (10 Jun 26)

    Added translation for new language (Malayalam)

  • GitHub Action (09 Jun 26)

    Update localization files Automatically extracted from ./po/*.po

  • Mr-Update (08 Jun 26)

    Translate to (German) Currently translated at 100.0% (505 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/de/

  • Andrew Ziem (08 Jun 26)

    Avoid timeout error in TestCLI.test_preview

  • Andrew Ziem (08 Jun 26)

    Fix warning when pasting from empty clipboard The warning started with recent clipboard changes, so the warning did not affect BleachBit 6.0.0 stable.

  • Andrew Ziem (08 Jun 26)

    Refactor run_external_nowait to use only subprocess - Replace Unix os.fork()/os.setsid()/os.execvp() with subprocess.Popen using start_new_session=True, close_fds=True, and DEVNULL for stdio. - Unify Windows and Unix logic in run_external_nowait around subprocess.Popen. - Copy caller's kwargs to avoid mutating the input dict. - Apply the same subprocess.DEVNULL + start_new_session approach to the non-wait path in run_external, removing duplicated early-return logic. - Update test to use a cross-platform Python script instead of shell/bat. - Extend test polling timeout from 5s to 20s for slower environments. Before the change, the test succeeded on Ubuntu 25.04 host but failed in a python:3.15-rc-slim container. python -m unittest -v tests.TestGeneral.GeneralTestCase.test_run_external_nowait" Configuration file does not exist yet: /home/user/.config/bleachbit/bleachbit.ini Configuration file does not exist yet: /tmp/GeneralTestCaser41yl3r6/bleachbit.ini test_run_external_nowait (tests.TestGeneral.GeneralTestCase.test_run_external_nowait) Unit test for run_external() with wait=False ... running cmd sh /tmp/GeneralTestCaser41yl3r6/run_external_nowait.sh /tmp/GeneralTestCaser41yl3r6/run_external_nowait.txt Failed to start process ['sh', '/tmp/GeneralTestCaser41yl3r6/run_external_nowait.sh', '/tmp/GeneralTestCaser41yl3r6/run_external_nowait.txt']: This process (pid=1) is multi-threaded, use of fork() may lead to deadlocks in the child. FAIL ====================================================================== FAIL: test_run_external_nowait (tests.TestGeneral.GeneralTestCase.test_run_external_nowait) Unit test for run_external() with wait=False ---------------------------------------------------------------------- Traceback (most recent call last): File "/work/tests/TestGeneral.py", line 246, in test_run_external_nowait self.assertNotExists(output_file) ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ File "/work/tests/common.py", line 268, in assertNotExists raise AssertionError( 'The file %s should not exist, but it does. %s' % (path, msg)) AssertionError: The file /tmp/GeneralTestCaser41yl3r6/run_external_nowait.txt should not exist, but it does.

  • Andrew Ziem (08 Jun 26)

    Fix "access denied" when clearing clipboard using win32 api - Use GTK clipboard clearing on all platforms including Windows - Call Windows API clear_clipboard() after GTK as additional cleanup - Catch and suppress Windows "access denied" errors (winerror 5) - Log debug message when Windows API fails due to GTK clipboard lock - Re-raise other Windows API errors This fixes clipboard clearing on Windows where GTK may leave the clipboard locked, causing the Windows API to fail with "access denied". The error started after recent clipboard changes (not affecting BleachBit 6.0.0 stable).

  • Andrew Ziem (07 Jun 26)

    Update Fedora Docker image from version 43 to 44

  • Andrew Ziem (07 Jun 26)

    Add cleanup for test cleaner file in RecognizeCleanerML test - Wrap test in try/finally block to ensure test cleaner file is removed - Remove test_recognize.xml file after test completes This prevents a dialog box from appearing in tests.TestGUI, which may cause it to hang

  • Andrew Ziem (07 Jun 26)

    Fix cleaner loading with invalid data type - Add isinstance() checks for option name and ID before appending to tree store - Log errors when option name or ID is not a string - Skip invalid options with continue statement This improves robustness in case of issue like the recently fixed 3b94f8463778412d3b7c1fb021bd8fcbf5283d12. In the GUI, the symptom was that the System category was only partially loaded. Also, many GUI tests failed. Traceback (most recent call last): File "/bleachbit/bleachbit/Cleaner.py", line 627, in register_cleaners cb_done() ~~~~~~~^^ File "/bleachbit/bleachbit/GuiWindow.py", line 792, in cb_register_cleaners_done self.tree_store.refresh_rows() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "/bleachbit/bleachbit/GuiTreeModels.py", line 198, in refresh_rows self.tree_store.append(parent, (o_name, o_value, o_id, "", "")) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 1366, in append return self._do_insert(parent, -1, row) ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 1358, in _do_insert row, columns = self._convert_row(row) ~~~~~~~~~~~~~~~~~^^^^^ File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 984, in _convert_row result.append(self._convert_value(cur_col, value)) ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 997, in _convert_value return GObject.Value(self.get_column_type(column), value) ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/gi/overrides/GObject.py", line 340, in __init__ self.set_value(py_value) ~~~~~~~~~~~~~~^^^^^^^^^^ File "/usr/lib/python3/dist-packages/gi/overrides/GObject.py", line 378, in set_value raise TypeError(f"Expected string but got {py_value}{type(py_value)}") TypeError: Expected string but got ('DNS cache',)<class 'tuple'> Traceback (most recent call last): File "/bleachbit/bleachbit/GuiWindow.py", line 585, in on_selection_changed self.append_text(label, 'option_label', scroll=False) ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/bleachbit/bleachbit/GuiWindow.py", line 549, in append_text text = text.encode('utf-8', errors='replace').decode('utf-8') ^^^^^^^^^^^ AttributeError: 'tuple' object has no attribute 'encode'

  • Andrew Ziem (07 Jun 26)

    Suppress asyncio deprecation warnings - Add warning suppression for PyGObject 3.56.2's deprecated asyncio calls as a new context manager - Apply suppression in Bleachbit.run() to cover entire GTK application lifecycle. (A surgical approach was insufficient.) - Apply suppression for only Python 3.14+ This is a workaround for PyGObject 3.56.2's deprecated asyncio calls. It prevents test failures when PYTHONWARNINGS=error is set and running on Python 3.14 The issue is logged upstream https://gitlab.gnome.org/GNOME/pygobject/-/work_items/697 ====================================================================== ERROR: test_shred_paths_from_clipboard_menu_integration (tests.TestGUI.GUITestCase.test_shred_paths_from_clipboard_menu_integration) Shred a path copied to the real clipboard ---------------------------------------------------------------------- Traceback (most recent call last): File "/bleachbit/tests/TestGUI.py", line 404, in test_shred_paths_from_clipboard_menu_integration self.app.cb_clipboard_uri_received(clipboard, targets, None) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/bleachbit/bleachbit/GuiApplication.py", line 181, in cb_clipboard_uri_received GUI.shred_paths(self._window, shred_paths, ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ should_clear_clipboard=True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/bleachbit/bleachbit/GuiWindow.py", line 524, in shred_paths clear_clipboard() ~~~~~~~~~~~~~~~^^ File "/bleachbit/bleachbit/GuiUtil.py", line 43, in clear_clipboard flush_gtk_events() ~~~~~~~~~~~~~~~~^^ File "/bleachbit/bleachbit/GuiUtil.py", line 194, in flush_gtk_events Gtk.main_iteration_do(False) ~~~~~~~~~~~~~~~~~~~~~^^^^^^^ File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 1879, in main_iteration_do with get_event_loop(GLib.MainContext.default()).paused(): ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/gi/_ossighelper.py", line 270, in get_event_loop loop = events.GLibEventLoopPolicy._get_event_loop() File "/usr/lib/python3/dist-packages/gi/events.py", line 873, in _get_event_loop return cls._get_event_loop_for_context(ctx, force_implicit=force_implicit) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/gi/events.py", line 890, in _get_event_loop_for_context if not isinstance(_get_event_loop_policy(), GLibEventLoopPolicy): ~~~~~~~~~~~~~~~~~~~~~~^^ File "/usr/lib/python3.14/asyncio/events.py", line 805, in get_event_loop_policy warnings._deprecated('asyncio.get_event_loop_policy', remove=(3, 16)) ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.14/_py_warnings.py", line 833, in _deprecated _wm.warn(msg, DeprecationWarning, stacklevel=3) ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DeprecationWarning: 'asyncio.get_event_loop_policy' is deprecated and slated for removal in Python 3.16

  • Andrew Ziem (07 Jun 26)

    Fix syntax error added in recent commit It caused many test failures such as RROR: test_GUI (tests.TestGUI.GUITestCase.test_GUI) Unit test for class GUI ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\projects\bleachbit\tests\TestGUI.py", line 191, in test_GUI gui.update_progress_bar(0.0) ^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'update_progress_bar' ====================================================================== ERROR: test_append_text (tests.TestGUI.GUITestCase.test_append_text)

  • GitHub Action (08 Jun 26)

    Update localization files Automatically extracted from ./po/*.po

  • Priit Jõerüüt (07 Jun 26)

    Translate to (Estonian) Currently translated at 100.0% (505 of 505 strings) Translation: BleachBit/main Translate-URL: https://hosted.weblate.org/projects/bleachbit/main/et/

BleachBit Security

4/10

Repo Security Summary

Updated 01 Jun 26

  • Code-Review 0/10
  • Maintained 10/10
  • Dangerous-Workflow 10/10
  • Packaging N/A
  • Token-Permissions 0/10
  • CII-Best-Practices 0/10
  • Binary-Artifacts 8/10
  • Security-Policy 0/10
  • License 10/10
  • Fuzzing 0/10
  • Branch-Protection 0/10
  • Signed-Releases 8/10
  • SAST 0/10
  • Pinned-Dependencies 0/10

Security Advisories (2)

  • high Patched CVSS 7.3

    CVE-2025-32780 DLL Untrusted Path Vulnerability in BleachBit <= 4.6.2 for Windows

  • high Patched CVSS 7.3

    CVE-2023-47113 DLL Search Order Hijacking vulnerability in BleachBit for Windows

BleachBit Website

Website

Clean Your System and Free Disk Space | BleachBit

BleachBit is a free, open-source disk space cleaner and privacy manager for Windows and Linux. Shred files, wipe free space, and delete junk files safely.

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address 172.67.68.253
  • Location San Francisco, California, United States of America, NA
  • ISP CloudFlare Inc.
  • ASN AS13335

Associated Countries

  • US US

Safety Score

Website marked as safe

100%

Blacklist Check

www.bleachbit.org was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

BleachBit Reviews

More Windows Defences

About the Data: BleachBit

Change History

API

You can access BleachBit's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/bleachbit

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share BleachBit

Help your friends compare Windows Defences, and pick privacy-respecting software and services.
Share BleachBit and Awesome Privacy with your network!

View Windows Defences (17)