summaryrefslogtreecommitdiff
path: root/README.md
blob: b65e141fa580548269be29354e36db2de0fecc85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# deno

[![Build Status](https://travis-ci.com/ry/deno.svg?branch=master)](https://travis-ci.com/ry/deno)

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/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](https://github.com/ry/deno/blob/master/msg.proto), 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](https://github.com/ry/deno/blob/master/deno.d.ts).

And examples are around here: [testdata/004_set_timeout.ts](https://github.com/ry/deno/blob/master/testdata/004_set_timeout.ts).

Roadmap is [here](https://github.com/ry/deno/blob/master/TODO.txt).

Also see this preentation 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](https://golang.org/) with `$GOPATH` defined and
`$GOPATH/bin` in your `$PATH`.  You will also need
[yarn](https://yarnpkg.com/lang/en/docs/install/) installed.

You need Protobuf 3. On Linux this might work:

``` bash
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](https://brew.sh/):

``` bash
brew install protobuf
```

Then you need [protoc-gen-go](https://github.com/golang/protobuf/tree/master/protoc-gen-go) and [go-bindata](https://github.com/jteeuwen/go-bindata):

``` bash
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](https://github.com/ry/v8worker2).  __The package will not build with `go
get` and will log out an error ⚠__
```bash
# 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:

``` bash
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.

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

Now you can build deno and run it:

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

make # Wait for redacted

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

## make commands

``` bash
make deno # Builds the deno executable.

make test # Runs the tests.

make fmt # Formats the code.

make clean # Cleans the build.
```