zxel is an interactive terminal shell for JavaScript runtimes with syntax highlight and zx utilities.
Prerequisites: Node (version 18 or above)
npx zxelAlternatively, 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 = 123Then it can be used as a global variable.
a + 456Using 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-extraglob- Pattern match files usingglobbyfor (const file of await glob('*.txt')) { console.log(file) }
globDir- Pattern match directoriesos- OS info fromospath- 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
