zgo-core is in active development. The figures on this page are derived from the crate source as it stands today (Cargo.toml, src/lib.rs, src/ffi.rs, PORT_REPORT.md): version, crate-types, the dotted commands matched in Engine::invoke, the exported C symbols, and the hand-assessed Alfred coverage. The "planned" column lists work that is not yet implemented — it is a roadmap, not a claim of coverage.
Module map
| module | role today | planned |
|---|---|---|
| lib (Engine) | one dotted command surface via Engine::invoke; event sink; id allocation; profile + clipboard persistence | more dispatch coverage as modules grow |
| model | workflow · object · connection · variable · feedback · item · arg · icon · mod · text · snippet · theme · profile types | workflow object config typing per object kind |
| scriptfilter | to_json + parse (JSON & legacy XML) + run_env always on; run_script/run_command behind exec | per-object Script Filter dispatch, rerun loop |
| matcher | case-insensitive subsequence ranking with word-start / consecutive / case bonuses; filter over items | knowledge / selection-frequency weighting |
| vars | {query} · {var:NAME} · {clipboard} · {date[:FMT]} · {time} · {uuid} · {allvars} token expansion | per-modifier variable scopes, secret masking |
| websearch | built-in search keywords + custom {query} URL templating with RFC 3986 encoding | per-site result parsing, suggestion fetch (host side) |
| clipboard | capped newest-first history with re-copy merge + case-insensitive search | image/file blob capture (host pasteboard integration) |
| snippet | auto-expansion keyword match (longest trigger) + placeholder expansion (clipboard / date / cursor) | per-collection affix editing, keystroke injection (host side) |
| store | profile + clipboard JSON persistence (dirs paths) | raw binary plist read, multi-profile |
| import | workflow info.plist-as-JSON import + export; alfredsnippet import | .alfredworkflow zip unpack, raw plist parse |
| ffi | C ABI: zgo_init · zgo_invoke · zgo_set_event_callback · zgo_string_free | richer event payloads |
tauri_plugin (feature tauri) | Tauri v2 command (zgo_invoke) + setup; events on zgo-event | mountable webui packaging |
Build surfaces
The crate declares crate-type = ["rlib", "staticlib", "cdylib"]. The rlib links natively into Rust/Tauri hosts; the staticlib/cdylib expose the C ABI for non-Rust hosts (header include/zgo_core.h, hand-written, no cbindgen). The default exec feature carries Script Filter / Run Script process spawning; building --no-default-features yields a feedback-only core with no spawn surface that compiles in headless CI — feedback serialization, parsing, matching, token expansion and web-search URL building still work without it. The optional tauri feature adds the Tauri v2 command layer.
Verification
The crate carries in-source unit and integration tests across the engine and its modules: the command surface (version reporting, workflow CRUD + import/export, match filtering, token rendering, web-search URL building, clipboard add/search/clear, feedback parse/render, structured unknown-command errors), plus module-level tests in matcher (word-start ranking, subsequence rejection), vars (token resolution, unknown-left-verbatim, uuid shape), scriptfilter (JSON + legacy XML parse, run-env), snippet (auto-expand match, cursor offset), clipboard, websearch, import and store. Tests for the feedback-only core run without spawning a process and pass identically in a headless Linux CI; the run_script path is feature-gated so the default test path can be built without it.