As it (almost) always, there is no best in (software) engineering. There are only trade-offs.
For a windows based pendant, there are 2 main decisions groups to make. (1) The UI Framework you will be using and (2) the programming language editor features (assuming yout robot will have possibility to write an "application program").
I guess step 0 is to come up with a UI concept and draw it on paper, in Powerpoint, in Visio, in Adobe XD or in Figma to have a concept what you can implement.
- UI Frameworks help you create windows, icons, input fields, labels, etc. all Graphical related thing you see on screen. The first choice here is to decide if you want a web-based UI, displayed only in a browser, a native UI for windows (or should it be cross platform, this way you can avoid the need for win licencelicense for every pendant) or both.
- You can look into web bases UI Frameworks like Vue, Angular, React, Svelte
- You can look into the .net UI Framework (Windows Forms, but this issee being depricateddeprecated), or something Linux/Mac/Win cross platform like .net MAUI.net MAUI (I assume this will be the successor of WinForms), ElectronElectron, React Native React Native (with React Native for Windows) or qtqt
- You can use something that (should/will) work anywhere like FlutterFlutter
I think with the exception of winForms and qt all other frameworks are bound to a certain programming language (not accounting for javascript/typescript difference). If you have a concept you can create the UI in the chosen Framework.
The next step would be to add functionality to the UI. As the UI is only graphics there will be absolutely no robot related functionality behind it. You need an interfaveinterface to tehthe robot controller (you can choose from HTTP Rest, MQTT, AMQP, ROS, protobuf, cap'n'protocap'n proto, gRPC, WebSockets). Please note that the interface alone also does not provide actual functionality only message exchange. Make sure that the selected interface has libraries both for the programing language used on the controller and on the pendant.
- On the pendant side, all functionality that is needed is somewhat straight forward to implement compared to the programming language editor part.
That is the most complex task on the pendant (assuming you want syntax highlighting and "intellisense"intelligent code completion ("intellisense") integrated in the UI).
- For Syntax highlighting you need a syntax of a programming langauagelanguage. You can consider copying an exisitngexisting language (like KRL), but I do not know if that is legal. Anyways, once you have a language, you need (at least a partial) interpreter (parser+lexer) for the language you use to program your robot. By partial interpreter, I mean at least a lexer which can colourcolor the words (tokens) you type,
- For good "intellisene""intellisense" you probably need a parser also. You can use an interpreter generator like ANTLRANTLR, or yaccyacc to generate your interpreter based on the syntax of the programming language you are using. This interpreter will also come in handy, when you are actually interpreting the program you wrote on the pendant, when you execute it on the controller.