1 <!DOCTYPE html>
     
2 <html lang="en">
     
3 <head>
     
4     <meta charset="utf-8">
     
5     <meta name="viewport" content="width=device-width, initial-scale=1">
     
6     <title>The Browseable Zig Standard Library</title>
     
7     <meta property="og:title" content="The Browseable Zig Standard Library" />
     
8     <meta property="og:type" content="website" />
     
9     <meta property="og:description" content="An HTML guide with a human-written catalog and pretty-printed source pages for reading." />
    
10     <meta property="og:url" content="http://ratfactor.com/zig/stdlib-browseable2/" />
    
11     <meta property="og:image" content="http://ratfactor.com/zig/stdlib-browseable2/zig-stdlib-book.svg" />
    
12     <style>
    
13         header { text-align: center; }
    
14         h1 { color: #777; }
    
15         h2 { color: #864; margin: 0; border-bottom: 1px solid #864; }
    
16 /*        section { border: 2px solid tan; max-width: 400px; float: left; margin: 1em; padding: 1em; } */
    
17         a { font-size: 1.2em; background-color: #f1f1ff; }
    
18         a.normal-link { font-size: initial; background-color: transparent; }
    
19         code { background-color: #fff0d0; }
    
20         ul { margin: 0; }
    
21         /* Multi-column layout */
    
22         .container {
    
23             border-top: 2px solid #777;
    
24             column-width: 25em;
    
25             padding-top: 1em;
    
26         }
    
27         section {
    
28             border: 2px solid tan;
    
29             padding: 1em;
    
30             break-inside: avoid;
    
31         }
    
32     </style>
    
33 </head>
    
34 <body>
    
35 <header>
    
36     <img src="zig-stdlib-book.svg" alt="vector drawing of a book with zig logo">
    
37     <h1>The Zig Standard Library</h1>
    
38 </header>
    
39 
    40 <div class="container">
    
41 
    42 <section>
    
43     <p>This page contains a human-curated directory for the Zig standard
    
44     library.  All *.zig links point to HTML documents which have been
    
45     automatically generated from the library source.</p>
    
46     <p>The files are split into two columns: The right column is the raw Zig
    
47     source code in the file.  The left column will contain public identifiers
    
48     and any document comments to explain them.</p>
    
49 </section>
    
50 
    51 <section>
    
52     <h2>Data structures</h2>
    
53 
    54     <p>
    
55         <a href="array_list.zig.html">array_list.zig</a>
    
56         Probably the most commonly used data structure in Zig. This is a
    
57         resizeable list. Contains a huge number of handy methods for
    
58         manipulating a list.
    
59         See <a class="normal-link" href="https://ziglearn.org/chapter-2/#arraylist">Standard Patterns: ArrayList</a>
    
60         (ziglearn.org).
    
61     </p>
    
62     <p>
    
63       <a href="bounded_array.zig.html">bounded_array.zig</a>
    
64       For fixed-size lists. Compare with ArrayList.
    
65     </p>
    
66     <p>
    
67       <a href="multi_array_list.zig.html">multi_array_list.zig</a>
    
68       A list of structs, but stores the fields of the structs efficiently as
    
69       contiguous lists. See
    
70       <a class="normal-link" href="https://zig.news/kristoff/struct-of-arrays-soa-in-zig-easy-in-userland-40m0">Struct of Arrays (SoA) in Zig? Easy & in Userland!</a>
    
71       (zig.news).
    
72     </p>
    
73     <p>
    
74         <a href="array_hash_map.zig.html">array_hash_map.zig</a>
    
75         A "hash" or "dictionary" storing values by hashed key.
    
76         For typical needs, consider <code>StringHashMap</code>
    
77         or <code>AutoHashMap</code>.
    
78         See <a class="normal-link" href="https://devlog.hexops.com/2022/zig-hashmaps-explained/">Zig hashmaps explained</a> (hexops.com).
    
79         <br>
    
80         <a href="buf_map.zig.html">buf_map.zig</a>
    
81         A StringHashMap that copies and frees keys and values for you!
    
82         <br>
    
83         <a href="buf_set.zig.html">buf_set.zig</a>
    
84         A StringHashMap that works as a set of strings.
    
85         <br>
    
86         <a href="comptime_string_map.zig.html">comptime_string_map.zig</a>
    
87         Basically a StringHashMap that hashes at comptime!
    
88     </p>
    
89     <p>
    
90       <a href="enums.zig.html">enums.zig</a>
    
91       Functions for working with Zig's <code>enum</code>s.
    
92     </p>
    
93     <p>
    
94       <a href="fifo.zig.html">fifo.zig</a>
    
95       and
    
96       <a href="priority_dequeue.zig.html">priority_dequeue.zig</a>
    
97       and
    
98       <a href="priority_queue.zig.html">priority_queue.zig</a>
    
99       General-purpose queue structures with handy methods.
   
100     </p>
   
101     <p>
   
102         <a href="BitStack.zig.html">BitStack.zig</a>
   
103         An <code>ArrayList</code> of bits with stack methods like
   
104         <code>push()</code> and <code>pop()</code>. See
   
105     </p>
   
106     <p>
   
107         <a href="RingBuffer.zig.html">RingBuffer.zig</a>
   
108         A circular buffer with a backing slice with read/write
   
109         and slicing operations.
   
110     </p>
   
111     <p>
   
112       <a href="linked_list.zig.html">linked_list.zig</a>
   
113       Contains <code>SinglyLinkedList()</code> and
   
114       <code>DoublyLinkedList()</code> linked list types.
   
115     </p>
   
116     <p>
   
117       <a href="treap.zig.html">treap.zig</a>
   
118       A <a class="normal-link" href="https://en.wikipedia.org/wiki/Treap">treap</a>
   
119       (wikipedia.org) binary search tree.
   
120     </p>
   
121     <p>
   
122       <a href="packed_int_array.zig.html">packed_int_array.zig</a>
   
123       Read and write integers packed into memory like sardines.
   
124     </p>
   
125     <p>
   
126       <a href="bit_set.zig.html">bit_set.zig</a>
   
127       Bit sets let you manipulate the individual bits of your bytes. This file
   
128       contains multiple bit set types and has good descriptions of each.
   
129     </p>
   
130     <p>
   
131       <b>See also:</b> <code>atomic.zig</code> under Parallel and concurrent execution.
   
132     </p>
   
133 </section>
   
134 
   135 <section>
   
136     <h2>Zig-specific</h2>
   
137 
   138     <p>
   
139       <a href="std.zig.html">std.zig</a>
   
140       The starting point for the whole standard library. This is what
   
141       gets included when you do <code>const std = @import("std");</code>.
   
142       Imports the rest of the namespace. You can start here to browse
   
143       most of the library in this HTML version.
   
144     </p>
   
145     <p>
   
146       <a href="zig.zig.html">zig.zig</a>
   
147       Zig code tokenzing, parsing, abstract syntax tree, etc.
   
148       <i>Zig in Zig so you can Zig while you Zig.</i>
   
149     </p>
   
150     <p>
   
151       <a href="meta.zig.html">meta.zig</a>
   
152       Comptime introspection for Zig data types. (Get the fields from
   
153       a struct, for example).
   
154     </p>
   
155     <p>
   
156       <a href="testing.zig.html">testing.zig</a>
   
157       A bunch of helpful functions (and even an allocator that fails
   
158       on purpose) for your <code>test</code> blocks.
   
159     </p>
   
160     <p>
   
161       <a href="debug.zig.html">debug.zig</a>
   
162       Contains helpful functions such as
   
163       <code>std.debug.print()</code>,
   
164       <code>assert()</code>, <code>panic()</code>, and
   
165       <code>dumpCurrentStackTrace()</code>.
   
166     </p>
   
167     <p>
   
168       <a href="Build.zig.html">Build.zig</a>
   
169       Zig's build API provides functionality to
   
170       perform just about any compilation or file manipulation tasks you
   
171       might need to build a project. (You typically call its features from
   
172       a <code>build.zig</code> file.)
   
173     </p>
   
174     <p>
   
175       <a href="builtin.zig.html">builtin.zig</a>
   
176       All sorts of meta Zig stuff. Contains types returned by the
   
177       builtin functions (<code>@foo()</code>).
   
178     </p>
   
179 </section>
   
180 
   181 <section>
   
182     <h2>Memory and allocation</h2>
   
183 
   184     <p>
   
185       <a href="mem.zig.html">mem.zig</a>
   
186       Contains lots of functions for manipulating memory such as
   
187       <code>sort()</code>,
   
188       <code>eql()</code>,
   
189       <code>indexOfDiff()</code>,
   
190       <code>sliceTo()</code>,
   
191       <code>len()</code>,
   
192       <code>trim()</code>,
   
193       <code>indexOf()</code>,
   
194       <code>indexOfAny()</code>,
   
195       <code>indexOfNone()</code>,
   
196       <code>readIntNative()</code>,
   
197       <code>writeIntNative()</code>,
   
198       <code>tokenizeSequence()</code>,
   
199       <code>splitSequence()</code>,
   
200       <code>SplitIterator()</code>,
   
201       <code>alignInSlice()</code>,
   
202       and many more.
   
203     </p>
   
204     <p>
   
205       <a href="mem/Allocator.zig.html">mem/Allocator.zig</a>
   
206       Contains the interface used by all memory allocation features in
   
207       the Zig standard library.
   
208     </p>
   
209     <p>
   
210       <a href="heap.zig.html">heap.zig</a>
   
211       Defines many allocation strategies for managing memory
   
212       including
   
213       <a href="heap/general_purpose_allocator.zig.html">heap/general_purpose_allocator.zig</a>,
   
214       <a href="heap/PageAllocator.zig.html">heap/PageAllocator.zig</a>,
   
215       <a href="heap/arena_allocator.zig.html">heap/arena_allocator.zig</a>,
   
216       and
   
217       <a href="heap/memory_pool.zig.html">heap/memory_pool.zig</a>.
   
218     </p>
   
219     See
   
220       <ul>
   
221         <li><a class="normal-link" href="https://ziglearn.org/chapter-2/">Allocators</a>
   
222             (ziglearn.org)</li>
   
223         <li><a class="normal-link" href="https://www.openmymind.net/learning_zig/heap_memory/">Heap Memory and Allocators</a>
   
224             (openmymind.net)</li>
   
225         <li><a class="normal-link" href="https://www.huy.rocks/everyday/01-05-2022-zig-where-data-is-stored-and-how-to-choose-an-allocator">Where data is stored and how to choose an allocator</a>
   
226             (huy.rocks)</li>
   
227       </ul>
   
228 </section>
   
229 
   230 <section>
   
231     <h2>General utilities</h2>
   
232 
   233     <p>
   
234       <a href="fmt.zig.html">fmt.zig</a>
   
235       String formatting (this is how <code>print()</code> works), number
   
236       parsing, etc.
   
237       <b>TODO:</b> I need to make a "zig fmt by example" page.
   
238     </p>
   
239     <p>
   
240       <a href="io.zig.html">io.zig</a>
   
241       Input/Output support for reading and writing data.
   
242       Includes
   
243       <a href="io/Reader.zig.html">io/Reader.zig</a>,
   
244       <a href="io/writer.zig.html">io/writer.zig</a>,
   
245       <a href="io/bit_reader.zig.html">io/bit_reader.zig</a>,
   
246       <a href="io/bit_writer.zig.html">io/bit_writer.zig</a>,
   
247       <a href="io/buffered_reader.zig.html">io/buffered_reader.zig</a>,
   
248       <a href="io/buffered_writer.zig.html">io/buffered_writer.zig</a>,
   
249       and
   
250       <a href="io/tty.zig.html">io/tty.zig</a>.
   
251     </p>
   
252     <p>
   
253       <a href="log.zig.html">log.zig</a>
   
254       Standardized logging with support for levels (<code>err</code>,
   
255       <code>warn</code>, <code>info</code>, <code>debug</code>).
   
256     </p>
   
257     <p>
   
258       <a href="Progress.zig.html">Progress.zig</a>
   
259       Terminal progress indicator (uses ANSI escape sequences when possible).
   
260     </p>
   
261     <p>
   
262       <a href="sort.zig.html">sort.zig</a>
   
263       Sorting and searching algorithms such as
   
264       <code>insertion()</code>,
   
265       <code>heap()</code>,
   
266       <code>binarySearch()</code>,
   
267       <code>min()</code>,
   
268       and
   
269       <code>max()</code>.
   
270     </p>
   
271     <p>
   
272       <a href="json.zig.html">json.zig</a>
   
273       Read and write data to and from the JSON serialization format.
   
274     </p>
   
275     <p>
   
276         <a href="Ini.zig.html">Ini.zig</a>
   
277         Read INI (<code>*.ini</code>) formatted configuration files.
   
278     </p>
   
279     <p>
   
280       <a href="tar.zig.html">tar.zig</a>
   
281       Support for the
   
282       <a class="normal-link" href="https://en.wikipedia.org/wiki/Tar_(computing)">Tar</a>
   
283       (wikipedia.org) archive file format.
   
284     </p>
   
285     <p>
   
286       <a href="crypto.zig.html">crypto.zig</a>
   
287       A huge number of cryptographic functions.
   
288       <br>
   
289       <b>Hashes</b>: <a href="crypto/md5.zig.html">crypto/md5.zig</a>,
   
290       <a href="crypto/sha1.zig.html">crypto/sha1.zig</a>,
   
291       <a href="crypto/sha2.zig.html">crypto/sha2.zig</a>,
   
292       <a href="crypto/sha3.zig.html">crypto/sha3.zig</a>,
   
293       <a href="crypto/bcrypt.zig.html">crypto/bcrypt.zig</a>,
   
294       <a href="crypto/scrypt.zig.html">crypto/scrypt.zig</a>,
   
295       and more.
   
296       <br>
   
297       <b>Cryptography</b>:
   
298       <a href="crypto/25519/curve25519.zig.html">crypto/25519/curve25519.zig</a>,
   
299       <a href="crypto/25519/ed25519.zig.html">crypto/25519/ed25519.zig</a>,
   
300       <a href="crypto/aes.zig.html">crypto/aes.zig</a>,
   
301       and more.
   
302       <br>
   
303         <b>See also:</b> <code>crypto/tls.zig</code> and <code>crypto/Certificate.zig</code>
   
304       under Networking.
   
305     </p>
   
306     <p>
   
307       <a href="hash.zig.html">hash.zig</a>
   
308       More general hashing algorithms.
   
309     </p>
   
310     <p>
   
311       <a href="rand.zig.html">rand.zig</a>
   
312       Fast and/or cryptographically secure pseudo-random number generators.
   
313     </p>
   
314     <p>
   
315       <a href="leb128.zig.html">leb128.zig</a>
   
316       Read and write
   
317       <a class="normal-link" href="https://en.wikipedia.org/wiki/LEB128">LEB128</a>
   
318       (wikipedia.org) Little Endian Base 128 numbers.
   
319     </p>
   
320     <p>
   
321         <a href="SemanticVersion.zig.html">SemanticVersion.zig</a>
   
322         Read (parse), write, and sort semantic version numbers.
   
323     </p>
   
324     <p>
   
325       <a href="unicode.zig.html">unicode.zig</a>
   
326       Functions for handling encoded Unicode sequences:
   
327       <code>utf8Encode()</code>,
   
328       <code>utf8Decode()</code>,
   
329       <code>utf8ValidateSlice()</code>,
   
330       <code>utf16leToUtf8Alloc()</code>,
   
331       etc.
   
332     </p>
   
333     <p>
   
334       <a href="ascii.zig.html">ascii.zig</a>
   
335       Handy functions for testing <code>u8</code> values as 7-bit ASCII
   
336       characters (<code>isAlphabetic()</code>, <code>toUpper()</code>, etc.
   
337     </p>
   
338     <p>
   
339       <a href="base64.zig.html">base64.zig</a>
   
340       Encode and decode
   
341       <a class="normal-link" href="https://en.wikipedia.org/wiki/Base64">Base64</a>
   
342       (wikipedia.org) data.
   
343     </p>
   
344     <p>
   
345       <a href="c.zig.html">c.zig</a>
   
346       Utilities for interoperating with C code. Also contains a lot of
   
347       OS and architecture-specific function implementations.
   
348       (See a partial list under OS.)
   
349     </p>
   
350     <p>
   
351       <a href="time/epoch.zig.html">time/epoch.zig</a>
   
352       Important dates for common OSs and some simple date calculations.
   
353     </p>
   
354     <p>
   
355       <a href="tz.zig.html">tz.zig</a>
   
356       Handle Earth timezone files.
   
357     </p>
   
358     <p>
   
359       <a href="compress.zig.html">compress.zig</a>
   
360       Contains a large number of compression/decompression algorithms such
   
361       as
   
362       <a href="compress/gzip.zig.html">compress/gzip.zig</a>,
   
363       <a href="compress/xz.zig.html">compress/xz.zig</a>,
   
364       <a href="compress/zlib.zig.html">compress/zlib.zig</a>, and more!
   
365     </p>
   
366     <p>
   
367       <a href="math.zig.html">math.zig</a>
   
368       General mathematical operations.
   
369     </p>
   
370     <p>
   
371       <a href="simd.zig.html">simd.zig</a>
   
372       Functions for working with SIMD (Single Instruction; Multiple Data),
   
373       if hardware support is present.
   
374     </p>
   
375     <p>
   
376       <a href="valgrind.zig.html">valgrind.zig</a>
   
377       Support for working with the
   
378       <a class="normal-link" href="https://en.wikipedia.org/wiki/Valgrind">Valgrind</a>
   
379       memory leak detection and profiling tool.
   
380     </p>
   
381 </section>
   
382 
   383 <section>
   
384     <h2>OS and architecture-specific</h2>
   
385 
   386     <p>
   
387       <a href="os.zig.html">os.zig</a>
   
388       Wrappers for a very large list of OS-specific functions. Includes
   
389       Unix-like, Emscripten, WASI, Plan9, UEFI, and Windows.
   
390     </p>
   
391     <p>
   
392       <a href="target.zig.html">target.zig</a>
   
393       Functionality for building Zig programs for a big list of
   
394       processor architectures.
   
395     </p>
   
396     <p>
   
397       <a href="process.zig.html">process.zig</a>
   
398       Environment information, etc. for processes (e.g. current working
   
399       directory and environment variables).
   
400     </p>
   
401     <p>
   
402       <a href="time.zig.html">time.zig</a>
   
403       Get time, measure time, and sleep.
   
404     </p>
   
405     <p>
   
406       <a href="start.zig.html">start.zig</a>
   
407       The <code>start()</code> function for executable files. Handles
   
408       OS-specific startup tasks.
   
409     </p>
   
410     <p>
   
411       <a href="elf.zig.html">elf.zig</a>
   
412       Support for the
   
413       <a class="normal-link" href="https://en.wikipedia.org/wiki/Executable_and_Linkable_Format">ELF</a>
   
414       (wikipedia.org) executable format.
   
415     </p>
   
416     <p>
   
417       <a href="coff.zig.html">coff.zig</a>
   
418       Support for the
   
419       <a class="normal-link" href="https://en.wikipedia.org/wiki/COFF">COFF</a>
   
420       (wikipedia.org) executable format.
   
421     </p>
   
422     <p>
   
423       <a href="macho.zig.html">macho.zig</a>
   
424       Support for the
   
425       <a class="normal-link" href="https://en.wikipedia.org/wiki/Mach-O">Mach-O</a>
   
426       (wikipedia.org) executable format.
   
427     </p>
   
428     <p>
   
429       <a href="dwarf.zig.html">dwarf.zig</a>
   
430       Support for the
   
431       <a class="normal-link" href="https://en.wikipedia.org/wiki/DWARF">DWARF</a>
   
432       (wikipedia.org) debugging data format.
   
433     </p>
   
434     <p>
   
435       <a href="pdb.zig.html">pdb.zig</a>
   
436       Support for the
   
437       <a class="normal-link" href="https://en.wikipedia.org/wiki/Program_database">PDB</a>
   
438       (wikipedia.org) debugging data format.
   
439     </p>
   
440     <p>
   
441       <a href="wasm.zig.html">wasm.zig</a>
   
442       WASM opcode list and functions.
   
443     </p>
   
444     <p>
   
445       <a href="Thread.zig.html">Thread.zig</a>
   
446       Native operating system thread support.
   
447     </p>
   
448     <p>
   
449       <a href="child_process.zig.html">child_process.zig</a>
   
450       Native child process spawning support.
   
451     </p>
   
452     <p>
   
453       <a href="dynamic_library.zig.html">dynamic_library.zig</a>
   
454       Utilities for working with dynamic libraries (.dll, .so, etc.)
   
455     </p>
   
456     <p>
   
457       <a href="fs.zig.html">fs.zig</a>
   
458       File system support.
   
459       Contains
   
460       <a href="fs/file.zig.html">fs/file.zig</a>,
   
461       <a href="fs/path.zig.html">fs/path.zig</a>,
   
462       <a href="fs/wasi.zig.html">fs/wasi.zig</a>,
   
463       and
   
464       <a href="fs/watch.zig.html">fs/watch.zig</a>.
   
465     </p>
   
466     <p>
   
467       <b>See also:</b> the C-code files such as 
   
468       <a href="c/linux.zig.html">c/linux.zig</a>,
   
469       <a href="c/openbsd.zig.html">c/openbsd.zig</a>,
   
470       <a href="c/freebsd.zig.html">c/freebsd.zig</a>,
   
471       <a href="c/netbsd.zig.html">c/netbsd.zig</a>,
   
472       <a href="c/darwin.zig.html">c/darwin.zig</a>,
   
473       <a href="c/wasi.zig.html">c/wasi.zig</a>,
   
474       <a href="c/windows.zig.html">c/windows.zig</a>,
   
475       etc.
   
476 </section>
   
477 
   478 <section>
   
479     <h2>Parallel and concurrent execution</h2>
   
480 
   481     <p>
   
482       <a href="atomic.zig.html">atomic.zig</a> Support for atomic access to
   
483       shared memory. See specific data structures in 
   
484       <a href="atomic/queue.zig.html">atomic/queue.zig</a>
   
485       and
   
486       <a href="atomic/stack.zig.html">atomic/stack.zig</a>.
   
487     </p>
   
488     <p>
   
489       <a href="once.zig.html">once.zig</a>
   
490       Executes a function just once.
   
491     </p>
   
492     <p>
   
493       <a href="event.zig.html">event.zig</a>
   
494       Support for various types of event-based programming.
   
495       <br>
   
496       Examples:
   
497       <a href="event/batch.zig.html">event/batch.zig</a>,
   
498       <a href="event/future.zig.html">event/future.zig</a>,
   
499       and
   
500       <a href="event/loop.zig.html">event/loop.zig</a>.
   
501     </p>
   
502     <p>
   
503       <b>See also:</b> <code>Thread.zig</code> and
   
504       <code>child_process.zig</code> under OS.
   
505     </p>
   
506 </section>
   
507 
   508 <section>
   
509     <h2>Networking</h2>
   
510 
   511     <p>
   
512       <a href="net.zig.html">net.zig</a>
   
513       Networking functions for TCP/IP, Unix Sockets, DNS, etc.
   
514     </p>
   
515     <p>
   
516         <a href="Uri.zig.html">Uri.zig</a><br>
   
517         Read and write (parse) URIs (see the tests in this one!).
   
518     </p>
   
519     <p>
   
520       <a href="crypto/tls.zig.html">crypto/tls.zig</a> and
   
521       <a href="crypto/Certificate.zig.html">crypto/Certificate.zig</a>
   
522       for cryptographic networking.
   
523     </p>
   
524     <p>
   
525       <a href="http.zig.html">http.zig</a>
   
526       HTTP support! Includes
   
527       <a href="http/Client.zig.html">http/Client.zig</a>,
   
528       <a href="http/Headers.zig.html">http/Headers.zig</a>,
   
529       and
   
530       <a href="http/Server.zig.html">http/Server.zig</a>.
   
531     </p>
   
532 </section>
   
533 
   534 </div> <!-- end .container -->
   
535 
   536 <footer>
   
537     This page is the entry point for the Zig Standard Library
   
538     source viewing utility,
   
539     <a href="http://ratfactor.com/repos/zstd-browse2/">zstd-browse2</a>.
   
540 </footer>
   
541 </body>
   
542 </html>