Dict keys can be any Tcl value; the string representation will be used as the actual value for computing the hash code. It's probably a good idea to keep them comparatively short (kilobytes, not megabytes) for performance reasons, but it isn't critical. There's no need to feel that the values (i.e., what they keys map to) are restricted at all. You might hit overall memory limits if you compute the string representation of a very big dictionary; Tcl 8.* has limits there (in the low level API of its memory allocators). If dealing with very large amounts of data, using a database is probably a good plan.