zxel
is an interactive terminal shell for JavaScript runtimes with syntax highlight and zx
utilities.
Prerequisites: Node (version 18 or above)
npx zxel
Alternatively, with Bun.
bunx zxel
- Read-eval-print-loop of JavaScript expression
- Syntax highlight using
emphasize
- Keyboard shortcuts similar to
readline
- Top-level
await
- Globals from
zx
- Runs with Bun or Deno if installed
Assign variables on this
to make it available for subsequent lines of code.
this.a = 123
Then it can be used as a global variable.
a + 456
Using let
or const
to define a variable doesn't work currently, because every line is evaluated in its own function scope. This might change in the future if the input code is parsed and processed.
Global utilities like fs
and glob
are also defined on this
. For example, to see a list:
Object.keys(this).sort()
Utilities from zx
are defined as global variables.
$
- Run shell command with return valueconst text = await $`cat readme.md` const files = (await $`ls -1`).split('\n')
$see
- Run shell command with console outputawait $see`ls -1`
cd
- Change directoryfetch
- Fetchfs
- File system utilities fromfs-extra
glob
- Pattern match files usingglobby
for (const file of await glob('*.txt')) { console.log(file) }
globDir
- Pattern match directoriesos
- OS info fromos
path
- Path utilities frompath
Also globals from Node; or globals from Bun with Database
and db
, a database instance at ~/.zxel/db.sqlite
.
Modules can be dynamically imported with await import()
.
Shortcut | Action |
---|---|
Enter |
Run code |
Escape |
Cancel |
→ |
Forward one character |
Ctrl +→ |
Forward one word |
← |
Backward one character |
Ctrl +← |
Backward one word |
Home , Ctrl +A |
Beginning of line |
End , Ctrl +E |
End of line |
↓ |
Next line in history |
↑ |
Previous line in history |
Ctrl +C |
Exit shell |
Backspace |
Delete previous character |
Delete |
Delete next character |
Ctrl +L |
Clear screen |
- Multiline mode