From 60cc5810c72702816efcc6c4404ab20c57a93def Mon Sep 17 00:00:00 2001 From: Abdoulaye Dia Date: Sat, 1 Aug 2026 23:16:09 +0200 Subject: [PATCH] redesign chroma around comptime themes --- .github/workflows/zig_test.yml | 48 +- README.md | 349 ++++++---- benchmarks/compile.zig | 12 + build.zig | 163 +++-- build.zig.zon | 18 +- docs/assets/chroma-configurable.png | Bin 0 -> 78508 bytes docs/chroma.tape | 33 + examples/chroma.zon | 51 ++ examples/main.zig | 51 ++ src/ansi.zig | 139 ++-- src/lib.zig | 741 ++++++++++++++++----- src/main.zig | 43 -- src/terminal.zig | 83 +++ src/test_theme.zon | 18 + src/tests.zig | 196 ++++-- src/utils.zig | 17 +- tests/compile_errors/color_overflow.zig | 5 + tests/compile_errors/duplicate_style.zig | 10 + tests/compile_errors/empty_channel.zig | 5 + tests/compile_errors/invalid_rgb.zig | 5 + tests/compile_errors/invalid_syntax.zig | 12 + tests/compile_errors/missing_close.zig | 5 + tests/compile_errors/reserved_style.zig | 7 + tests/compile_errors/unknown_directive.zig | 5 + 24 files changed, 1479 insertions(+), 537 deletions(-) create mode 100644 benchmarks/compile.zig create mode 100644 docs/assets/chroma-configurable.png create mode 100644 docs/chroma.tape create mode 100644 examples/chroma.zon create mode 100644 examples/main.zig delete mode 100644 src/main.zig create mode 100644 src/terminal.zig create mode 100644 src/test_theme.zon create mode 100644 tests/compile_errors/color_overflow.zig create mode 100644 tests/compile_errors/duplicate_style.zig create mode 100644 tests/compile_errors/empty_channel.zig create mode 100644 tests/compile_errors/invalid_rgb.zig create mode 100644 tests/compile_errors/invalid_syntax.zig create mode 100644 tests/compile_errors/missing_close.zig create mode 100644 tests/compile_errors/reserved_style.zig create mode 100644 tests/compile_errors/unknown_directive.zig diff --git a/.github/workflows/zig_test.yml b/.github/workflows/zig_test.yml index 849f6c0..aa21a2b 100644 --- a/.github/workflows/zig_test.yml +++ b/.github/workflows/zig_test.yml @@ -1,35 +1,55 @@ -# This is a basic workflow to help you get started with Actions - name: CI -# Controls when the workflow will run on: - # Triggers the workflow on push or pull request events but only for the "main" branch push: - branches: ["main"] + branches: [main] pull_request: - branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab + branches: [main] workflow_dispatch: +permissions: + contents: read + jobs: test: + name: Test (${{ matrix.os }}) strategy: + fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] - runs-on: ${{matrix.os}} + runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 - - uses: mlugg/setup-zig@v1 + - uses: actions/checkout@v6 + - uses: mlugg/setup-zig@v2 with: version: 0.16.0 - run: zig build test - lint: + + cross-build: + name: Build (${{ matrix.target }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + target: + - x86_64-linux + - aarch64-linux + - x86_64-windows + - aarch64-macos + steps: + - uses: actions/checkout@v6 + - uses: mlugg/setup-zig@v2 + with: + version: 0.16.0 + cache-key: ${{ matrix.target }} + - run: zig build -Dtarget=${{ matrix.target }} + + format: + name: Formatting runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: mlugg/setup-zig@v1 + - uses: actions/checkout@v6 + - uses: mlugg/setup-zig@v2 with: version: 0.16.0 - run: zig fmt --check . diff --git a/README.md b/README.md index c2d9b0c..eca546c 100644 --- a/README.md +++ b/README.md @@ -1,169 +1,280 @@ # Chroma -**Zig Version:** 0.16.0
-**License:** MIT
-**Language:** [Zig](https://ziglang.org) +[![CI](https://github.com/adia-dev/chroma-zig/actions/workflows/zig_test.yml/badge.svg)](https://github.com/adia-dev/chroma-zig/actions/workflows/zig_test.yml) +[![Zig 0.16.0](https://img.shields.io/badge/Zig-0.16.0-f7a41d?logo=zig&logoColor=white)](https://ziglang.org/) +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) + +Chroma is a comptime-first ANSI color and terminal text styling library for +Zig. It turns namespaced directives such as `{#bold,red}` into constant escape +sequences while leaving Zig fields such as `{s}` and `{d}` untouched. It is +designed for colorful CLI tools, console applications, and logs without +runtime parsing or allocation. + +![Configurable Chroma theme rendered in a terminal](docs/assets/chroma-configurable.png) + +This image is captured from the real `zig build run` output and can be +regenerated with [`docs/chroma.tape`](docs/chroma.tape) using +[VHS](https://github.com/charmbracelet/vhs). + +## Features + +- Formatting is parsed, validated, and rendered at compile time. +- ANSI and plain variants are constants; terminal selection requires only a + runtime branch. +- Standard, bright, 256-color, and 24-bit RGB colors are supported for both + foregrounds and backgrounds. +- Typed ZON themes provide reusable semantic styles and configurable grammar + characters without runtime file I/O. +- Unknown Chroma directives and malformed color values fail with focused + compile-time diagnostics. +- Terminal detection honors `NO_COLOR`, `CLICOLOR_FORCE`, redirected output, + and Windows virtual-terminal support. + +## Installation + +Add the package to `build.zig.zon`: + +```sh +zig fetch --save=chroma https://github.com/adia-dev/chroma-zig/archive/refs/tags/v0.2.0.tar.gz +``` + +Import Chroma's module in `build.zig`: + +```zig +const chroma_dep = b.dependency("chroma", .{ + .target = target, + .optimize = optimize, +}); +exe.root_module.addImport("chroma", chroma_dep.module("chroma")); +``` -Chroma is a Zig library for advanced ANSI color and text styling in terminal output. It allows developers to dynamically format strings with embedded placeholders (e.g. `{red}`, `{bold}`, `{fg:255;100;0}` for true color) and converts them into ANSI escape sequences. This makes it easy to apply complex styles, switch between foreground/background colors, and reset formatting on the fly—all at compile time. +Chroma is a Zig module rather than a runtime library, so there is no library +artifact to link. -chroma +## Runnable configurable example -## ✨ Features +The repository includes a complete consumer-style example: -- **Simple, Readable Syntax:** - Use `{red}`, `{bold}`, or `{green,bgBlue}` inline within strings for clear and maintainable code. +- [`examples/main.zig`](examples/main.zig) binds and uses a formatter. +- [`examples/chroma.zon`](examples/chroma.zon) defines semantic styles and + changes the grammar to forms such as `{@failure|bold}` and + `{@fg=255/120/50}`. -- **Comprehensive ANSI Codes:** - Support for standard colors, background colors, bold, italic, underline, dim, and even less commonly supported effects like `blink` and `reverse`. +Run it with: -- **Extended and True Color Support:** - Take advantage of ANSI 256 extended color codes and true color (24-bit) formats using syntax like `{fg:120}`, `{bg:28}`, or `{fg:255;100;0}` for fine-grained color control. +```sh +zig build run +``` -- **Compile-Time Safety:** - Chroma verifies format strings at compile time, reducing runtime errors and ensuring your formatting instructions are valid. +Set `NO_COLOR=1` to see the same example using its precomputed plain variant. -- **Reset-Friendly:** - Automatically appends `"\x1b[0m"` when necessary, ensuring that styles don’t “bleed” into subsequent output. +## What happens at comptime? -## 🚀 Getting Started +Chroma keeps parsing and configuration out of the runtime path. Environment +and terminal capability cannot be known until the program runs, so those +decisions remain deliberately small and explicit. -### Prerequisite +| Operation | Phase | Runtime allocation or parsing? | +| --- | --- | --- | +| Import typed `chroma.zon` configuration | Comptime | No | +| Validate syntax, style names, colors, and RGB channels | Comptime | No | +| Parse Chroma directives | Comptime | No | +| Generate exact-size ANSI and plain format strings | Comptime | No | +| Validate Zig format fields through `std.fmt` | Comptime | No | +| Read `NO_COLOR` and `CLICOLOR_FORCE` | Runtime, opt-in | No allocation | +| Detect TTY and enable Windows virtual-terminal processing | Runtime, opt-in | No allocation | +| Select the ANSI or plain constant | Runtime | One boolean branch | +| Substitute `{s}`, `{d}`, and other Zig arguments | Runtime | Handled by `std.fmt` | +| Write bytes to the output stream | Runtime | Handled by the application | -1. Fetch the project using `zig fetch` +## Basic use -```bash -zig fetch --save https://github.com/adia-dev/chroma-zig/archive/refs/heads/main.zip +```zig +const std = @import("std"); +const chroma = @import("chroma"); + +pub fn main() void { + std.debug.print( + chroma.format("{#bold,red}Failed:{#reset} {s}\n"), + .{"connection refused"}, + ); +} ``` -Or manually paste this in your `build.zig.zon` +Chroma reserves only fields beginning with the configured marker (`#` by +default). Other fields are preserved for `std.fmt`: ```zig -.dependencies = .{ - // other deps... - .chroma = .{ - .url = "https://github.com/adia-dev/chroma-zig/archive/refs/heads/main.zip", - .hash = "chroma-0.1.2-dA-RkbRIAACztjsL_aHnaZqu3GB53kpZziNo_TdxiLnf", - }, - // ... -}, +const fmt = chroma.format("{{literal}} {#green}{s: >12} {d}"); ``` -1. **Add Chroma to Your Zig Project:** - Include Chroma as a dependency in your `build.zig` or your `build.zig.zon`. For example: +The doubled braces also remain doubled in `fmt`; `std.fmt` performs the final +brace unescaping when it consumes the format string. + +## Directive reference + +Default directives use `{#item,item}`. Items in the same directive are applied +left to right, with later foreground and background colors taking precedence. +Chroma emits one combined SGR sequence for the resulting directive. - ```zig - const std = @import("std"); +```zig +chroma.format("{#red}standard red"); +chroma.format("{#bright-blue,bold}bright blue"); +chroma.format("{#fg:cyan,bg:bright-magenta}named colors"); +chroma.format("{#fg:120,bg:231}indexed colors"); +chroma.format("{#fg:255;100;0,bg:20;24;32}true color"); +chroma.format("{#reset}all defaults"); +chroma.format("{#fg:default,bg:default}default colors"); +``` - pub fn build(b: *std.Build) void { - const target = b.standardTargetOptions(.{}); - const optimize = b.standardOptimizeOption(.{}); +The basic color names are `black`, `red`, `green`, `yellow`, `blue`, +`magenta`, `cyan`, and `white`. Prefix any of them with `bright-` for the bright +variant. - const mod = b.addModule("chroma", .{ - .root_source_file = b.path("src/lib.zig"), - .target = target, - .optimize = optimize, - }); +Effects are `bold`, `dim`, `italic`, `underline`, `blink`, `reverse`, `hidden`, +and `strikethrough`. Disable them with `normal-intensity`, `no-italic`, +`no-underline`, `no-blink`, `no-reverse`, `no-hidden`, and +`no-strikethrough`. `normal-intensity` disables both bold and dim, matching SGR +code 22. - const lib = b.addLibrary(.{ - .name = "chroma", - .linkage = .static, - .root_module = mod, - }); +An automatic final reset is emitted only if a Chroma style remains active. Set +`Config.auto_reset` to `false` when style continuation is intentional. - b.installArtifact(lib); - } - ``` +## Compile-time themes -2. **Import and Use:** - After building and installing, you can import `chroma` into your Zig code: +Place a typed ZON file beside the Zig source that imports it. For example, +`chroma.zon`: ```zig -const std = @import("std"); -const chroma = @import("lib.zig"); - -pub fn main() !void { - const examples = [_]struct { fmt: []const u8, arg: ?[]const u8 }{ - // Basic color and style - .{ .fmt = "{bold,red}Bold and Red{reset}", .arg = null }, - // Combining background and foreground with styles - .{ .fmt = "{fg:cyan,bg:magenta}{underline}Cyan on Magenta underline{reset}", .arg = null }, - // Nested styles and colors - .{ .fmt = "{green}Green {bold}and Bold{reset,blue,italic} to blue italic{reset}", .arg = null }, - // Extended ANSI color with arg example - .{ .fmt = "{bg:120}Extended ANSI {s}{reset}", .arg = "Background" }, - // True color specification - .{ .fmt = "{fg:255;100;0}True Color Orange Text{reset}", .arg = null }, - // Mixed color and style formats - .{ .fmt = "{bg:28,italic}{fg:231}Mixed Background and Italic{reset}", .arg = null }, - // Unsupported/Invalid color code >= 256, Error thrown at compile time - // .{ .fmt = "{fg:999}This should not crash{reset}", .arg = null }, - // Demonstrating blink, note: may not be supported in all terminals - .{ .fmt = "{blink}Blinking Text (if supported){reset}", .arg = null }, - // Using dim and reverse video - .{ .fmt = "{dim,reverse}Dim and Reversed{reset}", .arg = null }, - // Custom message with dynamic content - .{ .fmt = "{blue,bg:magenta}User {bold}{s}{reset,0;255;0} logged in successfully.", .arg = "Charlie" }, - // Combining multiple styles and reset - .{ .fmt = "{underline,cyan}Underlined Cyan{reset} then normal", .arg = null }, - // Multiple format specifiers for complex formatting - .{ .fmt = "{fg:144,bg:52,bold,italic}Fancy {underline}Styling{reset}", .arg = null }, - // Jujutsu Kaisen !! - .{ .fmt = "{bg:72,bold,italic}Jujutsu Kaisen !!{reset}", .arg = null }, - }; - - inline for (examples) |example| { - if (example.arg) |arg| { - std.debug.print(chroma.format(example.fmt) ++ "\n", .{arg}); - } else { - std.debug.print(chroma.format(example.fmt) ++ "\n", .{}); - } - } - - std.debug.print(chroma.format("{blue}{underline}Eventually{reset}, the {red}formatting{reset} looks like {130;43;122}{s}!\n"), .{"this"}); +.{ + .styles = .{ + .{ + .name = "error", + .style = .{ + .foreground = .{ .rgb = .{ .r = 220, .g = 50, .b = 47 } }, + .effects = .{ .bold, .underline }, + }, + }, + .{ + .name = "notice", + .style = .{ + .foreground = .{ .bright = .cyan }, + .background = .{ .indexed = 236 }, + }, + }, + }, } +``` + +Bind it once to an explicit formatter type: +```zig +const chroma = @import("chroma"); +const ui = chroma.Formatter(@import("chroma.zon")); + +const failure = ui.format("{#error}Could not open {s}"); +const notice = ui.format("{#notice}Listening on port {d}"); ``` -3. **Run and Test:** - - Build your project with `zig build`. - - Run your binary and see the styled output in your terminal! +A named style can set a foreground, background, and any number of effects. +Omitted fields leave the existing state unchanged. Names must begin with an +ASCII letter, may contain letters, digits, `-`, and `_`, and cannot shadow a +built-in directive. -## 🧪 Testing +Themes can also customize the grammar inside the fixed braces: -Chroma includes a suite of unit tests to ensure reliability: +```zig +.{ + .syntax = .{ + .marker = '@', + .item_separator = '|', + .value_separator = '=', + .channel_separator = '/', + }, + .styles = .{ + .{ + .name = "error", + .style = .{ + .foreground = .{ .rgb = .{ .r = 220, .g = 50, .b = 47 } }, + }, + }, + }, +} +``` -```bash -zig build test +That formatter accepts `{@error|bold}` and `{@fg=255/100/0}`. Syntax +characters must be distinct ASCII punctuation characters other than `{` and +`}`. This keeps Chroma fields separate from ordinary `std.fmt` fields. + +## ANSI and plain output + +`render` generates both variants at compile time: + +```zig +const message = comptime chroma.render("{#red}failure:{#reset} {s}\n"); + +if (use_color) { + try writer.print(message.ansi, .{reason}); +} else { + try writer.print(message.plain, .{reason}); +} ``` -If all tests pass, you’re good to go! +Keep the explicit branch when the string contains Zig formatting fields, +because `Writer.print` requires its format argument to remain comptime-known. +For strings without fields, `message.select(use_color)` can be passed to +`writer.writeAll`. -## 🔧 Configuration +The optional detector keeps environment and platform work out of the renderer: -Chroma works out-of-the-box. For more complex scenarios (e.g., custom labels, multiple color formats), refer to `src/lib.zig` and `src/ansi.zig` for detailed code comments that explain available options and their intended usage. +```zig +const use_color = try chroma.terminal.detect( + init.io, + init.minimal.environ, + std.Io.File.stdout(), + .auto, +); +``` -## 📦 Zig Compatibility +Policies are `.auto`, `.always`, and `.never`. Automatic mode applies +`NO_COLOR`, then `CLICOLOR_FORCE`, then asks Zig whether ANSI is supported. The +same call enables Windows virtual-terminal processing when available. No +allocator is required. -Chroma targets Zig 0.16.0. The minimum supported compiler is declared in `build.zig.zon`, and CI validates this version. +## Migration from 0.1 -## 🤝 Contributing +Version 0.2 deliberately namespaces Chroma directives so Zig format fields are +never guessed from a list of known colors. -Contributions are welcome! To get involved: +| Chroma 0.1 | Chroma 0.2 | +| --- | --- | +| `{red}` | `{#red}` | +| `{bold,red}` | `{#bold,red}` | +| `{fg:120}` | `{#fg:120}` | +| `{255;100;0}` | `{#fg:255;100;0}` | +| `{bgRed}` | `{#bg:red}` | +| `{reset}` | `{#reset}` | -1. **Fork & Clone:** - Fork the repository and clone it locally. +Unknown `{#...}` directives now fail at compile time. Non-namespaced fields, +including all `std.fmt` fields, pass through unchanged. -2. **Branch & Develop:** - Create a new branch and implement your changes or new features. +## Development -3. **Test & Document:** - Run `zig build test` to ensure your changes haven’t broken anything. Update or add documentation as needed. +Use Zig 0.16.0: -4. **Pull Request:** - Submit a Pull Request describing what you changed and why. We’ll review and merge it if everything looks good. +```sh +zig build +zig build run +zig build test +time zig build benchmark +zig fmt --check . +``` -## 📝 License +The test step includes normal unit tests, a large comptime stress case, and +fixtures which must fail compilation with the expected diagnostic. CI runs the +suite natively on Linux, macOS, and Windows and performs additional cross-target +builds. -[MIT License](./LICENSE) +## License -_Chroma aims to simplify ANSI coloring in Zig, making your command-line tools, logs, and output more expressive and visually appealing._ +[MIT](./LICENSE) diff --git a/benchmarks/compile.zig b/benchmarks/compile.zig new file mode 100644 index 0000000..940689e --- /dev/null +++ b/benchmarks/compile.zig @@ -0,0 +1,12 @@ +const chroma = @import("chroma"); + +comptime { + const repetitions = 512; + const input = "{#red,bold}x{#reset}" ** repetitions; + const expected_unit = "\x1b[31;1mx\x1b[0m"; + const output = chroma.format(input); + + if (output.len != expected_unit.len * repetitions) { + @compileError("unexpected benchmark output length"); + } +} diff --git a/build.zig b/build.zig index 07d4097..3ca8e3e 100644 --- a/build.zig +++ b/build.zig @@ -4,57 +4,144 @@ pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); - const mod = b.addModule("chroma", .{ + const chroma = b.addModule("chroma", .{ .root_source_file = b.path("src/lib.zig"), .target = target, .optimize = optimize, }); - const lib = b.addLibrary(.{ - .name = "chroma", - .linkage = .static, - .root_module = mod, - }); - - b.installArtifact(lib); - - const exe_mod = b.addModule("chroma-exe", .{ - .root_source_file = b.path("src/main.zig"), + const example_module = b.createModule(.{ + .root_source_file = b.path("examples/main.zig"), .target = target, .optimize = optimize, }); + example_module.addImport("chroma", chroma); - const exe = b.addExecutable(.{ - .name = "chroma", - .root_module = exe_mod, + const example = b.addExecutable(.{ + .name = "chroma-example", + .root_module = example_module, }); - - b.installArtifact(exe); - - const run_cmd = b.addRunArtifact(exe); - - run_cmd.step.dependOn(b.getInstallStep()); - - if (b.args) |args| { - run_cmd.addArgs(args); - } - - const run_step = b.step("run", "Run the app"); - run_step.dependOn(&run_cmd.step); - - const lib_unit_tests = b.addTest(.{ - .root_module = mod, + b.installArtifact(example); + + const run_command = b.addRunArtifact(example); + run_command.step.dependOn(b.getInstallStep()); + if (b.args) |args| run_command.addArgs(args); + + const run_step = b.step("run", "Run the Chroma example"); + run_step.dependOn(&run_command.step); + + const library_tests = b.addTest(.{ .root_module = chroma }); + const run_library_tests = b.addRunArtifact(library_tests); + + const example_tests = b.addTest(.{ .root_module = example_module }); + const run_example_tests = b.addRunArtifact(example_tests); + + const test_step = b.step("test", "Run unit and compile-error tests"); + test_step.dependOn(&run_library_tests.step); + test_step.dependOn(&run_example_tests.step); + + addCompileErrorTest( + b, + test_step, + chroma, + target, + optimize, + "tests/compile_errors/unknown_directive.zig", + "error: chroma: unknown directive 'wat' at byte 2", + ); + addCompileErrorTest( + b, + test_step, + chroma, + target, + optimize, + "tests/compile_errors/missing_close.zig", + "error: chroma: missing closing '}' for Chroma directive at byte 0", + ); + addCompileErrorTest( + b, + test_step, + chroma, + target, + optimize, + "tests/compile_errors/invalid_rgb.zig", + "error: chroma: RGB colors require exactly three channels at byte 5", + ); + addCompileErrorTest( + b, + test_step, + chroma, + target, + optimize, + "tests/compile_errors/duplicate_style.zig", + "error: chroma config: duplicate style name 'brand'", + ); + addCompileErrorTest( + b, + test_step, + chroma, + target, + optimize, + "tests/compile_errors/color_overflow.zig", + "error: chroma: color channel exceeds 255 at byte 5", + ); + addCompileErrorTest( + b, + test_step, + chroma, + target, + optimize, + "tests/compile_errors/empty_channel.zig", + "error: chroma: empty numeric color channel at byte 7", + ); + addCompileErrorTest( + b, + test_step, + chroma, + target, + optimize, + "tests/compile_errors/reserved_style.zig", + "error: chroma config: style name 'red' is reserved", + ); + addCompileErrorTest( + b, + test_step, + chroma, + target, + optimize, + "tests/compile_errors/invalid_syntax.zig", + "error: chroma config: syntax characters must be distinct", + ); + + const benchmark_module = b.createModule(.{ + .root_source_file = b.path("benchmarks/compile.zig"), + .target = target, + .optimize = optimize, }); + benchmark_module.addImport("chroma", chroma); + const benchmark_compile = b.addTest(.{ .root_module = benchmark_module }); - const run_lib_unit_tests = b.addRunArtifact(lib_unit_tests); + const benchmark_step = b.step("benchmark", "Compile the large comptime benchmark fixture"); + benchmark_step.dependOn(&benchmark_compile.step); +} - const exe_unit_tests = b.addTest(.{ - .root_module = exe_mod, +fn addCompileErrorTest( + b: *std.Build, + test_step: *std.Build.Step, + chroma: *std.Build.Module, + target: std.Build.ResolvedTarget, + optimize: std.builtin.OptimizeMode, + path: []const u8, + expected: []const u8, +) void { + const fixture_module = b.createModule(.{ + .root_source_file = b.path(path), + .target = target, + .optimize = optimize, }); + fixture_module.addImport("chroma", chroma); - const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests); - - const test_step = b.step("test", "Run unit tests"); - test_step.dependOn(&run_lib_unit_tests.step); - test_step.dependOn(&run_exe_unit_tests.step); + const fixture = b.addTest(.{ .root_module = fixture_module }); + fixture.expect_errors = .{ .contains = expected }; + test_step.dependOn(&fixture.step); } diff --git a/build.zig.zon b/build.zig.zon index 51f32bc..c554889 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -2,7 +2,7 @@ .name = .chroma, // This is a [Semantic Version](https://semver.org/). // In a future version of Zig it will be used for package deduplication. - .version = "0.1.2", + .version = "0.2.0", .fingerprint = 0xfebb40f591910f74, // Tracks the earliest Zig version supported by this package. @@ -15,16 +15,14 @@ // internet connectivity. .dependencies = .{}, .paths = .{ - // This makes *all* files, recursively, included in this package. It is generally - // better to explicitly list the files and directories instead, to insure that - // fetching from tarballs, file system paths, and version control all result - // in the same contents hash. - // "", - // For example... "build.zig", - //"build.zig.zon", + "build.zig.zon", + "LICENSE", + "README.md", + "benchmarks", + "docs", + "examples", "src", - //"LICENSE", - //"README.md", + "tests", }, } diff --git a/docs/assets/chroma-configurable.png b/docs/assets/chroma-configurable.png new file mode 100644 index 0000000000000000000000000000000000000000..bdabd616e1d08cf7c4b9e5f41707a26757c918d4 GIT binary patch literal 78508 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ͩY2{jqLXIzy0Zq6^gBkZoX~vX& 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