2018-05-18 16:25:59 +00:00
|
|
|
# deno
|
|
|
|
|
2018-08-02 23:13:02 +00:00
|
|
|
Linux [![Linux](https://travis-ci.com/denoland/deno.svg?branch=master)](https://travis-ci.com/denoland/deno)
|
|
|
|
Window [![Windows](https://ci.appveyor.com/api/projects/status/cc7nd82n34xo4nym/branch/master?svg=true)](https://ci.appveyor.com/project/ry91293/deno/branch/master)
|
2018-08-02 17:27:57 +00:00
|
|
|
|
2018-05-18 16:25:59 +00:00
|
|
|
|
2018-06-08 08:38:47 +00:00
|
|
|
## A secure TypeScript runtime built on V8
|
2018-05-29 03:52:22 +00:00
|
|
|
|
2018-07-27 06:51:19 +00:00
|
|
|
* Supports TypeScript 3.0.1 out of the box. Uses V8 6.9.297. That is, it's
|
2018-05-30 15:11:15 +00:00
|
|
|
very modern JavaScript.
|
2018-05-29 03:52:22 +00:00
|
|
|
|
2018-06-08 08:38:47 +00:00
|
|
|
* No `package.json`. No npm. Not explicitly compatible with Node.
|
2018-05-29 03:52:22 +00:00
|
|
|
|
2018-05-29 05:35:06 +00:00
|
|
|
* Imports reference source code URLs only.
|
2018-05-29 03:52:22 +00:00
|
|
|
```
|
|
|
|
import { test } from "https://unpkg.com/deno_testing@0.0.5/testing.ts"
|
|
|
|
import { log } from "./util.ts"
|
|
|
|
```
|
2018-05-30 15:11:15 +00:00
|
|
|
Remote code is fetched and cached on first execution, and never updated until
|
2018-06-08 08:38:47 +00:00
|
|
|
the code is run with the `--reload` flag. (So, this will still work on an
|
2018-05-30 15:11:15 +00:00
|
|
|
airplane. See `~/.deno/src` for details on the cache.)
|
2018-05-29 03:52:22 +00:00
|
|
|
|
|
|
|
* File system and network access can be controlled in order to run sandboxed
|
2018-05-30 15:11:15 +00:00
|
|
|
code. Defaults to read-only file system access and no network access.
|
2018-08-03 01:00:13 +00:00
|
|
|
Access between V8 (unprivileged) and Rust (privileged) is only done via
|
2018-05-31 18:31:37 +00:00
|
|
|
serialized messages defined in this
|
2018-08-02 23:13:02 +00:00
|
|
|
[flatbuffer](https://github.com/denoland/deno/blob/master/src/msg.fbs). This makes it
|
2018-05-31 18:31:37 +00:00
|
|
|
easy to audit.
|
2018-05-30 15:11:15 +00:00
|
|
|
To enable write access explicitly use `--allow-write` and `--allow-net` for
|
|
|
|
network access.
|
2018-05-29 03:52:22 +00:00
|
|
|
|
|
|
|
* Single executable:
|
|
|
|
```
|
2018-08-02 17:27:57 +00:00
|
|
|
> ls -lh out/release/deno
|
|
|
|
-rwxr-xr-x 1 rld staff 48M Aug 2 13:24 out/release/deno
|
|
|
|
> otool -L out/release/deno
|
|
|
|
out/release/deno:
|
|
|
|
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)
|
|
|
|
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
|
|
|
|
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 58286.51.6)
|
|
|
|
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)
|
|
|
|
>
|
2018-05-29 03:52:22 +00:00
|
|
|
```
|
|
|
|
|
2018-05-29 09:24:56 +00:00
|
|
|
* Always dies on uncaught errors.
|
2018-05-29 07:20:04 +00:00
|
|
|
|
2018-06-08 08:38:47 +00:00
|
|
|
* Supports top-level `await`.
|
2018-05-29 07:20:04 +00:00
|
|
|
|
|
|
|
* Aims to be browser compatible.
|
|
|
|
|
|
|
|
|
|
|
|
## Status
|
|
|
|
|
2018-08-02 17:27:57 +00:00
|
|
|
Under development.
|
2018-05-29 03:52:22 +00:00
|
|
|
|
2018-08-02 17:27:57 +00:00
|
|
|
The prototype golang implementation is
|
2018-08-02 23:13:02 +00:00
|
|
|
[here](https://github.com/denoland/deno/tree/golang). We are in the process of
|
2018-08-02 17:27:57 +00:00
|
|
|
rewriting in C++/Rust to avoid future GC contention between Go and V8.
|
2018-05-29 03:52:22 +00:00
|
|
|
|
2018-08-02 17:27:57 +00:00
|
|
|
Progress towards first release is tracked
|
2018-08-02 23:13:02 +00:00
|
|
|
[here](https://github.com/denoland/deno/issues?utf8=%E2%9C%93&q=is%3Aissue+milestone%3A%22v0.1+%28first+binary+release%29%22+).
|
2018-08-02 17:27:57 +00:00
|
|
|
|
2018-08-02 23:13:02 +00:00
|
|
|
Roadmap is [here](https://github.com/denoland/deno/blob/master/Roadmap.md).
|
2018-08-02 17:27:57 +00:00
|
|
|
Also see [this presentation](http://tinyclouds.org/jsconf2018.pdf).
|
2018-06-04 07:10:54 +00:00
|
|
|
|
|
|
|
|
2018-07-13 07:24:07 +00:00
|
|
|
## Build instructions
|
2018-06-22 23:19:58 +00:00
|
|
|
|
2018-07-13 07:24:07 +00:00
|
|
|
To ensure reproducable builds, Deno has most of its dependencies in a git
|
|
|
|
submodule. However, you need
|
|
|
|
[rustc](https://www.rust-lang.org/en-US/install.html) installed separately.
|
2018-05-29 03:52:22 +00:00
|
|
|
|
2018-07-13 07:24:07 +00:00
|
|
|
You probably want
|
|
|
|
[ccache](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/ccache)
|
|
|
|
installed too.
|
2018-06-08 08:38:47 +00:00
|
|
|
|
2018-07-13 07:24:07 +00:00
|
|
|
To build:
|
2018-05-31 04:07:02 +00:00
|
|
|
|
2018-07-13 07:24:07 +00:00
|
|
|
# Fetch deps.
|
2018-08-02 23:13:02 +00:00
|
|
|
git clone --recurse-submodules https://github.com/denoland/deno.git
|
2018-07-13 07:24:07 +00:00
|
|
|
cd deno
|
2018-07-27 00:15:55 +00:00
|
|
|
./tools/setup.py
|
2018-05-31 18:31:37 +00:00
|
|
|
|
2018-07-27 00:15:55 +00:00
|
|
|
# Build.
|
2018-07-24 17:42:23 +00:00
|
|
|
./tools/build.py
|
|
|
|
|
|
|
|
# Run
|
|
|
|
./out/debug/deno tests/002_hello.ts
|
2018-05-29 03:52:22 +00:00
|
|
|
|
2018-06-22 12:23:42 +00:00
|
|
|
Other useful commands:
|
2018-05-29 03:52:22 +00:00
|
|
|
|
2018-07-24 17:42:23 +00:00
|
|
|
# Call ninja manually.
|
|
|
|
./third_party/depot_tools/ninja -C out/debug :all
|
|
|
|
# Build a release binary.
|
2018-07-27 00:15:55 +00:00
|
|
|
DENO_BUILD_MODE=release ./tools/build.py :deno
|
2018-07-24 17:42:23 +00:00
|
|
|
# List executable targets.
|
|
|
|
./third_party/depot_tools/gn ls out/debug //:* --as=output --type=executable
|
|
|
|
# List build configuation.
|
|
|
|
./third_party/depot_tools/gn args out/debug/ --list
|
|
|
|
# Edit build configuration.
|
|
|
|
./third_party/depot_tools/gn args out/debug/
|
|
|
|
# Describe a target.
|
|
|
|
./third_party/depot_tools/gn desc out/debug/ :deno
|
2018-07-13 07:24:07 +00:00
|
|
|
./third_party/depot_tools/gn help
|
2018-07-06 09:49:32 +00:00
|
|
|
|
2018-07-27 00:15:55 +00:00
|
|
|
Env vars: `DENO_BUILD_MODE`, `DENO_BUILD_PATH`, `DENO_BUILD_ARGS`.
|