# crates-new-versions

Newest published version of a crates.io crate, emitted when it changes.

Category: Developer monitoring. Allow `crates.io`.

Updated 2026-10-17. HTML: https://asipipes.com/pipes-library/crates-new-versions

## CLI

```
pipes run examples/crates-new-versions.pipe.yaml
```

## MCP call

```json
{
  "name": "pipe__crates-new-versions",
  "arguments": {}
}
```

## Pipe file

`examples/crates-new-versions.pipe.yaml`

```yaml
pipes: 0
name: crates-new-versions
version: 0.1.0
description: Newest published version of a crates.io crate, emitted when it changes.
permissions:
  network: [crates.io]
inputs:
  type: object
  properties:
    crate:
      type: string
      pattern: "^[A-Za-z0-9_-]+$"
      default: serde
  required: [crate]
outputs:
  type: object
  properties:
    text: { type: string }
    count: { type: integer }
  required: [text, count]
output:
  text: "${steps.format.text}"
  count: "${steps.format.count}"
steps:
  - id: fetch
    block: fetch_http
    with:
      url: "https://crates.io/api/v1/crates/${inputs.crate}"
      max_bytes: 500000
    retry: { max: 2, backoff_ms: 500 }
    timeout_ms: 15000
  - id: parsed
    block: parse_json
    in: "${steps.fetch}"
    with:
      path: crate
  - id: shaped
    block: map
    in: "${steps.parsed}"
    with:
      pick: [name, newest_version, updated_at]
  - id: new
    block: diff_since_last
    in: "${steps.shaped}"
    with:
      key: [name]
      compare: [newest_version]
      emit: [added, changed]
      first_run: all
  - id: format
    block: format
    in: "${steps.new}"
    with:
      header: "crates.io:\n"
      item_template: "- ${item.name} ${item.newest_version}"
      separator: "\n"
  - id: print
    block: emit_stdout
    in: "${steps.format.text}"
    with: { format: text }
```
