You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
.title = "Zigbook is Plagiarizing the Zigtools Playground",
3
+
.date = @date("2025-11-30T01:31:06"),
4
+
.author = "Auguste Rame, Techatrix",
5
+
.layout = "post.shtml",
6
+
.draft = false,
7
+
---
8
+
9
+
[Auguste Rame](https://github.com/SuperAuguste), [Techatrix](https://github.com/Techatrix) --- 30 November 2025
10
+
11
+
## Introduction
12
+
13
+
For those unfamiliar, Zigtools was founded to support the [Zig](https://ziglang.org/) community, especially newcomers,
14
+
by creating editor tooling such as [ZLS](https://github.com/zigtools/zls), providing building blocks for language servers
15
+
written in Zig with [lsp-kit](https://github.com/zigtools/lsp-kit), working on tools like the [Zigtools Playground](https://github.com/zigtools/playground), and
16
+
contributing to Zig editor extensions like [vscode-zig](https://codeberg.org/ziglang/vscode-zig).
17
+
18
+
## The Plagiarism
19
+
20
+
A couple weeks ago, a Zig resource called Zigbook was released with a bold
21
+
claim of "zero AI" and an original "project-based" structure.
22
+
23
+
Unfortunately, even a cursory look at the nonsense chapter structure, book content, examples,
24
+
generic website, or post-backlash issue-disabled repo reveals that the book is wholly LLM slop and
25
+
the project itself is structured like some sort of sycophantic psy-op, with botted accounts and fake reactions.
26
+
27
+
We're leaving out all direct links to Zigbook to not give them any more SEO traction.
28
+
29
+
We thought that the [broad community backlash](https://news.ycombinator.com/item?id=45947810) would be
30
+
the end of the project, but Zigbook persevered, releasing just last week a brand new feature, a
31
+
"high-voltage beta" Zig playground.
32
+
33
+
As we at Zigtools have our own Zig playground ([repo](https://github.com/zigtools/playground),
34
+
[website](https://playground.zigtools.org)), our interest was immediately piqued. The form and
35
+
functionality looked pretty similar and Zigbook even integrated (in a non-functional manner) ZLS
36
+
into their playground to provide all the fancy editor bells-and-whistles, like code completions and goto definition.
37
+
38
+
Knowing Zigbook's history of deception, we immediately investigated the WASM blobs. Unfortunately,
39
+
the WASM blobs are byte-for-byte identical to ours. This cannot be a coincidence given the two blobs
40
+
(`zig.wasm`, a lightly modified version of the Zig compiler, and `zls.wasm`, ZLS with a modified entry point for WASI)
41
+
are entirely custom-made for the Zigtools Playground.
42
+
43
+
We archived the WASM files for your convenience, courtesy of the great Internet Archive:
We proceeded to look at the JavaScript code, which we quickly determined was similarly copied, but with LLM distortions,
53
+
likely to prevent the code from being completely identical. Still, certain sections were copied one-to-one,
54
+
like the JavaScript worker data-passing structure and logging ([original ZLS playground code](https://github.com/zigtools/playground/blob/main/src/workers/runner.ts#L12-L41), [plagiarized Zigbook code](https://archive.ph/4LZ2X)).
55
+
56
+
The following code from both files is identical:
57
+
58
+
```js
59
+
try {
60
+
// @ts-ignore
61
+
const exitCode = wasi.start(instance);
62
+
63
+
postMessage({
64
+
stderr: `\n\n---\nexit with exit code ${exitCode}\n---\n`,
65
+
});
66
+
} catch (err) {
67
+
postMessage({ stderr: `${err}` });
68
+
}
69
+
70
+
postMessage({
71
+
done: true,
72
+
});
73
+
74
+
// ...
75
+
76
+
onmessage = (event) => {
77
+
if (event.data.run) {
78
+
run(event.data.run);
79
+
}
80
+
};
81
+
```
82
+
83
+
The `\n\n---\nexit with exit code ${exitCode}\n---\n` is perhaps the most obviously copied string.
84
+
85
+
Funnily enough, despite copying many parts of our code, Zigbook didn't copy the most important part of the ZLS integration code,
86
+
the JavaScript ZLS API designed to work with the [ZLS WASM binary's API](https://github.com/zigtools/playground/blob/227bcd3775baeb60cbf2f1ffb1ad0566516a64fc/src/zls.zig).
87
+
That JavaScript code is absolutely required to interact with the ZLS binary which they *did* plagiarize. Zigbook either
88
+
avoided copying that JavaScript code because they knew it would be too glaringly obvious, because they fundamentally do not understand
89
+
how the Zigtools Playground works, or because they plan to copy more of our code.
90
+
91
+
To be clear, copying our code and WASM blobs is entirely permissible given that the playground and Zig are
92
+
MIT licensed. Unfortunately, Zigbook has not complied with the terms of the MIT license at all, and seemingly
93
+
claims the code and blobs as their own without correctly reproducing the license.
94
+
95
+
We sent Zigbook a neutral [PR correcting the license violations](https://github.com/zigbook/zigbook/pull/43), but they
96
+
quickly closed it and deleted the description, seemingly to hide their misdeeds.
97
+
98
+
The original description (also available in the "edits" dropdown of the original PR comment) is reproduced below:
99
+
100
+
> We (@zigtools) noticed you were using code from the Zigtools Playground, including byte-by-byte copies of our WASM blobs and excerpts of our JavaScript source code.
101
+
>
102
+
> This is a violation of the MIT license that the Zigtools Playground is licensed under alongside a violation of the Zig MIT license (for the zig.wasm blob).
103
+
>
104
+
> As the MIT license states:
105
+
>
106
+
> ```
107
+
> The above copyright notice and this permission notice shall be included in
108
+
> all copies or substantial portions of the Software.
109
+
> ```
110
+
>
111
+
> We've fixed this by adding the licenses in question to your repository. As your repository does not include a direct link to the *.wasm dependencies, we've added a license disclaimer on the playground page as well that mentions the licenses.
112
+
113
+
Zigbook's aforementioned bad behavior and their continued violation of our
114
+
license and unwillingness to fix the violation motivated us to write this blog post.
115
+
116
+
## Our Vision for the Zigtools Playground
117
+
118
+
It's sad that our first blog post is about the plagiarism of our coolest subproject.
119
+
We challenged ourselves by creating a WASM-based client-side playground to enable offline usage, code privacy, and no server costs.
120
+
121
+
This incident has motivated us to invest more time into our playground and has generated a couple of ideas:
122
+
123
+
- We'd like to enable multifile support to allow more complex Zig projects to be run in the browser
124
+
- We'd like to collaborate with fellow Ziguanas to integrate the playground into their excellent Zig tutorials, books, and blogposts
125
+
- A perfect example usecase would be enabling folks to hop into [Ziglings](https://codeberg.org/ziglings/exercises) online with the playground
126
+
- The Zig website itself would be a great target as well!
127
+
- We'd like to support stack traces using DWARF debug info which is not yet emitted by the self-hosted Zig compiler
128
+
129
+
## Conclusion
130
+
131
+
As Zig community members, **we advise all other members of the Zig community to steer clear of Zigbook**.
132
+
133
+
If you're looking to learn Zig, we strongly recommend looking at the excellent official [Zig learn page](https://ziglang.org/learn/)
134
+
which contains excellent resources from the previously mentioned [Ziglings](https://codeberg.org/ziglings/exercises) to [Karl Seguin's Learning Zig](https://www.openmymind.net/learning_zig/).
135
+
136
+
We're also using this opportunity to mention that we're fundraising to keep ZLS sustainable for our
137
+
only full-time maintainer, Techatrix. We'd be thrilled if you'd be willing to give just $5 a month.
138
+
You can check out our [OpenCollective](https://opencollective.com/zigtools) or [GitHub Sponsors](https://github.com/sponsors/zigtools).
0 commit comments