crystal-zip64 v0.3.0

An alternate ZIP reader and writer for Crystal.

crystal-zip64

Crystal CI GitHub release Docs License

An alternate ZIP reader and writer for Crystal.

  • Drop-in replacement for Compress::Zip
  • Allows you to compress files bigger than 4GB
  • Tested on Linux, macOS and Windows

Extracted from https://github.com/crystal-lang/crystal/pull/11396. Based on https://github.com/crystal-lang/crystal/pull/7236.

Inspired by https://github.com/WeTransfer/cr_zip_tricks

Installation

  1. Add the dependency to your shard.yml:

    dependencies:
      zip64:
        github: crystal-garage/crystal-zip64
    
  2. Run shards install

Usage

require "zip64"

Reader

Zip64::Reader.open("./file.zip") do |zip|
  zip.each_entry do |entry|
    p entry.filename
    p entry.file?
    p entry.dir?
    p entry.io.gets_to_end
  end
end

Writer

File.open("./file.zip", "w") do |file|
  Zip64::Writer.open(file) do |zip|
    # Add a file with a String content
    zip.add "foo.txt", "contents of foo"

    # Add a file and write data to it through an IO
    zip.add("bar.txt") do |io|
      io << "contents of bar"
    end

    # Add a file by referencing a file in the filesystem
    # (the file is automatically closed after this call)
    zip.add("baz.txt", File.open("./some_file.txt"))

    # Add a directory
    zip.add_dir("dir")
  end
end

Limitations

  • Only compression methods 0 (STORED) and 8 (DEFLATED) are supported.
  • Encrypted ZIPs (traditional PKZIP or AES) are not supported.
  • Multi-disk (split) ZIP archives are not supported.
  • For very large archives, prefer Zip64::Reader (streaming). Zip64::File provides random access and supports Zip64 structures, but non-File inputs may be constrained by the underlying IO APIs.

Contributing

  1. Fork it (https://github.com/crystal-garage/crystal-zip64/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

Repository

crystal-zip64

Owner
Statistic
  • 7
  • 0
  • 0
  • 1
  • 1
  • 12 days ago
  • October 6, 2022
License

MIT License

Links
Synced at

Mon, 02 Mar 2026 12:40:06 GMT

Languages