Skip to content

Commit 0485bdf

Browse files
committed
v2026.5.16
1 parent a17b4ff commit 0485bdf

9 files changed

Lines changed: 70 additions & 73 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ python/*.egg-info/
1010
.DS_Store
1111

1212
python/cozip/_lib/cozip.dylib
13+
julia/Manifest.toml

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2026.5.15
1+
2026.5.16

julia/Artifacts.toml

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,51 @@
22
arch = "aarch64"
33
os = "linux"
44
libc = "glibc"
5-
git-tree-sha1 = "400981bd94b62948b56c79e90af58d38f8d108c5"
5+
git-tree-sha1 = "db4487e5495c81e1dd90adcd2d4e8a4afe6d4ce7"
66
lazy = true
77

88
[[cozip.download]]
9-
url = "https://github.com/asterisk-labs/taco/releases/download/v2026.5.13/libcozip-2026.5.13-linux-aarch64.tar.gz"
10-
sha256 = "ead9ad66d1b92b2178843f5a2bec355c1c338b8992c5bd0016c4399f6ae7382d"
9+
url = "https://github.com/asterisk-labs/cozip/releases/download/v2026.5.15/libcozip-2026.5.15-linux-aarch64.tar.gz"
10+
sha256 = "40d41e3c99ab95dfdec929bdde149b3d65d16cd62c352cae74c7d80a2378f449"
1111

1212
[[cozip]]
1313
arch = "x86_64"
1414
os = "linux"
1515
libc = "glibc"
16-
git-tree-sha1 = "6fff3000efb6dc986004e568585016723cbe60dc"
16+
git-tree-sha1 = "32989d32fce26d689e604468b9462f6f13d995de"
1717
lazy = true
1818

1919
[[cozip.download]]
20-
url = "https://github.com/asterisk-labs/taco/releases/download/v2026.5.13/libcozip-2026.5.13-linux-x86_64.tar.gz"
21-
sha256 = "df07301874a49db58a23eaad2452674b6b5dc78ff0c7684a19aa92f1d82566d2"
20+
url = "https://github.com/asterisk-labs/cozip/releases/download/v2026.5.15/libcozip-2026.5.15-linux-x86_64.tar.gz"
21+
sha256 = "0793bc68510bd54ed20c14b24953b66515dda7e3936a1146499c3c96dec8023c"
2222

2323
[[cozip]]
2424
arch = "x86_64"
2525
os = "macos"
26-
git-tree-sha1 = "2c1241eca9a121beb77d73d1b7ac8dba7bdb09f7"
26+
git-tree-sha1 = "b7cfdf3a2a2b1737e48d6560136d4a78d19552fb"
2727
lazy = true
2828

2929
[[cozip.download]]
30-
url = "https://github.com/asterisk-labs/taco/releases/download/v2026.5.13/libcozip-2026.5.13-macos-universal.tar.gz"
31-
sha256 = "752b2018947b9f245c1f9c3c3139b51571fb05dc7ddc5ff080df759e4b0c8b97"
30+
url = "https://github.com/asterisk-labs/cozip/releases/download/v2026.5.15/libcozip-2026.5.15-macos-universal.tar.gz"
31+
sha256 = "93eaa7152b1bb963f49726487d4458ee73eb72b2b5bb3a484a4c6aa4b960361c"
3232

3333
[[cozip]]
3434
arch = "aarch64"
3535
os = "macos"
36-
git-tree-sha1 = "2c1241eca9a121beb77d73d1b7ac8dba7bdb09f7"
36+
git-tree-sha1 = "b7cfdf3a2a2b1737e48d6560136d4a78d19552fb"
3737
lazy = true
3838

3939
[[cozip.download]]
40-
url = "https://github.com/asterisk-labs/taco/releases/download/v2026.5.13/libcozip-2026.5.13-macos-universal.tar.gz"
41-
sha256 = "752b2018947b9f245c1f9c3c3139b51571fb05dc7ddc5ff080df759e4b0c8b97"
40+
url = "https://github.com/asterisk-labs/cozip/releases/download/v2026.5.15/libcozip-2026.5.15-macos-universal.tar.gz"
41+
sha256 = "93eaa7152b1bb963f49726487d4458ee73eb72b2b5bb3a484a4c6aa4b960361c"
4242

4343
[[cozip]]
4444
arch = "x86_64"
4545
os = "windows"
46-
git-tree-sha1 = "06f58edee9575a5a7e836e3f0503f43ea92602b4"
46+
git-tree-sha1 = "7c9623e87520b2c471b9ea03ae5c16b97d410bf1"
4747
lazy = true
4848

4949
[[cozip.download]]
50-
url = "https://github.com/asterisk-labs/taco/releases/download/v2026.5.13/libcozip-2026.5.13-windows-x86_64.tar.gz"
51-
sha256 = "1da60e6a5099c8ad701d97403f255de033ce5d67eb11f9e7dfab0f944430a3e1"
50+
url = "https://github.com/asterisk-labs/cozip/releases/download/v2026.5.15/libcozip-2026.5.15-windows-x86_64.tar.gz"
51+
sha256 = "019f1405d81a28b0c0341cf8fcc2400352cd082a44e1019b2d01e466dbb5845d"
5252

julia/LICENSE

Whitespace-only changes.

julia/Project.toml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "Cozip"
22
uuid = "7c91d8e4-3f2a-4b6c-9d18-2e5f7a8b3c4d"
3-
version = "2026.5.15"
3+
version = "2026.5.16"
44
authors = ["Cesar Aybar <cesar@asterisk.coop>"]
55

66
[deps]
@@ -12,6 +12,11 @@ LazyArtifacts = "4af54fe1-eca0-43a8-85a7-787d91b784e3"
1212
Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
1313

1414
[compat]
15+
julia = "1.10"
16+
DataFrames = "1"
17+
DuckDB = "1"
18+
DBInterface = "2"
19+
Tables = "1"
1520
GeoInterface = "1.6.1"
1621
GeoParquet = "0.2.1"
1722

@@ -21,4 +26,4 @@ GeoParquet = "e99870d8-ce00-4fdd-aeee-e09192881159"
2126
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
2227

2328
[targets]
24-
test = ["Test", "GeoParquet", "GeoInterface"]
29+
test = ["Test", "GeoParquet", "GeoInterface"]

julia/README.md

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,22 @@
11
# Cozip.jl
22

3-
Julia binding for [libcozip](https://github.com/asterisk-labs/taco/tree/main/cozip) — pack files into a Cloud-Optimized ZIP archive readable over HTTP range requests.
3+
Julia binding for libcozip. Open a Cloud-Optimized ZIP archive like a table over HTTP range requests, or write one from a DataFrame.
44

5-
The native `libcozip` binary is fetched automatically via Julia Artifacts; no C toolchain required.
5+
The native `libcozip` binary is fetched automatically via Julia Artifacts, no C toolchain required.
66

77
## Install
88

9-
From the AsteriskRegistry (recommended):
9+
`Cozip.jl` lives in the AsteriskRegistry.
1010

1111
```julia
1212
using Pkg
13-
Pkg.Registry.add(RegistrySpec(url = "https://github.com/asterisk-labs/AsteriskRegistry"))
13+
Pkg.Registry.add("https://github.com/asterisk-labs/AsteriskRegistry")
1414
Pkg.add("Cozip")
1515
```
1616

17-
Or directly from the monorepo:
18-
19-
```julia
20-
Pkg.add(url = "https://github.com/asterisk-labs/taco", subdir = "cozip/julia")
21-
```
22-
2317
## Usage
2418

25-
### Simple mode
19+
### Write
2620

2721
```julia
2822
using Cozip, DataFrames
@@ -32,52 +26,59 @@ table = DataFrame(
3226
path = ["/path/to/a.txt", "/path/to/b.bin"],
3327
)
3428

35-
Cozip.create("out.cozip", table)
29+
Cozip.write("out.zip", table)
3630
```
3731

38-
### Two-step mode
39-
40-
For inspecting or tuning the `__metadata__` parquet between steps:
32+
`name` is how each file appears inside the archive. `path` is where it lives on disk, consumed at write time and dropped from the manifest. Any additional columns ride along into `__metadata__` and become queryable on read.
4133

4234
```julia
43-
# 1) materialize the __metadata__ parquet
44-
Cozip.metadata("meta.parquet", table; create_options = "COMPRESSION 'zstd'")
35+
table = DataFrame(
36+
name = ["a.tif", "b.tif"],
37+
path = ["/path/to/a.tif", "/path/to/b.tif"],
38+
cloud_pct = [12.3, 45.1],
39+
)
4540

46-
# 2) pack the archive
47-
Cozip.create("out.cozip", "meta.parquet")
41+
Cozip.write("out.zip", table)
4842
```
4943

50-
`create_options` is passed through to DuckDB's `COPY ... TO '...' (FORMAT parquet, <opts>)`, so anything DuckDB accepts works (e.g. `"COMPRESSION 'zstd', ROW_GROUP_SIZE 100000"`).
44+
### Read
5145

52-
### Extra columns
46+
```julia
47+
using Cozip
48+
49+
manifest = Cozip.read("https://example.com/dataset.zip")
50+
```
5351

54-
Any additional columns in `table` are propagated into `__metadata__`:
52+
`manifest` is a DataFrame with `name`, `offset`, `size`, plus whatever extras the writer added. Local file or remote URL, same call. Only the byte-0 index and the embedded `__metadata__` Parquet are fetched, never the user payloads.
53+
54+
Filter the manifest like any DataFrame, then use `offset` and `size` to range-request payloads.
5555

5656
```julia
57-
table = DataFrame(
58-
name = ["a.tif", "b.tif"],
59-
path = ["/path/to/a.tif", "/path/to/b.tif"],
60-
cloud_pct = [12.3, 45.1],
57+
using DataFrames, Downloads
58+
59+
train = filter(:split => ==("train"), manifest)
60+
row = train[1, :]
61+
buf = IOBuffer()
62+
Downloads.download(
63+
"https://example.com/dataset.zip", buf;
64+
headers = ["Range" => "bytes=$(row.offset)-$(row.offset + row.size - 1)"],
6165
)
62-
63-
Cozip.create("out.cozip", table)
66+
payload = take!(buf)
6467
```
6568

66-
The optional `in_index` column (default `true`) controls whether each entry is recorded in the cozip index — entries with `in_index = false` go into the ZIP but aren't exposed as cozip-indexed entries.
67-
6869
## Versioning
6970

70-
`Cozip.jl` tracks the C library, which uses CalVer with 4 components (e.g. `2026.5.2.6`). The Julia package itself uses 3 components because Julia enforces strict SemVer; the fourth is exposed via:
71+
`Cozip.jl` tracks the C library. The C side uses 4-component CalVer (e.g. `2026.5.2.6`). The Julia side uses the first three because Julia enforces strict SemVer. The fourth component is exposed at runtime.
7172

7273
```julia
7374
using Cozip
74-
Cozip.LibCozip.cozip_version() # "2026.5.2.6"
75+
Cozip.LibCozip.cozip_version() # "2026.5.2.6"
7576
```
7677

7778
## Spec
7879

79-
See the [cozip spec](https://github.com/asterisk-labs/taco/tree/main/cozip) for the on-disk format.
80+
See [SPEC.md](https://github.com/asterisk-labs/cozip/blob/main/SPEC.md) for the on-disk format.
8081

8182
## License
8283

83-
MIT — see [LICENSE](../LICENSE).
84+
MIT. See [LICENSE](../LICENSE).

julia/make-artifacts-toml.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ using Pkg.Artifacts
22
using Downloads
33
using SHA
44

5-
const REPO = "asterisk-labs/taco"
5+
const REPO = "asterisk-labs/cozip"
66
const VERSION = if !isempty(ARGS)
77
strip(ARGS[1])
88
else

python/pyproject.toml

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ classifiers = [
4343
]
4444

4545
[project.urls]
46-
Homepage = "https://asterisk.coop/taco/cozip"
47-
Repository = "https://github.com/asterisk-labs/taco"
48-
Issues = "https://github.com/asterisk-labs/taco/issues"
46+
Homepage = "https://github.com/asterisk-labs/cozip"
47+
Repository = "https://github.com/asterisk-labs/cozip"
48+
Issues = "https://github.com/asterisk-labs/cozip/issues"
4949

5050
[project.optional-dependencies]
5151
test = [
@@ -54,31 +54,21 @@ test = [
5454
"shapely>=2.0",
5555
]
5656

57-
# Single source of truth for the version: cozip/VERSION.
58-
# Hatchling reads it at build time so wheel metadata and tag stay in sync.
5957
[tool.hatch.version]
6058
path = "../VERSION"
6159
pattern = "^(?P<version>.+)$"
6260

6361
[tool.hatch.build.targets.wheel]
6462
packages = ["cozip"]
65-
# Include the prebuilt native lib in the wheel.
6663
artifacts = ["cozip/_lib/*.dylib", "cozip/_lib/*.so", "cozip/_lib/*.dll"]
6764

68-
# README and LICENSE live one directory up (shared with C/R/Julia bindings).
69-
# `force_include` copies them into the wheel root so PyPI / pip metadata
70-
# can find them.
7165
[tool.hatch.build.targets.wheel.force-include]
7266
"../README.md" = "README.md"
7367
"../LICENSE" = "LICENSE"
7468

75-
# Mark the wheel as platform-specific (because of the bundled .dylib),
76-
# but ABI-agnostic (cffi ABI mode works on any Python 3.x).
7769
[tool.hatch.build.targets.wheel.hooks.custom]
7870
path = "hatch_build.py"
7971

80-
# The sdist must be self-contained: it lives at cozip/python/ but
81-
# needs files from cozip/ (VERSION, README.md, LICENSE).
8272
[tool.hatch.build.targets.sdist]
8373
include = [
8474
"cozip/**",

r/DESCRIPTION

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
Package: cozip
22
Type: Package
3-
Title: Cloud-Optimized ZIP Open a ZIP Like a Table
4-
Version: 2026.5.15
5-
Date: 2026-04-30
3+
Title: Cloud-Optimized ZIP - Open a ZIP Like a Table
4+
Version: 2026.5.16
5+
Date: 2026-05-15
66
Authors@R: c(
77
person("Cesar", "Aybar", email = "cesar@asterisk.coop", role = c("aut", "cre")),
88
person("Roy", "Yali", email = "ryali93@gmail.com", role = "aut"),
99
person("Julio", "Contreras", email = "julio.contreras@uv.es", role = "aut"))
1010
Description: R bindings to libcozip, the reference writer for the
11-
Cloud-Optimized ZIP (cozip) format.
11+
Cloud-Optimized ZIP (cozip) format.
1212
License: MIT + file LICENSE
13-
URL: https://asterisk.coop/taco/cozip, https://github.com/asterisk-labs/taco
14-
BugReports: https://github.com/asterisk-labs/taco/issues
13+
URL: https://github.com/asterisk-labs/cozip
14+
BugReports: https://github.com/asterisk-labs/cozip/issues
1515
Encoding: UTF-8
1616
Language: en-US
1717
Depends:
@@ -27,4 +27,4 @@ Suggests:
2727
SystemRequirements: GNU make
2828
Config/testthat/edition: 3
2929
Roxygen: list(markdown = TRUE)
30-
RoxygenNote: 7.3.3
30+
RoxygenNote: 7.3.3

0 commit comments

Comments
 (0)