Skip to content

jiacai2050/zig-curl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

273793d · Jan 28, 2025

History

48 Commits
Aug 8, 2024
Aug 8, 2024
Jul 26, 2024
Jan 1, 2025
May 5, 2024
Jan 28, 2025
Mar 2, 2024
Jan 21, 2024
Jul 26, 2024
Sep 16, 2023
Aug 8, 2024
Aug 8, 2024
Jul 26, 2024
May 29, 2024

Repository files navigation

zig-curl

https://img.shields.io/badge/zig%20version-0.13.0-blue.svg https://img.shields.io/badge/zig%20version-master-blue.svg https://github.com/jiacai2050/zig-curl/actions/workflows/CI.yml/badge.svg https://ci.codeberg.org/api/badges/13257/status.svg

Zig bindings for libcurl, a free and easy-to-use client-side URL transfer library.

This package is in early stage, although the core functionality works right now, the API is still subject to changes.

The vendored libraries consist of:

LibraryVersion
libcurl8.8.0
zlib1.3.1
mbedtls3.6.0

Usage

const curl = @import("curl");

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer if (gpa.deinit() != .ok) @panic("leak");
    const allocator = gpa.allocator();

    const easy = try curl.Easy.init(allocator, .{});
    defer easy.deinit();

    const resp = try easy.get("http://httpbin.org/anything");
    defer resp.deinit();

    std.debug.print("Status code: {d}\nBody: {s}\n", .{
        resp.status_code,
        resp.body.items,
    });
}

See examples/basic.zig, examples/advanced.zig for more usage.

Installation

zig fetch --save=curl https://github.com/jiacai2050/zig-curl/archive/${COMMIT}.tar.gz

Replace ${COMMIT} with a real one, then in your build.zig, import the module like this:

const dep_curl = b.dependency("curl", .{});
exe.root_module.addImport("curl", dep_curl.module("curl"));
exe.linkLibC();

This library will link to a vendored libcurl by default, you can disable it and link to system-wide with this

const dep_curl = b.dependency("curl", .{ .link_vendor = false });
exe.linkSystemLibrary("curl");
exe.linkLibC();

License

MIT