Introduction¶
When developing or using DSH daily, there is a class of unavoidable tasks: managing a batch of structured data—task lists, test cases, customer records, ledgers. The common approach is to open an Excel file to export and import back and forth, or to build a custom database with a UI; neither path is trivial. huluTable takes a third path: it is a DeepSeek Harness Web client plugin. After installation, a “Tables” entry appears at the bottom of the sidebar; clicking opens a full-viewport table workspace. All data is stored directly in the browser’s IndexedDB, requiring no database or server, and is ready to use out of the box.
The philosophy of DSH is “Everything is a plugin”; huluTable is a concrete implementation of this philosophy on the Web client side.
What is This¶
huluTable (npm package name dsh-hulutable-plugin, MIT license, maintained by huluwocom, current release version v0.1) is a DeepSeek Harness bundle: an npm package carrying a patch configuration layer (dsh.bundle.patch).
One implementation detail is worth noting: dsh-web-app comes with a built-in row for ui-hulutable pointing to a monorepo workspace package. This bundle’s cordis.patch.yml disables that built-in row and inserts an independent row (since patches cannot rename rows, the disable + insert method is used). The independent version takes effect after installation, not the one built into the monorepo.
Regarding naming: The GitHub repository is huluwocom/hulutable-dsh-plugin, written as github:huluwocom/HuluTable in the install command, and the npm package name is dsh-hulutable-plugin. This article refers to it as huluTable for consistency.
Core Features¶
Table Library & Backup¶
The table library supports lists, search, tags, and stars. You can create a new blank table or choose from 6 templates: Customer CRM, Projects, Finance ledger, Attendance, To-dos, and Inventory. Tables support renaming, copying, and deletion; deleted items go to the trash and expire after 30 days. The table library homepage provides one-click JSON backup/restore.
Grid Editing¶
- Virtual scrolling, smooth rendering of 10k+ rows of data;
- Double-click to edit cells, drag-select or Shift to extend selection;
- Copy and paste compatible with Excel TSV format;
- Drag-fill handle supports incrementing, decrementing, filling by sequence, or copying;
- Undo/Redo is delta-based, recording only changed cells and structure, independent of table size;
- Long-press drag to reorder rows/columns; rows and columns support copy, cut, paste, and right-click menus.
All changes are undoable.
Column Types, Validation & Conditional Formatting¶
- 18 column types;
- Column settings panel: required, default value, width, freeze, hide, description;
- Format validation: phone number, email, URL, number, length, regex;
- Dropdown options support background color and cascading selection (map/source modes) and click-to-select dropdowns;
- Resize columns by dragging the edge, freeze by position, and frozen columns follow after reordering;
- Conditional formatting: configure rules (equals, range, contains, etc.) for row/column ranges to color-code, managed in column settings.
Filtering, Sorting & Statistics¶
- Header filtering: text, number, multi-select dropdown, color;
- Sorting supports multi-level (Shift-combining), filters support AND/OR combinations, and can be cleared with one click;
- Bottom statistics bar: sum, average, max, min, count;
- A target progress bar can be set for each column, displayed as a chip in the header, with a separate goals panel.
Formulas¶
The fx formula bar includes 30+ built-in functions (SUM, AVERAGE, IF, CONCAT, TODAY, ROUND, etc.), supports cell and range references, automatically recalculates after modification, and only formula cells participate in the recalculation. The formula bar provides template shortcuts for quick insertion.
Views¶
The same table can be switched between four views:
- Grid: Grid editing view;
- Kanban: A Kanban board grouped by a specific dropdown column, where dragging cards advances progress (can be used as a CRM funnel);
- Calendar: A calendar showing a monthly view based on a date column, with the ability to jump to the earliest date;
- Chart: Charts, supporting bar, pie, and funnel charts.
Views support new, copy, rename, and delete operations and bind to their respective columns.
Import & Export¶
- Export to
.xlsx/.csv, optionally for the entire table or current filtered rows; - Import automatically performs header detection and type inference, previews before confirmation, and allows choosing to create a new table or append to an existing one.
Edit History & Notes¶
Each cell retains the last 5 edit histories, viewable on hover; cells can have notes (badge + modal, supporting add, edit, and delete).
Usability¶
The interface provides Chinese/English switching; empty tables have guides; headers are sticky; when scrolling horizontally, row numbers and frozen columns remain fixed.
Performance & Data¶
- Virtual scrolling only renders the visible window (overscan of ±4 rows/cols), scroll is throttled by rAF, and cells are cached using
React.memo; - IndexedDB writes are debounced (500ms, immediate write on
pagehide); it falls back to memory mode if storage is unavailable (e.g., private mode); - First load is approximately 1.6MB (includes SheetJS, ~400KB gzipped); subsequent loads use browser cache.
Installation & Enablement¶
Prerequisites: The dsh CLI must be installed, and the used profile must include @deepseek-ai/dsh-web-app (web surface).
Method 1: Local Checkout (Development or Trial)¶
dsh plugin --profile web add /path/to/HuluTable
dsh web # Open http://127.0.0.1:3080
The first command adds the local directory as a plugin to the web profile, and the second command starts the Web client.
Method 2: Install from GitHub (Source + Auto Build)¶
dsh plugin --profile web add github:huluwocom/HuluTable
The prepare script in this repository builds lib/ directly from src/ (self-contained transpilation, no type checking). pnpm ≥10 by default rejects running build scripts for git dependencies, so you need to write the package key printed by dsh into the pnpm-workspace.yaml of the corresponding profile:
allowBuilds:
dsh-hulutable-plugin: true
Then re-run add. It is recommended to fix the commit (github:you/HuluTable#<sha>) to avoid subsequent pushes silently changing the actual running code.
Method 3: Tarball (Pre-built, No Build Permissions Required)¶
dsh plugin --profile web add ./releases/dsh-hulutable-plugin-0.1.0.tgz
The releases/ directory provides pnpm pack output and corresponding SHA-256 checksums, or you can run pnpm pack yourself to generate them.
Two additional notes: after the package is published to npm, dsh plugin --profile web add dsh-hulutable-plugin will be equivalent to the three methods above; regardless of the method, after installation, start dsh web to see the “Tables” entry at the bottom of the sidebar.
Typical Usage¶
- Start
dsh web, open http://127.0.0.1:3080, and click “Tables” in the bottom of the sidebar to enter the table library; - Create a new blank table or choose one of the 6 templates (Customer CRM, Projects, Finance ledger, Attendance, To-dos, Inventory);
- Enter data by double-clicking cells in the grid, use the fill handle to copy or fill by sequence after drag-selecting an area, right-click rows/columns to access menus, and undo anytime if you make a mistake;
- Once the data is in shape, switch views: switch to Kanban to drag cards based on a dropdown column, switch to Calendar to view a monthly view based on a date column, or switch to Chart view to generate bar/pie/funnel charts;
- When interoperability with Excel is needed, export to
.xlsx/.csv(entire table or current filtered rows), or import an Excel file—the plugin will perform header detection and type inference, provide a preview, and then let you decide whether to create a new table or append; - Periodically use the one-click JSON backup/restore in the table library to preserve data.
Development & Testing¶
Daily development commands:
pnpm install # Install dependencies, prepare executes build automatically (tsdown → lib/)
pnpm run build # Build node half + browser half (lib/index.js, lib/invariant.js, lib/client.js)
pnpm run watch # Watch for changes and rebuild
pnpm run pack # Build and package tarball to releases/
Environment requirements: Node >= 22.19.0, pnpm 11.7.0 (corresponding to engines and packageManager fields in package.json).
Type checking and testing require the local SDK: the @deepseek-ai/* SDK packages have not been published to npm yet; the platform modules are provided by the web shell at runtime. Therefore, type checking and test suites need to first link a local deepseek-harness checkout:
pnpm link-sdk /path/to/deepseek-harness # Write to link: devDependencies and run pnpm install
pnpm run typecheck # tsc --noEmit
pnpm run test # vitest (jsdom)
pnpm run coverage # 100% coverage threshold
pnpm run lint # oxlint
The build itself (prepare / build) does not require the SDK: type imports are erased during transpilation, and cross-plugin value imports will be rejected by a purity gate during the build phase.
Applicable Scenarios & Precautions¶
Suitable users: People who want to manage structured data directly within the DSH Web client but do not want to deploy a database and server for a single table; scenarios requiring interoperability with Excel files are also covered.
Precautions before use:
- The plugin runs with the permissions of the current dsh process; ensure you check the source code and license before installing. huluTable uses the MIT license, and the source code is publicly available on GitHub;
- Data is stored in the browser’s IndexedDB. If storage is unavailable (e.g., private mode), it falls back to memory mode. It is recommended to perform periodic backups using one-click JSON backup/restore;
- Trash items are retained for 30 days and are cleaned up once expired;
- When installing from GitHub, it is recommended to fix the commit to avoid the remote update silently changing the running content;
- In a pnpm ≥10 environment, you must configure
allowBuildsin the corresponding profile’spnpm-workspace.yamland re-runadd(see the installation section above).
Conclusion¶
huluTable has turned “a usable online spreadsheet” into a plugin for DSH: it requires no database or server, keeps data in the browser, and completes everything from creating tables from templates, grid editing, and formulas to filtering, Kanban, Calendar, and Excel import/export entirely on the client side. If you are using the DSH Web client, the cost of installing and trying it out is low.
Repository: https://github.com/huluwocom/huluTable-dsh-plugin
Community Directory: https://www.skillhub.cn/plugins/huluwocom/huluTable-dsh-plugin (This directory is a community-maintained independent site and has no official affiliation with DeepSeek or Huluwocom).