InDesign offers numerous ways of creating user interfaces for scripts. As a general rule, the more capable the UI must be, the more complex it will be to build it. Below is an overview of the options available:
Native InDesign Dialogs
InDesign is unique among the Creative Suite applications in that it offers its own dialog functionality. These dialogs are by far the easiest to create -- and there are some great built-in widgets, but there are a couple of limitations:
Only window type available are dialogs. No non-modal palettes or the like.
Native InDesign dialogs are completely static. You can not change the dialog once it's created, and it can not react to user input in a dynamic way.
If these limitations are not a problem for your UI, go with the native dialogs. They are the quickest and easiest way. Look at the InDesign DOM documentation for app.dialogs for usable wigets and types.
InDesign CS3 introduced Script UI.
Script UI offers many advanced features not available in the native InDesign dialogs. These include:
Three window types can be used: "Dialog", "Window", and "Palette".
Script UI offers an advanced event architecture which allows to dynamically change the dialog based on user input.
Script UI includes basic drawing tools which can be used to customize the look of the UIs.
Images can be used in the UI as well.
The learning curve for script UI is much steeper than the basic dialogs, and building them requires much more code.
There are two third-party tools available for making the creation of Scipt UI dialogs easier: Rapid Script UI and Script UI Builder. Each uses a different approach, so it pays to check them both out.
Another excellent resource is Peter Kahrel's "ScriptUI for dummies" which is for dummies and non dummies alike!
Embedded Flash UI
Flash swf files can be embedded in Script UI containers. Any kind of swf files can be played -- including movies. For Script UIs, you would usually be more interested in UI elements. Most developers would create these swf files using Flash Builder, but you could use any application which can create interactive swf movies for this (including but not limited to Flash).
It is possible embed one swf for the whole dialog, or embed mulitple swfs into different parts of a dialog. The Flex framework makes building advanced dialogs much easier.
Debugging the swfs can be done using Flash Builder, but to do that you need to enable debugging in InDesign. The method for doing that changed in CS5. Prior to CS5, a special debug OWL plugin needed to be installed. This was available as part of the discontinued PatchPanel project. In CS5 and later, debugging is enabled by using an undocumented creation attribute of the FlashPlayer. Something like this:
CS5 introduced a whole new type of UI. The CS SDK enables flash UIs to acheive much tighter integration and can be loaded in panels. An additional adavntage to the CS SDK is the fact that CSXS modal dialogs can change the InDesign object model -- something not possible using any of the other UI options.
For those familiar with AppleScript or Visual Basic, it is possible to use these OS native technologies to build UIs. You would generally run the script in either VB or AppleScript using these UIs, but it is possible to run ExtendScript code as well using app.doScript().
Other options can include just about anything. People have been known to use REALBasic and other technologies to build UIs. If you use an outside technology, you will need some way to communicate with InDesign. One way of doing this is to use Visual Basic on Windows or AppleScript on Mac.