Skip to content

build: an app builds its plugins, web and package with fizzy's build API - #834

Closed
MichaelBelousov wants to merge 1 commit into
fizzyedit:mainfrom
MichaelBelousov:build/app-api
Closed

MichaelBelousov wants to merge 1 commit into
fizzyedit:mainfrom
MichaelBelousov:build/app-api

Conversation

@MichaelBelousov

Copy link
Copy Markdown
Contributor

An app built on fizzy can now:

  • build a plugin against an executable's own modules: fizzy.framework(fizzy_dep, .native | .web) and the SDK's plugin.staticModule(b, framework, .{}). A plugin's own dependencies, C ones included, are then built by its build for each target rather than copied by fizzy's, so a plugin can bring its own tree-sitter grammar (graphl does). Unwired "plugin" modules are still copied, now with tape and replay too.
  • say which executables link each plugin, with a module per target: .{ .name, .targets = &.{ .{ .target = .web, .module = ... } } }.
  • get what it built from fizzy.addApp: the executables and the web build (web, web_page, web_files); fizzy.addWebSteps(b, fizzy_dep) adds a web step.
  • add to its package: package-dirs (files beside the executable) and vpk-args (appended to vpk pack), as dependency options.

Part of #

What changes

SDK impact

  • None
  • Core-only or additive: reaches plugins at the next SDK release
  • Fingerprint moved: recorded in sdk/src/version.zig, sdk_version untouched, PR labelled sdk
  • SDK release: bumps sdk_version, lists the sdk PRs since the last sdk-v* tag

Verified

  • macOS:
  • Windows:
  • Linux:
  • Web:

Follow-ups

An app built on fizzy can now:

- build a plugin against an executable's own modules: `fizzy.framework(fizzy_dep, .native |
  .web)` and the SDK's `plugin.staticModule(b, framework, .{})`. A plugin's own dependencies,
  C ones included, are then built by its build for each target rather than copied by fizzy's,
  so a plugin can bring its own tree-sitter grammar (graphl does). Unwired `"plugin"` modules
  are still copied, now with `tape` and `replay` too.
- say which executables link each plugin, with a module per target:
  `.{ .name, .targets = &.{ .{ .target = .web, .module = ... } } }`.
- get what it built from `fizzy.addApp`: the executables and the web build (`web`, `web_page`,
  `web_files`); `fizzy.addWebSteps(b, fizzy_dep)` adds a `web` step.
- add to its package: `package-dirs` (files beside the executable) and `vpk-args` (appended to
  `vpk pack`), as dependency options.
@MichaelBelousov MichaelBelousov mentioned this pull request Oct 25, 2026
8 tasks
@fizzy-linux fizzy-linux Bot added the reviewing:linux-codex a linux/codex review is running label Oct 25, 2026
@fizzy-macos fizzy-macos Bot added reviewing:macos-codex a macos/codex review is running reviewing:macos-claude a macos/claude review is running labels Oct 25, 2026
@fizzy-linux fizzy-linux Bot added reviewing:linux-claude a linux/claude review is running and removed reviewing:linux-codex a linux/codex review is running labels Oct 25, 2026
@fizzy-macos fizzy-macos Bot removed reviewing:macos-claude a macos/claude review is running reviewing:macos-codex a macos/codex review is running labels Oct 25, 2026
@fizzy-linux fizzy-linux Bot added reviewing:linux-agy a linux/agy review is running reviewing:linux-claude a linux/claude review is running and removed reviewing:linux-claude a linux/claude review is running labels Oct 25, 2026
@fizzy-macos fizzy-macos Bot added the reviewing:macos-agy a macos/agy review is running label Oct 25, 2026
@fizzy-linux fizzy-linux Bot removed reviewing:linux-agy a linux/agy review is running reviewing:linux-claude a linux/claude review is running labels Oct 25, 2026
@fizzy-macos fizzy-macos Bot added reviewing:macos-claude a macos/claude review is running and removed reviewing:macos-agy a macos/agy review is running reviewing:macos-claude a macos/claude review is running labels Oct 25, 2026
@fizzy-linux fizzy-linux Bot added the reviewing:linux-codex a linux/codex review is running label Oct 25, 2026
@fizzy-macos fizzy-macos Bot added the reviewing:macos-claude a macos/claude review is running label Oct 25, 2026
@fizzy-linux fizzy-linux Bot removed the reviewing:linux-codex a linux/codex review is running label Oct 25, 2026
@fizzy-macos fizzy-macos Bot removed the reviewing:macos-claude a macos/claude review is running label Oct 25, 2026
@fizzy-windows fizzy-windows Bot added reviewing:windows-codex a windows/codex review is running and removed reviewing:windows-codex a windows/codex review is running labels Oct 25, 2026
@fizzy-pm fizzy-pm Bot added the sdk Moves the plugin boundary's fingerprint; ships at the next SDK release label Oct 25, 2026
@fizzy-pm

fizzy-pm Bot commented Oct 25, 2026

Copy link
Copy Markdown

Thanks for this, Michael. We are taking it in as written; the Architect's notes are on work#181 and the rest become follow-ups, not requirements.

CI ran and one thing is red, a one-line lint: sdk/plugin_sdk.zig:600, staticModule(b, framework: anytype, ...). Our lint wants a reason on or just above the line, e.g. // anytype: the Framework of fizzy's build, a build-time duck type (the rule's message is anytype-reason; the count allowance for this file is 0, so the comment is what it counts). If you push that, the rest is green and it goes in. Please also tick "Core-only or additive" under SDK impact in the description; keep the sdk label.

(This comment is from fizzy's project manager bot.)

@fizzy-pm

fizzy-pm Bot commented Oct 25, 2026

Copy link
Copy Markdown

Update: you don't need to push the lint line. We'll land this with that one-line fix on top of your commit (your authorship stays) and close this PR as landed. Nothing more is needed from you. Thanks again.

@fizzy-pm

fizzy-pm Bot commented Oct 25, 2026

Copy link
Copy Markdown

Thank you, Michael. This landed on main unchanged as commit fe294e6 in #843 (with one added comment giving staticModule's anytype its reason), so I am closing this PR as landed. #835 builds on it and goes next.

@fizzy-pm fizzy-pm Bot closed this Oct 25, 2026
@MichaelBelousov
MichaelBelousov deleted the build/app-api branch October 26, 2026 01:02
MichaelBelousov added a commit to MichaelBelousov/fizzy that referenced this pull request Oct 26, 2026
…API (fizzyedit#843)

Part of fizzyedit/work#335

## Changes

```text
 AGENTS.md              |  19 +-
 build.zig              | 126 +-
 build/app.zig          |  52 +-
 build/exe.zig          |  50 +-
 build/package.zig      |  15 +-
 build/plugins.zig      |  20 +-
 build/sdk.zig          |  41 +-
 build/web.zig          |  87 +-
 sdk/plugin_sdk.zig     |  60 +-
 9 files changed, +470/-90
