Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time



This Tcl extension provides bindings for Duktape, a JavaScript interpreter library.


You will need Tcl 8.5 or 8.6 installed on your system and available as tclsh to build tcl-duktape. You will also need the header files for Tcl. Duktape itself is bundled in the repository. To use the object-oriented API wrapper and the JSON object system TclOO is required.

# Build and test.
make test
# Install the package.
sudo make install



  • ::duktape::init ?-safe <boolean>? -> token
  • ::duktape::close token -> (nothing)
  • ::duktape::eval token code -> (evaluation result)
  • ::duktape::call-method token method this ?{arg ?type?}? -> (evaluation result)
  • ::duktape::call-method-(str|num) token method this ?arg? -> (evaluation result)
  • ::duktape::call token function ?{arg ?type?}? -> (evaluation result)
  • ::duktape::call-(str|num) token function ?arg? -> (evaluation result)
  • ::duktape::js-proc token name arguments body -> (nothing)
  • ::duktape::tcl-function token name ?returnType? arguments body -> (nothing)
  • ::duktape::make-safe token -> (nothing)`
  • ::duktape::make-unsafe token -> (nothing)`

make-safe and make-unsafe control whether a new JavaScript function named Duktape.tcl.eval() is created that allows for evaluation of arbitrary Tcl scripts.

The optional returnType argument to tcl-function may be one of:

  • boolean — results in a boolean
  • bytearray — results in a Duktape buffer
  • string — default; results in a string
  • undefined — return value ignored
  • null — results in a JavaScript null regardless of the actual data
  • double — results in a number
  • integer — same as double
  • bigint — results in a JavaScript string representation of an integer
  • json — expects a JSON string; the result is the string decoded as JSON
  • array itemType — for each item in the Tcl list, encode as itemType; the result is an array

TclOO wrapper

  • ::duktape::oo::Duktape new -> (objName)
  • $objName destroy -> (nothing)
  • $objName eval code -> (evaluation result)
  • $objName call-method method this ?{arg ?type?}? -> (evaluation result)
  • $objName call-method-(str|num) method this ?arg? -> (evaluation result)
  • $objName call function ?{arg ?type?}? -> (evaluation result)
  • $objName call-(str|num) function ?arg? -> (evaluation result)
  • $objName js-proc name arguments body -> (nothing)
  • $objName js-method name arguments body -> (nothing)
  • $objName token -> token (for the procedural API)

js-method defines a new method in JavaScript on the Duktape object instance $objName.

JSON objects

  • ::duktape::oo::JSON new -> (objName)
  • $objName destroy -> (nothing)
  • $objName get key ?key ...? -> (value)
  • $objName get-json ?key ...? -> (JSON string)
  • $objName set key ?key ...? value -> (nothing)
  • $objName set-json ?key ...? value -> (nothing)
  • $objName stringify -> (JSON string)
  • $objName parse value -> (nothing)

Note that get returns objects to Tcl as the string "[object Object]" or similar. Use stringify to get their JSON representation instead.



Duktape 2.5 is copyright (c) 2013-2019 by Duktape authors and is distributed under the MIT license. See external/LICENSE.txt.

You can’t perform that action at this time.