Dabbling With Deno — Tales From a Web Developer Playing With a New Toy

A presentation at Node Congress in April 2025 in by Phil Hawksworth

Slide 1

Slide 1

Dabbling with Deno Tales from a web developer playing with a new toy Phil Hawksworth he/him

Slide 2

Slide 2

Phil Hawksworth he/him Head of Developer Relations, Deno

Slide 3

Slide 3

b u H t i G Link Tw i t e dI n y k S Bl ue te r @ PhilHawksworth.dev he/him Head of Developer Relations, Deno We b m o c . x r o w h aw k s

Slide 4

Slide 4

Naming things is hard. “node”

Slide 5

Slide 5

Naming things is hard. “node”.split(“”)

Slide 6

Slide 6

Naming things is hard. “node”.split(“”).sort()

Slide 7

Slide 7

Naming things is hard. “node”.split(“”).sort().join(“”)

Slide 8

Slide 8

Naming things is hard. deno

Slide 9

Slide 9

Naming things is hard. ahkorswwx

Slide 10

Slide 10

Tools and trends. Some technologies come and go

Slide 11

Slide 11

Tools and trends. Some technologies stick around

Slide 12

Slide 12

Tools and trends. Some technologies become ubiquitous

Slide 13

Slide 13

Tools and trends. JavaScript™ Frontend / Backend / Edges

Slide 14

Slide 14

Tools and trends. node

Slide 15

Slide 15

Tools and trends. JavaScript™

Slide 16

Slide 16

Tools and trends. TypeScript

Slide 17

Slide 17

Tools and trends. The pull of new interesting tools

Slide 18

Slide 18

Tools and trends. I first tried Deno by accident

Slide 19

Slide 19

Deno first contact. netlify.com

Slide 20

Slide 20

Deno first contact. export default async () =>” { return new Response(“Hello, World!”, { headers: { “content-type”: “text/html” } }); };

Slide 21

Slide 21

Deno first contact. A gateway drug took me deeper

Slide 22

Slide 22

Deno first contact. lume.land

Slide 23

Slide 23

Slide 24

Slide 24

Deno first contact. deno.com

Slide 25

Slide 25

Deno first contact. deno.com

Slide 26

Slide 26

Deno first contact. ❯ deno _

Slide 27

Slide 27

Um..what is Deno?

Slide 28

Slide 28

What is Deno? 1. Hosting platform 2. JavaScript runtime 3. TypeScript toolchain 4. Package manager 5. Task runner 6. Testing tool 7. Linter, formatter 8. Benchmarking tool 9. Compiler

Slide 29

Slide 29

What is Deno? 1. Hosting platform 2. JavaScript runtime 3. TypeScript toolchain 4. Package manager 5. Task runner 6. Testing tool 7. Linter, formatter 8. Benchmarking tool 9. Compiler

Slide 30

Slide 30

What is Deno? What got me intrigued?

Slide 31

Slide 31

What is Deno? What got me intrigued? An API design based on web standards

Slide 32

Slide 32

What is Deno? . s d r a d n a t s b we

Slide 33

Slide 33

What is Deno? Familiar APIs Heavily based on web standards there is less re-learning required docs.deno.com

Slide 34

Slide 34

What is Deno? Familiar APIs Heavily based on web standards there is less re-learning required docs.deno.com

Slide 35

Slide 35

What is Deno? Familiar APIs Heavily based on web standards there is less re-learning required docs.deno.com

Slide 36

Slide 36

What is Deno? Familiar APIs Heavily based on web standards there is less re-learning required docs.deno.com

Slide 37

Slide 37

What is Deno? Shallow on-ramp

Slide 38

Slide 38

Deno first contact. A familiar entry point for those familiar with node node main.js

Slide 39

Slide 39

Deno first contact. A familiar entry point for those familiar with node deno main.js

Slide 40

Slide 40

Deno first contact. A familiar entry point for those familiar with node deno main.ts

Slide 41

Slide 41

Deno first contact. A familiar entry point for those familiar with node npm init

Slide 42

Slide 42

Deno first contact. A familiar entry point for those familiar with node deno init

Slide 43

Slide 43

Slide 44

Slide 44

Deno for Visual Studio Code https://deno.co/vscode

Slide 45

Slide 45

Deno first contact. A familiar entry point for those familiar with node npm install

