I’ve used ssh2-sftp-client to implement terminal-side upload/download. Because it supports streams, I implemented chunked uploads/downloads with progress bars. But networks are unreliable and transfers can be interrupted, so resumable transfer is needed. Looking into the implementation, I found that ssh2-sftp-client can support resuming.
Mar 21, 2025
What browser fingerprints are, FingerprintJS v3 vs. v4 licensing, expected accuracy, and basic usage.
Oct 22, 2024
While implementing “click to download selected filename” in a WebShell based on xterm.js, I ran into a challenge: how to determine the directory of the selected filename. After some research, here’s the solution.
Sep 19, 2024
This post explores whether an SSH2-based web terminal can specify a startup file when opening an interactive session, outlines possible approaches, and notes their trade-offs.
Jun 29, 2024
This post explains SSH exec errors when connecting to OpenCloudOS, including analysis and fixes.
Jun 12, 2024
Shows how to detect the machine’s CPU architecture in shell scripts so you can download the correct Code Server package.
Jun 11, 2024
Explore SSE in AI chat apps: advantages over WebSocket, implementation with EventSource and Fetch APIs. Learn efficient real-time communication for AI chats.
Apr 13, 2024
How to use attachCustomKeyEventHandler in xterm.js to intercept keys for special handling, with source notes and use cases.
Apr 13, 2024
Optimizing FileReader for 1-3 GB files: chunking, streams, workers, and avoiding main-thread jank.
Mar 31, 2024
How to write a welcome message in an xterm.js terminal: server and client setup for a better connection experience.
Mar 29, 2024
Explains the $TERM environment variable, common values, and how it affects terminal capabilities.
Feb 25, 2024
A practical overview of the ssh2 package for Node.js, including common usage patterns (Client, shell/exec, HTTP agent, SFTP, Server), channel concepts, and references.
Jan 14, 2024
What xterm-headless is and how to use it to implement terminal functionality on Node.js, with use cases and notes.
Dec 25, 2023
For WebShell-like command inputs, fake partial highlighting by layering a positioned div behind the input; CSS alone can’t color only the suffix.
Nov 25, 2023
A summary of copy/paste support in WebShell, covering browser clipboard permissions, default hotkeys, xterm.js behavior, and fallback approaches.
Nov 23, 2023
Design and implementation of a command palette in WebShell, including motivation, command modeling, filtering, multi-level actions, and related research.
Nov 18, 2023
How to display images in a terminal via WebShell using xterm.js, including prerequisites, setup, and caveats.
Nov 5, 2023
How to implement visual file management in WebShell using ssh2 and ssh2-sftp-client, including listing, upload/download, permissions, ownership changes, creation, deletion, and kubectl-based fallbacks.
Sep 24, 2023
How WebShell integrates AI features: prompt engineering, context handling, token cost control, streaming advantages, and future fine-tuning plans.
Sep 16, 2023
This post explains the time-style parameter in Linux ls, including format output, compatibility, and workarounds.
Sep 5, 2023
This article introduces how to use the xterm-addon-web-links plugin to implement link recognition and click functionality in xterm.js terminals, including keeping focus on the original tab, using Command key instead of Control key on Mac, and hover tooltips implementation details to improve link interaction experience in xterm.js terminals.
Jul 6, 2023
How WebShell implements an editor proxy, including research, architecture, and key implementation points for integrating code-server via SSH and HTTP proxying.
Apr 5, 2023
A quick survey of frontend image compression: MIME checks, resize/quality tradeoffs, formats, Compressor.js, and graceful fallbacks.
Apr 5, 2023
How WebShell implements customizable terminal background images using xterm.js with a transparent terminal layer and a styled sibling element.
Mar 6, 2023
How we turned our WebShell into an installable PWA so users get a desktop shortcut.
Feb 27, 2023