# Cairo Contract Events

> Explain Starknet contract events, event enums, and emitting events; use when a request involves defining or emitting events in Cairo.

- Skill: `teddyjfpender/cairo-contract-events` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add teddyjfpender/cairo-contract-events`
- Raw SKILL.md: https://api.skillmd.com/api/skills/teddyjfpender/cairo-contract-events/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: teddyjfpender (https://skillmd.com/u/teddyjfpender)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/teddyjfpender/cairo-contract-events

---


# Cairo Contract Events

## Overview
Explain how to define events and emit them from Cairo contracts.

## Quick Use
- Read `references/contract-events.md` before answering.
- Define an `Event` enum with `#[event]` and `#[derive(starknet::Event)]`.
- Mark indexed fields with `#[key]`.

## Response Checklist
- Emit events with `self.emit(Event::Variant(...))`.
- Use struct variants to keep event fields clear and typed.
- Use `#[key]` for fields that should be indexed.

## Example Requests
- "How do I emit an event from a contract?"
- "What does #[key] do on an event field?"
- "How do I define multiple event types?"

