{"id":37029803,"url":"https://github.com/bitstorm/tiny-zip","last_synced_at":"2026-01-14T03:35:56.306Z","repository":{"id":57732612,"uuid":"179709045","full_name":"bitstorm/tiny-zip","owner":"bitstorm","description":"The missing Zip library for Java","archived":false,"fork":false,"pushed_at":"2020-11-01T15:59:46.000Z","size":285,"stargazers_count":20,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-07T07:05:18.507Z","etag":null,"topics":["java","library","utility","zip"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bitstorm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-04-05T15:34:45.000Z","updated_at":"2024-08-11T22:15:55.000Z","dependencies_parsed_at":"2022-09-13T15:00:26.861Z","dependency_job_id":null,"html_url":"https://github.com/bitstorm/tiny-zip","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bitstorm/tiny-zip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitstorm%2Ftiny-zip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitstorm%2Ftiny-zip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitstorm%2Ftiny-zip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitstorm%2Ftiny-zip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bitstorm","download_url":"https://codeload.github.com/bitstorm/tiny-zip/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitstorm%2Ftiny-zip/sbom","scorecard":{"id":240896,"data":{"date":"2025-08-11","repo":{"name":"github.com/bitstorm/tiny-zip","commit":"8baccfd0a9a43dfb1a8c7a0db7e121ac0a9d3ba2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/19 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T06:39:45.985Z","repository_id":57732612,"created_at":"2025-08-17T06:39:45.985Z","updated_at":"2025-08-17T06:39:45.985Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","library","utility","zip"],"created_at":"2026-01-14T03:35:55.521Z","updated_at":"2026-01-14T03:35:56.294Z","avatar_url":"https://github.com/bitstorm.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TinyZip, the missing Java ZIP library\n\nJava offers support for the ZIP file format through package `java.util.zip` package since its very first versions. However this kind of support is limited to I/O streams and algorithm implementation, without any utility class for the file system.\nThat's why so many projects (both open and closed source) have their own version of `ZipUtils` class that tries to fill the gap!  \nThis library aims to finally offer a light, not over-bloated solution that avoids to reinvent the wheel each time we need to work with ZIP files.  \nIn addition, as its name suggest TinyZip has been designed to be as small as possible: it weights less than 15 kb, isn't tiny enough for you :-)?\n\n## Technical specs and license\n\nThe library is entirely based on Java NIO package and it has no additional dependencies. Java 8 is required as minimum version.  \nTinyZip is released under under the terms of the Apache Software Foundation license, version 2.0. The text is included in the file LICENSE in the root of the project.\n\n## Maven dependency\n```\n\u003cdependency\u003e\n\t\u003cgroupId\u003eio.github.bitstorm\u003c/groupId\u003e\n\t\u003cartifactId\u003etinyzip-core\u003c/artifactId\u003e\n\t\u003cversion\u003e1.0.0\u003c/version\u003e\n\u003c/dependency\u003e\t\n```\n\n## Basic usage\n\n#### Zipping files\n\nThe basic usage requires only the path to the zip file you want to create along with a list of file/folders you want to zip.\n\n```\nTinyZip.zip(\"/path/to/my/zip/myzip.zip\", \"/foo/\", \"/bar/fooBar.txt\", \"baz.java\");\n```\n\nAll previous parameters can be also expressed as `Path` instances:\n\n```\nPath zipPath = ...\nPath fooPath = ...\nPath barPath = ...\nPath bazPath = ...\n\nTinyZip.zip(zipPath, fooPath, barPath, bazPath);\n```\n\n#### Unzipping files\n\nUnzipping just requires the path to a zip file and the path to a destination folder:\n\n```\nTinyZip.unzip(\"/path/to/my/zip/myzip.zip\", \"/dest\");\n```\n\nJust like `zip` method also `unzip` can be used with class `Path` instead of `String`\n\n```\nPath pathTozip = ...\nPath destZip = ...\n\nTinyZip.unzip(pathTozip, destZip);\n```\n## Advanced usage\n\nZipping/unzipping process can be customized through class `ZipParameters`. Here is a list of its properties along with a short description:\n\n*  __bufferSize__: The size in bytes of the buffer used to read/write the zip streams (ZipInputStream and ZipOutputStream). Its default value is 4096.\n*  __includeBaseFolderName__: This flag says if the name of a folder will be included at the root of the zip file. _The flag is considered only if we are zipping a single folder_, i.e.:\n\n```\n   ZipParameters params = new ZipParameters(false);\n   TinyZip.zip(\"/path/of/my.zip\", params, \"/path/to/folder\")\n```\n\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Its default value is __true__\n\n\n*  __progressObserver__: The observer that will be notified about the progress of the zip/unzip process. It receives two\nparameters: a string representing the current file being processed, and a double value indicating the percentage of work done so far. The first parameter is the file we are compressing during zipping operations, while it's the ZipEntry path we are extracting during unzipping operations.\n\nIn the next section we will see an example for __progressObserver__.\n\n#### Progress monitoring\nTinyZip allows to keep track of the progress for the current zip/unzip operation. This can be done specifying an _observer_ in `ZipParameters`. This observer is a standard Java `BiConsumer` that takes in input the following two parameters: \n\n* A double value representing the percentage of work completed so far.\n* A string value representing the path of the last file processed. When we are zipping this value is the path of the last file we have compressed. When we are unzipping this value is the path of the last `ZipEntry` we have extracted. \n\nFor example:\n\n```\n//set a simple observer that prints progress informations on standard output\nZipParameters params = new ZipParameters((percentage, currentFile) \n\t-\u003e System.out.println(String.format(\"%f, done %s\", percentage, currentFile)));\n\t\nTinyZip.zip(\"/path/to/my/zip/myzip.zip\", params, \"/foo/\", \"/bar/fooBar.txt\", \"baz.java\");\n// do some stuff...\nTinyZip.unzip(\"/path/to/my/zip/myzip.zip\", \"/foo\", params);\t\t\n```\n#### Using streams\nZipping and unzipping operations can also be performed on IO streams object rather than directly on file. This allows to use custom streams to implement advanced functionalities like data encryption or splitting output over multiple files. For example:\n\n```\n//inizialize output stream\nCipherOutputStream myChiperOutputStream = ...\n\nTinyZip.zip(myChiperOutputStream, \"/foo/\", \"/bar/fooBar.txt\", \"baz.java\");\n\n//inizialize input stream\nCipherInputStream myChiperInputStream = ...\n\nTinyZip.unzip(myChiperInputStream, \"/dest\");\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitstorm%2Ftiny-zip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitstorm%2Ftiny-zip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitstorm%2Ftiny-zip/lists"}