Labnote Assistant (LabnoteV)v0.54.4 · 한국어 → README.ko.md A VS Code extension that helps you write experiment notes in Markdown. It opens
Quick StartIf you are new to LabnoteV, follow these steps:
FeaturesSection Editor (default editor)When you open a Lab Note mode (
|
| Scenario | Input | Result |
|---|---|---|
| Reference an existing sample | @dna: → pick existing |
DNA-123\|SampleA |
| Define a new sample | @dna: → Generate new ID |
@dna:DNA-xxx\|alias:description |
| TreeView reference | double-click a sample (or use [Insert to Editor]) |
DNA-123\|SampleA |
Sample storage
- On save, sample information is automatically written to
resources/labsamples/{TYPE}.json. - Even when an experiment folder is opened as the workspace root (where the local and global
labsamplespaths coincide), consecutive saves no longer wipe the local JSON. - Supported formats:
@type;ID;alias;description,ID;alias;description,ID;alias,ID: description(and the legacy|/:separators). - Aliases may contain spaces or special characters (e.g.
Reagent-1|UltraPure™ DNase/RNase-Free Water:description). - Reference DB:
{TYPE}_{name}.jsonfiles provide read-only product catalogs.- Examples:
reagent_buffer.json,labware_plate.json.
- Examples:
Sample TreeView (Activity Bar)
- Tree view: a sample panel with the flask icon is shown in the VS Code Activity Bar.
- Local / Global split: samples in the experiment folder and the workspace root are shown separately.
- Local samples are loaded from
resources/labsamples/inside the experiment folder of the currently active.labnote.md. - Switching to a
.labnote.mdfrom a different experiment automatically swaps in that experiment's local samples (in both the text editor and the Section Editor). - Custom sample types (via the
labnotev.customSampleTypessetting) appear in the tree alongside built-ins; the tree refreshes automatically when the setting changes.
- Local samples are loaded from
- Hierarchy:
Samples (Local)/Samples (Global): root nodes.DNA [3],RNA [1], etc.: per-type nodes (built-in + custom).DNA-123 | SampleA: individual sample.
- Context menu:
- Double-click a sample (or click the inline
[Insert to Editor]icon): insertID;aliasinto the active Section Editor textarea (reference). If the file is open as a plain markdown text editor instead, a nudge points you toLabnote: Search Sample— use that command (or the search icon in the tree view title bar) to insert at the cursor in text mode. - Right-click → Move to Definition: scroll the active Section Editor webview to the sample's
@type;ID...definition inside the current document. The command stays inside the Section Editor and does not open the markdown text editor. - Right-click a type → Add Sample: add a new sample.
- Right-click a sample → Edit Sample: rename/redescribe.
- Move to Global / Move to Local: move the sample's scope.
- Double-click a sample (or click the inline
- Drag-and-drop: dragging a sample node into any editor inserts
@type;ID;alias;description. Multi-select inserts multiple lines. - Reordering: dropping a sample on another sample within the same type (e.g. DNA) reorders them and persists to the JSON file. Dropping on the type node moves to the end. Multi-select preserves relative order. Drops across types or scopes are ignored — use the "Move to Global/Local" commands instead.
- Per-type icon color: the type node icon uses the same palette as body highlighting, making types easy to distinguish at a glance.
- Empty state: when a type has no samples, a "No samples" row is shown (Local hints at the right-click "Create Sample" action; Global explains that saving an
@type;iddefinition anywhere registers the sample automatically). - Sample search: the search icon in the tree view title bar, or run
Labnote: Search Samplefrom the Command Palette. The QuickPick searches every Local + Global sample by ID, alias, and description.- The selected sample is inserted at the cursor in both the Section Editor and the plain markdown text editor, so this is the recommended path for inserting samples while editing the raw
.labnote.mdas text. (The tree view inlineInsert to Editoraction stays Section Editor-only by design.)
- The selected sample is inserted at the cursor in both the Section Editor and the plain markdown text editor, so this is the recommended path for inserting samples while editing the raw
Workflow TreeView (Activity Bar)
- Workflow tree view: shown alongside Lab Samples in the Activity Bar, displays the workflow catalog.
- Hierarchy:
Workflows [50]: root.Design [13]: design workflows (WD prefix).Build [17]: build workflows (WB prefix).Test [19]: test workflows (WT prefix).Learn [10]: learn workflows (WL prefix).General [1]: general workflows (WG prefix) — Blank Workflow and other DBTL-independent workflows.
HW Unit Operations: hardware unit operations (UHW prefix).SW Unit Operations: software unit operations (USW prefix).
- Workflow commands:
[Create]button: create the workflow file fromREADME.labnote.md.- Right-click → Edit, Delete: edit/remove the JSON entry.
- Right-click a category → Add Workflow: add a new workflow.
- Unit operation commands:
[Insert]button: insert the unit operation template into the currently open workflow.- Right-click → Edit, Delete: edit/remove the JSON entry.
- Right-click the root → Add Unit Operation: add a new unit operation.
- Search: the search icon in the tree view title bar searches workflows and unit operations.
- Auto resource copy: on first run, the extension's JSON files are copied to the workspace so users can freely edit them.
Image handling
- Image paste in the Section Editor: every textarea accepts clipboard images via
Ctrl+V.- Images are saved into
images/and a Markdown image link () is inserted. - A thumbnail appears below the textarea automatically.
- Clicking the thumbnail opens a zoomable modal.
- Images are saved into
- Attachment-style images: image references inserted as
[filename](https://github.com/sblabkribb/labnotev/blob/HEAD/images/…)/[filename](https://github.com/sblabkribb/labnotev/blob/HEAD/resources/…)are also rendered as thumbnails and previewable in the modal (deduplicated against any matching). - Image preview panel: clicking an image link opens a dedicated preview panel.
- Zoom controls (+, -, Reset).
- Keyboard shortcuts: Esc (close), +/- (zoom), 0 (reset).
Experiment folder structure
- Create a new experiment:
Labnote: Create New Labnote Folderprompts for title and author. - Location:
labnote/{number}_{title}/. - Auto numbering:
001,002, ... - Auto-generated entries:
README.labnote.md: the main experiment overview (opens in the Section Editor).images/: image folder.resources/: samples/workflows data folder.
- Workflow filename format:
{number}_{workflowID}_{name}.labnote.md(e.g.001_WD010_General_Design_of_Experiment.labnote.md). - Rename Workflow: the
Labnote: Rename Workflowcommand (v0.52+) renames a workflow across five places at once — file name, front mattertitle, body H1 heading, and the matching checklist label/link inREADME.labnote.md.
Date management
- Section Editor: edit Front Matter's Created Date, Last Updated, and End Date via calendar + time input.
- Click the time input to clear it; typing digits auto-formats to HH:MM (auto-confirmed at 4 digits).
- The "Now" (clock icon) button immediately sets the current date+time.
- Text editor: keyboard shortcuts to insert/update dates.
Ctrl+Shift+D/Cmd+Shift+D: insert date/time.Ctrl+Shift+U/Cmd+Shift+U: update date fields.
MongoDB integration (optional, disabled by default)
Equip and Labware samples can be loaded from the SBLIMS MongoDB. Since v0.48.0, this is off by default — you must enable it explicitly before any connection is attempted.
Configuration
- Open VS Code settings (
Ctrl+,). - Search for "Lab Note Editor".
- Configure:
Enable Mongo: enable SBLIMS MongoDB integration (default:false).Mongo Url: MongoDB connection URL.Mongo Db Name: database name (default: SBLIMS).
Connection URL format
mongodb://username:password@host:port/?authMechanism=SCRAM-SHA-256&authSource=SBLIMS
Lazy loading and opt-in behavior
- When
labnotev.enableMongoisfalse, the extension does not load the MongoDB driver at all, and Equip/Labware autocomplete/pickers source data only from local/global JSON. This eliminates the 5–10 second blocking caused by unreachable servers. - When
labnotev.enableMongoistrue, the MongoDB connection is established lazily — not at activation time, but on the first call to an Equip/Labware-related feature (autocomplete, sample tree Equip type, Labware product picker, etc.) — and only once. - Changing any of
labnotev.enableMongo/labnotev.mongoUrl/labnotev.mongoDbNametriggers an automatic reload without restarting VS Code. To retry immediately, runLabnote: Reload Remote Data (MongoDB)from the command palette. The sample tree's Equip/Labware list is refreshed automatically when the reload finishes.
Localization
- The extension's UI strings and command labels are English by default. When VS Code's display language is set to Korean (
ko), command palette entries (%key%references) and runtime messages (vscode.l10n.t()) are automatically rendered in Korean. - Translation sources:
package.nls.json/package.nls.ko.json: translations for declarative strings inpackage.json(e.g. command titles).l10n/bundle.l10n.ko.json: translations for runtime messages and prompts.
- User-written note content is never auto-translated. Korean text, folder names, aliases, and descriptions are preserved exactly.
- Newly created body content is always English-fixed: when creating new workflows/unit operations, the body strings written to disk (section placeholders, the "Unit operations are appended here automatically" hint, etc.) are stored in English regardless of the active locale. This guarantees file compatibility across users with different display languages.
- To switch VS Code's display language: command palette →
Configure Display Language→ pick a language → restart.
Installation
Install from GitHub Releases
- Download the latest
.vsixfrom the Releases page. - In VS Code, run
Ctrl+Shift+P→Extensions: Install from VSIX... - Select the downloaded
.vsix. - After installation, restart VS Code, open your workspace, press
F1, and run any command starting withLabnote.
Commands
| Command | Description |
|---|---|
Labnote: Create New Labnote Folder |
Create a new experiment folder structure |
Labnote: Create Workflow |
Create a workflow file from the README |
Labnote: Rename Workflow |
Rename a workflow across all 5 places (file name, front matter, body header, README checklist label/link) at once |
Labnote: Insert Unit Operation |
Insert a unit operation template into a workflow |
Labnote: Search Sample |
Search and insert samples |
Labnote: Search Workflow |
Search workflows and unit operations |
Labnote: Insert Current Date |
Insert the current date (text editor) |
Labnote: Insert Current Date and Time |
Insert the current date and time (text editor) |
Labnote: Manage Templates |
Edit workflow/unit operation JSON catalogs |
Labnote: Reload Remote Data (MongoDB) |
Manually reload the MongoDB Equip/Labware cache |
Labnote: Open with Section Editor |
Open the current Markdown file in the Section Editor |
Labnote: Open as Markdown Editor |
Open the current file in the text editor |
Labnote: Open Preview |
Open the Markdown preview for the current file |
Troubleshooting
When the Section Editor does not open
If a .labnote.md file opens in the regular text editor instead of the Section Editor, configure the default editor as follows.
Option 1: "Open With" menu
- Right-click a
.labnote.mdfile → "Open With..." - Choose "Lab Note Section Editor".
- Click "Configure default editor for '*.labnote.md'" to make it the default.
Option 2: edit settings.json directly
Add the following to VS Code's settings.json:
{
"workbench.editorAssociations": {
"*.labnote.md": "labnotev.sectionEditor"
}
}
Option 3: use the editor title bar button
When a .labnote.md is opened in the text editor or the preview, the editor title bar shows a flask icon that switches to the Section Editor. While in the Section Editor, the Markdown editor and preview icons let you switch back.
Normally, installing the extension automatically registers the Section Editor as the default. The settings above may be required when other Markdown extensions conflict with it.
When @ autocomplete doesn't appear
@autocomplete only works in the text editor. In the Section Editor, use the per-section sample definition buttons.- Make sure the
.mdfile is open in the text editor (you can switch from the Section Editor via "Open in text editor"). - Autocomplete is triggered after prefixes like
@dna:,@rna:,@sample:. - If the sample tree in the Activity Bar looks stale, click the refresh icon to re-read it.
When MongoDB is not used
- Since v0.48.0, MongoDB integration is disabled by default (
labnotev.enableMongo=false), so you can use all local/global JSON-based sample management, workflows, and unit operations without any additional setup. - Only turn on
labnotev.enableMongoand configure the connection URL if you want to load external lists like Equip/Labware.
File format
- Experiment notes are saved as
.labnote.mdMarkdown files. - The Section Editor parses Markdown into structured UI and serializes edits back to Markdown when saving, preserving the original Markdown compatibility.
- Standard Markdown — image links, YAML front matter, etc. — is fully supported.
- @dna:DNA-123|SampleA:assembly template
DNA-123|SampleA
In the example above, the first line is a sample definition (starts with @) and the second is a body reference (just the ID without @).
Requirements
- VS Code: ^1.85.0
Developer notes
To run or develop from source, clone the repository and use:
npm run install:all
npm run build
npm test
npm test: host-side Vitest unit tests (src/__tests__/**).cd webview-section && npm test: webview-side Vitest component tests.npm run build: bundles the host with esbuild and the webview with Vite.- The English/Korean UI is switched automatically based on VS Code's display language. To add or modify Korean translations, edit
l10n/bundle.l10n.ko.jsonandpackage.nls.ko.jsonin the workspace root.
License
MIT License