No C required, you can just connect to the UI through a socket and often skip the FFI completely. This is my preferred way to use Tk and I don't even consider anything else unless there is a reason. Working this way also has the nice side effect of making the application UI agnostic.
Or is there a way to run Tk as a daemon?
https://wiki.tcl-lang.org/page/Scheme
This is quite old, but I always remember seeing it in the BSD packages collection:
https://conservatory.scheme.org/stk/
Then there is Portable Scheme / Tk, a library for several Scheme implementations:
https://wiki.call-cc.org/eggref/5/pstk
PS/Tk provides an interface to the Tk toolkit, and is an effective tool for creating graphical interfaces.
(import pstk)
(tk-start)
(tk/pack
(tk 'create-widget 'button 'text: "Hello"
'command: (lambda () (display "Hello world") (newline)))
'padx: 20 'pady: 20)
(tk-event-loop)
And a recent walk-through:Learn Scheme by Example: Tk GUI with Chicken Scheme
https://blog.matthewdmiller.net/learn-scheme-by-example-tk-g...
STk is a Scheme interpreter which can access to the Tk graphical package. Concretely it can be seen as the John Ousterhout's Tk package where the Tcl language has been replaced by Scheme.
The Scheme interpreter is now R4RS conformant.
This release provides an efficient object oriented system called STklos. STklos is a full OO system with multi-inheritance, generic functions, multi-methods and a true meta object protocol.
Perl too, IIRC.
It interfaces to its own internal Tcl interpreter that runs Tk. You can even feed it arbitrary non-Tk commands to eval.
This is a legacy of the trouble Perl/Tk had splitting it out as an independent library which the Tcl devs didn't want to support.