{"id":49844808,"url":"https://github.com/mrhunsaker/3dmake_vscode_extension","last_synced_at":"2026-05-14T09:09:17.014Z","repository":{"id":355094909,"uuid":"1226617075","full_name":"mrhunsaker/3dmake_vscode_extension","owner":"mrhunsaker","description":"VS Code Extension for Running 3dMake","archived":false,"fork":false,"pushed_at":"2026-05-01T20:16:14.000Z","size":186,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-01T21:36:01.389Z","etag":null,"topics":["3d-printing","3dmake","openscad","screenreader"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrhunsaker.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"mrhunsaker"}},"created_at":"2026-05-01T16:17:03.000Z","updated_at":"2026-05-01T20:16:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mrhunsaker/3dmake_vscode_extension","commit_stats":null,"previous_names":["mrhunsaker/3dmake_vscode_extension"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/mrhunsaker/3dmake_vscode_extension","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrhunsaker%2F3dmake_vscode_extension","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrhunsaker%2F3dmake_vscode_extension/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrhunsaker%2F3dmake_vscode_extension/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrhunsaker%2F3dmake_vscode_extension/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrhunsaker","download_url":"https://codeload.github.com/mrhunsaker/3dmake_vscode_extension/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrhunsaker%2F3dmake_vscode_extension/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33017774,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-printing","3dmake","openscad","screenreader"],"created_at":"2026-05-14T09:09:16.129Z","updated_at":"2026-05-14T09:09:17.007Z","avatar_url":"https://github.com/mrhunsaker.png","language":"TypeScript","funding_links":["https://github.com/sponsors/mrhunsaker"],"categories":[],"sub_categories":[],"readme":"# 3DMake GUI — VS Code Extension\n\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE)\n[![VS Code Engine](https://img.shields.io/badge/VS%20Code-%5E1.85-blue)](https://code.visualstudio.com)\n\nAn accessibility-first Visual Studio Code extension that wraps the [`3dm` / tdeck CLI tool](https://github.com/mrhunsaker/3dmakeGUI) and exposes its full workflow through VS Code's native UI: tree views, the Command Palette, the Output Channel, keyboard shortcuts, and rich screen reader support.\n\n---\n\n## Contents\n\n- [What This Extension Does](#what-this-extension-does)\n- [Screenshots / Panel Overview](#screenshots--panel-overview)\n- [Prerequisites](#prerequisites)\n- [Installation from VSIX](#installation-from-vsix)\n- [Building the VSIX Yourself](#building-the-vsix-yourself)\n- [Configuration](#configuration)\n- [Activity Bar Panel](#activity-bar-panel)\n  - [Project View](#project-view)\n  - [Command Options View](#command-options-view)\n  - [Quick Actions View](#quick-actions-view)\n  - [Settings \u0026 Tools View](#settings--tools-view)\n- [Commands Reference](#commands-reference)\n- [Keyboard Shortcuts](#keyboard-shortcuts)\n- [Context Menu Entries](#context-menu-entries)\n- [STL Viewer](#stl-viewer)\n- [SVG Preview Viewer](#svg-preview-viewer)\n- [OpenSCAD Syntax Highlighting](#openscad-syntax-highlighting)\n- [Accessibility Design](#accessibility-design)\n- [Troubleshooting](#troubleshooting)\n- [How to Contribute](#how-to-contribute)\n- [Project Docs Map](#project-docs-map)\n- [Code of Conduct](#code-of-conduct)\n- [Security](#security)\n- [Releasing](#releasing)\n- [License](#license)\n\n---\n\n## What This Extension Does\n\n`3dm` (tdeck) is a command-line pipeline tool for OpenSCAD-based 3D printing workflows. It handles building STL files from `.scad` sources, auto-orienting them for print beds, slicing with configurable profiles, exporting silhouette previews, and managing libraries and overlays.\n\nThis extension wraps every `3dm` subcommand in VS Code's native UI so you never need to type in a terminal. It is designed from the ground up for **blind and low-vision users** using screen readers (NVDA, JAWS, Narrator, VoiceOver) while remaining fully usable by sighted users.\n\nKey design decisions:\n\n| Goal                   | How it is achieved                                                                                                                                                                                                              |\n| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Screen reader friendly | Every tree item, button, and status bar item carries an `accessibilityInformation` label. The Output Channel is an `aria-live` region natively in VS Code. Completion toasts are shown for users not watching the Output panel. |\n| Keyboard-only usable   | All commands have keyboard shortcuts. Tree views are fully keyboard-navigable. The STL viewer supports arrow-key orbit and zoom. The SVG viewer supports keyboard zoom.                                                         |\n| No terminal required   | Commands are spawned from Node.js `child_process`; stdout/stderr stream live to the Output Channel.                                                                                                                             |\n| Portable               | Works on Linux, macOS, and Windows. Binary path is configurable.                                                                                                                                                                |\n\n---\n\n## Screenshots / Panel Overview\n\n```text\n┌─────────────────────────────────────────────────────────┐\n│  Activity Bar                                           │\n│  ┌──────────────────────────────────────────────────┐   │\n│  │ 3DMake                                           │   │\n│  │  PROJECT                                         │   │\n│  │    my-part/                                      │   │\n│  │      my-part.scad                                │   │\n│  │      3dmake.toml                                 │   │\n│  │      my-part.stl                                 │   │\n│  │  COMMAND OPTIONS                                 │   │\n│  │    Model (-m)       -m cap                       │   │\n│  │    View (-v)        -v 3sil                      │   │\n│  │    Profile (-p)     (default)                    │   │\n│  │    Overlay (-o)     (default)                    │   │\n│  │  QUICK ACTIONS                                   │   │\n│  │    Build STL                                     │   │\n│  │    Slice                                         │   │\n│  │    Preview (SVG)                                 │   │\n│  │    Full Pipeline                                 │   │\n│  │    ...                                           │   │\n│  │  SETTINGS \u0026 TOOLS                                │   │\n│  │    Set 3dm Binary Path                           │   │\n│  │    Open Global Config                            │   │\n│  │    ...                                           │   │\n│  └──────────────────────────────────────────────────┘   │\n└─────────────────────────────────────────────────────────┘\n```\n\n---\n\n## Prerequisites\n\n### Runtime requirements\n\n| Requirement                   | Notes                                                                                                                                                                 |\n| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Visual Studio Code** ≥ 1.85 | [Download](https://code.visualstudio.com/)                                                                                                                            |\n| **`3dm` binary**              | Install via your system package manager or download from the tdeck/3dmake project releases. Must be on your `PATH` or configured via the `3dmake.binaryPath` setting. |\n\n### Build requirements (only if building from source)\n\n| Requirement      | Version                                   |\n| ---------------- | ----------------------------------------- |\n| **Node.js**      | ≥ 18 LTS                                  |\n| **npm**          | ≥ 9 (bundled with Node 18+)               |\n| **TypeScript**   | installed automatically via `npm install` |\n| **@vscode/vsce** | installed automatically via `npm install` |\n\n---\n\n## Installation from VSIX\n\nIf you have received a pre-built `.vsix` file:\n\n### Method 1 — VS Code GUI\n\n1. Open VS Code.\n2. Open the Extensions view: `Ctrl+Shift+X` (Windows/Linux) or `Cmd+Shift+X` (macOS).\n3. Click the **`···`** (More Actions) button at the top-right of the Extensions panel.\n4. Select **Install from VSIX…**\n5. Navigate to and select `vscode-3dmake-gui-2026.4.29.vsix`.\n6. Click **Install**.\n7. Reload VS Code when prompted.\n\n### Method 2 — Command Palette\n\n1. Press `Ctrl+Shift+P` / `Cmd+Shift+P` to open the Command Palette.\n2. Type `Extensions: Install from VSIX` and press `Enter`.\n3. Navigate to the `.vsix` file and confirm.\n\n### Method 3 — Terminal\n\n```bash\ncode --install-extension vscode-3dmake-gui-2026.4.29.vsix\n```\n\n---\n\n## Building the VSIX Yourself\n\nFollow these steps exactly to produce a `.vsix` file from the source tree.\n\n### Step 1 — Clone or download the source\n\n```bash\ngit clone https://github.com/mrhunsaker/3dmakeGUI.git\ncd 3dmakeGUI/vscode-extension\n# — or, if you received a zip —\nunzip vscode-3dmake-gui-src.zip\ncd vscode-3dmake-gui\n```\n\n### Step 2 — Install Node.js dependencies\n\n```bash\nnpm install\n```\n\nThis installs TypeScript, the VS Code type definitions, ESLint, and `@vscode/vsce` (the extension packaging tool) into `node_modules/`. Nothing is installed globally.\n\n\u003e **Proxy / offline environments:** If you are behind a corporate proxy, set `npm config set proxy http://proxy.example.com:8080` before running `npm install`.\n\n### Step 3 — Compile TypeScript\n\n```bash\nnpm run compile\n```\n\nThis invokes `tsc` using `tsconfig.json` and writes compiled JavaScript to `dist/`. Check the terminal for any TypeScript errors — they must be resolved before packaging.\n\nTo watch for changes during development:\n\n```bash\nnpm run watch\n```\n\n### Step 4 — (Optional) Lint\n\n```bash\nnpm run lint\n```\n\n### Step 5 — Package the VSIX\n\n```bash\nnpm run package\n```\n\nUnder the hood this runs:\n\n```bash\nnpx vsce package\n```\n\n`vsce` reads `package.json`, bundles everything not excluded by `.vscodeignore`, and writes a file named:\n\n```plaintext\nvscode-3dmake-gui-\u003cversion\u003e.vsix\n```\n\nin the project root. For version `2026.4.29` the output file is:\n\n```plaintest\nvscode-3dmake-gui-2026.4.29.vsix\n```\n\n\u003e **Common packaging errors:**\n\u003e\n\u003e - `Missing publisher name`: Ensure `\"publisher\"` in `package.json` is an identifier (for example `mrhunsaker`), not a human-friendly display name.\n\u003e - `icon not found`: Place a 128x128 PNG at `resources/icon.png` (see note below).\n\u003e - `README.md not found`: The README must exist at the project root, which it does in this repo.\n\u003e - `TypeScript errors`: Run `npm run compile` first and fix all errors.\n\n### Note on the icon\n\n`package.json` references `resources/icon.png`. This must be a **128×128 PNG**. For a quick placeholder during development:\n\n```bash\n# Requires ImageMagick\nconvert -size 128x128 xc:#0e639c -fill white \\\n  -font DejaVu-Sans-Bold -pointsize 28 \\\n  -gravity center -annotate 0 \"3DM\" \\\n  resources/icon.png\n```\n\nOr copy any 128×128 PNG to `resources/icon.png`.\n\n### Full build script (copy-pasteable)\n\n```bash\n# 1. Enter the extension directory\ncd vscode-3dmake-gui\n\n# 2. Install deps\nnpm install\n\n# 3. Compile\nnpm run compile\n\n# 4. Package\nnpm run package\n\n# 5. Install into VS Code\ncode --install-extension vscode-3dmake-gui-*.vsix\n```\n\n---\n\n## Configuration\n\nOpen VS Code Settings (`Ctrl+,`) and search for **3dmake** to see all options.\n\n| Setting                            | Type    | Default  | Description                                                                                                                          |\n| ---------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |\n| `3dmake.binaryPath`                | string  | `\"\"`     | Full path to the `3dm` binary. Leave empty to auto-detect from `PATH` or the `THREE_DM_PATH` / `THREEDM_PATH` environment variables. |\n| `3dmake.defaultModel`              | string  | `\"\"`     | Default value for the `-m` (model) flag.                                                                                             |\n| `3dmake.defaultView`               | string  | `\"3sil\"` | Default silhouette view for the `-v` flag. One of: `3sil`, `frontsil`, `backsil`, `leftsil`, `rightsil`, `topsil`.                   |\n| `3dmake.defaultProfile`            | string  | `\"\"`     | Default slicer profile for the `-p` flag.                                                                                            |\n| `3dmake.showOutputOnRun`           | boolean | `true`   | Automatically reveal the Output Channel when a command starts.                                                                       |\n| `3dmake.announceCommandCompletion` | boolean | `true`   | Show a notification toast when a command succeeds or fails. Especially useful for screen reader users.                               |\n\nSettings can also be changed via the **Settings \u0026 Tools** panel → **VS Code Settings** item.\n\n---\n\n## Activity Bar Panel\n\nClick the **3DMake icon** in the VS Code Activity Bar (left edge) to open the panel. The panel contains four collapsible tree views.\n\n### Project View\n\nShows the currently selected project (a `.scad` file or a directory containing one) and its associated files:\n\n- `.scad` source files — click to open in the editor\n- `3dmake.toml` project config — click to open in the editor\n- `.stl` output files — click to open in the **STL Viewer**\n- `.gcode` output files\n- `.svg` preview files\n\nUse the **Refresh** button (↺ icon in the view title bar) to re-scan the directory.\n\nTo select a project, click **Select Project** in the Quick Actions view, or press `Ctrl+Alt+O`.\n\n### Command Options View\n\nFour editable items map to `3dm` CLI flags:\n\n| Item         | Flag         | Effect                                           |\n| ------------ | ------------ | ------------------------------------------------ |\n| Model (-m)   | `-m \u003cvalue\u003e` | Selects the target model within the `.scad` file |\n| View (-v)    | `-v \u003cvalue\u003e` | Sets the silhouette view                         |\n| Profile (-p) | `-p \u003cvalue\u003e` | Sets the slicer profile                          |\n| Overlay (-o) | `-o \u003cvalue\u003e` | Applies a named overlay                          |\n\nClick (or press `Enter` on) any item to open an **InputBox** and set the value. These override the corresponding VS Code settings for the current session. Leave a value empty to fall back to the VS Code setting default.\n\n### Quick Actions View\n\nOne-click access to the most common commands. Each item shows its keyboard shortcut in the tooltip. See [Commands Reference](#commands-reference) for the full list.\n\n### Settings \u0026 Tools View\n\nQuick links to configuration commands and environment management (Setup, List Profiles, List Overlays, List Libraries, Install Libraries, Version, Self-Update, Help, and VS Code Settings).\n\n---\n\n## Commands Reference\n\nAll commands are available in the **Command Palette** (`Ctrl+Shift+P`) under the `3DMake:` prefix.\n\n| Command                                          | Description                                                |\n| ------------------------------------------------ | ---------------------------------------------------------- |\n| `3DMake: Select Project File or Directory`       | Opens a file picker to choose the active project           |\n| `3DMake: Build STL`                              | Runs `3dm build` and opens the generated `.stl` in viewer  |\n| `3DMake: Slice`                                  | Runs `3dm slice` and opens generated `.gcode` in editor    |\n| `3DMake: Orient`                                 | Runs `3dm orient` (auto-orient for print bed)              |\n| `3DMake: Preview (SVG)`                          | Runs `3dm preview` and generates an SVG silhouette         |\n| `3DMake: Build + Slice`                          | Runs `3dm build --slice` and opens generated `.stl`        |\n| `3DMake: Full Pipeline (Build + Orient + Slice)` | Runs `3dm build --orient --slice` and opens `.stl`         |\n| `3DMake: Describe (Info)`                        | Runs `3dm info` to print model metadata                    |\n| `3DMake: Print`                                  | Runs `3dm print` to send G-code to the printer             |\n| `3DMake: Open/Edit Source`                       | Opens the project `src/*.scad` source file in the editor   |\n| `3DMake: Export Images`                          | Runs `3dm images` and reveals export folder when detected  |\n| `3DMake: New Project`                            | Prompts for a name and runs `3dm new \u003cname\u003e`               |\n| `3DMake: Run Setup`                              | Runs `3dm setup` and opens `defaults.toml` when available  |\n| `3DMake: List Libraries`                         | Runs `3dm libraries --list`                                |\n| `3DMake: Install Libraries`                      | Runs `3dm libraries --install`                             |\n| `3DMake: List Profiles`                          | Runs `3dm profiles`                                        |\n| `3DMake: List Overlays`                          | Runs `3dm overlays`                                        |\n| `3DMake: Show Version`                           | Runs `3dm version`                                         |\n| `3DMake: Self-Update`                            | Runs `3dm self-update`                                     |\n| `3DMake: Show Help`                              | Runs `3dm help`                                            |\n| `3DMake: Run Custom Command`                     | Prompts for arbitrary arguments and runs `3dm \u003cargs\u003e`      |\n| `3DMake: View STL in 3D Viewer`                  | Opens the active or selected `.stl` in the built-in viewer |\n| `3DMake: View Last SVG Preview`                  | Opens the most recently generated SVG in the preview panel |\n| `3DMake: Set 3dm Binary Path`                    | Edits the `3dmake.binaryPath` setting inline               |\n| `3DMake: Open Global Config (defaults.toml)`     | Opens `~/.config/3dmake/defaults.toml` in the editor       |\n| `3DMake: Open Project Config (3dmake.toml)`      | Opens `3dmake.toml` from the project directory             |\n| `3DMake: Refresh Project View`                   | Re-scans the project directory                             |\n\n---\n\n## Keyboard Shortcuts\n\n| Shortcut                   | Command            | Active when            |\n| -------------------------- | ------------------ | ---------------------- |\n| `Ctrl+Alt+B` / `Cmd+Alt+B` | Build STL          | Active file is `.scad` |\n| `Ctrl+Alt+E` / `Cmd+Alt+E` | Open/Edit Source   | Active file is `.scad` |\n| `Ctrl+Alt+P` / `Cmd+Alt+P` | Preview (SVG)      | Active file is `.scad` |\n| `Ctrl+Alt+O` / `Cmd+Alt+O` | Select Project     | Always                 |\n| `Ctrl+Alt+V` / `Cmd+Alt+V` | View STL           | Active file is `.stl`  |\n| `Ctrl+Alt+X` / `Cmd+Alt+X` | Run Custom Command | Always                 |\n\nAll shortcuts can be re-bound via **File → Preferences → Keyboard Shortcuts** and searching for `3DMake`.\n\n### STL Viewer keyboard controls\n\n| Key                  | Action                   |\n| -------------------- | ------------------------ |\n| `Arrow Left / Right` | Orbit horizontally       |\n| `Arrow Up / Down`    | Orbit vertically         |\n| `+` / `=`            | Zoom in                  |\n| `-`                  | Zoom out                 |\n| `R`                  | Reset camera             |\n| `T`                  | Top-down view            |\n| `F`                  | Front view               |\n| `I`                  | Isometric view           |\n| `W`                  | Toggle wireframe overlay |\n\n### SVG Preview keyboard controls\n\n| Key           | Action             |\n| ------------- | ------------------ |\n| `+` / `=`     | Zoom in            |\n| `-`           | Zoom out           |\n| `0`           | Reset zoom to 100% |\n| `Ctrl+Scroll` | Mouse-wheel zoom   |\n\n---\n\n## Context Menu Entries\n\nRight-click context menus are added to:\n\n| Location       | File type     | Items added                                |\n| -------------- | ------------- | ------------------------------------------ |\n| Explorer panel | `.scad`       | Build STL, Open/Edit Source, Preview (SVG) |\n| Editor         | `.scad`       | Build STL, Open/Edit Source, Preview (SVG) |\n| Explorer panel | `.stl`        | View in 3D Viewer                          |\n| Explorer panel | `3dmake.toml` | Open Project Config                        |\n\n---\n\n## STL Viewer\n\nThe built-in STL viewer opens as a **split panel** alongside the editor (`ViewColumn.Beside`) so your source file remains visible.\n\nFeatures:\n\n- **Binary STL parsing** — no native add-ons required; runs entirely in the WebviewPanel sandbox\n- **Phong shading** with ambient, directional, and back lights\n- **Wireframe overlay** toggle (`W` key)\n- **Orbit** via mouse drag or arrow keys\n- **Pan** via `Shift`+drag\n- **Zoom** via scroll wheel, `+`/`−` keys\n- **Preset views**: Top, Front, Isometric, Reset\n- **Model information panel**: triangle count, bounding-box dimensions in mm\n- **aria-live region** announcing camera changes and model load events to screen readers\n\nThe viewer re-uses the same panel instance if you open another STL, avoiding panel proliferation.\n\n---\n\n## SVG Preview Viewer\n\nOpens the most recently generated SVG silhouette preview (detected from `3dm preview` output) in a split panel.\n\nFeatures:\n\n- **Inline SVG rendering** — no external image viewer needed\n- **Keyboard zoom** and Ctrl+scroll zoom\n- **Automatic `\u003ctitle\u003e` injection** if the SVG lacks one, for screen reader compatibility\n- **`aria-live` zoom level announcements**\n\n---\n\n## OpenSCAD Syntax Highlighting\n\nInstalling this extension also registers a language definition for `.scad` files (if no other OpenSCAD extension is already installed). The grammar covers:\n\n- Line and block comments\n- String literals with escape sequences\n- Control keywords (`module`, `function`, `if`, `else`, `for`, `let`, `each`, `include`, `use`, `assert`, `echo`)\n- Built-in transform and shape functions (`cube`, `sphere`, `translate`, `rotate`, `union`, `difference`, etc.)\n- Language constants (`true`, `false`, `undef`, `PI`)\n- Numeric literals (including scientific notation)\n- Operators\n\n\u003e **Tip:** For a more complete OpenSCAD language experience (hover docs, snippets, formatter) pair this extension with a dedicated OpenSCAD extension from the marketplace.\n\n---\n\n## Accessibility Design\n\nThis extension was built to be fully usable with screen readers and keyboard-only navigation. The following mechanisms are used:\n\nKeyboard shortcuts intentionally avoid VS Code's built-in accessibility-critical bindings (such as Command Palette and Build Task defaults) so global screen reader workflows remain intact.\n\n### VS Code Output Channel\n\nAll `3dm` subprocess output streams live into a named Output Channel (`3DMake`). VS Code's Output Channel is an `aria-live` polite region — screen readers announce new lines as they arrive without interrupting the current reading focus.\n\n### Notification Toasts\n\nWhen `3dmake.announceCommandCompletion` is enabled (default: on), a VS Code information or error notification is shown at command completion. These are announced immediately by screen readers as alert dialogs.\n\n### TreeItem `accessibilityInformation`\n\nEvery `vscode.TreeItem` in all four panel views carries an `accessibilityInformation` object with:\n\n- `label`: a human-readable description of the item's purpose and current state\n- `role`: `\"treeitem\"` for data items, `\"button\"` for action items, `\"note\"` for informational placeholders\n\n### StatusBarItem `accessibilityInformation`\n\nThe status bar item includes a label describing the current project name and run state (idle, running, success, error).\n\n### WebviewPanel accessibility\n\nThe STL viewer and SVG preview are custom HTML panels. They implement:\n\n- `role=\"img\"` on the canvas with a dynamic `aria-label` describing the loaded model\n- An off-screen `role=\"status\" aria-live=\"polite\"` region that announces camera changes, zoom levels, and model load events\n- A visible skip link (`#skip-link`) to bypass the canvas for keyboard users\n- Toolbar buttons with explicit `title` attributes and keyboard equivalents documented on-screen\n- High-contrast-aware CSS using VS Code theme custom properties\n\n### Input accessibility\n\nAll user input goes through VS Code's native `showInputBox` and `showOpenDialog` APIs, which are fully accessible to screen readers.\n\n---\n\n## Troubleshooting\n\n### `3dm binary not found`\n\nThe extension cannot locate the `3dm` binary.\n\n1. Confirm `3dm` is installed: open a terminal and run `3dm version`.\n2. If it works in a terminal but not in the extension, the VS Code process may not inherit your shell `PATH`. Set the full path: Command Palette → `3DMake: Set 3dm Binary Path` → enter e.g. `/usr/local/bin/3dm`.\n3. Alternatively, set the environment variable `THREE_DM_PATH=/usr/local/bin/3dm` in your shell profile and restart VS Code.\n\n### Output Channel shows no output\n\nMake sure `3dmake.showOutputOnRun` is `true` (the default). If the Output panel is open but the `3DMake` channel is not selected, use the dropdown at the top-right of the Output panel to switch to it.\n\n### STL Viewer shows a blank panel\n\n- The STL file must be a **binary STL**. ASCII STL files are not currently supported by the built-in parser.\n- Check the browser console for errors: `Help → Toggle Developer Tools → Console`.\n\n### TypeScript compile errors during build\n\nRun `npm install` first to ensure all type definitions are installed. Node.js ≥ 18 is required.\n\n### `vsce` errors about missing `icon.png`\n\nCreate a placeholder icon (see [Note on the icon](#note-on-the-icon) above) or comment out the `\"icon\"` field in `package.json` temporarily.\n\n---\n\n## How to Contribute\n\nContributor onboarding docs:\n\n- [CONTRIBUTING.md](CONTRIBUTING.md) - workflow, PR expectations, and review process\n- [STYLE.md](STYLE.md) - coding and documentation style rules for this repository\n- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) - community behavior and moderation standards\n\n1. Fork the repository and create a feature branch.\n2. Make changes in `src/`.\n3. Run `npm run compile` and verify no TypeScript errors.\n4. Run `npm run lint`.\n5. Test manually using `F5` in VS Code (Run Extension launch configuration).\n6. Open a pull request describing what changed and why.\n\n---\n\n## Project Docs Map\n\nProject process and governance documentation:\n\n- [CONTRIBUTING.md](CONTRIBUTING.md)\n- [STYLE.md](STYLE.md)\n- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)\n- [SECURITY.md](SECURITY.md)\n- [RELEASING.md](RELEASING.md)\n- [.github/MAINTAINER_CHECKLIST.md](.github/MAINTAINER_CHECKLIST.md)\n- [.github/pull_request_template.md](.github/pull_request_template.md)\n- [.github/ISSUE_TEMPLATE](.github/ISSUE_TEMPLATE)\n- [.github/DISCUSSION_TEMPLATE](.github/DISCUSSION_TEMPLATE)\n\n---\n\n## Code of Conduct\n\nThis project follows the standards in [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).\n\n---\n\n## Security\n\nFor vulnerability reporting, supported versions, and response expectations, see [SECURITY.md](SECURITY.md).\n\n---\n\n## Releasing\n\nFor maintainers and release managers, use [RELEASING.md](RELEASING.md) for the pre-release checklist and publish workflow.\n\n---\n\n## License\n\nApache-2.0 — see [LICENSE](LICENSE).\n\n---\n\n_Built with accessibility as a first-class requirement, not an afterthought._\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrhunsaker%2F3dmake_vscode_extension","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrhunsaker%2F3dmake_vscode_extension","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrhunsaker%2F3dmake_vscode_extension/lists"}