NoteX
Interactive notebooks for SQL and PowerShell — with Git integration and structured execution logging.
NoteX is a VS Code extension built for data engineers, DBAs, and DevOps professionals who need a unified notebook environment for SQL Server and PowerShell workflows. Author runbooks, execute code against local or remote targets, log every execution, and keep scripts version-controlled — all without leaving VS Code.
Features
Notebook Builder
- Create, rename, delete, and organize notebooks in folders via the NoteX Activity Bar panel
- Move, reorganize, and re-parent notebooks and folders via the tree view context menu
- Seven cell types: Header, Rich Text, Code Block, Section, Table, Divider, and Spacer
- Section cells — collapsible grouping containers; add cells directly inside a section or drag existing cells in/out
- Table cells — editable grids with add/remove row and column controls
- Move cells up/down with per-cell ↑/↓ buttons
- Collapse/expand individual cells or use toolbar Collapse All / Expand All
- Auto-save with configurable delay
Rich Text Editing
- Rich-text Text cells with a context-sensitive formatting toolbar (appears on focus)
- Paragraph styles (Normal, Heading 1–4, Code), font size, bold, italic, underline, strikethrough
- Text and highlight color pickers, bullet/numbered lists, indent/outdent, alignment controls
Code Blocks
- Syntax-highlighted editor with line numbers for SQL and PowerShell
- Per-block name and optional inline notes (rich-text annotation panel)
- Last-execution status badge (✅/❌ with duration)
- ▶ Run to execute a single block; ⏹ Stop to cancel a running execution
- ▶ Run All across the notebook with an optional Stop on error toggle
- Live execution timer while a block is running
- Output tabs: Results, Messages, Errors, Metadata
- Export results as CSV or JSON directly from the output panel
- Target one or more named SQL connections per block (multi-connection execution)
SQL Execution
- Execute SQL against SQL Server (on-premises or Azure SQL) using named connections
- Authentication modes: Windows, SQL Server, Azure AD, and Connection String
- View tabular results, PRINT messages, errors, and row counts inline
- Passwords stored securely via VS Code SecretStorage (OS keychain — never written to disk)
- Test any connection from the Connections view or Command Palette
PowerShell Execution
- Execute PowerShell locally or via PSRemoting (WinRM)
- Remote connections with current-user (pass-through) or credential authentication
- WinRM authentication methods: Default, Negotiate, NegotiateWithImplicitCredential, Kerberos, CredSSP
- Optional custom port and SSL (HTTPS) for remote connections
- Full stdout/stderr output displayed per block
Git / File Mapping
- Map any code block to an external
.sql or .ps1 file in a Git-tracked folder
- 💾 Save to File — push cell content back to the mapped file on demand
- File change detection with configurable sync modes: Prompt, Auto-reload, Read-only, or None
- Optional auto-commit after notebook save with a customizable commit message template
Execution Logging
- Every code block execution generates a structured JSON log file
- Logs capture notebook/cell IDs, code, output, errors, duration, status, and environment metadata (hostname, VS Code version)
- Human-readable audit.log appended per execution — ideal for compliance and review
- Configurable retention by file count and age; optional exclusion of code or output from logs
- View logs via
Ctrl+Shift+P → NoteX: View Execution Logs
Getting Started
Requirements
- VS Code
^1.85.0
- For SQL execution: network access to a SQL Server instance
- For PowerShell execution:
pwsh or powershell on PATH; WinRM configured for remote targets
First Use
- Open a workspace folder in VS Code (
File → Open Folder)
- Click the NX icon in the Activity Bar
- Click + to create your first notebook
- Add cells using the toolbar: H (Header), T (Text), { } (Code Block), [ ] Section, ⊞ (Table)
- For SQL blocks: configure a connection via the Connections view → Manage SQL Connections
- Click ▶ Run on a code block to execute
Interface Overview
| Area |
Description |
| Notebooks view |
Tree view of all notebooks and folders |
| Connections view |
Named SQL Server connections with inline test/delete |
| PS Connections view |
Named PowerShell remote endpoints |
| Notebook editor |
Full-width WebView panel with cell list and toolbar |
| Output panel |
Per-block tabs: Results, Messages, Errors, Metadata |
Cell Types
| Type |
Purpose |
| Header |
Section heading (H1–H3), collapsible |
| Rich Text |
Formatted prose, lists, colors — full toolbar on focus |
| Code Block |
SQL or PowerShell with syntax highlighting and execution |
| Section |
Collapsible grouping container for other cells |
| Table |
Editable data grid with add/remove rows and columns |
| Divider |
Horizontal rule for visual separation |
| Spacer |
Vertical whitespace |
Code Block Languages
| Language |
Target |
Notes |
| SQL |
One or more named SQL connections |
Tabular results, PRINT messages, row counts; multi-target supported |
| PowerShell |
Local or named remote endpoint |
stdout/stderr, exit code, full text output |
SQL Connections
Add a connection via the Connections view → database icon, or:
Ctrl+Shift+P → NoteX: Manage SQL Connections
| Auth Mode |
Description |
| Windows |
Integrated Windows Authentication (current user) |
| SQL Server |
Username and password login |
| Azure AD |
Azure Active Directory authentication |
| Connection String |
Full ADO/JDBC-style connection string |
- Passwords stored in OS keychain via VS Code SecretStorage (never written to disk)
- Use NoteX: Test Connection to validate before executing
- SQL cells can target multiple connections simultaneously — results are returned per connection
Git / File Mapping
Map a code block to an external .sql or .ps1 file:
- Click 📎 Map File in the code block toolbar
- Select the file
- Choose a sync mode
| Sync Mode |
Behavior |
Prompt on change |
Notify on external file change; user decides |
Auto-reload |
Automatically update cell content when file changes |
Read-only |
Always read from file; in-cell editing disabled |
None |
Link stored for reference only |
- Use 💾 Save to File in the code block toolbar to push cell content back to the mapped file on demand
- Enable
notex.git.autoCommit to stage and commit mapped files automatically on notebook save
- Commit message template supports
{cellName}, {notebookTitle}, and {timestamp} placeholders
Execution Logs
Logs are stored at:
<workspace>/.notex/notebooks/<NotebookName>/logs/
block-<cellId>-<timestamp>.log.json
Each JSON log captures: notebook/cell IDs, code, output, errors, duration, status, and environment (hostname, VS Code version, NoteX version).
A human-readable audit.log is also appended per execution — useful for compliance, review, and change tracking.
View logs: Ctrl+Shift+P → NoteX: View Execution Logs
Settings
| Setting |
Default |
Description |
notex.notebooksRoot |
.notex/notebooks |
Root directory for notebook storage |
notex.defaultLanguage |
sql |
Default language for new code blocks |
notex.autoSave |
true |
Auto-save notebook on changes |
notex.autoSaveDelayMs |
1000 |
Auto-save delay (ms) |
notex.execution.confirmBeforeRun |
false |
Prompt before each execution |
notex.execution.timeoutMs |
30000 |
Execution timeout (ms) |
notex.execution.powershell.executable |
pwsh |
pwsh or powershell |
notex.sql.trustServerCertificate |
false |
Trust TLS cert on connection |
notex.sql.connectionTimeoutMs |
15000 |
SQL connection timeout (ms) |
notex.git.enableWatcher |
true |
Watch mapped files for changes |
notex.git.defaultSyncMode |
prompt |
Default file sync mode |
notex.git.autoCommit |
false |
Auto-commit on notebook save |
notex.git.commitMessageTemplate |
NoteX: Update {cellName} [{timestamp}] |
Commit message template |
notex.logging.enabled |
true |
Enable execution logging |
notex.logging.maxFilesPerBlock |
100 |
Max log files per code block |
notex.logging.maxAgeDays |
90 |
Max log age in days |
notex.logging.includeCodeInLog |
true |
Include executed code in log files |
notex.logging.includeOutputInLog |
true |
Include output in log files |
Notebooks are stored as plain JSON (.notex files) inside a named folder in your workspace. They are human-readable, diff-friendly, and safe to commit to Git.
<workspace>/
.notex/
notebooks/
My Runbook/
notebook.notex
logs/
Troubleshooting
Extension not visible in Activity Bar
- Ensure a workspace folder is open (
File → Open Folder)
- Check the
NoteX output channel for errors
SQL connection fails
- Verify server name, port 1433 is reachable, and credentials are correct
- Enable
notex.sql.trustServerCertificate: true for self-signed certs
PowerShell execution fails
- Confirm
pwsh is installed and on PATH (pwsh --version in a terminal)
- For remote targets, verify WinRM is enabled on the target machine
License
MIT
| |