framer-export 5.0.0-beta.2 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,33 @@
1
+ # Changelog
2
+
3
+ ## 5.0.1
4
+
5
+ The stable release uses 5.0.1 because npm permanently reserves 5.0.0 from an earlier publication that is no longer available. This changes the release version without changing the validated application behavior.
6
+
7
+ The stable release uses npm's `latest` channel. Application headers show version 5.0.1 without the prerelease badge. `npm run release -- --bypass-tests` publishes the existing build directly, without tests or a build, like `npm publish --ignore-scripts`. Ordinary publication still runs all checks and builds first. `--dry-run` previews publication without uploading a package.
8
+
9
+ The terminal and web interfaces share provider identities, offline brand icons and a four-step export assistant. Cards/list views, search, pagination, mouse scrolling, a draggable terminal scrollbar, keyboard shortcuts and clickable completed steps preserve entered data while navigating. Settings, Help and Open UI use dialogs with hover states and contextual hints. The lowercase wordmark fits an 80×24 terminal and adapts to smaller windows.
10
+
11
+ Graphite surfaces and peach accents accompany a PixelBlast background adapted to terminal character cells. Motion is enabled by default; reduced-motion settings keep the terminal background still and reduce web animations. Native image modes keep the terminal background still to avoid image flicker. Provider logos use Kitty or iTerm image protocols, or Sixel when capability and cell-size probing succeed. Other terminals retain provider names and colored monograms; terminal fonts and graphics capabilities still determine physical rendering.
12
+
13
+ Wizard exports use a dedicated log viewer with line numbers, timestamps, level filters, search, pause/follow, horizontal panning and clipboard copying. The full session is retained while exporting. Esc or Ctrl+C returns to console output without falsely marking the operation as cancelled; completed and failed exports remain inspectable until closed. The web interface exposes logs in an editor-style dialog.
14
+
15
+ Both log viewers follow new entries automatically, pause when you scroll up and offer a Latest logs control to resume. More spacious rows retain their severity colors, with a gentle shine on active progress that respects reduced motion. Terminal rendering updates changed cells and keeps native icons in place; idle screens and mouse movement within the same control no longer trigger redraws. Header badges and versions sit to the right of the wordmark, provider controls have more space, and compact card layouts keep pagination visible.
16
+
17
+ First-run onboarding, preferences and resumable export drafts live in `~/.fexport`. Settings cover the default provider, view, export options, reduced motion, a companion browser UI and stable/beta update behavior. Confirmed reset clears preferences, the saved draft and the update cache while preserving exported folders and unrelated files. Automatic updates are opt-in, use semantic version ordering and preserve supported npm installation scope. `config`, `settings`, `doctor`, `--fresh` and `--no-update` provide direct access to these controls. Source code comments are removed; standalone licensing/provenance files remain.
18
+
19
+ Exports preserve dynamic CSS rules, constructed stylesheets, nested CSS imports, responsive resource variants and stylesheet redirects. Asset filenames no longer overwrite unrelated files with the same basename, and missing resources are listed in `export-report.json` instead of being rewritten to nonexistent files.
20
+
21
+ The capture respects explicit platform choices and final navigation URLs. Subpages receive the same hydration, scrolling and resource preparation as the entry page. Webflow keeps the opening HTML element and runtime attributes that earlier stripping rules removed. Dynamically requested captured stylesheets stay local.
22
+
23
+ The bundled browser is upgraded from Chrome 127 to Chrome 148 through Puppeteer 24.43.1. A current public Notion page rejected the old browser and loaded successfully with the updated one. Bubble and Notion snapshots also retain measured viewport-dependent inline styles, conditionally removed controls and JavaScript-selected image renditions.
24
+
25
+ Captured iframe HTML now retains local CSS, scripts and nested resources using each document's own URL base. Runtime image/script assignments and explicit worker resource declarations are localized when the exact resource was saved.
26
+
27
+ Framer CMS files remain binary even when their server labels them as JavaScript. Raw bytes are preserved, and exact captured public CMS GET requests load their local files, including captured range queries.
28
+
29
+ The UI rejects unsupported URL schemes, returns to the gallery after a rejected export request, and copies a preview command that points to the actual export directory. Failed captures preserve existing files and write diagnostics.
30
+
31
+ The new browser suite compares source and exported pages at desktop and mobile sizes, shuts down the source before replay, and tests navigation, form validation, CSSOM, stylesheet loaders and the full UI flow. Live checks still leave Wix mobile image variants, some Podia widgets and Framer animation states incompletely validated.
32
+
33
+ Bubble, Notion and Podia retain the beta label. Server-side accounts, payments, search and platform workflows are not recreated by a static export. Publication runs type checking, unit tests, browser tests and the production build by default; the explicit release bypass uploads the existing build directly. The default publication tag is `latest`.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <h1 align="center">F-EXPORT</h1>
2
2
 