Slide 46

Slide 46

Deno first contact. main.ts import * as emoji from “node-emoji”; console.log( emoji.emojify(:sauropod: :heart: ); npm)

Slide 47

Slide 47

Deno first contact. main.ts import * as emoji from “npm:node-emoji”; console.log( emoji.emojify(:sauropod: :heart: ); npm)

Slide 48

Slide 48

Deno first contact. main.ts import * as emoji from “npm:node-emoji”; console.log( emoji.emojify(:sauropod: :heart: ); npm)

Slide 49

Slide 49

Deno first contact. deno run main.ts ! ❤ npm

Slide 50

Slide 50

Dependency management.

Slide 51

Slide 51

Dependency management. y l l a c o L Dependencies cached globally

Slide 52

Slide 52

Dependency management. deno install

Slide 53

Slide 53

Dependency management. deno add

Slide 54

Slide 54

Dependency management. deno add npm:node-emoji

Slide 55

Slide 55

Dependency management. “imports”: { “react”: “npm:react@18.2.0”, “vite”: “npm:vite@^6.2.4”, “@std/assert”: “jsr:@std/assert@1.0.12” “node-emoji”: “npm:node-emoji@^2.2.0”, } deno.json

Slide 56

Slide 56

Dependency management. main.ts import * as emoji from “npm:node-emoji”; console.log( emoji.emojify(:sauropod: :heart: ); npm)

Slide 57

Slide 57

Dependency management. main.ts import * as emoji from “node-emoji”; console.log( emoji.emojify(:sauropod: :heart: ); npm)

Slide 58

Slide 58

Dependency management. deno outdated

Slide 59

Slide 59

Slide 60

Slide 60

Dependency management. y l l a c o L Dependencies cached globally

Slide 61

Slide 61

Dependency management. https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

Slide 62

Slide 62

Dependency management. https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

Slide 63

Slide 63

Dependency management. https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

Slide 64

Slide 64

Dependency management. ❯ deno clean

Slide 65

Slide 65

Slide 66

Slide 66

Task runner.

Slide 67

Slide 67

Running tasks. npm run dev

Slide 68

Slide 68

Running tasks. deno run dev

Slide 69

Slide 69

Running tasks. deno task dev

Slide 70

Slide 70

Slide 71

Slide 71

Test runner.

Slide 72

Slide 72

Test framework. deno test

Slide 73

Slide 73

Slide 74

Slide 74

Test framework. main_test.ts main.test.ts

Slide 75

Slide 75

Test framework. Mocking Async testing Coverage A variety of test styles

Slide 76

Slide 76

Test framework. docs.deno.com/examples

Slide 77

Slide 77

Test framework. docs.deno.com/examples/testing_tutorial

Slide 78

Slide 78

Test framework. docs.deno.com/runtime/fundamentals/testing

Slide 79

Slide 79

TypeScript toolchain.

Slide 80

Slide 80

JavaScript toolchain.

Slide 81

Slide 81

Development toolchain.

Slide 82

Slide 82

Toolchain. It’s already built in

Slide 83

Slide 83

Toolchain. deno main.js

Slide 84

Slide 84

Toolchain. deno main.ts

Slide 85

Slide 85

Toolchain. deno check

Slide 86

Slide 86

Toolchain. deno types

Slide 87

Slide 87

Toolchain. deno fmt

Slide 88

Slide 88

Toolchain. deno lint

Slide 89

Slide 89

Toolchain. docs.deno.com/lint

Slide 90

Slide 90

Why I’m excited.

Slide 91

Slide 91

Reasons to be excited. Simplification and unification of tools

Slide 92

Slide 92

Reasons to be excited. Regular improvements

Slide 93

Slide 93

Reasons to be excited. I kinda sorta know most of it already

Slide 94

Slide 94

Reasons to be excited. Lower friction and fewer quirks

Slide 95

Slide 95

Reasons to be excited. Security and performance

Slide 96

Slide 96

Recommended resources. docs.deno.com/examples Deno examples and tutorials discord.gg/deno Deno Discord bsky.app/profile/deno.land Deno on Bluesky www.youtube.com/watch?v=N04Nrl37Ies Deno 2 Deep Dive | Exploring the Deno Ecosystem

Slide 97

Slide 97

Thanks. philhawksworth.dev findthat.at/hello-deno