You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Sami Vaarala 9a9f7762ce Testcase fixes for #if(n)def 8 years ago
config Config fixes for #if(n)def 8 years ago
debugger Update debugger classnames metadata 8 years ago
dist-files Add Reflect to dist README 8 years ago
doc Internal doc fixes for #if(n)def 8 years ago
dukweb Update dukweb example to reworked buffer bindings 8 years ago
examples Examples and extras fixes for #if(n)def 8 years ago
extras Examples and extras fixes for #if(n)def 8 years ago
licenses Add xoroshiro128+ and SplitMix64 licenses to dist 8 years ago
misc Tools and util fixes for #if(n)def 8 years ago
polyfills Fix isFastint() polyfill to use revised info() 8 years ago
references Add 'make refs' target to download ES specs 9 years ago
runtests Add -lpthread support for API tests§ 8 years ago
src-input Source fixes for #ifdef and #ifndef convention 8 years ago
testrunner Testrunner Duktape.info() fix 8 years ago
tests Testcase fixes for #if(n)def 8 years ago
tools Tools and util fixes for #if(n)def 8 years ago
util Add #ifdef and #ifndef checks to codepolicy 8 years ago
website Website changes for mandatory mark-and-sweep 8 years ago
.gitattributes Add .gitattributes with eol=lf for most extensions 9 years ago
.gitignore Makefile, dist, tools fixes for src/ rename 8 years ago
.travis.yml Remove packages not needed in Travis build anymore 9 years ago
AUTHORS.rst Add remko to AUTHORS.rst 8 years ago
CONTRIBUTING.md CONTRIBUTING mergeready change 9 years ago
LICENSE.txt Update copyright year range to cover 2016 9 years ago
Makefile Add #ifdef and #ifndef checks to codepolicy 8 years ago
README.md README Encoding API trivia 8 years ago
RELEASES.rst Releases: mandatory mark-and-sweep 8 years ago
appveyor.yml Makefile, dist, tools fixes for src/ rename 8 years ago

README.md

Duktape

Build Status

Introduction

Duktape is an embeddable Javascript engine, with a focus on portability and compact footprint.

Duktape is easy to integrate into a C/C++ project: add duktape.c, duktape.h, and duk_config.h to your build, and use the Duktape API to call Ecmascript functions from C code and vice versa.

Main features:

  • Embeddable, portable, compact
  • Ecmascript E5/E5.1 compliant, some features implemented from Ecmascript 2015 (E6) and Ecmascript 2016 (E7)
  • Khronos/ES6 TypedArray and Node.js Buffer bindings
  • WHATWG Encoding API living standard
  • Built-in debugger
  • Built-in regular expression engine
  • Built-in Unicode support
  • Minimal platform dependencies
  • Combined reference counting and mark-and-sweep garbage collection with finalization
  • Custom features like co-routines
  • Property virtualization using a subset of Ecmascript E6 Proxy object
  • Bytecode dump/load for caching compiled functions
  • Distributable includes an optional logging framework, CommonJS-based module loading implementations, etc
  • Liberal license

See duktape.org for packaged end-user downloads and documentation. The end user downloads are also available from the duktape-releases repo as both binaries and in unpacked form as git tags. Snapshot builds from master are available in duktape.org/snapshots.

Have fun!

Support

About this repository

This repository is intended for Duktape developers only, and contains Duktape internals: test cases, internal documentation, sources for the duktape.org web site, etc.

Getting started: end user

When embedding Duktape in your application you should use the packaged source distributables available from duktape.org/download.html. See duktape.org/guide.html#gettingstarted for the basics.

Automatically generated bleeding edge snapshots from master are available at duktape.org/snapshots.

The distributable src/ directory contains a duk_config.h configuration header and amalgamated sources for Duktape default configuration. Use python tools/configure.py to create header and sources for customized configuration options, see http://wiki.duktape.org/Configuring.html. For example, to enable fastint support (example for Linux):

$ tar xvfJ duktape-2.0.0.tar.xz
$ cd duktape-2.0.0
$ rm -rf src-custom
$ python tools/configure.py \
      --source-directory src-input \
      --output-directory src-custom \
      --config-metadata config \
      -DDUK_USE_FASTINT

# src-custom/ will now contain: duktape.c, duktape.h, duk_config.h.

You can also clone this repository, make modifications, and build a source distributable on Linux, OSX, and Windows using python util/dist.py.

Getting started: modifying and rebuilding the distributable

If you intend to change Duktape internals and want to rebuild the source distributable in Linux, OSX, or Windows:

# Linux; can often install from packages or using 'pip'
$ sudo apt-get install python python-yaml
$ python util/dist.py

# OSX
# Install Python 2.7.x
$ pip install PyYAML
$ python util/dist.py

# Windows
; Install Python 2.7.x from python.org, and add it to PATH
> pip install PyYAML
> python util\dist.py

The source distributable directory will be in dist/.

For platform specific notes see http://wiki.duktape.org/DevelopmentSetup.html.

Getting started: other development (Linux only)

Other development stuff, such as building the website and running test cases, is based on a Makefile intended for Linux only. See detailed instructions in http://wiki.duktape.org/DevelopmentSetup.html.

Branch policy

  • The master branch is used for active development. While pull requests are tested before merging, master may be broken from time to time. When development on a new major release starts, master will also get API incompatible changes without warning. For these reasons you should generally not depend on the master branch for building your project; use a release tag or a release maintenance branch instead.

  • Pull requests and their related branches are frequently rebased so you should not fork off them. Pull requests may be open for a while for testing and discussion.

  • Release tags like v1.4.1 are used for releases and match the released distributables. These are stable once the release is complete.

  • Maintenance branches are used for backporting fixes and features for maintenance releases. Documentation changes go to master for maintenance releases too. For example, v1.5-maintenance was created for the 1.5.0 release and is used for 1.5.x maintenance releases.

  • A maintenance branch is also created for a major release when master moves on to active development of the next major release. For example, v1-maintenance was created when 1.5.0 was released (last planned 1.x release) and development of 2.0.0 (with API incompatible changes) started on master. If a 1.6.0 is made, it will be made from v1-maintenance.

Versioning

Duktape uses Semantic Versioning, see Versioning.

Reporting bugs

See CONTRIBUTING.md.

Security critical Github issues (for example anything leading to a segfault) are tagged security.

Contributing

See CONTRIBUTING.md.

See AUTHORS.rst and LICENSE.txt.

Duktape Wiki is part of Duktape documentation and under the same copyright and license.