IRIS Table Editor
Excel-like grid editing for InterSystems IRIS database tables. Available as a VS Code extension, a standalone desktop application (Electron), and a web application (Express + WebSocket).
Features
Connection & Browsing
- Connect to InterSystems IRIS servers via the Atelier REST API (HTTP)
- Browse namespaces and tables in a schema-organized tree view
- Schema folders group related tables; standalone tables and folders are alphabetized together
- Open multiple tables simultaneously (tabs in desktop, separate panels in VS Code)
- Connection status indicator with disconnect support
Grid Display
- Excel-like data grid with sticky column headers
- Type-aware column formatting:
- Numbers: Right-aligned with thousands separators
- Booleans: Interactive checkboxes (checked/unchecked/null)
- Dates/Times/Timestamps: Locale-formatted display
- NULL values: Gray italic placeholder
- Adjustable column width via toolbar slider
- Alternating row colors and hover highlighting
- Theme support (dark, light, and high contrast)
Inline Cell Editing
- Double-click or press Enter/F2 to edit any cell
- Type-specific editors:
- Date columns: Text input with calendar popup (supports YYYY-MM-DD, MM/DD/YYYY, natural language)
- Time columns: Validates HH:MM:SS, 12-hour and 24-hour formats
- Timestamp columns: Combined date-time input with ISO 8601 support
- Numeric columns: Validates integers and decimals per column type
- Boolean columns: Click to toggle; right-click to set NULL
- Auto-save on blur or Enter with optimistic UI feedback
- Ctrl+Z to undo, Escape to cancel, Ctrl+Shift+N to set NULL
- Visual save confirmation (success flash) and error indicators (red border + toast)
Row Operations
- Insert: Ctrl+N adds a new row with yellow highlight; edit fields and Ctrl+S to save
- Duplicate: Ctrl+D copies current row (excluding auto-generated primary key)
- Delete: Ctrl+- with confirmation dialog showing the row’s primary key value
Column Filtering
- Filter row below headers with per-column text input
- Wildcard support:
* (any characters) and ? (single character)
- Case-insensitive matching with AND logic across columns
- Filter panel showing active filters with remove buttons
- Ctrl+F to focus filter, Ctrl+Shift+F to clear all filters
- Auto-refresh after cell save to reflect filter changes
Column Sorting
- Click column header to cycle: none, ascending, descending
- Sort indicator arrows in header
- Combined with filtering (filter first, then sort)
Pagination
- Configurable page size (default 50 rows)
- First/Previous/Next/Last navigation buttons
- Direct page input field for jumping to specific pages
- Row count display with thousands separators
- Keyboard shortcuts: Ctrl+PageDown/PageUp
- Ctrl+G to go to a specific row number
CSV & Excel Export
- Export dropdown with three options per format:
- Current page: Export visible rows
- All data: Export entire table across all pages
- Filtered data: Export only rows matching active filters
- CSV format (RFC 4180 compliant, UTF-8)
- Excel format (.xlsx with formatted headers and borders)
- Progress bar with cancel button for large exports
CSV & Excel Import
- Import from CSV or Excel (.xlsx) files
- Column mapping UI: map CSV/Excel columns to table columns
- Auto-mapping by matching column names (excludes read-only columns)
- Identity and computed columns detected and marked as read-only
- Data preview showing first 5 rows
- Optional pre-import validation with error report
- Import valid rows only (skip invalid) or cancel on errors
- Progress bar with cancel button for large imports
Keyboard Shortcuts
Press ? or F1 to view the full shortcuts help dialog.
Note: On Mac, use Cmd instead of Ctrl for all shortcuts below.
| Category |
Shortcut |
Action |
| Navigation |
Arrow keys |
Move to adjacent cell |
|
Tab / Shift+Tab |
Next / previous cell |
|
Home / End |
First / last cell in row |
|
Ctrl+Home / Ctrl+End |
First / last cell in grid |
|
Page Up / Page Down |
Scroll one page |
| Editing |
Enter / F2 |
Enter edit mode |
|
Escape |
Cancel edit |
|
Shift+Enter |
Save and move up |
|
Ctrl+Enter |
Save and stay |
|
Ctrl+Z |
Undo edit |
|
Delete |
Clear cell |
|
Backspace |
Clear and edit |
|
Ctrl+Shift+N |
Set cell to NULL |
| Row Ops |
Ctrl+N |
New row |
|
Ctrl+D |
Duplicate row |
|
Ctrl+- |
Delete row |
|
Ctrl+S |
Save new row |
| Data |
Ctrl+R / F5 |
Refresh data |
|
Ctrl+G |
Go to row |
|
Ctrl+F |
Focus column filter |
|
Ctrl+Shift+F |
Clear all filters |
|
Ctrl+E |
Toggle export menu |
| Pagination |
Ctrl+Page Down |
Next page |
|
Ctrl+Page Up |
Previous page |
Accessibility
- Full keyboard navigation (no mouse required)
- ARIA roles and attributes (grid, row, gridcell, dialog, checkbox)
- Screen reader announcements for selections, edits, saves, and errors
- Focus trap in dialogs with focus restoration on close
- High contrast theme support (Windows forced-colors mode)
Installation
Web Application
A browser-based version that runs as a standalone web server — no VS Code or Electron required. Connect to any IRIS instance from any device with a web browser.
- Clone and build:
git clone https://github.com/jbrandtmse/iris-table-editor.git
cd iris-table-editor
npm install
npm run compile
- Start the server:
# Development mode (auto-reload on changes)
npm run start:web
Production mode
NODE_ENV=production SESSION_SECRET=your-secret-key npm run start --workspace=packages/web
- Open http://localhost:3000 in your browser
- Enter your IRIS server host, port, namespace, and credentials to connect
Environment variables:
| Variable |
Default |
Description |
PORT |
3000 |
Server listening port |
SESSION_SECRET |
random |
Secret for session cookies (required in production) |
SESSION_TIMEOUT |
1800 |
Session expiry in seconds (30 min) |
ALLOWED_ORIGINS |
— |
CORS origins, comma-separated |
TLS_CERT / TLS_KEY |
— |
Paths to TLS certificate and key for HTTPS |
FORCE_HTTPS |
false |
Redirect HTTP to HTTPS |
TRUST_PROXY |
auto |
Trust X-Forwarded-* headers (auto-enabled in production) |
Docker:
# Basic
docker compose -f packages/web/docker-compose.yml up --build
With TLS
docker compose -f packages/web/docker-compose.yml -f packages/web/docker-compose.tls.yml up --build
Requirements: Node.js 20+ (or Docker). Connects to InterSystems IRIS 2021.1+ via the Atelier REST API.
Desktop Application (Windows)
For users who don’t use VS Code — a standalone application with the same feature set.
- Download IRIS Table Editor Setup 0.2.0.exe from the latest release
- Run the installer — no admin rights required (per-user install)
- Launch IRIS Table Editor from the Start Menu
- Click + or File → New Connection to add an IRIS server
Note: The installer is not code-signed. Windows SmartScreen may show a warning on first launch — click “More info” → “Run anyway” to proceed.
Requirements: Windows 10 or later. Connects to InterSystems IRIS 2021.1+ via the Atelier REST API.
VS Code Extension
- Download iris-table-editor-0.2.0.vsix from the latest release
- In VS Code, open the Command Palette (
Ctrl+Shift+P / Cmd+Shift+P) and run Extensions: Install from VSIX…
- Select the downloaded
.vsix file
- Reload VS Code when prompted
Alternatively, install from the command line:
code --install-extension iris-table-editor-0.2.0.vsix
Requirements:
Development
Prerequisites
- Node.js 20 or higher
- VS Code 1.85.0 or higher (for extension development)
Setup
git clone https://github.com/jbrandtmse/iris-table-editor.git
cd iris-table-editor
npm install
Project Structure
This is an npm workspaces monorepo:
packages/
├── core/ # Shared services, models, and utilities (TypeScript)
├── webview/ # Shared grid UI: HTML, CSS, and vanilla JS
├── vscode/ # VS Code extension wrapper
├── desktop/ # Electron desktop application
└── web/ # Express + WebSocket web application server
Build Commands
# Build all packages (type-check + esbuild)
npm run compile
Run linter across all packages
npm run lint
Run tests (VS Code extension + desktop + web)
npm run test
Watch mode for VS Code extension development
npm run watch
VS Code Extension Development
- Open this repository in VS Code
- Run
npm run watch in a terminal
- Press F5 to launch the Extension Development Host
- The IRIS Table Editor icon appears in the Activity Bar
Desktop App Development
# Run the desktop app in dev mode
npm run start:desktop
Build the Windows installer (.exe)
npm run dist:win --workspace=packages/desktop
Build a directory (unpacked, for testing)
npm run pack --workspace=packages/desktop
Web App Development
# Run the web server in dev mode (auto-reload via tsx watch)
npm run start:web
Run web package tests
npm run test --workspace=packages/web
Production start (compile first)
npm run compile
npm run start --workspace=packages/web
The web server runs on http://localhost:3000 by default. It serves the shared webview UI and proxies Atelier API requests to the IRIS server specified in the browser connection form.
Packaging
# VS Code extension → .vsix
cd packages/vscode && npx vsce package --no-dependencies
Desktop app → platform installer
npm run dist:desktop
Web app → Docker image
docker build -f packages/web/Dockerfile -t iris-table-editor-web .
Technical Overview
- API: Atelier REST API over HTTP — no superserver port required
- Security: Parameterized SQL queries for all database operations; Content Security Policy enforcement in webviews; channel validation allowlists for IPC; CSRF protection and rate limiting in the web server
- VS Code: Integrates with InterSystems Server Manager for connection and credential management
- Desktop: Electron with context isolation and sandbox enabled; encrypted credential storage; auto-update via GitHub Releases
- Web: Express server with WebSocket command routing; session-based auth; optional TLS; Docker-ready with health checks
- Build: TypeScript, esbuild bundling, npm workspaces monorepo
License
MIT
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.