Tak więc program „Hello world” w Tcl-u wygląda tak:
puts "Hello, world!"
Komenda puts jest właściwie jedyną komendą obsługującą operacje wyjściowe i to niezależnie od tego, czy wysyła się dane tekstowe, czy binarne. Do operacji wejściowych istnieje więcej komend:
gets <kanał> ?zmienna?
Komenda ta czyta jedną linię danych. Jeśli zostanie podana ?zmienna?, w niej będzie umieszczony wczytany napis, a zwrócona zostanie jego długość. Jeśli zmienna nie zostanie podana, wczytana linijka będzie zwrócona jako wynik. Do czytania przeznaczona jest też druga komenda, występująca w dwóch postaciach:
read ?-nonewline? <kanał>
Czyta wszystko z zadanego <kanału> aż do tzw. EOF. Jeśli podano -nonewline, to w zwróconym przez komendę tekście nie będzie znaku końca linii, jeśli byłby on ostatnim znakiem.
read <kanał> <ile>
Czyta z zadanego <kanału> <ile> bajtów danych. Jeśli EOF nastąpił, zanim odczytano <ile> znaków, to zostanie zwrócone tylko tyle, ile wczytano. Jeśli <kanał> blokuje odczyt, to komenda zakończy się, dopiero gdy odczytana zostanie wymagana liczba bajtów.
Kanały mogą być też otwarte do różnych innych urządzeń. Standardowa komenda open otwiera dostęp do pliku:
set fd [open filename.txt r]