O proxecto Deno está a desenvolver unha plataforma JavaScript segura similar a Node.js
Dispoñible lanzamento do proxecto Dáme 0.33, que ofrece unha plataforma similar a Node.js para a execución de aplicacións autónomas en JavaScript e TypeScript que se pode usar para executar aplicacións sen estar vinculada a un navegador, como a creación de controladores que se executan no servidor. Deno usa un motor JavaScript V8, que tamén se usa en Node.js e navegadores baseados no proxecto Chromium. Código do proxecto distribuído por baixo licenza MIT. O proxecto está a ser desenvolvido por Ryan Dahl (Ryan Dahl), creador da plataforma JavaScript Node.js.
Un dos principais obxectivos da creación dun novo tempo de execución para JavaScript é proporcionar un ambiente máis seguro. Para mellorar a seguridade, o motor V8 está escrito en Rust, o que evita moitas das vulnerabilidades que se derivan da manipulación de memoria de baixo nivel, como o acceso libre posterior, as desreferencias de punteiro nulo e os excesos de memoria intermedia. A plataforma utilízase para procesar solicitudes en modo sen bloqueo Toquio, tamén escrito en Rust. Tokio permítelle crear aplicacións de alto rendemento baseadas na arquitectura impulsada por eventos, que admite multi-threading e procesa solicitudes de rede en modo asíncrono.
Configuración predeterminada orientada á seguridade. O acceso aos ficheiros, a rede e o acceso ás variables de ambiente están desactivados por defecto e deben estar activados de forma explícita;
Soporte integrado para a linguaxe TypeScript ademais de JavaScript;
O tempo de execución vén en forma dun único ficheiro executable autónomo ("deno"). Para executar aplicacións usando Deno é suficiente descargar para a súa plataforma un ficheiro executable, duns 10 MB de tamaño, que non ten dependencias externas e non require ningunha instalación especial no sistema;
Ao iniciar o programa, así como para cargar módulos, pode usar o enderezo URL. Por exemplo, para executar o programa welcome.js, pode usar o comando "deno https://deno.land/std/examples/welcome.js". O código de recursos externos descárgase e almacena en caché no sistema local, pero nunca se actualiza automaticamente (a actualización require executar explícitamente a aplicación coa marca "--reload");
Procesamento eficiente de solicitudes de rede mediante HTTP nas aplicacións; a plataforma está deseñada para crear aplicacións de rede de alto rendemento;
A capacidade de crear aplicacións web universais que se poden executar tanto en Deno como nun navegador web normal;
Ademais do tempo de execución, a plataforma Deno tamén actúa como xestor de paquetes e permite acceder aos módulos por URL dentro do código. Por exemplo, para cargar un módulo, pode especificar no código "import * como rexistro de "https://deno.land/std/log/mod.ts". Os ficheiros descargados de servidores externos mediante o URL almacénanse na memoria caché. A vinculación ás versións do módulo determínase especificando os números de versión dentro do URL, por exemplo, "https://unpkg.com/[protexido por correo electrónico]/dist/liltest.js";
A estrutura inclúe un sistema integrado de inspección de dependencias (o comando "deno info") e unha utilidade para o formato de código (deno fmt).
Para desenvolvedores de aplicacións proposto un conxunto de módulos estándar que foron sometidos a auditorías adicionais e probas de compatibilidade;
Todos os scripts de aplicación pódense combinar nun ficheiro JavaScript.
Diferenzas con Node.js:
Deno non usa o xestor de paquetes npm
e non está ligado a repositorios, os módulos envíanse a través dunha URL ou por unha ruta de ficheiro, e os propios módulos pódense colocar en calquera sitio web;
Deno non usa "package.json" para definir módulos;
Diferenza da API, todas as accións asíncronas en Deno devolven unha promesa;
Deno require unha definición explícita de todos os permisos necesarios para os ficheiros, as variables de rede e de ambiente;
Todos os erros que non se proporcionan cos controladores levan á finalización da aplicación;
Deno usa o sistema de módulos ECMAScript e non admite require().