summaryrefslogtreecommitdiff
path: root/README.md
blob: 0c726bf77827bb979a3b8ec20ae1370a175b076d (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
# deno

| **Linux & Mac** | **Windows** |
|:---------------:|:-----------:|
| [![Travis](https://travis-ci.com/denoland/deno.svg?branch=master)](https://travis-ci.com/denoland/deno) | [![Appveyor](https://ci.appveyor.com/api/projects/status/yel7wtcqwoy0to8x?branch=master&svg=true)](https://ci.appveyor.com/project/deno/deno) |



## A secure TypeScript runtime built on V8

* Supports TypeScript 3.0.1 out of the box. Uses V8 6.9.297. 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 Rust (privileged) is only done via
  serialized messages defined in this
  [flatbuffer](https://github.com/denoland/deno/blob/master/src/msg.fbs). This makes it
  easy to audit.
	To enable write access explicitly use `--allow-write` and `--allow-net` for
  network access.

* Single executable:
	```
  > 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)
  >
	```

* Always dies on uncaught errors.

* Supports top-level `await`.

* Aims to be browser compatible.


## Status

Under development.

We make binary releases [here](https://github.com/denoland/deno/releases).

Progress towards future releases is tracked
[here](https://github.com/denoland/deno/milestones).

Roadmap is [here](https://github.com/denoland/deno/blob/master/Roadmap.md).
Also see [this presentation](http://tinyclouds.org/jsconf2018.pdf).

[Chat room](https://gitter.im/denolife/Lobby).


## Build instructions

To ensure reproducable builds, Deno has most of its dependencies in a git
submodule. However, you need to install separately:

1. [Rust](https://www.rust-lang.org/en-US/install.html)
2. [Node](http://nodejs.org/)
3. Python 2. [Not 3](https://github.com/denoland/deno/issues/464#issuecomment-411795578).
4. [ccache](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/ccache) (Optional but helpful for speeding up rebuilds of V8.)
.

To build:

    # Fetch deps.
    git clone --recurse-submodules https://github.com/denoland/deno.git
    cd deno
    ./tools/setup.py

    # Build.
    ./tools/build.py

    # Run
    ./out/debug/deno tests/002_hello.ts

Other useful commands:

    # Call ninja manually.
    ./third_party/depot_tools/ninja -C out/debug
    # Build a release binary.
    DENO_BUILD_MODE=release ./tools/build.py :deno
    # 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
    ./third_party/depot_tools/gn help

Env vars: `DENO_BUILD_MODE`, `DENO_BUILD_PATH`, `DENO_BUILD_ARGS`.