# allwright-core Rust crate
`allwright-core` is the lightweight Rust engine core for the project.
It includes:
- a high-level Rust client API for talking to the allwright engine
- the engine server implementation used by the installable `allwright` CLI
- the shared plugin catalog used by CLI-side plugin registration
The surrounding Rust workspace now also publishes:
- `allwright`
- `allwright-plugin-sdk`
- `allwright-surface-web`
- `allwright-surface-mobile`
- `allwright-surface-mobile-android`
- `allwright-surface-mobile-ios`
- `allwright-surface-desktop`
- `allwright-surface-desktop-mac`
- `allwright-surface-desktop-windows`
- `allwright-surface-desktop-linux`
Installing the `allwright` package is intended to provide the CLI plus this lightweight core together, while surface crates are added separately as plugins.
Typed hooks use one generic registration/wait lifecycle. For example, register
the web-owned new-page hook before the action that opens a tab:
```rust,no_run
let hook = page.register_hook(allwright::NEW_PAGE).await?;
page.click("a[target=_blank]").await?;
let new_page = hook.wait().await?;
```
```rust,no_run
let hook = page.register_hook(allwright::FILE_CHOOSER).await?;
page.click("button.open-upload").await?;
let chooser = hook.wait().await?;
chooser.set_file("fixtures/document.pdf").await?;
```
```rust,no_run
let hook = page.register_hook(allwright::DOWNLOAD).await?;
page.click("a.download-report").await?;
let download = hook.wait().await?;
download
.save_as(format!("artifacts/{}", download.suggested_filename()))
.await?;
```