Web Services for Tcl (aka tclws)
Not logged in


The distribution provides both client side access to Web Services and server side creation of Web Services. Currently only document/literal and rpc/encoded with HTTP Soap transport are supported on the client side. The server side currently works with several web servers(see below). It provides all services as document/literal over HTTP Soap transport. Documentation for the package, including examples can be found here. The distribution consist of several packages.


This project has the following public repositories:


Documentation for the tclws package is available at the following links:

The client is known to work with several providers of Web Services (your mileage may very). Also these clients have been tested to work with the Web Services provided by the WS::Server (server side) package of tclws.

Web Servers

The server side works with the following web servers (see Web Server Settings for known required options):


Release notes, ZIP and Tarball files are available at the Downloads page.


Standard BSD license.

Packages Required

The following packages are used (minimum versions specified):

Additionally, if you are running the TclHttpd on Windows, it is highly recommended that you use the iocpsock extension.

Lastly the following packages are additionally used in Embedded mode:

TLS Support may be acheved for embedded server or client by the presence of the following packages:


TCLWS implements a limited set of standards used under the keyword "Web-Service".

Implemented standards


WSDL describes an XML document (the WSDL file), which describes the methods and their parameters of the web service.

WSDL 1.1 is supported only. Spec: http://xml.coverpages.org/wsdl20000929.html


SOAP describes the format of the call and response XML messages.

SOAP 1.0 is supported only. Spec: https://www.w3.org/TR/2000/NOTE-SOAP-20000508/

Missing features compared to the standards

Webservice call does not support namespace prefixes in subelement if not unique

As TCLWS only supports global namespace prefixes, it copies any namespace prefix in a subelement to the root. An error will rise if this causes an ambiguity.

Thus, the following WSDL will lead to an error:

<wsdl:definitions xmlns:q1="URI1" ...>
   <xs:element xmlns:q1="URI2" type="q1:MessageQ1"/>
While the following two are o.k.:
<wsdl:definitions xmlns:q1="URI1" ...>
   <xs:element xmlns:q1="URI1" type="q1:MessageQ1"/>
<wsdl:definitions xmlns:q1="URI1" ...>
   <xs:element xmlns:q2="URI2" type="q2:MessageQ1"/>