A secure TypeScript runtime 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/[email protected]/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
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 preentation https://tinyclouds.org/jsconf2018.pdf
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 deno # Builds the deno executable.
make test # Runs the tests.
make fmt # Formats the code.
make clean # Cleans the build.