Security & IT Information
Early AccessTechnical documentation for IT teams evaluating the Branch AutoCAD plugin.
Last security review: April 2026 | Document version: 3.0 | Updated: April 2026
Authentication
OAuth 2.0 + PKCE
via Auth0
DWG Files
Stay Local
Unless user opts in to bug-report attachment
Encryption
TLS 1.2+ in transit; DPAPI at rest
Refresh token DPAPI-encrypted; backend storage AES-256
Infrastructure
US-Based
GCP us-central1; Auth0 US tenant
Product Overview
The Branch plugin is a drafting automation tool that runs as an AutoCAD plugin on Windows workstations. It automates solar construction document drafting placing strings, routing homeruns, calculating circuit lengths, and generating tags.
What the Plugin Does
- Runs locally within Autodesk AutoCAD (requires user's AutoCAD license)
- Automates solar stringing with voltage window compliance
- Routes homeruns and calculates circuit/cable lengths
- Generates tags and labels directly in AutoCAD drawings
- Imports SolarEdge Designer PDFs for CAD-ready conversion
- Stores design data in standard AutoCAD DWG files (user-controlled)
What Data Leaves the Machine
| Data Type | Destination | Purpose | User Control |
|---|---|---|---|
| Email, name, Auth0 user ID | Auth0 (US tenant) | Authentication & license validation | Required for licensed use |
| Command usage events, errors, drawing filename | Google Cloud (us-central1) | Diagnostics, crash analytics, product improvement | Mandatory during Early Access. Three configurable modes (Full / Errors / Off billing-ping) will be exposed in the plugin settings UI at general availability. |
| Project zip code | api.leafdesign.ai | Server-side fetch of ASHRAE/NSRDB weather data and geocoding for string sizing | Sent only when the user types a project zip into the StringSizer flow |
| Abstracted panel layout grid (no project metadata) | api.leafdesign.ai (Solar String Design Solver) | Cloud-side panel-stringing solver; retained for model training | No opt-out. The cloud solver is the core panel-stringing automation feature of the product and has no local-only fallback. The retained data is non-proprietary and not tied to any customer identifier. |
| Bug-report description, optional DWG attachment, optional debug info | Formspree relayed to Leaf Automation support inbox | User-initiated support / diagnostic submission | Fully opt-in. The "include drawing" checkbox defaults to UNCHECKED. The user must explicitly tick it to attach the DWG. |
Important: Project DWG files remain on the user's machine in normal operation. The only way a DWG leaves the machine is if the user explicitly opts in via the bug-report dialog (the checkbox to attach a DWG is unchecked by default). The Solar String Design Solver receives an abstracted 2D grid representation of the panel layout, not the DWG itself, with no project metadata, no project location, and no title-block content. A live, public demonstration of the solver is at leafautomation.ai/demo and lets reviewers see exactly what the solver receives and returns; no login is required.
Ownership of Customer Data
Section 4.2 of the Branch End User License Agreement addresses this directly. As between Leaf Automation and the customer, the customer retains all right, title, and interest in the AutoCAD drawings and project data the customer uses with the plugin ("Customer Input") and in the design outputs the plugin generates from Customer Input ("Customer Output"). Leaf Automation claims no ownership of either, and uses Customer Input only to operate the plugin for the customer's benefit, to provide support, and for the limited training-data uses described in our privacy policy.
Engineer of Record
Section 3 of the EULA addresses this directly. The plugin is "intended solely for use by qualified engineering professionals" and the EULA requires that "ALL OUTPUTS MUST BE INDEPENDENTLY VERIFIED BY A LICENSED PROFESSIONAL ENGINEER BEFORE USE IN ANY PROJECT." Branch is drafting automation, not engineering. Leaf Automation does not produce stamped, permit-ready, or otherwise certified electrical designs, makes no representations as to the correctness, code-compliance, or constructibility of any output the plugin generates, and is not the Engineer of Record for any project on which Branch is used. The Licensee is solely responsible for ensuring all designs comply with applicable codes and standards (including NEC Article 690), obtaining required PE stamps and certifications, conducting on-site verification, and making all final engineering decisions. All liability for the resulting design sits with the human EOR.
Authentication & Access Control
| Item | Implementation | Status |
|---|---|---|
| Authentication Method | OAuth 2.0 Authorization Code with PKCE (RFC 7636) | Secure |
| Identity Provider | Auth0 (Okta) | Secure |
| MFA Support | Not currently enabled. Will be available after Early Access via Auth0 (TOTP, WebAuthn). | Early Access |
| SSO Support | Enterprise SSO available (SAML, OIDC) - contact sales | Informational |
| Credential Storage | Access token in process memory only (cleared on logout). Refresh token persisted to %LOCALAPPDATA%\LeafSolarDesign\.rt, encrypted with Windows DPAPI (CurrentUser scope, app-specific entropy). | Secure |
| Session Management | Short-lived JWT access tokens (~1h); silent refresh via DPAPI-encrypted refresh token so users are not re-prompted for credentials each AutoCAD session. | Secure |
Authentication Flow
- User clicks login in plugin
- System browser opens to Auth0 login page
- User authenticates via Auth0
- Auth0 redirects to localhost callback with authorization code
- Plugin exchanges code for access token using PKCE code verifier
- Access token used for API calls during session
Data Handling
Local Data Storage
| Location | Contents | Sensitivity |
|---|---|---|
| %LOCALAPPDATA%\LeafSolarDesign\.rt | OAuth refresh token (DPAPI-encrypted, CurrentUser scope, app-specific entropy) | Sensitive encrypted at rest |
| %LOCALAPPDATA%\LEAFAutomation\BranchPlugin\*.db | Equipment specification databases (SQLite modules, inverters, optimizers) | Public data (manufacturer specs) |
| HKCU\Software\AEC BIM Tools Ltd\Branch\ | UI preferences, dialog dimensions, design defaults, persistent form input/output history (last-entered project name, last-used module/inverter selections). Stored unencrypted; protected by NTFS user-account ACLs. Does not contain drawings, credentials, or PII beyond what the user has typed into the plugin's own forms. | Non-sensitive |
| User's own DWG files | Plugin design metadata embedded as AutoCAD XData (string assignments, cable info, tag data) inside the user's drawing | User-controlled never copied or transmitted by the plugin |
Encryption
| Type | Implementation | Status |
|---|---|---|
| In Transit (all egress) | TLS 1.2 or higher; default Windows certificate-store validation; no pinning bypass | Secure |
| At Rest (local refresh token) | Windows DPAPI (System.Security.Cryptography.ProtectedData), CurrentUser scope, app-specific entropy | Secure |
| At Rest (local equipment DBs) | Not encrypted. Contains only publicly available manufacturer datasheet data. | Informational |
| At Rest (local persistent settings, form input/output history) | Not encrypted. Stored under HKCU and %LOCALAPPDATA%, protected by NTFS user-account ACLs. Includes UI preferences and the last-entered project name and module/inverter selections, but no drawings, no credentials, and no PII beyond what the user has typed into the plugin's own forms. | Informational |
| At Rest (backend telemetry) | Google Cloud BigQuery and Cloud Logging, AES-256 default encryption | Secure |
| At Rest (backend persistent state) | Neon Postgres, AES-256 default encryption. Holds EULA acceptance records and license / subscription state. | Secure |
Telemetry & Analytics
The plugin collects usage telemetry to improve the product. Each event carries: a session id (per-process GUID), the plugin/OS/AutoCAD version, the Auth0-issued user id (or Windows username if not logged in), the user's email, and the filename of the currently open drawing (the full path is one-way hashed for privacy). Event-specific fields add: the command name (for command-execution events), the form name (for page-view events), or the exception type and stack trace (for error events). A complete event catalog is available on request.
Telemetry is transmitted to a Google Cloud Function in us-central1 and written to BigQuery. During the Early Access period telemetry is retained indefinitely so the team can work through the issue and feature backlog. After general availability, a 90-day rolling partition expiration will be applied.
Telemetry collection is mandatory during the Early Access trial period and is not user-configurable. The plugin source code already supports three telemetry privacy modes ("Full", "Errors", "Off"), but the runtime is fixed at "Full" during Early Access. At general availability the three modes will be exposed in the plugin settings UI:
- Full: all events sent with full diagnostic detail.
- Errors: only command-execution, exceptions, errors, and lifecycle events; page-view tracking dropped.
- Off: every event still fires (so licensed use can be confirmed for billing) but the payload is stripped to just event-type, irreversible SHA256 hash of the user id, session id, and plugin version. No drawing info, no email, no stack traces, no command names.
Network & External APIs
External Connections
| Service | Purpose | Trigger | Auth |
|---|---|---|---|
| leafautomation.us.auth0.com | User authentication and silent token refresh | User runs LEAFLOGIN; token expires | OAuth 2.0 Authorization Code with PKCE |
| api.leafdesign.ai | License validation; all cloud-side calculation features (StringSizer, Solar String Design Solver, k-means, inverter placement, geocoding proxy, ASHRAE/NSRDB weather data). All cloud features front through this single API gateway. | User invokes a feature that requires the backend | Auth0 Bearer token |
| us-central1-branch-api-466316.cloudfunctions.net | Telemetry ingestion (Cloud Function in us-central1) | Plugin lifecycle, command execution, exceptions (subject to telemetry mode) | Auth0 Bearer token (if logged in) |
| api.github.com | Update check (queries the latest release of the public Branch_release repo) | Plugin startup, throttled to once per 24h; or manual LEAFUPDATE | Anonymous (User-Agent header only) |
| formspree.io | Bug-report submission relay (forwards to support inbox) | Only when the user explicitly submits a bug-report form | Anonymous form-submit |
All external communications use HTTPS / TLS 1.2 or higher. There are no HTTP-only endpoints. Certificate validation uses the Windows certificate store with no custom bypasses or pinning overrides.
Firewall Requirements
The plugin requires outbound HTTPS (TCP 443) access to:
- *.auth0.com
- api.leafdesign.ai
- us-central1-branch-api-466316.cloudfunctions.net
- *.run.app (Cloud Run / Cloud Functions Gen 2)
- api.github.com
- formspree.io (only required if users will submit bug reports)
No inbound ports are required. The plugin uses a transient localhost callback on port 8080 only during the OAuth login flow, bound to 127.0.0.1 only and closed immediately after the authorization code exchange.
Compliance & Security Review
Most Recent Review
A complete source-code security review was conducted in April 2026 covering all network egress, data persistence, authentication, third-party dependencies, and bug-report data flows. The review drove a hardening pass that produced this version of the security documentation.
Verified Secure
- PKCE OAuth implementation (RFC 8252 compliant)
- Refresh token DPAPI-encrypted at rest (CurrentUser scope, app-specific entropy)
- Access token in memory only; never persisted
- TLS certificate validation via Windows certificate store, no bypass or pinning override
- SQL queries against local SQLite all parameterized
- File path handling restricted to trusted sources
- JSON deserialization with TypeNameHandling disabled
- No client secrets or third-party API keys embedded in shipped binaries
- Bug-report drawing attachments are opt-in (default unchecked)
- Three-mode telemetry privacy control implemented in source (will be exposed at general availability)
- Hardware-token-backed Authenticode code signing on every released DLL
- Old (pre-hardening) plugin releases withdrawn from public download
Subprocessor Certifications
Leaf Automation does not currently hold direct certifications. We rely on certified subprocessors for sensitive infrastructure:
- Auth0 (Okta): SOC 2 Type II, ISO 27001, GDPR
- Google Cloud Platform: SOC 1/2/3, ISO 27001, ISO 27017, ISO 27018, FedRAMP, HIPAA-eligible. Hosts the Branch API gateway for all cloud-side calculation features (Solar String Design Solver, k-means, inverter placement, geocoding proxy, ASHRAE/NSRDB weather data) and the telemetry pipeline.
- Neon: SOC 2 Type II. Serverless Postgres for EULA acceptance records and license/subscription state.
- Cloudflare: SOC 2 Type II, ISO 27001. TLS termination and DDoS protection in front of api.leafdesign.ai.
- Namecheap: SOC 2 hosting. US datacenter for api.leafdesign.ai origin.
- Vercel: SOC 2 Type II, ISO 27001. Marketing website hosting.
- Formspree: SOC 2 Type II. Bug-report relay.
- Stripe: PCI DSS Level 1, SOC 1/2 Type II. Payment processing for subscription billing. Stripe is named in our EULA as the payment processor and will be the billing subprocessor at general availability. There is no live Stripe integration during the Early Access trial period.
Current Limitations (Early Access)
The following items are tracked and being addressed:
| Item | Status | Timeline |
|---|---|---|
| Telemetry collection during Early Access is mandatory; user-facing opt-out (the Full / Errors / Off modes) will be exposed at general availability | Early Access | At general availability |
| MFA enabled by default at the Auth0 tenant level (available on request today) | Early Access | After Early Access |
| SOC 2 Type I direct certification | Informational | Evaluated based on customer demand |
| CMMC / NIST SP 800-171 (CUI handling) | Informational | Not in scope Branch is not built for CUI handling |
| Server-side proxy for any future third-party APIs (so customer credentials never live in client binaries) | Secure | Architectural standard for any future cloud features |
Downloads
Security Contact
For security questions, custom questionnaires, or to report vulnerabilities:
Email: support@leafautomation.ai
General Inquiries: contact@leafautomation.ai