3
3
  <p align="center">
4
- <img src="https://img.shields.io/badge/version-5.0.0--beta.2-blue" alt="Version" />
4
+ <img src="https://img.shields.io/badge/version-5.0.1-blue" alt="Version" />
5
5
  <img src="https://img.shields.io/badge/license-MIT-green" alt="License" />
6
6
  <img src="https://img.shields.io/badge/node-%3E%3D20-339933" alt="Node" />
7
7
  </p>
@@ -22,6 +22,8 @@ It knows 25 platforms and detects the right one from the URL, and when the URL i
22
22
  npm install -g framer-export
23
23
  ```
24
24
 
25
+ Version 5.0.1 uses the stable `latest` channel. You can also install the validated local package with `npm install -g ./framer-export-5.0.1.tgz`. Preview releases remain available through `framer-export@beta`.
26
+
25
27
  Or from source:
26
28
 
27
29
  ```bash
@@ -30,7 +32,7 @@ cd FramerExport
30
32
  npm install
31
33
  ```
32
34
 
33
- Node 20 or newer. The first run downloads a Chromium build for Puppeteer, which takes a moment.
35
+ Node 20 or newer. Installation downloads Chrome for Testing through Puppeteer, which takes a moment. Version 5 updates the bundled browser to Chrome 148; the old Chrome 127 was rejected by current Notion pages.
34
36
 
35
37
  ## Three ways to run it
36
38
 
@@ -40,7 +42,7 @@ Node 20 or newer. The first run downloads a Chromium build for Puppeteer, which
40
42
  framer-export ui
41
43
  ```
42
44
 
43
- This starts a local server on port 4400 and opens your browser. You get a gallery of every supported platform. Click one (or pick auto-detect), paste the URL, adjust the options, and watch the export run with live logs on the left and a summary panel on the right showing the current phase, asset counters and the last files written. When it finishes you can copy the full log or the serve command with one click.
45
+ This starts a local server on port 4400 and opens your browser. The four steps are Select provider, Site details, Options and Review. Browse the provider icons in cards or a list, search and change pages, then paste the URL and choose export options. Completed steps remain clickable and retain your input. Settings and Help open in dialogs, with hover hints on controls. The export screen shows progress and a file summary; View logs opens an editor-style dialog with line numbers, search, level filters, automatic following and copying.
44
46
 
45
47
  The server only listens on 127.0.0.1 and rejects cross-origin requests, so nothing on the network or in another browser tab can trigger exports on your machine. Use `--port <n>` to change the port and `--no-open` if you do not want the browser to open by itself.
46
48
 
@@ -50,12 +52,60 @@ The server only listens on 127.0.0.1 and rejects cross-origin requests, so nothi
50
52
  framer-export
