2018-05-18 12:25:59 -04:00
# deno
2018-05-29 14:02:43 -04:00
[![Build Status ](https://travis-ci.com/ry/deno.svg?branch=master )](https://travis-ci.com/ry/deno)
2018-05-18 12:25:59 -04:00
2018-06-08 04:38:47 -04:00
## A secure TypeScript runtime built on V8
2018-05-28 23:52:22 -04:00
2018-05-30 11:11:15 -04:00
* Supports TypeScript 2.8 out of the box. Uses V8 6.8.275.3. That is, it's
very modern JavaScript.
2018-05-28 23:52:22 -04:00
2018-06-08 04:38:47 -04:00
* No `package.json` . No npm. Not explicitly compatible with Node.
2018-05-28 23:52:22 -04:00
2018-05-29 01:35:06 -04:00
* Imports reference source code URLs only.
2018-05-28 23:52:22 -04:00
```
import { test } from "https://unpkg.com/deno_testing@0.0.5/testing.ts"
import { log } from "./util.ts"
```
2018-05-30 11:11:15 -04:00
Remote code is fetched and cached on first execution, and never updated until
2018-06-08 04:38:47 -04:00
the code is run with the `--reload` flag. (So, this will still work on an
2018-05-30 11:11:15 -04:00
airplane. See `~/.deno/src` for details on the cache.)
2018-05-28 23:52:22 -04:00
* File system and network access can be controlled in order to run sandboxed
2018-05-30 11:11:15 -04:00
code. Defaults to read-only file system access and no network access.
Access between V8 (unprivileged) and Golang (privileged) is only done via
2018-05-31 14:31:37 -04:00
serialized messages defined in this
2018-06-22 19:19:58 -04:00
[protobuf ](https://github.com/ry/deno/blob/master/src/msg.proto ). This makes it
2018-05-31 14:31:37 -04:00
easy to audit.
2018-05-30 11:11:15 -04:00
To enable write access explicitly use `--allow-write` and `--allow-net` for
network access.
2018-05-28 23:52:22 -04:00
* 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)
```
2018-05-29 05:24:56 -04:00
* Always dies on uncaught errors.
2018-05-29 03:20:04 -04:00
2018-06-08 04:38:47 -04:00
* Supports top-level `await` .
2018-05-29 03:20:04 -04:00
* Aims to be browser compatible.
## Status
2018-06-22 19:19:58 -04:00
Segfaulty. Check back soon.
2018-05-28 23:52:22 -04:00
2018-06-15 07:33:23 -04:00
Roadmap is [here ](https://github.com/ry/deno/blob/master/Roadmap.md ).
2018-05-28 23:52:22 -04:00
2018-06-08 04:38:47 -04:00
Also see this presentation: http://tinyclouds.org/jsconf2018.pdf
2018-06-04 03:10:54 -04:00
2018-06-11 14:28:33 -04:00
### Github Noise
I am excited about all the interest in this project. However, do understand that this
is very much a non-functional prototype. There's a huge amount of heavy lifting to do.
Unless you are participating in that, please maintain radio silence on github. This
includes submitting trivial PRs (like improving README build instructions).
2018-06-04 03:10:54 -04:00
2018-05-28 23:52:22 -04:00
## Compile instructions
2018-06-22 19:19:58 -04:00
Get [Depot Tools ](http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up ) and make sure it's in your path.
You need [yarn ](https://yarnpkg.com/lang/en/docs/install/ ) installed.
Go to `src/` folder:
``` bash
cd src/
```
Fetch packages and v8:
``` bash
gclient sync --no-history
```
2018-05-28 23:52:22 -04:00
2018-06-22 19:19:58 -04:00
Install the javascript deps.
2018-06-08 04:38:47 -04:00
2018-06-22 08:23:42 -04:00
cd js; yarn install
2018-05-31 00:07:02 -04:00
2018-06-22 08:23:42 -04:00
gn gen out/Debug --args='cc_wrapper="ccache" is_debug=true '
2018-05-31 14:31:37 -04:00
2018-06-22 19:19:58 -04:00
Then build with ninja (will take a while to complete):
2018-05-31 00:07:02 -04:00
2018-06-22 08:23:42 -04:00
ninja -C out/Debug/ deno
2018-05-28 23:52:22 -04:00
2018-06-22 08:23:42 -04:00
Other useful commands:
2018-05-28 23:52:22 -04:00
2018-06-22 08:23:42 -04:00
gn args out/Debug/ --list # List build args
gn args out/Debug/ # Modify args in $EDITOR
gn desc out/Debug/ :deno