Nextdoor CAPI events need event_name, seconds, and a match key
event_name is a documented lowercase event. action_source is the channel. event_time_epoch is Unix seconds, a 10-digit value. customer needs hashed email, hashed phone_number, or click_id. website events need action_source_url and a raw client_user_agent. purchase needs custom.order_value as a currency code then the amount, such as USD49.99. IP and user agent are not hashed.
What this pack matches
Rules
Codes are stable. A finding in CI, MCP, or the playground lands on the same id.
| Field | Required | What it checks | Rule ids | Source |
|---|---|---|---|---|
event_name |
required | It is the conversion event name. Nextdoor documents a fixed lowercase set. Native JSON type: string. Fix: Set `event_name` to a documented value such as `purchase` or `page_view`. | vendor.nextdoor-conversions-api.body.event_name.missingvendor.nextdoor-conversions-api.body.event_name.emptyvendor.nextdoor-conversions-api.body.event_name.invalid |
docs |
action_source |
required | It names the channel the conversion happened on. Native JSON type: string. Fix: Set `action_source` to a documented channel such as `website`. | vendor.nextdoor-conversions-api.body.action_source.missingvendor.nextdoor-conversions-api.body.action_source.emptyvendor.nextdoor-conversions-api.body.action_source.invalid |
docs |
event_id |
required | It identifies the event so Pixel and CAPI can deduplicate. Native JSON type: string. Fix: Set `event_id` to the same deterministic id the Pixel sent. | vendor.nextdoor-conversions-api.body.event_id.missingvendor.nextdoor-conversions-api.body.event_id.emptyvendor.nextdoor-conversions-api.body.event_id.invalid |
docs |
event_time_epoch |
optional | Unix seconds, not milliseconds. The current Data Types page defines Integer as signed32-bit. No arbitrary10-digit minimum is imposed. Native JSON type: integer. Minimum numeric value: -2147483648. Maximum numeric value: 2147483647. Fix: Send `event_time_epoch` as a 10-digit Unix timestamp in seconds. | vendor.nextdoor-conversions-api.body.event_time_epoch.invalid |
docs |
data_source_id |
required | It is the Pixel ID. Nextdoor documents `data_source_id` and deprecated `pixel_id`. Native JSON type: string. Fix: Set `data_source_id` to the Pixel ID from Nextdoor Ads. | vendor.nextdoor-conversions-api.body.data_source_id.missingvendor.nextdoor-conversions-api.body.data_source_id.emptyvendor.nextdoor-conversions-api.body.data_source_id.invalid |
docs |
customer |
required | It holds matching identifiers. Nextdoor documents it as required. Native JSON type: object. Fix: Send a `customer` object with at least one of hashed `email`, hashed `phone_number`, or `click_id`. | vendor.nextdoor-conversions-api.body.customer.missingvendor.nextdoor-conversions-api.body.customer.invalid |
docs |
action_source_url |
optional | It is the page URL. Nextdoor documents it as required for website events. Native JSON type: string. Fix: Set `action_source_url` to the absolute page URL. | vendor.nextdoor-conversions-api.body.action_source_url.emptyvendor.nextdoor-conversions-api.body.action_source_url.invalid |
docs |
customer.email |
optional | It is the SHA-256 digest of the email after trim and lowercase. Value diagnostic severity: warning. Native JSON type: string. Fix: Trim, lowercase, SHA-256, and send 64 lowercase hex characters. | vendor.nextdoor-conversions-api.body.customer.email.emptyvendor.nextdoor-conversions-api.body.customer.email.invalid |
docs |
customer.phone_number |
optional | It is the SHA-256 digest of the phone number. Value diagnostic severity: warning. Native JSON type: string. Fix: Hash the ten-digit phone and send 64 lowercase hex characters. | vendor.nextdoor-conversions-api.body.customer.phone_number.emptyvendor.nextdoor-conversions-api.body.customer.phone_number.invalid |
docs |
customer.click_id |
optional | It is the `ndclid` from the Nextdoor click URL. Native JSON type: string. | vendor.nextdoor-conversions-api.body.customer.click_id.emptyvendor.nextdoor-conversions-api.body.customer.click_id.invalid |
docs |
customer.client_user_agent |
optional | It is the raw browser user agent. Nextdoor documents it as required for website events, and not hashed. Native JSON type: string. | vendor.nextdoor-conversions-api.body.customer.client_user_agent.emptyvendor.nextdoor-conversions-api.body.customer.client_user_agent.invalid |
docs |
customer.client_ip_address |
optional | It is the browser IP, IPv4 or IPv6, sent unhashed. Native JSON type: string. | vendor.nextdoor-conversions-api.body.customer.client_ip_address.emptyvendor.nextdoor-conversions-api.body.customer.client_ip_address.invalid |
docs |
customer.first_name |
optional | It is the SHA-256 digest of the first name after lowercase. Value diagnostic severity: warning. Native JSON type: string. Fix: Lowercase, SHA-256, and send 64 lowercase hex characters. | vendor.nextdoor-conversions-api.body.customer.first_name.emptyvendor.nextdoor-conversions-api.body.customer.first_name.invalid |
docs |
customer.last_name |
optional | It is the SHA-256 digest of the last name after lowercase. Value diagnostic severity: warning. Native JSON type: string. Fix: Lowercase, SHA-256, and send 64 lowercase hex characters. | vendor.nextdoor-conversions-api.body.customer.last_name.emptyvendor.nextdoor-conversions-api.body.customer.last_name.invalid |
docs |
customer.date_of_birth |
optional | Data Types explicitly uses YYYYMMDD; older Track examples hash this field. Plain date calendar validity is checked separately. Value diagnostic severity: warning. Native JSON type: string. Fix: Format as YYYYMMDD, SHA-256, and send 64 lowercase hex characters. | vendor.nextdoor-conversions-api.body.customer.date_of_birth.emptyvendor.nextdoor-conversions-api.body.customer.date_of_birth.invalid |
docs |
customer.street_address |
optional | It is the SHA-256 digest of the street address. Value diagnostic severity: warning. Native JSON type: string. | vendor.nextdoor-conversions-api.body.customer.street_address.emptyvendor.nextdoor-conversions-api.body.customer.street_address.invalid |
docs |
customer.city |
optional | It is the SHA-256 digest of the city after lowercase with no spaces. Value diagnostic severity: warning. Native JSON type: string. | vendor.nextdoor-conversions-api.body.customer.city.emptyvendor.nextdoor-conversions-api.body.customer.city.invalid |
docs |
customer.state |
optional | Preserve hashed fields in the Track example and explicit plain two-letter fields in Data Types. Registered country policy requires separate source reconciliation. Value diagnostic severity: warning. Native JSON type: string. | vendor.nextdoor-conversions-api.body.customer.state.emptyvendor.nextdoor-conversions-api.body.customer.state.invalid |
docs |
customer.zip_code |
optional | Data Types describes a plain string postal code. Preserve hashed strings in the Track example without requiring every postal code to be a digest. Value diagnostic severity: warning. Native JSON type: string. | vendor.nextdoor-conversions-api.body.customer.zip_code.emptyvendor.nextdoor-conversions-api.body.customer.zip_code.invalid |
docs |
customer.country |
optional | Preserve hashed fields in the Track example and explicit plain two-letter fields in Data Types. Registered country policy requires separate source reconciliation. Value diagnostic severity: warning. Native JSON type: string. | vendor.nextdoor-conversions-api.body.customer.country.emptyvendor.nextdoor-conversions-api.body.customer.country.invalid |
docs |
customer.gender |
optional | Data Types explicitly permits f/m; preserve the older hashed branch. Value diagnostic severity: warning. Native JSON type: string. Fix: Hash `f`, `m`, or `n` with SHA-256 and send 64 lowercase hex characters. | vendor.nextdoor-conversions-api.body.customer.gender.emptyvendor.nextdoor-conversions-api.body.customer.gender.invalid |
docs |
customer.external_id |
optional | It is the advertiser's own user id, such as a loyalty id. Native JSON type: string. | vendor.nextdoor-conversions-api.body.customer.external_id.emptyvendor.nextdoor-conversions-api.body.customer.external_id.invalid |
docs |
custom.order_id |
optional | It is the order ID for the transaction. Nextdoor documents it as required for offline events. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom.order_id.emptyvendor.nextdoor-conversions-api.body.custom.order_id.invalid |
docs |
custom.order_value |
optional | The Track API example sends an amount string such as 100. The Data Types reference also documents Money strings such as USD 10. Native JSON type: string. Fix: Send a decimal amount string, optionally prefixed with an ISO currency code, such as 100 or USD 10. | vendor.nextdoor-conversions-api.body.custom.order_value.emptyvendor.nextdoor-conversions-api.body.custom.order_value.invalid |
docs |
custom.delivery_category |
optional | It names how the purchase was fulfilled. Nextdoor documents `in_store`, `curbside`, and `home_delivery`. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom.delivery_category.emptyvendor.nextdoor-conversions-api.body.custom.delivery_category.invalid |
docs |
custom.product_context[].id |
optional | It is the product id on a `product_context` row. Nextdoor documents `id` on each product object. Native JSON type: string. Fix: Set `custom.product_context[].id` to the SKU or catalog id, or drop the empty pair. | vendor.nextdoor-conversions-api.body.custom.product_context[].id.emptyvendor.nextdoor-conversions-api.body.custom.product_context[].id.invalid |
docs |
custom.product_context[].content_name |
optional | It is the product name on a `product_context` row. Nextdoor lists `content_name` with `id`, `quantity`, and `item_price`. Native JSON type: string. Fix: Set `custom.product_context[].content_name` to the product name, or drop the empty pair. | vendor.nextdoor-conversions-api.body.custom.product_context[].content_name.emptyvendor.nextdoor-conversions-api.body.custom.product_context[].content_name.invalid |
docs |
custom.product_context[].quantity |
optional | It is the quantity of that product. Nextdoor documents `quantity` as an integer on each product object. Native JSON type: integer. Minimum numeric value: -2147483648. Maximum numeric value: 2147483647. Fix: Send `custom.product_context[].quantity` as a whole number, such as `2`. | vendor.nextdoor-conversions-api.body.custom.product_context[].quantity.invalid |
docs |
custom.product_context[].item_price |
optional | It is the unit price of that product. The conversions/track example uses a decimal such as `5.99`. It is not a replacement for `custom.order_value`. Native JSON type: number. Fix: Send `custom.product_context[].item_price` as a number, such as `5.99`. Put the order total in `custom.order_value`. | vendor.nextdoor-conversions-api.body.custom.product_context[].item_price.emptyvendor.nextdoor-conversions-api.body.custom.product_context[].item_price.invalid |
docs |
app.app_id |
optional | It is the App Store or Google Play app id. Nextdoor documents the `app` object as required for app events. Native JSON type: string. Fix: Set `app.app_id` to the store app id. | vendor.nextdoor-conversions-api.body.app.app_id.emptyvendor.nextdoor-conversions-api.body.app.app_id.invalid |
docs |
app.platform |
optional | It is the mobile platform. Nextdoor documents `iOS` and `Android`. Native JSON type: string. Fix: Set `app.platform` to `iOS` or `Android`. | vendor.nextdoor-conversions-api.body.app.platform.emptyvendor.nextdoor-conversions-api.body.app.platform.invalid |
docs |
app.app_version |
optional | It is the mobile app version string. Native JSON type: string. | vendor.nextdoor-conversions-api.body.app.app_version.emptyvendor.nextdoor-conversions-api.body.app.app_version.invalid |
docs |
app.app_tracking_enabled |
optional | It is the ATT opt-in flag. Nextdoor documents a boolean. Native JSON type: boolean. Fix: Send `app.app_tracking_enabled` as `true` or `false`. | vendor.nextdoor-conversions-api.body.app.app_tracking_enabled.emptyvendor.nextdoor-conversions-api.body.app.app_tracking_enabled.invalid |
docs |
restricted_data_usage |
optional | When set, Nextdoor documents `1` (or `true`) to keep the event for reporting only. Native JSON type: integer or boolean or null. Fix: Send `restricted_data_usage` as an integer, such as `1`. | vendor.nextdoor-conversions-api.body.restricted_data_usage.invalid |
docs |
restricted_data_usage_country |
optional | It associates a country with Limited Data Use. Nextdoor documents `1` for the United States. Native JSON type: integer or null. Fix: Set `restricted_data_usage_country` to `1`. | vendor.nextdoor-conversions-api.body.restricted_data_usage_country.emptyvendor.nextdoor-conversions-api.body.restricted_data_usage_country.invalid |
docs |
restricted_data_usage_state |
optional | It associates a US state with Limited Data Use. Nextdoor documents codes `1000` (California) through `1018` (Rhode Island). Native JSON type: integer or null. Fix: Set `restricted_data_usage_state` to a documented code such as `1000` for California. | vendor.nextdoor-conversions-api.body.restricted_data_usage_state.emptyvendor.nextdoor-conversions-api.body.restricted_data_usage_state.invalid |
docs |
delivery_optimization |
optional | True means the event may be used for optimization. False means attribution only. Native JSON type: boolean. Fix: Send `delivery_optimization` as `true` or `false`. | vendor.nextdoor-conversions-api.body.delivery_optimization.emptyvendor.nextdoor-conversions-api.body.delivery_optimization.invalid |
docs |
event_timezone |
optional | It is an optional timezone for where the conversion took place. Native JSON type: string. | vendor.nextdoor-conversions-api.body.event_timezone.emptyvendor.nextdoor-conversions-api.body.event_timezone.invalid |
docs |
partner_id |
optional | It names the integration vendor or agency partner. Nextdoor documents it as reference, not attribution. Native JSON type: string. | vendor.nextdoor-conversions-api.body.partner_id.emptyvendor.nextdoor-conversions-api.body.partner_id.invalid |
docs |
test_event |
optional | It flags a test conversion. Nextdoor documents a string such as `TEST1234`. Native JSON type: string. | vendor.nextdoor-conversions-api.body.test_event.emptyvendor.nextdoor-conversions-api.body.test_event.invalid |
docs |
root |
optional | Each event is a JSON object, rather than a scalar or list. Native JSON type: object. | vendor.nextdoor-conversions-api.body.root.invalid |
docs |
custom |
optional | The vendor documents the JSON shape or value type of this field. Native JSON type: object. | vendor.nextdoor-conversions-api.body.custom.invalid |
docs |
app |
optional | The vendor documents the JSON shape or value type of this field. Native JSON type: object. | vendor.nextdoor-conversions-api.body.app.invalid |
docs |
event_time |
deprecated | The current Nextdoor reference explicitly marks this legacy field deprecated. Native JSON type: string. | vendor.nextdoor-conversions-api.body.event_time.deprecatedvendor.nextdoor-conversions-api.body.event_time.emptyvendor.nextdoor-conversions-api.body.event_time.invalid |
docs |
client_id |
deprecated | The current Nextdoor reference explicitly marks this legacy field deprecated. Native JSON type: string. | vendor.nextdoor-conversions-api.body.client_id.deprecatedvendor.nextdoor-conversions-api.body.client_id.invalid |
docs |
pixel_id |
deprecated | The current Nextdoor reference explicitly marks this legacy field deprecated. Native JSON type: string. | vendor.nextdoor-conversions-api.body.pixel_id.deprecatedvendor.nextdoor-conversions-api.body.pixel_id.invalid |
docs |
custom.product_context |
optional | The vendor documents the JSON shape or value type of this field. Native JSON type: array. | vendor.nextdoor-conversions-api.body.custom.product_context.invalid |
docs |
custom.product_context[] |
optional | The vendor documents the JSON shape or value type of this field. Native JSON type: object. | vendor.nextdoor-conversions-api.body.custom.product_context[].invalid |
docs |
custom_data.order_id |
optional | It is the order ID for the transaction. Nextdoor documents it as required for offline events. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom_data.order_id.emptyvendor.nextdoor-conversions-api.body.custom_data.order_id.invalid |
docs |
custom_data.order_value |
optional | The Track API example sends an amount string such as 100. The Data Types reference also documents Money strings such as USD 10. Native JSON type: string. Fix: Send a decimal amount string, optionally prefixed with an ISO currency code, such as 100 or USD 10. | vendor.nextdoor-conversions-api.body.custom_data.order_value.emptyvendor.nextdoor-conversions-api.body.custom_data.order_value.invalid |
docs |
custom_data.delivery_category |
optional | It names how the purchase was fulfilled. Nextdoor documents `in_store`, `curbside`, and `home_delivery`. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom_data.delivery_category.emptyvendor.nextdoor-conversions-api.body.custom_data.delivery_category.invalid |
docs |
custom_data.product_context[].id |
optional | It is the product id on a `product_context` row. Nextdoor documents `id` on each product object. Native JSON type: string. Fix: Set `custom.product_context[].id` to the SKU or catalog id, or drop the empty pair. | vendor.nextdoor-conversions-api.body.custom_data.product_context[].id.emptyvendor.nextdoor-conversions-api.body.custom_data.product_context[].id.invalid |
docs |
custom_data.product_context[].content_name |
optional | It is the product name on a `product_context` row. Nextdoor lists `content_name` with `id`, `quantity`, and `item_price`. Native JSON type: string. Fix: Set `custom.product_context[].content_name` to the product name, or drop the empty pair. | vendor.nextdoor-conversions-api.body.custom_data.product_context[].content_name.emptyvendor.nextdoor-conversions-api.body.custom_data.product_context[].content_name.invalid |
docs |
custom_data.product_context[].quantity |
optional | It is the quantity of that product. Nextdoor documents `quantity` as an integer on each product object. Native JSON type: integer. Minimum numeric value: -2147483648. Maximum numeric value: 2147483647. Fix: Send `custom.product_context[].quantity` as a whole number, such as `2`. | vendor.nextdoor-conversions-api.body.custom_data.product_context[].quantity.invalid |
docs |
custom_data.product_context[].item_price |
optional | It is the unit price of that product. The conversions/track example uses a decimal such as `5.99`. It is not a replacement for `custom.order_value`. Native JSON type: number. Fix: Send `custom.product_context[].item_price` as a number, such as `5.99`. Put the order total in `custom.order_value`. | vendor.nextdoor-conversions-api.body.custom_data.product_context[].item_price.emptyvendor.nextdoor-conversions-api.body.custom_data.product_context[].item_price.invalid |
docs |
custom_data |
optional | The vendor documents the JSON shape or value type of this field. Native JSON type: object. | vendor.nextdoor-conversions-api.body.custom_data.invalid |
docs |
custom_data.product_context |
optional | The vendor documents the JSON shape or value type of this field. Native JSON type: array. | vendor.nextdoor-conversions-api.body.custom_data.product_context.invalid |
docs |
custom_data.product_context[] |
optional | The vendor documents the JSON shape or value type of this field. Native JSON type: object. | vendor.nextdoor-conversions-api.body.custom_data.product_context[].invalid |
docs |
custom.app_id |
optional | Optional published custom-data field. The Track and Data Types object spellings are both preserved. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom.app_id.invalid |
docs |
custom.app_tracking_enabled |
optional | Optional published custom-data field. The Track and Data Types object spellings are both preserved. Native JSON type: boolean. | vendor.nextdoor-conversions-api.body.custom.app_tracking_enabled.invalid |
docs |
custom.platform |
optional | Optional published custom-data field. The Track and Data Types object spellings are both preserved. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom.platform.invalid |
docs |
custom.app_version |
optional | Optional published custom-data field. The Track and Data Types object spellings are both preserved. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom.app_version.invalid |
docs |
custom.currency |
optional | Optional published custom-data field. The Track and Data Types object spellings are both preserved. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom.currency.emptyvendor.nextdoor-conversions-api.body.custom.currency.invalid |
docs |
custom_data.app_id |
optional | Optional published custom-data field. The Track and Data Types object spellings are both preserved. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom_data.app_id.invalid |
docs |
custom_data.app_tracking_enabled |
optional | Optional published custom-data field. The Track and Data Types object spellings are both preserved. Native JSON type: boolean. | vendor.nextdoor-conversions-api.body.custom_data.app_tracking_enabled.invalid |
docs |
custom_data.platform |
optional | Optional published custom-data field. The Track and Data Types object spellings are both preserved. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom_data.platform.invalid |
docs |
custom_data.app_version |
optional | Optional published custom-data field. The Track and Data Types object spellings are both preserved. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom_data.app_version.invalid |
docs |
custom_data.currency |
optional | Optional published custom-data field. The Track and Data Types object spellings are both preserved. Native JSON type: string. | vendor.nextdoor-conversions-api.body.custom_data.currency.emptyvendor.nextdoor-conversions-api.body.custom_data.currency.invalid |
docs |
opt_out |
optional | Native JSON type: boolean. | vendor.nextdoor-conversions-api.body.opt_out.invalid |
docs |
event_source_url |
optional | Native JSON type: string. | vendor.nextdoor-conversions-api.body.event_source_url.emptyvendor.nextdoor-conversions-api.body.event_source_url.invalid |
docs |
body.user_needs_an_identifier |
required | `customer` carries none of the match keys Nextdoor requires. Send hashed `email`, hashed `phone_number`, or `click_id`. Fix: Add at least one of hashed email, hashed phone, or `ndclid`. | vendor.nextdoor-conversions-api.body.user_needs_an_identifier |
docs |
body.website_requires_url |
required | The event is `action_source: website` but carries no `action_source_url`. Nextdoor documents the page URL as required for website events. Fix: Set `action_source_url` to the absolute page URL. | vendor.nextdoor-conversions-api.body.website_requires_url |
docs |
body.website_requires_user_agent |
required | The event is `action_source: website` but carries no `customer.client_user_agent`. Nextdoor documents the user agent as required for website CAPI events. Fix: Send the raw browser user agent in `customer.client_user_agent`. | vendor.nextdoor-conversions-api.body.website_requires_user_agent |
docs |
body.purchase_requires_order_value |
required | Purchase requires an order value in one of the two published custom-data object variants. Fix: Send the order total as a decimal amount string, such as 100 or USD 10. | vendor.nextdoor-conversions-api.body.purchase_requires_order_value |
docs |
body.app_requires_app_id |
required | App events need an app ID in one of the published app/custom-data variants. Fix: Set `app.app_id` to the App Store or Google Play app id. | vendor.nextdoor-conversions-api.body.app_requires_app_id |
docs |
body.unhashed_email |
required | `customer.email` carries what looks like a raw email address. Nextdoor documents SHA-256 after trim and lowercase. Fix: Trim, lowercase, hash with SHA-256, and send the 64-character hex digest. | vendor.nextdoor-conversions-api.body.unhashed_email |
docs |
body.hashed_plaintext_field |
required | This field looks like a SHA-256 digest, but Nextdoor documents `client_ip_address` and `client_user_agent` as unhashed. Fix: Send the raw IP address or user agent. | vendor.nextdoor-conversions-api.body.hashed_plaintext_field |
docs |
body.event_timestamp_required |
required | The API requires epoch seconds or the legacy ISO timestamp. The legacy event_time field remains deprecated. | vendor.nextdoor-conversions-api.body.event_timestamp_required |
docs |
body.dob_calendar |
required | The plain birth-date branch must be a calendar-valid YYYYMMDD date. Hashed birth dates preserve their separate branch. | vendor.nextdoor-conversions-api.body.dob_calendar |
docs |
body.submission_delay_recommended |
recommended | Nextdoor recommends submitting conversions promptly within one hour. This is a data-quality recommendation, not an undocumented rejection window. | vendor.nextdoor-conversions-api.body.submission_delay_recommended |
docs |
body.legacy_submission_delay_recommended |
recommended | Nextdoor recommends submitting conversions within one hour. event_time remains a deprecated supported alternative. | vendor.nextdoor-conversions-api.body.legacy_submission_delay_recommended |
docs |
Validate a payload
pixellint validate json @payload.json --rulepack vendor/nextdoor-conversions-api
Try this failing payload in the playground. Nextdoor CAPI order_value without a currency code.
{"event_name":"purchase","event_id":"order-123","event_time_epoch":1710438591,"action_source":"physical_store","data_source_id":"5b0b9e9a-156a-11ee-be56-0242ac120002","customer":{"click_id":"92dea472-8b8b-456f-8b5b-b2a55147c3cc"},"custom":{"order_value":"100","order_id":"100"}}
cargo install pixellint
·
npm install pixellint