Shared scaffolding for CHAMBER-19 desktop tools — extracted from Transmittal Builder v5.0.0.
Contains UI primitives, Tauri sidecar boilerplate, NSIS installer assets, build scripts, and CI templates consumed by Transmittal-Builder, Drawing-List-Manager, and future tools.
For the historical extraction inventory and migration plan see
docs/framework-extraction/.
Building a new tool on top of this framework? See docs/CONSUMING.md for the complete onboarding guide: npm registry auth, package access grants, file templates, CI workflow setup, local PAT configuration, and a copy-paste-ready checklist.
desktop-toolkit/
├── python/
│ ├── pyproject.toml ← Python package manifest
│ └── chamber19_desktop_toolkit/
│ ├── __init__.py
│ ├── utils/
│ │ ├── pdf_merge.py ← PDF generation + merge
│ │ └── email_sender.py ← Generic SMTP helper
│ └── pyinstaller/
│ ├── sidecar.spec.template ← PyInstaller spec template
│ └── requirements-build.txt
├── js/
│ └── packages/
│ └── desktop-toolkit/
│ ├── package.json ← npm package manifest
│ └── src/
│ ├── ipc/
│ │ └── backend.js ← Backend URL resolver
│ ├── splash/
│ │ ├── index.jsx ← Forge-branded splash screen
│ │ ├── splash.css
│ │ └── assets/ ← Forge SVG assets
│ ├── updater/
│ │ ├── index.jsx ← Force-update window
│ │ └── updater.css
│ └── utils/
│ └── version.js ← APP_VERSION constant
├── tauri-template/
│ ├── splash.html
│ ├── updater.html
│ ├── vite.config.js
│ ├── icons/
│ │ └── icon-master.svg
│ └── src-tauri-base/
│ ├── build.rs
│ ├── Cargo.toml.template ← Parameterised Cargo manifest
│ ├── tauri.conf.json.template ← Parameterised Tauri config
│ ├── capabilities/
│ │ └── default.json
│ └── src/
│ ├── main.rs
│ ├── lib.rs ← App startup sequence
│ ├── sidecar.rs ← PyInstaller sidecar spawner
│ ├── splash.rs ← Splash window management
│ └── updater.rs ← Shared-drive update check
├── installer/
│ └── nsis/
│ ├── hooks.nsh ← Genericised NSIS hooks template
│ ├── nsis-header.svg / .bmp
│ └── nsis-sidebar.svg / .bmp
├── build-scripts/
│ ├── generate-icons.mjs ← SVG → PNG/ICO/BMP pipeline
│ ├── generate-latest-json.mjs ← Update manifest generator
│ └── publish-to-drive.ps1 ← Shared-drive publish script
└── .github/
└── workflows/
└── release-tauri-sidecar-app.yml.template
→ See docs/CONSUMING.md for the full onboarding guide including auth setup, file templates, CI workflow, and the complete bootstrap checklist.
pip (git dependency — pin exact tag):
# In your tool's pyproject.toml or requirements.txt
chamber19-desktop-toolkit @ git+https://github.com/chamber-19/desktop-toolkit@v2.3.1#subdirectory=pythonUsage:
from chamber19_desktop_toolkit.utils.pdf_merge import build_combined_pdf
from chamber19_desktop_toolkit.utils.email_sender import send_emailThis package is published to GitHub Packages (not npmjs.com). You need a GitHub Personal Access Token with read:packages scope to install.
One-time setup in your project:
Create or update .npmrc in your project root:
@chamber-19:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=YOUR_GITHUB_PATIn CI, set NODE_AUTH_TOKEN from a secret instead.
Install:
npm install @chamber-19/desktop-toolkitUsage:
import { initBackendUrl, getBackendUrl } from "@chamber-19/desktop-toolkit/ipc";
import SplashApp from "@chamber-19/desktop-toolkit/splash";
import { APP_VERSION } from "@chamber-19/desktop-toolkit/utils/version";This repo uses SemVer (vMAJOR.MINOR.PATCH).
- JavaScript consumers can pin
@chamber-19/desktop-toolkitwith^x.y.zbecause GitHub Packages publishes immutable versions. - Rust and Python consumers should pin exact git tags (
vX.Y.Z). - A breaking API change requires a major version bump.
- The
v1.0.0tag is cut manually after the initial extraction PR merges.
See CHANGELOG.md for the full history.