51
53
  ```
52
54
 
53
- Running it with no arguments opens the interactive setup. First you pick the tool from a scrollable list grouped by category, and you can just start typing to filter it. Then you enter the URL, then the output directory, and finally a single options panel with checkboxes for pretty-printing and sub-pages, plus a concurrency setting. If the URL looks like a different platform than the one you picked, it asks before continuing.
55
+ Running it with no arguments opens the same four-step workflow in the terminal. Provider names, descriptions, logos and colors are shared with the web interface. Cards use pagination; the list adds a draggable scrollbar. Completed steps show a checkmark; Back and the step links let you change earlier details without retyping later ones. Settings, Help and Open UI use dialogs that preserve the underlying step, with hover states and contextual hints.
56
+
57
+ The first launch includes a short introduction. Preferences and an unfinished export draft are stored in `~/.fexport`; relaunching restores your place. Use `--fresh` for a new draft. All 25 provider icons are bundled for offline use; their original files and provenance are in [assets/provider-icons](assets/provider-icons/SOURCES.md).
58
+
59
+ The lowercase `framerexport` wordmark fits a standard 80×24 terminal and switches to compact text in smaller windows. Both interfaces use graphite surfaces, a peach accent and a restrained PixelBlast background. The terminal adapts the background to character cells; native image modes keep that background still to avoid repeatedly repainting images.
60
+
61
+ Provider logos use native images when the terminal supports Kitty graphics, iTerm inline images or detected Sixel graphics with known cell dimensions. Unsupported terminals, multiplexers and disabled image mode use colored monograms with provider names. Set `FEXPORT_TERMINAL_IMAGES=0` to force this fallback. Font metrics, graphics protocols and available colors belong to the terminal, so its physical pixels cannot be guaranteed identical to a browser. Layout and image placement stay within the viewport, including compact windows, and adjust on resize.
54
62
 
55
- While the export runs, terminals wider than 100 columns get a live sidebar on the right with the phase, elapsed time, download counters and recent files. The log stream itself stays untouched.
63
+ | Input | Action |
64
+ | ---------------------------- | ------------------------ |
65
+ | Tab / Shift+Tab | Move between controls |
66
+ | Arrow keys / Enter | Browse and select |
67
+ | Esc / Alt+Left | Go back |
68
+ | Mouse wheel / scrollbar drag | Scroll content |
69
+ | Page Up / Page Down | Change provider pages |
70
+ | Ctrl+A / Ctrl+U | Select or clear a field |
71
+ | `,` / `?` | Preferences / shortcuts |
72
+ | Ctrl+C | Save the draft and leave |
73
+
74
+ Wizard exports open a dedicated log viewer with line numbers, timestamps, log levels, progress counters and a scrollbar. Use `/` to search, `f` to cycle level filters, `p` to pause following, `c` to copy the full log, and the arrow keys to scroll vertically or pan across long lines. Home goes to the first entry and End resumes following new entries. Search and filters leave the saved log unchanged; wizard exports retain the full session even beyond 5,000 entries.
75
+
76
+ In both interfaces, scrolling up pauses automatic following so you can read earlier entries. Latest logs returns to the newest entry and resumes following. Severity colors distinguish information, successes, warnings and errors; active progress has a subtle shine that respects reduced motion. The terminal paints only changed cells and preserves native icons between updates.
77
+
78
+ Enter closes the viewer after the export completes or fails. Esc or Ctrl+C during an export returns to console output while the operation continues; a second Ctrl+C in the console stops the process. A failed export remains marked as failed and returns its original error after the viewer closes. Direct commands and legacy prompts retain the compact console output and optional progress sidebar.
56
79
 
57
80
  If arrow keys do not work in your terminal, `framer-export --setup --legacy-mode` falls back to plain text prompts.
58
81
 
82
+ ### Preferences
83
+
84
+ Run `fexport settings` to edit preferences, or `fexport config` to print their file location and current values. Both interfaces use the same `~/.fexport/settings.json`:
85
+
86
+ ```json
87
+ {
88
+ "schemaVersion": 1,
89
+ "defaultProvider": "auto",
90
+ "launchUi": false,
91
+ "checkUpdates": true,
92
+ "autoInstallUpdates": false,
93
+ "betaUpdates": false,
94
+ "viewMode": "cards",
95
+ "reduceMotion": false,
96
+ "onboardingCompleted": false,
97
+ "prettyPrint": true,
98
+ "includeSubpages": false,
99
+ "concurrency": 12
100
+ }
101
+ ```
102
+
103
+ `launchUi` starts a separate local web process alongside the terminal and closes it when the terminal exits. Updates are checked at most once a day. Automatic installation is opt-in and preserves a supported npm installation's local/global scope. Source checkouts, npx and other package managers receive instructions instead. Beta updates are opt-in; a stable release takes precedence over an older prerelease.
104
+
105
+ Motion is enabled by default. Enable `reduceMotion` for a still terminal background and reduced web animations; the web interface also respects the operating system's reduced-motion preference. `FRAMER_EXPORT_NO_BG=1` disables the terminal background. Reset program asks for confirmation before removing preferences, the saved draft and the update cache. It restores the welcome screen and keeps exported folders, unrelated files and configuration backups.
106
+
107
+ Settings writes are atomic. An invalid settings file uses defaults and is preserved until an explicit save. `FEXPORT_HOME` overrides the directory for isolated environments. `fexport doctor` reports the terminal capabilities, bundled browser installation and update channel without downloading anything. `--no-update` skips the check for one launch.
108
+
59
109
  ### The direct command
60
110
 
61
111
  ```bash
