2018-05-18 12:25:59 -04:00
# deno
2018-08-27 10:35:32 -04:00
| **Linux & Mac** | **Windows** |
2018-08-02 23:39:58 -04:00
|:---------------:|:-----------:|
| [![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) |
2018-08-02 13:27:57 -04:00
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-09-22 08:43:44 -04:00
* Supports TypeScript 3.0 out of the box. Uses V8 7.0. That is, it's
2018-05-30 11:11:15 -04:00
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.
2018-08-02 21:00:13 -04:00
Access between V8 (unprivileged) and Rust (privileged) is only done via
2018-05-31 14:31:37 -04:00
serialized messages defined in this
2018-08-02 19:13:02 -04:00
[flatbuffer ](https://github.com/denoland/deno/blob/master/src/msg.fbs ). 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:
```
2018-08-02 13:27:57 -04: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-28 23:52:22 -04:00
```
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.
2018-08-31 20:55:04 -04:00
## Install
2018-09-22 08:43:44 -04:00
**With Python:**
2018-08-31 20:55:04 -04:00
```
2018-09-05 23:45:55 -04:00
curl -sSf https://raw.githubusercontent.com/denoland/deno_install/master/install.py | python
2018-08-31 20:55:04 -04:00
```
2018-09-22 08:43:44 -04:00
**With PowerShell:**
```powershell
iex (iwr https://raw.githubusercontent.com/denoland/deno_install/master/install.ps1)
```
_Note: Depending on your security settings, you may have to run `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser` first to allow downloaded scripts to be executed._
Try it:
```
> deno http://deno.land/thumb.ts
```
See also [deno_install ](https://github.com/denoland/deno_install ).
2018-05-29 03:20:04 -04:00
## Status
2018-08-02 13:27:57 -04:00
Under development.
2018-05-28 23:52:22 -04:00
2018-08-23 11:34:09 -04:00
We make binary releases [here ](https://github.com/denoland/deno/releases ).
2018-05-28 23:52:22 -04:00
2018-08-23 11:34:09 -04:00
Progress towards future releases is tracked
[here ](https://github.com/denoland/deno/milestones ).
2018-08-02 13:27:57 -04:00
2018-08-02 19:13:02 -04:00
Roadmap is [here ](https://github.com/denoland/deno/blob/master/Roadmap.md ).
2018-08-02 13:27:57 -04:00
Also see [this presentation ](http://tinyclouds.org/jsconf2018.pdf ).
2018-06-04 03:10:54 -04:00
2018-09-26 20:41:23 -04:00
[Benchmarks ](https://denoland.github.io/deno/ )
2018-08-02 23:39:58 -04:00
[Chat room ](https://gitter.im/denolife/Lobby ).
2018-06-04 03:10:54 -04:00
2018-07-13 03:24:07 -04:00
## Build instructions
2018-06-22 19:19:58 -04:00
2018-08-29 03:03:56 -04:00
To ensure reproducible builds, Deno has most of its dependencies in a git
2018-08-19 15:25:09 -04:00
submodule. However, you need to install separately:
2018-05-28 23:52:22 -04:00
2018-08-19 15:25:09 -04:00
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 ).
2018-09-27 17:42:14 -04:00
4. [ccache ](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/ccache ) (Optional but helpful for speeding up rebuilds of V8.).
5. Extra steps for Windows users:
1. Add `python.exe` to `PATH` . E.g. `set PATH=%PATH%;C:\Python27\python.exe`
2. Get [VS Community 2017 ](https://www.visualstudio.com/downloads/ ), make sure to select the option to install C++ tools and the Windows SDK
3. Enable `Debugging Tools for Windows` , Goto Control Panel -> Windows 10 SDK -> Right-Click -> Change -> Change -> Check Debugging Tools for Windows -> Change -> Finish
2018-06-08 04:38:47 -04:00
2018-09-27 17:42:14 -04:00
#### To build:
2018-05-31 00:07:02 -04:00
2018-07-13 03:24:07 -04:00
# Fetch deps.
2018-08-02 19:13:02 -04:00
git clone --recurse-submodules https://github.com/denoland/deno.git
2018-07-13 03:24:07 -04:00
cd deno
2018-07-26 20:15:55 -04:00
./tools/setup.py
2018-05-31 14:31:37 -04:00
2018-07-26 20:15:55 -04:00
# Build.
2018-07-24 13:42:23 -04:00
./tools/build.py
2018-09-04 18:57:17 -04:00
# Run.
2018-07-24 13:42:23 -04:00
./out/debug/deno tests/002_hello.ts
2018-05-28 23:52:22 -04:00
2018-09-04 18:57:17 -04:00
# Test.
./tools/test.py
# Format code.
./tools/format.py
2018-06-22 08:23:42 -04:00
Other useful commands:
2018-05-28 23:52:22 -04:00
2018-07-24 13:42:23 -04:00
# Call ninja manually.
2018-08-17 18:23:14 -04:00
./third_party/depot_tools/ninja -C out/debug
2018-07-24 13:42:23 -04:00
# Build a release binary.
2018-07-26 20:15:55 -04:00
DENO_BUILD_MODE=release ./tools/build.py :deno
2018-07-24 13:42:23 -04: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 03:24:07 -04:00
./third_party/depot_tools/gn help
2018-07-06 05:49:32 -04:00
2018-07-26 20:15:55 -04:00
Env vars: `DENO_BUILD_MODE` , `DENO_BUILD_PATH` , `DENO_BUILD_ARGS` .
2018-09-09 11:24:11 -04:00
## Contributing
1. Fork [this repository ](https://github.com/denoland/deno ) and create your branch from `master` .
2. Make your change.
3. Ensure `./tools/test.py` passes.
4. Format your code with `./tools/format.py` .
5. Make sure `./tools/lint.py` passes.
6. Send a pull request.
7. Sign the [CLA ](https://cla-assistant.io/denoland/deno ), if you haven't already.