↖️ Show all posts

Building a Simple interactive CLI Counter with Deno v2 and Ink

Deno v2 has been released! 🎉

The promo video is a must-watch: “Deno - Programming should be simple” on Youtube

No wonder, I immediately wanted to try out Deno’s new support for npm packages. I decided to create a simple counter component using Ink, a React-like library for building CLI apps.

Here’s the code (main.jsx):

// main.jsx
import React, {useState, useEffect} from 'npm:react';
import {render, Text} from 'npm:ink';

const Counter = () => {
	const [counter, setCounter] = useState(0);

	useEffect(() => {
		const timer = setInterval(() => {
			setCounter(previousCounter => previousCounter + 1);
		}, 100);

		return () => {
			clearInterval(timer);
		};
	}, []);

	return <Text color="green">{counter} tests passed</Text>;
};

render(<Counter />);

Run the code using deno@v2.x (Ctrl+C to stop it 😅):

# Run the code (the first time to check permissions)
$ deno run main.jsx

# if you're fine with the permissions needed, run it again and again
$ deno run --allow-read --allow-env --allow-run main.jsx

# or compile it even 🤷‍♂️
# deno packs its runtime and the dependencies into a single executable
$ deno compile --allow-read --allow-env --allow-run main.jsx

Super sweet! 🍬🦕


⬅️ Read previous Read next ➡️