@@ -73,12 +123,17 @@ Auto-detection covers the hosted domains (`.framer.app`, `.webflow.io`, `.wixsit
73
123
  framer-export <url> [output-dir] export a site
74
124
  framer-export ui [--port <n>] launch the web interface
75
125
  framer-export --setup launch the terminal wizard
126
+ framer-export settings edit persistent preferences
127
+ framer-export config show preferences as JSON
128
+ framer-export doctor inspect terminal and browser availability
76
129
 
77
130
  --platform <id> force a platform (framer, webflow, wix, shopify, notion, ...)
78
131
  --subpages crawl internal links and export every page
79
132
  --dpr <number> capture device pixel ratio, default 1
80
133
  --legacy-mode with --setup, use plain text prompts
81
134
  --no-open with ui, do not open the browser
135
+ --fresh start setup without restoring the saved draft
136
+ --no-update skip the update check for this launch
82
137
  --about version and package information
83
138
  --version, -v version number
84
139
  --help, -h full help with the platform list
@@ -98,7 +153,9 @@ E-commerce: Gumroad, Shopify.
98
153
 
99
154
  AI builders: Gamma.
100
155
 
101
- Framer, Webflow and Wix are the stable trio, tested on real production sites. Everything else carries a beta badge in the gallery and in `--help`: the handlers work, but they have seen fewer real-world sites, so expect the occasional rough edge and report what you find.
156
+ Platform detection covers all 25 handlers. Rendering and offline behavior depend on the source site; detection alone does not establish visual fidelity. Bubble, Notion and Podia are marked beta because they use static snapshots to preserve rendered content. Their original application scripts are removed, so hosted account flows, dashboards and other application interactions need a separate implementation. Notion may also fail to load because of upstream availability or access restrictions.
157
+
158
+ The beta 4 regression suite compares complete local exports with their source at desktop and mobile sizes, with the source server stopped. It checks fonts, responsive images, dynamic styles, navigation and local form behavior. No export recreates a platform's account database, payment backend or form processing service.
102
159
 
103
160
  Each platform is a single self-contained handler in `src/platforms/`. It declares how to detect the platform, which domains and selectors to strip, how long to wait for hydration, how to route assets into folders, and optional hooks that run before capture, after capture and after the build. Adding a platform never touches the others.
104
161
 
@@ -110,6 +167,7 @@ framer-mysite-fresh-build-a1b2/
110
167
  serve.js a small static server with SPA fallback
111
168
  package.json so "npm run serve" works
112
169
  export.log the complete log of the run
170
+ export-report.json missing assets, capture mode and functional limitations
113
171
  styles/ CSS files
114
172
  scripts/vendor/ third-party bundles
115
173
  scripts/modules/ page modules and lazy chunks
@@ -130,17 +188,17 @@ node serve.js
130
188
 
131
189
  The site has to be served over HTTP because module scripts do not load from `file://`. The bundled server handles MIME types, CORS headers and the sub-page fallback, so a route like `/about` resolves to `subpages/about.html` automatically.
132
190
 
133
- Every run also writes `export.log` with the full untruncated log history. The finish panel in the terminal and the web interface both offer to copy it to the clipboard, which is handy when you want to report a problem or feed the context to an AI tool.
191
+ Every run writes `export.log` with untruncated messages from its retained log history. The terminal wizard's log viewer and the web interface offer clipboard copying, which is handy when reporting a problem or passing context to another tool.
134
192
 
135
193
  ## The AI conversion assistant
136
194
 
137
- After a terminal export you can generate a conversion brief for an AI coding agent. Pick a target stack (React with Vite, Next.js, Vue, SvelteKit or Astro), pick the tool you use (Claude Code, Codex, OpenCode or another agent), pick a goal (clean rebuild, pixel-perfect migration, component system, or performance and SEO), and it writes a detailed prompt file into `ai/` inside the export. The prompt references the real files and counts from your export, so the agent starts from facts instead of guesses.
195
+ After a direct-command or legacy terminal export you can generate a conversion brief for an AI coding agent. Pick a target stack (React with Vite, Next.js, Vue, SvelteKit or Astro), pick the tool you use (Claude Code, Codex, OpenCode or another agent), pick a goal (clean rebuild, pixel-perfect migration, component system, or performance and SEO), and it writes a detailed prompt file into `ai/` inside the export. The prompt references the real files and counts from your export, so the agent starts from facts instead of guesses. The modern wizard finishes in its log viewer.
138
196
 
139
197
  ## How it works
140
198
 
141
199
  The pipeline has six phases. First it fetches the server-rendered HTML over plain HTTP, which is what search engines see and what gives the cleanest markup. Then it launches Puppeteer, blocks the analytics domains the platform handler lists, navigates, waits for the hydration selector, scrolls through the page to trigger lazy loading, and records every network response into an asset map. Sub-page crawling reuses the same browser session when enabled.
142
200
 
143
- Once the browser closes, the downloader writes all unique assets to disk with a configurable concurrency, then follows `import` statements inside downloaded JS chunks to resolve lazily loaded modules the browser never requested. The build step rewrites every URL to a local relative path, strips badges, trackers and integrity attributes, injects canonical and Open Graph tags when they are missing, pretty-prints the JavaScript unless you turned that off, and writes `index.html`, `serve.js` and `export.log`.
201
+ The capture also serializes styles added through CSSOM rules and constructed stylesheets. Once the browser closes, the downloader writes unique assets with a configurable concurrency and follows CSS imports and resource URLs, including fonts and images only used at other breakpoints. Redirected stylesheets retain their correct URL base; assets with identical filenames or different query parameters remain distinct. Lazy JavaScript imports are resolved where possible. The build step localizes captured resources, preserves relative navigation, strips badges and trackers, and writes `index.html`, `serve.js`, `export.log` and `export-report.json`.
144
202
 
145
203
  ## When something goes wrong
146
204
 
@@ -153,19 +211,49 @@ If detection picks the wrong platform on a custom domain, pass `--platform` expl
153
211
  ## Development
154
212
 
155
213
  ```bash
156
- npm run dev # run the CLI from source
157
- npm test # 150 unit and integration tests, node test runner
158
- npm run typecheck # tsc --noEmit
159
- npm run build # bundle with tsup into dist/
160
- npm run format # prettier over src/
214
+ npm run dev
215
+ npm test
216
+ npm run test:browser
217
+ npm run test:platform -- webflow https://smallshop.webflow.io/
218
+ npm run typecheck
219
+ npm run build
220
+ npm run format
161
221
  ```
162
222
 
163
223
  The test suite covers platform detection for all 25 handlers against recorded research profiles, asset mapping, URL rewriting, the logger, the generated serve.js (spawned for real and probed over HTTP), the progress state and every route of the UI server, including its origin and host checks.
164
224
 
225
+ Terminal tests run the actual CLI in a pseudoterminal and interpret its output with xterm. They exercise onboarding, mouse/keyboard input, draft restoration, live resizing, companion server cleanup, log search/filtering and completed or detached export lifecycles. Unit tests also check Unicode cell widths, grapheme editing, terminal image protocol generation and rendering bounds down to a 1×1 cell buffer. This is a clipping check, not a claim that a full interface is readable in one cell; protocol tests do not establish identical native image rendering in every terminal emulator.
226
+
227
+ The interface work draws on [Microsoft's terminal sequences](https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences), [xterm's supported sequences](https://xtermjs.org/docs/api/vtfeatures/), [Ink](https://github.com/vadimdemedes/ink), [Bubble Tea](https://github.com/charmbracelet/bubbletea) and Apple's guidance on [onboarding](https://developer.apple.com/design/human-interface-guidelines/onboarding) and [scroll views](https://developer.apple.com/design/human-interface-guidelines/scroll-views). The existing ANSI input layer remains in use with a clipped cell renderer; xterm and node-pty are development tools rather than runtime UI dependencies.
228
+
165
229
  To add a platform, create one file in `src/platforms/<category>/`, implement the `PlatformHandler` interface, register it in `src/platforms/registry.ts`, and add a research profile in `tests/research/` so the detection tests cover it. Look at `src/platforms/builder/carrd.ts` for a small example and `src/platforms/framer.ts` for a complete one.
166
230
 
167
231
  Commits follow the conventional format: `feat(scope):`, `fix(scope):`, `test:`, `docs:`, `chore:`.
168
232
 
233
+ ### Publishing
234
+
235
+ Run release commands from the source checkout with development dependencies installed. Full publication runs TypeScript checks, unit tests, browser tests and the build before uploading to the stable `latest` channel:
236
+
237
+ ```bash
238
+ npm run release
239
+ ```
240
+
241
+ Publish the already built package directly, without tests or a build:
242
+
243
+ ```bash
244
+ npm run release -- --bypass-tests
245
+ ```
246
+
247
+ `--bypass-tests` belongs to the project's release script; `--bypass-checks` is an alias. This mode uploads the existing `dist` bundle as-is. It is equivalent to `npm publish --ignore-scripts`, using [npm's option to skip lifecycle scripts](https://docs.npmjs.com/cli/v11/using-npm/config/#ignore-scripts). To preview that direct upload:
248
+
249
+ ```bash
250
+ npm run release -- --bypass-tests --dry-run
251
+ ```
252
+
253
+ Arguments after `--`, such as `--dry-run` or `--otp=123456`, are forwarded to npm publish. The default release command checks and builds once; its final upload skips lifecycle scripts. Ordinary `npm publish` still runs the full check suite through `prepublishOnly`, then builds through `prepare`, following [npm's lifecycle order](https://docs.npmjs.com/cli/v11/using-npm/scripts/#npm-publish).
254
+
255
+ Use `npm run check` to validate without publishing, or `npm pack` to build `framer-export-5.0.1.tgz`. Publish that already built archive with `npm publish ./framer-export-5.0.1.tgz --tag latest`.
256
+
169
257
  ## License
170
258
 
171
259
  MIT. See [LICENSE](LICENSE).
@@ -0,0 +1,41 @@
1
+ # Provider icon sources
2
+
3
+ The 25 provider icons are bundled for offline identification in the terminal and web interface. Brand names and marks belong to their respective owners. Inclusion does not imply endorsement. Simple Icons artwork uses its published collection license; that does not grant rights to the brands. Official favicons have no separate redistribution license stated by their source pages. The auto-detect icon is original project artwork under MIT.
4
+
5
+ Sources were retrieved on 2026-09-13. Simple Icons is pinned to revision `4ba19240849175ab4b855a732ab98c0f87cfb714`. Original bytes and SHA-256 hashes are checked in alongside this file. For dark backgrounds, black Simple Icons marks are rendered in #EEEEEE; all shapes are preserved. Other Simple Icons marks use their catalogue brand color. Official favicon colors are preserved. Raster outputs are 256 × 256 PNG for the web and native terminal protocols, with compressed RGBA for SIXEL. Vector originals retain their geometry at high display densities; raster originals retain the detail available in their source. Terminal images scale to the available cells and measured pixel dimensions.
6
+
7
+ | Provider | Sources | License information | Brand guidelines |
8
+ | --- | --- | --- | --- |
9
+ | Framer | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/framer.svg) · [Brand source](https://framer.com) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | — |
10
+ | Webflow | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/webflow.svg) · [Brand source](https://brand-at.webflow.io/resources#logos) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | [Guidelines](https://brand-at.webflow.io) |
11
+ | Wix | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/wix.svg) · [Brand source](https://www.wix.com/about/design-assets) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | [Guidelines](https://www.wix.com/about/design-assets) |
12
+ | Bubble | [Original icon](https://meta-q.cdn.bubble.io/cdn-cgi/image/w=256,h=,f=png,dpr=1,fit=contain/f1530294839424x143528842134401200/Icon-no-clearspace.png) · [Brand source](https://bubble.io) | Brand asset; no separate redistribution license stated | — |
13
+ | Carrd | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/carrd.svg) · [Brand source](https://carrd.co/docs/general/brand-assets) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | — |
14
+ | Duda | [Original icon](https://irp.cdn-website.com/a8ff2f1c/files/uploaded/Duda_Logos.zip) · [Brand source](https://www.duda.co/press) · Archive entry: Duda Logos/Orange Duda Logos/duda_logo_orange.png | Brand asset; no separate redistribution license stated | [Guidelines](https://www.duda.co/press) |
15
+ | Squarespace | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/squarespace.svg) · [Brand source](https://www.squarespace.com/logo-guidelines) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | [Guidelines](https://www.squarespace.com/brand-guidelines) |
16
+ | Strikingly | [Original icon](https://www.dropbox.com/scl/fo/96t794329fgl9ee9qpbwe/AL9GAOKUOnH8qFg0Lz_XM3M?rlkey=usr1t7ypunnlw76x4cgqz7txh&dl=1) · [Brand source](https://support.strikingly.com/hc/en-us/articles/4414073874329-Strikingly-Branding-Guidelines) · Archive entry: s-badge-1200x1200.png | Brand asset; no separate redistribution license stated | [Guidelines](https://support.strikingly.com/hc/en-us/articles/4414073874329-Strikingly-Branding-Guidelines) |
17
+ | Tilda | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/tildapublishing.svg) · [Brand source](https://tilda.cc/mediakit) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | — |
18
+ | Weebly | [Original icon](https://cdn11.editmysite.com/images/logos/Blue-Logomark2.png) · [Brand source](https://www.weebly.com) | Brand asset; no separate redistribution license stated | — |
19
+ | ClickFunnels | [Original icon](https://statics.myclickfunnels.com/workspace/Yjxavr/image/9334147/file/c994abfb442009ab7811e359f1b50170.svg) · [Brand source](https://www.clickfunnels.com) · Mark viewport: 0, 0, 26, 26 | Brand asset; no separate redistribution license stated | — |
20
+ | Elementor | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/elementor.svg) · [Brand source](https://elementor.com/logos/) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | [Guidelines](https://elementor.com/logos/) |
21
+ | Instapage | [Original icon](https://cdn.mrkhub.com/instapage-landings-frontend/244/images/favicons/android-icon-192x192.png?v=2) · [Brand source](https://instapage.com) | Brand asset; no separate redistribution license stated | — |
22
+ | Systeme.io | [Original icon](https://d1yei2z3i6k35z.cloudfront.net/161/68f241caada76_Logo5.svg) · [Brand source](https://systeme.io/logo) | Brand asset; no separate redistribution license stated | [Guidelines](https://systeme.io/logo) |
23
+ | Unbounce | [Original icon](https://unbounce.com/photos/cropped-unbounce-favicon-2-192x192.png) · [Brand source](https://unbounce.com) | Brand asset; no separate redistribution license stated | — |
24
+ | Ghost | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/ghost.svg) · [Brand source](https://github.com/TryGhost/Admin/blob/e3e1fa3353767c3729b1658ad42cc35f883470c5/public/assets/icons/icon.svg) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | [Guidelines](https://ghost.org/docs/logos/) |
25
+ | Notion | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/notion.svg) · [Brand source](https://www.notion.so) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | — |
26
+ | WordPress | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/wordpress.svg) · [Brand source](https://wordpress.org/about/logos) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | [Guidelines](https://wordpressfoundation.org/trademark-policy) |
27
+ | Kajabi | [Original icon](https://cdn.prod.website-files.com/693317e747432cd054b3bdc6/693318d5adf6755726c17fae_Dark.png) · [Brand source](https://www.kajabi.com) | Brand asset; no separate redistribution license stated | — |
28
+ | Podia | [Original icon](https://cdn.sanity.io/images/f6u8j0m2/production/c32fdb13db51ed698450ebb173747d7f81eecf4a-67x36.svg) · [Brand source](https://www.podia.com) | Brand asset; no separate redistribution license stated | — |
29
+ | Teachable | [Original icon](https://cdn.prod.website-files.com/687904fb2b26c434698c47e9/68f25a572e5e73f1b13d70cf_Webclip.png) · [Brand source](https://www.teachable.com) | Brand asset; no separate redistribution license stated | — |
30
+ | Thinkific | [Original icon](https://www.thinkific.com/wp-content/themes/thinkific/assets/images/logo-dark.svg) · [Brand source](https://www.thinkific.com) · Mark viewport: 0, 0, 210, 200 | Brand asset; no separate redistribution license stated | — |
31
+ | Gumroad | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/gumroad.svg) · [Brand source](https://gumroad.com) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | — |
32
+ | Shopify | [Original icon](https://raw.githubusercontent.com/simple-icons/simple-icons/4ba19240849175ab4b855a732ab98c0f87cfb714/icons/shopify.svg) · [Brand source](https://www.shopify.com/brand-assets) | [CC0-1.0 (Simple Icons collection; brand rights retained)](https://github.com/simple-icons/simple-icons/blob/4ba19240849175ab4b855a732ab98c0f87cfb714/LICENSE.md) | [Guidelines](https://www.shopify.com/brand-assets) |
33
+ | Gamma | [Original icon](https://static.gamma.app/favicons/favicon_dark.svg) · [Brand source](https://gamma.app) | Brand asset; no separate redistribution license stated | — |
34
+
35
+ ## Regeneration
36
+
37
+ `node --import tsx scripts/update-provider-icons.ts` rebuilds the TypeScript catalogue from local originals using the installed Puppeteer Chromium. The renderer blocks network requests. `--download` first fetches the recorded icon URLs and rejects changed hashes; update a URL/hash only after reviewing the new source. Chromium rasterization can vary with browser versions, so check the generated diff after upgrading Puppeteer. The normal application and package build never download icons.
38
+
39
+ ## Terminal capabilities
40
+
41
+ Native terminal images use the real provider artwork: [Kitty graphics protocol](https://sw.kovidgoyal.net/kitty/graphics-protocol/) and [iTerm2 inline images](https://iterm2.com/documentation-images.html) require supporting terminal emulators. SIXEL support is enabled only after a device-attributes reply advertises feature 4 and the terminal reports its cell size. [Windows Terminal introduced SIXEL in 1.22](https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-22-release/). Unsupported terminals and multiplexers use crisp ASCII monograms with the provider names. Set FEXPORT_TERMINAL_IMAGES=0 to disable native images. Graphics are cleared on modal changes, resize and exit.