To receive mouse input, override the `OnMouseEvent` function: ```cs public class ExampleClient : Client { protected override void OnMouseEvent(MouseEvent evt, Vector pos) { if (evt == MouseEvent.Move) { Console.WriteLine(quot;Mouse moved to {pos.X}, {pos.Y}"); } else if (evt == MouseEvent.PrimaryDown) { Console.WriteLine(quot;Mouse clicked at {pos.X}, {pos.Y}"); } } } ``` I think this is using raw mouse input for mouse movement data, I'll need to confirm with the [Silk.NET](https://github.com/dotnet/Silk.NET) team. To receive keyboard input, override the `OnKeyEvent` function. ```cs public class ExampleClient : Client { protected override bool OnKeyEvent(KeyEvent key) { if (key.Modifiers == KeyModifier.Alt && key.KeyCode == Silk.NET.Input.Key.F4) { Console.WriteLine("Alt F4 pressed"); return true; } return false; } } ``` This function returns `true` if it handled a key press, which is useful when you want to only handle the key press once. For example pressing escape to close a dialog should only close the current dialog, not all dialogs in a chain.