A secure TypeScript runtime on V8
TypeScript Go JavaScript Makefile
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
cmd Support using deno as a library May 29, 2018
testdata Lint (#83) Jun 4, 2018
testing Fix testing/util_test.ts Jun 4, 2018
.gitignore Add makefile and use protobufjs May 14, 2018
.travis.yml Try to fix travis again. May 29, 2018
LICENSE Update LICENSE Jun 1, 2018
Makefile Makefile: add deno.ts (#108) Jun 4, 2018
README.md Minor tweaks to README.md (#173) Jun 8, 2018
TODO.txt Remove text-encoding.d.ts - the declarations are included in TS (#6) Jun 1, 2018
deno.d.ts Add LICENSE May 29, 2018
deno.ts Slightly better organization for deno module. May 30, 2018
deno_dir.go fix typo (#144) Jun 9, 2018
deno_dir_test.go Use check() to improve error check (#139) Jun 5, 2018
dispatch.go Use check() (#111) Jun 4, 2018
dispatch.ts Rename sendMsg to pubInternal (#136) Jun 5, 2018
echo.go Support using deno as a library May 29, 2018
fetch.go Replace -allow-connect and -allow-accept with -allow-net May 30, 2018
fetch.ts Rename sendMsg to pubInternal (#136) Jun 5, 2018
globals.ts Add `console.assert` (#102) Jun 5, 2018
integration_test.go Use check() to improve error check (#139) Jun 5, 2018
main.go Use check() to improve error check (#139) Jun 5, 2018
main.ts Use object destructing (#130) Jun 5, 2018
msg.proto fix message name May 31, 2018
os.go Simplify code. (#88) Jun 1, 2018
os.ts Rename sendMsg to pubInternal (#136) Jun 5, 2018
os_test.go Remove extension hack in ResolveModule. May 30, 2018
package.json Try to fix tslint on travis May 28, 2018
runtime.ts Remove unnecessary 'undefined' (#214) Jun 9, 2018
tests.ts Add `console.assert` (#102) Jun 5, 2018
text-encoding.d.ts Remove text-encoding.d.ts - the declarations are included in TS (#6) Jun 1, 2018
timers.go fix all duration to delay with mdn description May 31, 2018
timers.ts delete timer in the Map(timers) when call clearTimer (#215) Jun 9, 2018
tsconfig.json Remove text-encoding.d.ts - the declarations are included in TS (#6) Jun 1, 2018
tslint.json Compile cache and relative imports working. May 15, 2018
types.ts Add LICENSE May 29, 2018
url.js My copyright doesn't belong here. May 29, 2018
util.go Use wildcard to check stack trace outputs (#3) May 30, 2018
util.ts Avoid apply and move arrayToStr to util Jun 4, 2018
util_test.go Use wildcard to check stack trace outputs (#3) May 30, 2018
v8_source_maps.ts Avoid apply and move arrayToStr to util Jun 4, 2018
v8worker2.d.ts Add LICENSE May 29, 2018
yarn.lock Move text-encoding types into repo so i can hack it. May 27, 2018

README.md

deno

Build Status

A secure TypeScript runtime built on V8

  • Supports TypeScript 2.8 out of the box. Uses V8 6.8.275.3. That is, it's very modern JavaScript.

  • No package.json. No npm. Not explicitly compatible with Node.

  • Imports reference source code URLs only.

    import { test } from "https://unpkg.com/deno_testing@0.0.5/testing.ts"
    import { log } from "./util.ts"
    

    Remote code is fetched and cached on first execution, and never updated until the code is run with the --reload flag. (So, this will still work on an airplane. See ~/.deno/src for details on the cache.)

  • File system and network access can be controlled in order to run sandboxed code. Defaults to read-only file system access and no network access. Access between V8 (unprivileged) and Golang (privileged) is only done via serialized messages defined in this protobuf. This makes it easy to audit. To enable write access explicitly use --allow-write and --allow-net for network access.

  • Single executable:

     > ls -lh deno
     -rwxrwxr-x 1 ryan ryan 55M May 28 23:46 deno
     > ldd deno
     	linux-vdso.so.1 =>  (0x00007ffc6797a000)
     	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f104fa47000)
     	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f104f6c5000)
     	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f104f3bc000)
     	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f104f1a6000)
     	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f104eddc000)
     	/lib64/ld-linux-x86-64.so.2 (0x00007f104fc64000)
    
  • Always dies on uncaught errors.

  • Supports top-level await.

  • Aims to be browser compatible.

  • Can be used as a library to easily build your own JavaScript runtime. https://github.com/ry/deno/blob/master/cmd/main.go

Status

Segfaulty.

No docs yet. For some of the public API see: deno.d.ts.

And examples are around here: testdata/004_set_timeout.ts.

Roadmap is here.

Also see this presentation: http://tinyclouds.org/jsconf2018.pdf

Compile instructions

I will release binaries at some point, but for now you have to build it yourself.

You will need Go with $GOPATH defined and $GOPATH/bin in your $PATH.

You will also need yarn installed.

You need Protobuf 3. On Linux this might work:

cd ~
wget https://github.com/google/protobuf/releases/download/v3.1.0/protoc-3.1.0-linux-x86_64.zip
unzip protoc-3.1.0-linux-x86_64.zip
export PATH=$HOME/bin:$PATH

On macOS, using HomeBrew:

brew install protobuf

Then you need protoc-gen-go and go-bindata:

go get -u github.com/golang/protobuf/protoc-gen-go
go get -u github.com/jteeuwen/go-bindata/...

You need to get and build v8worker2. The package will not build with go get and will log out an error ⚠

# pkg-config --cflags v8.pc
Failed to open 'v8.pc': No such file or directory
No package 'v8.pc' found
pkg-config: exit status 1

which can be ignored. It takes about 30 minutes to build:

go get -u github.com/ry/v8worker2
cd $GOPATH/src/github.com/ry/v8worker2
./build.py --use_ccache

Maybe also run git submodule update --init in the v8worker2/ dir.

Finally, you can get deno and its other Go deps.

go get -u github.com/ry/deno/...

Now you can build deno and run it:

cd $GOPATH/src/github.com/ry/deno

make # Wait for redacted

./deno testdata/001_hello.js # Output: Hello World

make commands

make deno # Builds the deno executable.

make test # Runs the tests.

make fmt # Formats the code.

make clean # Cleans the build.