```

PM: this lands MichaelBelousov's fizzyedit#834 commit fe294e6 unchanged (his
authorship kept) plus one commit (6b7f323) that only adds the `anytype`
reason comment at `sdk/plugin_sdk.zig`. The file list above is the PR's
real diff; the earlier list was computed against an old base.

## Gates

### `scripts/check-fmt.sh` (exit 0)

```text

```

### `scripts/zb build --summary all` (exit 0)

```text
... (earlier output omitted)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- options (reused)
|     +- translate-c dvui-c success 242ms
|     |  +- compile exe translate-c debug native (+21 more reused dependencies)
|     +- options success
|     +- options success
+- install text success
|  +- compile lib text debug native success 5s MaxRSS:317M
|     +- WriteFile plugin_root.zig success
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- install markdown success
|  +- compile lib markdown debug native success 5s MaxRSS:369M
|     +- WriteFile plugin_root.zig cached
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- options (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
|     +- translate-c (reused)
+- install image success
   +- compile lib image debug native success 4s MaxRSS:291M
      +- WriteFile plugin_root.zig cached
      +- WriteFile freetype (reused)
      +- compile lib freetype debug native (reused)
      +- WriteFile . (reused)
      +- compile lib tree-sitter debug native (reused)
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- options (reused)
      +- translate-c dvui-c (+1 more reused dependencies)
      +- options (reused)
      +- options (reused)


```

### `scripts/zb build test --summary all` (exit 0)

```text
... (earlier output omitted)
      +- WriteFile freetype cached
      +- compile lib freetype debug native cached 15ms MaxRSS:39M
      +- WriteFile . cached
      +- compile lib tree-sitter debug native cached 14ms MaxRSS:37M
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- translate-c dvui-c cached
      |  +- compile exe translate-c debug native cached 8ms MaxRSS:36M
      |     +- options cached
      |     +- options cached
      |     +- options cached
      |     +- run exe generate-def (aarch64.zig) cached
      |     |  +- compile exe generate-def debug native cached 7ms MaxRSS:39M
      |     +- run exe generate-def (amdgcn.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (arm.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (bpf.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (common.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (hexagon.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (loongarch.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (mips.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (neon.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (nvptx.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (powerpc.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (riscv.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (s390x.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (ve.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (wasm.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (x86_64.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (x86.zig) cached
      |     |  +- compile exe generate-def debug native (reused)
      |     +- run exe generate-def (xcore.zig) cached
      |        +- compile exe generate-def debug native (reused)
      +- options cached
      +- options cached


```

### `scripts/zb build test-integration --summary all` (exit 0)

```text
... (earlier output omitted)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-glass-tests 6 pass (6 total) 26ms MaxRSS:10M
|  +- compile test fizzy-glass-tests debug native success 2s MaxRSS:176M
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-plugin-loader-tests 2 pass (2 total) 10ms MaxRSS:11M
|  +- compile test fizzy-plugin-loader-tests debug native success 4s MaxRSS:253M
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-text-plugin-tests 101 pass (101 total) 262ms MaxRSS:16M
|  +- compile test fizzy-text-plugin-tests debug native success 5s MaxRSS:350M
|     +- options (reused)
|     +- WriteFile freetype (reused)
|     +- compile lib freetype debug native (reused)
|     +- WriteFile . (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- compile lib freetype debug native (reused)
|     +- compile lib tree-sitter debug native (reused)
|     +- translate-c dvui-c (+1 more reused dependencies)
|     +- options (reused)
|     +- options (reused)
+- run test fizzy-workbench-plugin-tests 1 pass (1 total) 11ms MaxRSS:10M
   +- compile test fizzy-workbench-plugin-tests debug native success 2s MaxRSS:185M
      +- options (reused)
      +- options (reused)
      +- WriteFile freetype (reused)
      +- compile lib freetype debug native (reused)
      +- WriteFile . (reused)
      +- compile lib tree-sitter debug native (reused)
      +- compile lib freetype debug native (reused)
      +- compile lib tree-sitter debug native (reused)
      +- translate-c dvui-c (+1 more reused dependencies)
      +- options (reused)
      +- options (reused)


```

### `scripts/zb build check-web --summary all` (exit 0)

```text
... (earlier output omitted)
|  |     +- run exe generate-def (amdgcn.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (arm.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (bpf.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (common.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (hexagon.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (loongarch.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (mips.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (neon.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (nvptx.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (powerpc.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (riscv.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (s390x.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (ve.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (wasm.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (x86_64.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (x86.zig) cached
|  |     |  +- compile exe generate-def debug native (reused)
|  |     +- run exe generate-def (xcore.zig) cached
|  |        +- compile exe generate-def debug native (reused)
|  +- options cached
|  +- options success
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- options cached
|  +- translate-c success 12ms MaxRSS:39M
+- compile obj rehome-fixture-web debug wasm32-freestanding success 587ms MaxRSS:224M
   +- translate-c dvui-c (+1 more reused dependencies)
   +- options (reused)
   +- options (reused)


```

### `scripts/zb build test-sdk-version --summary all` (exit 0)

```text
... (earlier output omitted)
   +- WriteFile . cached
   +- compile lib tree-sitter debug native cached 10ms MaxRSS:34M
   +- compile lib freetype debug native (reused)
   +- compile lib tree-sitter debug native (reused)
   +- options cached
   +- options cached
   +- translate-c dvui-c cached
   |  +- compile exe translate-c debug native cached 5ms MaxRSS:40M
   |     +- options cached
   |     +- options cached
   |     +- options cached
   |     +- run exe generate-def (aarch64.zig) cached
   |     |  +- compile exe generate-def debug native cached 5ms MaxRSS:35M
   |     +- run exe generate-def (amdgcn.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (arm.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (bpf.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (common.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (hexagon.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (loongarch.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (mips.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (neon.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (nvptx.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (powerpc.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (riscv.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (s390x.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (ve.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (wasm.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (x86_64.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (x86.zig) cached
   |     |  +- compile exe generate-def debug native (reused)
   |     +- run exe generate-def (xcore.zig) cached
   |        +- compile exe generate-def debug native (reused)
   +- options cached
   +- options cached


```

---------

Co-authored-by: Michael Belousov <mike@graphl.tech>
Co-authored-by: fizzy-linux[bot] <346940526+fizzy-linux[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
This was referenced Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

sdk Moves the plugin boundary's fingerprint; ships at the next SDK release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant