**NIP-XX: Strict Event Validation**
This draft NIP sets clear, strict rules for validating Nostr events. It ensures every event uses the correct format: all hex codes (such as id, pubkey, and sig) in lowercase, timestamps and kinds as whole numbers (integers), tags properly structured, and invalid events rejected immediately.
The goal is to address a root issue: NIP-01 leaves some format details underspecified (for example, it describes hex as lowercase but does not strictly enforce it everywhere, and it uses "number" for created_at and kind without explicitly requiring integers). This has allowed malformed or inconsistent events to appear in the network. Strict checking helps prevent these from causing bugs, interoperability problems between apps, wasted storage on relays, and crashes in user interfaces.
I'm relatively new to Nostr and very open to feedback on this. This NIP is meant as a starting point for discussion, not a final answer. I'm especially interested in hearing where it overlaps with existing work, where it might be too strict, or where it does not fit the direction Nostr is heading or other NIPs or discussions I may have missed or misinterpreted.
cc
@fiatjaf @calle
https://github.com/livegnik/NIPs-by-Tim/blob/master/nip-xx-strict-event-validation.md