diff --git a/src/NATS.Server/Events/EventSubjects.cs b/src/NATS.Server/Events/EventSubjects.cs
new file mode 100644
index 0000000..f29460f
--- /dev/null
+++ b/src/NATS.Server/Events/EventSubjects.cs
@@ -0,0 +1,49 @@
+using NATS.Server.Auth;
+using NATS.Server.Subscriptions;
+
+namespace NATS.Server.Events;
+
+///
+/// System event subject patterns.
+/// Maps to Go events.go:41-97 subject constants.
+///
+public static class EventSubjects
+{
+ // Account-scoped events
+ public const string ConnectEvent = "$SYS.ACCOUNT.{0}.CONNECT";
+ public const string DisconnectEvent = "$SYS.ACCOUNT.{0}.DISCONNECT";
+ public const string AccountConnsNew = "$SYS.ACCOUNT.{0}.SERVER.CONNS";
+ public const string AccountConnsOld = "$SYS.SERVER.ACCOUNT.{0}.CONNS";
+
+ // Server-scoped events
+ public const string ServerStats = "$SYS.SERVER.{0}.STATSZ";
+ public const string ServerShutdown = "$SYS.SERVER.{0}.SHUTDOWN";
+ public const string ServerLameDuck = "$SYS.SERVER.{0}.LAMEDUCK";
+ public const string AuthError = "$SYS.SERVER.{0}.CLIENT.AUTH.ERR";
+ public const string AuthErrorAccount = "$SYS.ACCOUNT.CLIENT.AUTH.ERR";
+
+ // Request-reply subjects (server-specific)
+ public const string ServerReq = "$SYS.REQ.SERVER.{0}.{1}";
+
+ // Wildcard ping subjects (all servers respond)
+ public const string ServerPing = "$SYS.REQ.SERVER.PING.{0}";
+
+ // Account-scoped request subjects
+ public const string AccountReq = "$SYS.REQ.ACCOUNT.{0}.{1}";
+
+ // Inbox for responses
+ public const string InboxResponse = "$SYS._INBOX_.{0}";
+}
+
+///
+/// Callback signature for system message handlers.
+/// Maps to Go's sysMsgHandler type in events.go:109.
+///
+public delegate void SystemMessageHandler(
+ Subscription? sub,
+ INatsClient? client,
+ Account? account,
+ string subject,
+ string? reply,
+ ReadOnlyMemory headers,
+ ReadOnlyMemory message);