Tcl/Tk 8.5 Roadmap

Tcl/Tk 8.5.0 was released December 20, 2007 [L1 ] [L2 ]. This page was used as a practical roadmap and has now fullfilled its purpose. To see the lang list of actual changes, see Changes in Tcl/Tk 8.5.

Here comes the history ...

Please restrict commentary on this page to reduce clutter. JH reserves the right to clean this page up to keep it easy to review. Do not add items to the list without approval, as this is meant to be a semi-official list. These lists are known to be incomplete, but I'd like to control what goes in so it all makes sense and, more importantly, is practically possible.


  • February 2002, Don Porter on tcl-core: ...we will need to branch off the 8.4beta work and turn the HEAD over to 8.5a development.
  • 8.5a1 March 2004
  • 8.5a2 December 2004
  • 8.5a3 June 2005
  • 8.5a4 April 2006
  • 8.5a5 October 2006
  • 8.5a6 April 2007
  • 8.5b1 released 2007-09-20
  • 8.5b2 released 2007-10-26
  • 8.5b3 released 2007-11-19
  • 8.5.0 released 2007-12-20

Remember that alphas are the feature creep releases. Beta is essentially release candidate, when we hope more people will pound on it.

Tcl 8.5 will not include OO, but see TclOO for details and a package with the current implementation. Tile will be included in Tk 8.5 (in the ttk:: namespace).

Changes In Tcl/Tk 8.5 will document the TIPs that have been approved and integrated into the Tcl/Tk core.


8.5 is focused more on Tk, although Tcl changes will be notable as well. Tk will be most notable, because the whole look will be revamped. These items focus more on those not listed as tips [L3 ] already.

  • font fallback ..., font fallbacks are currently hardcoded, which causes problems in some applications (perhaps also font alias control)
  • font create ... -command. Named fonts need a callback command for when they are changed (like the WorldChangedProc for C widgets) for those who use them in megawidgets.
  • pid <signal>, revive TIP #88 [L4 ]
  • option clear -noreload, a way to prevent the xrdb from getting in the way of a Tk app
  • More core Tk modules. There are several worth consideration as standard Tk modules, with tkdnd (drag and drop) being a key one, as well as tooltips.
  • tktable - time to go into the core, with some option fix-ups
  • megawidgets - come on, you know you want it
  • tree - a tree widget (treectrl?, something else?)
  • Improved accessibility support. Tk currently doesn't handle screen readers, tablet input, or some other newer accessibility things. It does handle stuff like the magnifier and carets correctly, but that's only a partial solution to full accessibility support.
  • Bidi support (see bidi rendering). Any volunteers? (UKo 2007-11-19: this is already present in the OSX version! But AFAIK uses the mac rendering libraries.)
  • Thread-enabled by default. Sure, it's a bit slower, but it may just be time to do it. This would include adding the Thread extension into the Tcl core. [*]
  • Fix Tk bindings. Many of the Tk bindings are out of date with current standards. This includes things like many widgets not taking focus on <1>, which they should, and some key bindings. [*]
  • Updates to make full use of [source -encoding]. [*]
  • Revisions to support access to Unicode command lines. See [L5 ].
  • Bundled TEA-compliant packages
  • Support for alpha/beta package version numbers. [*]
  • Internal filesystem.

DKF (26-Apr-2006): It's not clear to me that the items marked with [*] need TIPs at all. Thread support in Tk is progressing on Unix and Win (but not on OSX as far as I can tell) and Tcl shouldn't default to supporting threads until Tk does so too. But I regard it as a bug that it doesn't work, and the fix schedule for it can stretch into the beta period.


  • Documentation and demos. We need people willing to improve the Tcl/Tk docs and add more (and fancier) demos. (DKF notes that anyone wanting to work on this should concentrate on the content and let me handle how to encode it in nroff (or tmml/doctools if we switch to that). For demos, and especially the widget demo, we are particularly looking for demos that cover animation and, when they are added, any new widgets; other demos are welcome too though, especially of the "more complete worked app" variety.)
  • Language bindings. I have rewritten the one for Perl (Tcl::Tk). It has some Perl/Tk compatability, but could use some more (probably as a separate module). The other languages (Python, Ruby, ...) could all use better bindings. For example, in redoing the Perl one, I made one that was faster and leaner than the original, as well as much more flexible (allowing any Tcl/Tk extension to be used, across more platforms).
  • See other tips [L6 ] for open items that need an implementation or just a push.

DKF: Open TIPs:

  • 86 Improved Debugger Support'
  • 89 Try/Catch Exception Handling in the Core
  • 97 Moving Vertices of Canvas Items
  • 106 Add Encoding Abilities to the [dde] Command
  • 122 Use tcl_{non,}wordchars Throughout Tcl/Tk
  • 128 Ability to Install a Custom Memory Allocator
  • 133 Extending [expr] Operators
  • 154 Add Named Colors to Tk
  • 160 Improvements to Terminal and Serial Channel Handling
  • 162 IPv6 Sockets for Tcl
  • 164 Add Rotate Subcommand to the Canvas Widget
  • 166 Reading and Writing the Photo Image Alpha Channel
  • 167 Add a New Option for Context Help for Windows
  • 170 Better Support for Nested Lists
  • 171 Change Default <MouseWheel> Bindings Behavior
  • 178 [info pid] and [info tid] Subcommands
  • 180 Add a Megawidget Support Core Package
  • 185 Null Handling
  • 186 Expose the Type and Modified-State of Widget Options
  • 187 Procedures as Values
  • 193 Simple Syntax Help System
  • 195 Script Access to Tcl_GetIndexFromObj
  • 197 Text Widget Persistant Cursor
  • 198 Image Command XPM Extension
  • 199 Specification of Alternatives to .wishrc/.tclshrc
  • 210 Add 'tempname' Subcommand to [file]
  • 213 A Standard Dialog for Font Selection
  • 214 Add New Object Introspection Command
  • 216 Handling Command-Line Options in Tclsh and Wish
  • 220 Escalate Privileges in VFS Close Callback
  • 224 Add New [array] Subcommands 'incr' and 'value'
  • 225 Arithmetic Series with Optimized Space Complexity
  • 228 Tcl Filesystem Reflection API
  • 230 Tcl Channel Transformation Reflection API
  • 234 Add Support For Zlib Compression
  • 236 Absolute Positioning of Canvas Items
  • 238 Fire Event when Widget Created
  • 239 Enhance the 'load' Command
  • 240 An Ensemble Command to Manage Processes
  • 243 Supply Find Dialog for the Text Widget
  • 244 PNG Photo Image Support for Tk
  • 246 Unify Pattern Matching
  • 251 Enhance the 'list' Command
  • 252 Add New 'string' Command Options
  • 253 Consolidate Package-Related Commands
  • 257 Object Orientation for Tcl
  • 259 Making 'exec' Optionally Binary Safe
  • 262 Background Images for Frames
  • 265 A Convenient C-side Command Option Parser for Tcl
  • 271 Windows-Style Open and Save File Dialog on Unix
  • 276 Specify and Unify Variable Linking Commands
  • 277 Create Namespaces as Needed
  • 278 Fix Variable Name Resolution Quirks
  • 279 Adding an Extensible Object System to the Core
  • 281 Improvements in System Error Handling
  • 282 Enhanced Expression Syntax
  • 283 Modify Ensemble Command Resolution Behaviour
  • 284 New 'invoke' and 'namespace invoke' Commands
  • 285 Script Cancellation with [cancel] and Tcl_CancelEval
  • 288 Allow "args" Anywhere in Procedure Formal Arguments
  • 290 Registration of Custom Error Handler Scripts
  • 292 Allow Unquoted Strings in Expressions
  • 295 Enhance Arguments to lrange
  • 296 Enhanced Syntax for Pair-Wise Indices
  • 297 Integer Type Introspection and Conversion
  • 301 Split Bidirectional Channels For Half-Close
  • 302 Fix "after"'s Sensitivity To Adjustments Of System Clock
  • 303 Enhance 'llength' Command to Support Nested Lists
  • 304 A Standalone [pipe] Primitive for Advanced Child IPC
  • 306 Auto-Naming Widgets

Approved TIPs needing finalization (i.e. implementing)

  • 119 Angled Text on a Canvas
  • 125 Converting between Frame and Toplevel Windows
  • 141 Multiple Initial-Files in [tk_getOpenFile]
  • 145 Enhanced Tk Font Handling
  • 242 Preselect Filter on tk_get*File Dialogs

DKF: Additional notes on documentation that includes pictures:

If we are going to do this, we must move to doctools or tmml first, though it will still be possible to support inclusion of pictures within *roff format documentation using the .PSPIC macro [L7 ] provided we convert the pictures to postscript. It is not possible to support pictures in nroff output (how most Unix users use manual pages); ideally we'd provide a manual browser ourselves (with the demos?) that avoids this problem.

04-Feb-2006 Paul Walton:

What about something like Tcl3D? Are there plans for something like that in the core, or is that better off left as an extension?

DKF (26-Apr-2006): No plans to do anything with 3D stuff for 8.5, and if it's fine as an extension, we could well leave it at that. Masses of apps don't need 3D, even if yours do. :-) But seriously, what (apart from possibly marketing) would be be the benefit to such integration? How would the code gain in functionality or speed from being in the core? Right now, this feels a bit like a WIBNI ("wouldn't it be nice if...")

US 26-Apr-2006: Isn't it time to add BLT's bgexec to the core (or something functionally similar)?

See TIP 240

Yeah! Great! This, a bit of signal handling and a way to change user/group ids would obsolete Tclx when it comes to writing daemons entirely in Tcl. The possibility to half-close a channel (came up in clt again recently) would complete the picture.

jmn 2006-11-19 Yes please to 'half-closing' of channels. In particular, certain odd TCP protocols use half-closing of a channel as a signal to send final data to the other side. As far as I know this isn't really a great practice as far as interoperability.. but at least one common system requires it - spamassassin's spamc/spamd protocol. To the best of my understanding, unextended Tcl simply can't read the final response from such a daemon. (and I don't know what extensions if any, enable it)

Perl,Python,Java,PHP and VB .NET have the ability to do such half-closing of TCP connections.

The 'shutdown' of TCP sockets aside - it would be nice to see a general mechanism for bidirectional TCL channels to be changed from read-write to just read or write... or even a way to split a handle into separate read & write handles.

Proposed Tcl 8.5 TIPs