Run the genuine Articulate 360 Desktop App and Storyline 360 directly on an Intel Mac, on a patched build of upstream Wine. No Parallels, no virtual machine, no Boot Camp, no CrossOver, no remote Windows, and no licensing or sign-in bypass: you sign in with your own Articulate 360 account and use the official installers.
What works: the Desktop App signs in and shows your catalog. Storyline 360 installs, launches from the Dock, and opens, edits, previews, saves and publishes projects (Web, LMS with SCORM 1.2 and 2004, and Video). Nine sample projects were taken through all of that in Run 27. Wine 11.16 carries 35 patches here, which fix the drawing, text and speed problems found along the way. Storyline's open, save and folder dialogs and its date picker use the native macOS panels, and its windows are doubled with xBR on Retina displays. It is slower than on Windows, and a few things don't work yet; see Known issues.
Requirements: an Intel Mac (Apple Silicon is not tested), MacPorts, and your own Articulate 360 subscription. No Articulate software is included. Setup is currently a sequence of scripts; see Set up. A prebuilt, one-command installer is planned in #32.
How it got here: each problem was investigated, and most were fixed, in a numbered run under runs/, with sanitized logs under logs/ and the original plan in docs/research-plan.md. Licensed binaries and Wine prefixes are kept outside this repo; SHA256SUMS pins the exact inputs.
# prerequisites (privileged): MacPorts 2.12.6, then
sudo port install wine-devel cabextract
# 1. prefix: real .NET 4.8, Windows 10, DisableNonAdminInstalls, and every prefix setting listed under "How it runs"
tools/build-prefix-dotnet48.sh wine-dotnet48-noadmintask
# 2. Articulate 360 core laid out without custom actions (needs ~/StorylineLab/inputs/burn-payloads from your own installer)
tools/install-core-admin.sh wine-dotnet48-noadmintask
# 3. patched Wine mirror (all 35 patches), then its PE modules copied into the prefix's system32
tools/wine-build/build-ntdll.sh wine-dotnet48-noadmintask
# 4. Dock launchers and the articulate:// bridge in ~/Applications
tools/launcher/install-launchers.sh
# 5. Storyline: sign in with the Articulate 360 app, then run the official bundle it downloads under the patched Wine (Run 07)
WINEPREFIX=~/StorylineLab/prefixes/wine-dotnet48-noadmintask ~/StorylineLab/wine-patched/bin/wine ~/StorylineLab/inputs/storyline-360-x64-bundle.exe
# any step with focused Wine logging
tools/run-wine-logged.sh wine-dotnet48-noadmintask burn ~/StorylineLab/inputs/articulate-360.exeAfter that, open Storyline 360 or Articulate 360 from ~/Applications or the Dock like any other Mac app. To open a project directly, pass it to the launcher script: "$HOME/Applications/Storyline 360.app/Contents/MacOS/Storyline 360" ~/path/to/project.story (Finder double-click doesn't pass the file yet; see Known issues).
tools/install-core-admin.sh takes burn-payloads/ from the Burn package cache of an earlier install attempt (Run 04b); with the patched Wine, running the original articulate-360.exe also installs the core end to end (Run 06).
tools/run-wine-logged.sh writes a header (macOS build, Wine version, prefix, Windows build number, input hash, exit code) to each log so every run is self-describing.
To time a Storyline session, quit Storyline and run tools/perf/perf-session.sh <label> [VAR=value ...]. It launches Storyline with WINE_PERF_LOG=1, samples CPU once a second, and writes summary.txt to ~/StorylineLab/perf/<time>-<label>/ when you quit. Add --sample-clicks N after the label to take a stack sample of Storyline after each of your first N clicks once a project has loaded. tools/perf/perf-mark.sh "text" adds a timestamped note during a session. See Run 14. tools/perf/auto-caret.sh <label> [clicks] runs a whole caret session hands-off (new project, two text boxes, repeated clicks); see Run 15.
tools/uiauto/ drives Storyline from scripts: clicks and keys injected inside Wine, and window screenshots. See tools/uiauto/README.md.
- Installing Storyline from the Desktop App fails with "Directory has unexpected ACL" (Wine's security descriptors don't round-trip). Running the official Storyline bundle directly works (Run 07).
- Chromium (CEF) has no GPU. Wine's d3d11 has no WARP device and hardware ANGLE fails, so the start page and browser views use software rendering (Runs 09, 16).
- Slower than Windows. New Project loads in about 3.4 s (Run 15), and publishing Numbers-French-SL2 to Web takes 55–64 s (Run 28). Most of the remaining start-up time is .NET JIT (Run 12).
- Slide text isn't truly sharp on Retina. Storyline is DPI-unaware, so Wine doubles its windows. xBR keeps edges crisp, but rendering at 2× would break Storyline's fixed-pixel layout (Run 25).
- Double-clicking a
.storyfile in Finder starts Storyline without opening the project, because the launcher gets no file argument from Finder's Apple Event. Passing the file to the launcher script works (see Set up, Run 27). - The Japanese and Chinese candidate list opens at the bottom left of the slide canvas rather than next to the typed text, because Storyline doesn't report its caret position (Run 30).
- Screen recording's picture is untested with the final patch. Patch 0035 gives Wine's Mac driver a screen read; the CoreGraphics version recorded in Storyline but slowly, and the ScreenCaptureKit stream that replaced it has only been exercised through its fallback, because macOS grants Screen Recording only to processes the launcher starts (Run 36).
- Screen recording's microphone meter stays flat, although the narration records. Storyline reads the level through Windows'
IAudioMeterInformation, which Wine doesn't implement (Run 36). - Desktop Service start-up still spends about 4 s retrying a missing Review backups file, inside Articulate's code (Run 22).
- Not tested: Apple Silicon, the Desktop App's secondary dialogs with Retina mode on, and multi-select in the native open panel.
Open work is tracked in issues: a test plan covering five years of Storyline release notes (#27) and a pinned prebuilt Wine with a one-command installer (#32).
| Step | Result | Run |
|---|---|---|
| Xcode CLT | Was broken (missing libc++ headers); clean reinstall fixed it | logs/macports/clt-reinstall.txt |
| MacPorts + Wine 11.16 install | OK — binary archives; only gd2/graphviz built from source |
logs/macports/ |
| Burn bootstrapper UI (WPF, under Wine Mono) | Renders correctly | 01 |
| VC++ 2015–2022 x86 / x64 | OK (0x0) | 01 |
| Core MSI, stock prefix | FAIL 0x80070643 — RegisterScheduledTaskAction hits Wine stub ITaskSettings::get_IdleSettings (E_NOTIMPL) |
01 |
Core MSI with DisableNonAdminInstalls=true |
OK (0x0) — Articulate's documented setting skips the task | 02 |
Articulate 360 Desktop App.exe, Wine Mono |
FAIL — TypeLoadException: EventLogInvalidDataException missing from Mono's System.Core |
03 |
| Original EXE, real .NET 4.8 prefix | degrades — Burn can't host managed BA (0x8007000e), installs nothing | 04a |
| Core MSI direct, real .NET 4.8 | FAIL 1603 — DTF custom action can't create CLR AppDomain (0x8007000E) | 04b |
Core MSI admin layout (msiexec /a) + registry import |
OK | 04c |
Articulate 360 Desktop App.exe, real .NET 4.8 |
RUNS — service spawned, RPC OK, HTTPS OK | 04d |
| Sign-in / entitlement / catalog (Gate 1) | PASS via OIDC loopback fallback (custom-scheme handler timed out on macOS) | 04d |
| Restart persistence, HiDPI, Dock launcher | OK (~/Applications/Articulate 360.app) |
04e |
| Storyline install from the app | BLOCKED — app forces a Desktop App self-update first; update runs Burn → CLR hosting fails | 04e |
| Root cause of CLR hosting failure | FOUND — Wine gives 32-bit processes 0x7fff0000-0x7fffffff (wow64 default_zero_bits) |
05 |
Patched ntdll.so research build |
WORKS — core MSI custom actions run; original EXE installs end-to-end under real .NET 4.8 | 06 |
| Storyline install (official bundle, direct) | INSTALLED — all 5 packages 0x0 incl. .NET Desktop Runtime 10 | 07 |
| Install via Desktop App → Installer Service | FAIL — "Directory has unexpected ACL" (Wine security-descriptor round-trip) | 07 |
| Area | Result | Run |
|---|---|---|
| Storyline launch + start page | RUNS (CEF GPU process fails → software fallback, slow first paint) | 08 |
| New Project → text layout | FIXED by patch 0002 — authoring window renders, 0 exceptions | 08 |
| Save / Player dialog / Publish | WORKS — Save round-trips; Publish to Web, LMS (SCORM 1.2 and 2004) and Video produce output that plays in Chromium. Run 09's failures were the null player fixed by patch 0012 | 09, 27 |
| Incident | T2 ANS2 (SSD controller) panic during heavy +file tracing — tracing rules added |
09 |
| CEF GPU (start-page panel, browser views) | degraded — Wine d3d11 has no WARP device; hardware ANGLE also fails; software fallback after retries. Views drew nothing because winemac can't show a child window drawn by another process; --in-process-gpu keeps CEF's compositor in Storyline |
09, 16 |
| Graphics feature level | FIXED by patch 0003 — Direct3D feature level 9_3 → 11_1 on MoltenVK | 10 |
| Desktop App drawing on the Vulkan renderer | FIXED by WPF software rendering (was clipped labels and stray lines; OpenGL renderer drew a blank window; patch 0005 ruled out; 0006 was not deployed then) | — |
| Text box editing | FL fixed (0003), D2D shaders fixed (0004); the "freeze" is the AI writer popup's 30 Hz layered-window loop — CPU 182% → 63% with 0005 (0006 was not actually deployed until Run 14) | 11 |
| New Project load | 20.9 s → 13.7 s warm (RNG + colour-space patches); rest is .NET JIT of IL-only assemblies | 12 |
| Text cursor in text boxes and Notes | FIXED by patch 0008 — Wine's d2d1 drew MASK_INVERT images as plain source-over, so the white caret was invisible; caret still takes a while to appear |
13 |
| Performance instrumentation | tools/perf/perf-session.sh + patch 0009 (WINE_PERF_LOG=1): caret/typing latency, D2D paint cost, layered-window load, CPU per process |
14 |
| Click delay and New Project load | FIXED by patch 0012 — Wine didn't answer GetLocaleInfoEx(LOCALE_SNAME) for unknown well-formed locale names, so Storyline's player failed to load and was rebuilt on every click; click → caret 3.3 s → 0.23 s, load 30–38 s → 3.4 s |
15 |
| Preview | WORKS — the null player came from the locale gap fixed by patch 0012 (Run 15); the blank preview pane was CEF drawing from a separate GPU process, fixed by --in-process-gpu in the launcher |
16 |
| Story View scene-card shadows | FIXED by patch 0013 — Wine's gdiplus ignored preset blends on path gradient brushes, so the rounded shadow corners painted solid white | 17 |
| Pill buttons (Save / Don't Save / Cancel…) | FIXED by patch 0014 — Wine's GdipClosePathFigures never closed a path's last figure, so the antialiased outline skipped the bottom edge and left nubs at both ends |
17 |
| Start screen right panel (Articulate's web content) | FIXED by patch 0015 — the panel is an IE WebBrowser (Wine's mshtml + Gecko), kept hidden until ProgressChanged reports a finished load; Wine never fired that event, so the panel stayed blank |
18 |
| Busy cursor (e.g. after New Project) | FIXED by patch 0016 — winemac had no Mac equivalent for the Windows wait and app-starting cursors, so it drew the Windows hourglass; it now shows AppKit's busy cursor | 19 |
| CEF start-up | --enable-features=NetworkServiceInProcess2 in the launcher runs Chromium's network service as a thread instead of another Storyline.exe (.NET boot); Cef.Initialize 2.3 s → 1.9 s mean of 3 traced cold launches |
20 |
| Image decoding (icons, WIC) | FIXED by patch 0017 — windowscodecs re-read the codec lists from the registry on every decode (~97 wineserver round trips per image); small icons 1.9 ms → 0.26 ms each | 21 |
| Desktop Service wait at launch | IMPROVED — the Dock launcher starts the service before Storyline asks for it; cold launch waits 12–13 s instead of 18–21 s for the service. About 4 s left is the service retrying a missing Review backups file (inside Articulate; not fixable here). Warm relaunches (service still running) wait 0.4 s | 22 |
| Storyline opened from the Desktop App | FIXED by patch 0018 — the Desktop App started Storyline.exe with none of the launcher's CEF switches (so no in-process GPU, which Preview needs, Run 16); WINE_APPEND_ARGS (set by both Dock launchers from tools/launcher/storyline-args.sh) makes Wine's CreateProcess add them |
23 |
| Crowded Home ribbon in slide view | FIXED by patch 0019 — when the ribbon is too narrow, Storyline collapses small buttons to icons, but Wine's DrawText still drew their labels into a negative-width rectangle, over the next group |
24 |
| Blurry text on Retina displays | IMPROVED by patch 0020 and Retina mode at 192 DPI — Storyline is DPI-unaware, so every pixel is doubled; Wine's default halftone doubling was the blurriest option, and the launchers now pick xBR (WINE_SCALE_FILTER=xbr), which keeps edges crisp and the 96-DPI layout unchanged. Truly sharp slide text needs Storyline to render at 2×, which breaks its fixed-pixel layout. Patch 0029 fixes a start-up race that sometimes turned Retina mode off for Storyline, which then opened at 720×407 with double-size web content |
25 |
| Triggers panel spacing | FIXED by patches 0021 and 0022 — Wine's gdiplus kept the outer transform visible inside BeginContainer, so WinForms counted each trigger's offset twice and pushed lines out of their rows; and an unbounded WinForms text rectangle wrapped negative after a viewport offset, so the "–" before each action vanished |
26 |
| Radio buttons and checkboxes on the slide canvas, Slide Layers thumbnails | FIXED by patch 0023 — Wine's gdiplus left most metafile records out of the frame bounds, dropped pen alignment and ResetClip on playback, and (after 0021) played back in container space instead of device space |
27 |
| Notch in circle outlines | FIXED by patch 0024 — a closed ellipse's last point sat a few ulps off its first, and widening turned the gap into a notch | 27 |
| Opening a project from the Dock launcher | FIXED in the launcher — Storyline opens only its first argument, so the project goes before the CEF switches, with a Mac path mapped to Z:. Finder double-click still does not pass the file |
27 |
| Publish speed | IMPROVED by patch 0025 — Wine gave every window under WinForms' message-only parking window a hidden IME window, and on macOS each one creates and destroys a Cocoa window; Numbers-French-SL2 to Web: content phase 49–50 s → 37–38 s, whole publish 66–77 s → 55–64 s (three cold runs each) | 28 |
| No-break spaces (issue #20) | FIXED by patch 0026 (opt-in, set by the launchers) — Storyline breaks a line at any character DirectWrite calls white space, and DirectWrite, on Windows too, calls U+00A0, U+2007 and U+202F white space; WINE_DWRITE_NBSP_NOT_WHITESPACE=1 stops that, so words joined by a no-break space wrap together (verified on the authoring canvas and in published output) |
29 |
| Japanese and Chinese candidate list position | IMPROVED by patch 0027 — Storyline draws its own text caret and never tells the IME where it is, so Wine gave macOS a position of 0,0 and the candidate list opened at the top left of the screen; it now opens at the bottom left of the slide canvas, where Windows puts the default IME window in the same case (not next to the typed text, because Storyline does not report its caret) | 30 |
| "New"/"Beta" feature badges (e.g. next to AI Assistant) | FIXED by patch 0028 — Storyline draws the badge text with DrawText into a rectangle of the point plus int.MaxValue, which overflows to a huge negative edge; Wine clipped the text to that inverted rectangle and drew an empty blue box, and now treats an edge that wrapped around as unbounded |
31 |
| Antialiasing (e.g. the AI Assistant "Use experimental features" toggle) | FIXED by patch 0030 — Wine's gdiplus stored SmoothingModeAntiAlias but never used it, so curves and diagonal edges were jagged; path fills and strokes now take 16 samples per pixel and blend by coverage, and anti-aliased strokes are widened at GDI+'s default 0.25 px flatness instead of 1 px |
32 |
| Open, Save and folder dialogs (Insert > Audio, Save As, Publish folder) | NATIVE with patch 0031 — Storyline's WinForms dialogs go through Wine's common item dialog, which drew a Windows XP-style file browser; it now shows the macOS open and save panels, with the file type filters in a "File type" menu, and returns the choice to Storyline as a Windows path. Dialogs with custom controls keep Wine's dialog, and WINE_MAC_FILE_DIALOGS=0 turns the Mac panels off |
33 |
| Text box borders cut off on the right (Publish > Project Info and other Metro text boxes) | FIXED by patch 0032 — Storyline's MetroTextBox paints its border through a window DC, with a gradient pen for the side lines; Wine's gdiplus clipped that pen's software drawing to the text box's client area, 6 px smaller on every side, so the right edge vanished and the left edge stopped partway down |
34 |
| Date picker calendar (Publish > Project Info > Date "Custom") | NATIVE with patch 0033 — the drop-down opened Wine's Windows-style month calendar; it now opens the macOS calendar popover, and picking a day sets the date. One-digit day and month fields are sized to their text, so "9 /30/2026" reads "9/30/2026". WINE_MAC_DATE_PICKER=0 brings back Wine's calendar |
35 |
| Microphone in screen recording | FIXED by patch 0034 and the launchers — the recording dialog listed the Mac mic under Speakers and left Microphone empty, because Wine's mixerOpen ignored MIXER_OBJECTF_WAVEIN and opened the first output device's mixer; and macOS silently fed silence to the mic, because the launchers had no NSMicrophoneUsageDescription |
36 |
| Screen recording picture | PATCHED, not yet tested in Storyline by patch 0035 — recordings were black, because Wine's Mac driver had no way to read the screen and every GDI copy from a screen DC returned an empty frame; macdrv_GetImage now serves those reads from a ScreenCaptureKit stream, with a CoreGraphics screenshot as the fallback |
36 |
- Patched Wine:
~/StorylineLab/wine-patched/is a symlink mirror of/opt/local/lib/winewith only the patched modules replaced —ntdll.so(0001, 0007, 0011),dwrite.dll(0002, 0026),wined3d.dll(0003),d2d1.dll(0004, 0008, 0009),winemac.so(0005, 0010, 0016, 0029, 0031, 0033, 0035),winemac.drv(0031, 0033),comdlg32.dll(0031),comctl32.dllandcomctl32_v6.dll(0033),win32u.so(0006, 0009, 0020, 0022, 0025, plus MacPorts' Vulkan portability patch),kernelbase.dll(0012, 0018),gdiplus.dll(0013, 0014, 0021, 0023, 0024, 0030, 0032),ieframe.dll(0015),windowscodecs.dll(0017),user32.dll(0019, 0028),imm32.dll(0027) andwinmm.dll(0034) — plus a copy of the loader and asharesymlink. Patches are intools/wine-patches/; all of them are built bytools/wine-build/build-ntdll.sh./opt/localis never modified. PE modules the prefix keeps its own copy of (e.g.system32/dwrite.dll) are replaced with the patched build too. - Prefix:
~/StorylineLab/prefixes/wine-dotnet48-noadmintask— real .NET Framework 4.8 (winetricks), Windows 10 mode,DisableNonAdminInstalls=true, Articulate 360 core laid out viamsiexec /a+ registry import, Storyline installed by the official bundle, .NET Desktop Runtime 10 x64 from that bundle. Mac driver:LeftCommandIsCtrl/RightCommandIsCtrl=y;RetinaMode=ywithLogPixels=192since Run 25 (it wasnbecause WPF dialogs went blank in Run 04e; the Desktop App's main window draws correctly with it on now, its secondary dialogs are not re-tested);Direct3D\renderer=vulkansince Run 10; WPF hardware acceleration off (HKCU\Software\Microsoft\Avalon.Graphics\DisableHWAcceleration=1) because the Desktop App drew clipped labels and stray lines through wined3d on Vulkan and nothing at all on OpenGL. - Launchers:
~/Applications/Articulate 360.appand~/Applications/Storyline 360.app(tools/launcher/) run the genuine EXEs on the patched Wine;~/Applications/Articulate360Bridge.apphandlesarticulate://sign-in callbacks. Both setWINE_MAC_APP_NAMESso the menu bar and Dock say "Articulate 360" and "Storyline 360" instead of "wine" (patch 0010 inwinemac.so, which names each process after its Windows exe). Both also sourcestoryline-args.sh, whoseWINE_APPEND_ARGSmakes the patchedkernelbase.dll(patch 0018) add Storyline's CEF switches however it is started, andWINE_DWRITE_NBSP_NOT_WHITESPACE=1, which turns on patch 0026. All three launchers, the bridge included, carry microphone and camera usage strings: macOS charges the mic to whichever of them started Storyline and refuses it silently without one. Screen recording also needs Screen Recording permission for that launcher, which macOS asks for on the first recording (patch 0035). Both setWINE_SCALE_FILTER=xbrso the patchedwin32u.so(patch 0020) doubles Storyline's windows with xBR on Retina displays. - Native Mac dialogs are on by default, with no launcher setting needed: the open, save and folder panels (patch 0031) and the date picker calendar (patch 0033).
WINE_MAC_FILE_DIALOGS=0andWINE_MAC_DATE_PICKER=0bring back Wine's own versions.
| Host | 2019 MacBook Pro 15,4 (Core i5, Iris Plus 645), macOS 15.7.9 |
| Wine | MacPorts wine-devel 11.16 (+ffmpeg +gstreamer, binary archive), with the patched modules built from the same 11.16 source; Wine Mono 11.3.0, Gecko 2.47.4 |
| Storyline | Storyline 360 3.125.37980.0 (64-bit) |
| MacPorts | 2.12.6 Sequoia pkg, SHA-256 + Developer ID/notarization verified |
| Input | articulate-360.exe (Burn 3.11.2, bundle 1.125.37980.0), SHA-256 bc725a70…c88e9 |
| Winetricks | release 20260125, tag commit 57063f0b… |
What it took to get the Desktop App signed in and the installers working.
-
Articulate 360 Desktop App signs in and shows the full catalog under Wine 11.16 + real .NET Framework 4.8 (Run 04). Desktop Service is spawned by the app; no Windows service or scheduled task needed.
-
msiexec /a(administrative install) lays the core package out without running any custom action; the only registry the real installer writes is three small keys, imported from a prefix where it did complete. -
Articulate's own OIDC loopback fallback completes sign-in when the
articulate://custom scheme has no macOS handler. A transport-only handler app is provided intools/macos-url-bridge/for the primary path. -
Upstream Wine 11.16 from MacPorts binary archives — no source build, no Gatekeeper workarounds.
-
Running the original
articulate-360.exeunmodified. The WPF managed bootstrapper paints and runs its detect/plan/apply phases under Wine Mono. -
Pre-setting
HKLM\Software\Articulate\Common\Settings\DisableNonAdminInstalls = "true"(REG_SZ) in the prefix before install. This is Articulate's own enterprise deployment switch; it makes the installer skip Task Scheduler registration, which is the only part of the core MSI Wine can't handle.
-
Native CLR hosting under real .NET 4.8 on stock Wine: both WiX Burn's
mbahostand DTFSFXCAfail with 0x8007000E creating an AppDomain, while managed EXEs run normally. Root cause is Wine's wow64 address range for 32-bit processes (Run 05); fixed by patch 0001 (Run 06). -
Xcode CLT as found on the machine:
clang++could not find<initializer_list>. Any C++ source build fails untilrm -rf /Library/Developer/CommandLineTools && xcode-select --install. -
MacPorts
port -s(force source build) is not needed and would be slow on this hardware; skip it unless patching Wine. -
Core MSI in a stock prefix: Wine's
taskschdstubsget_IdleSettings, and Articulate's custom action (using the managed TaskScheduler wrapper) throws on it. A Wine patch returning a stubIIdleSettingswould also fix this (not attempted; registry route was cheaper). -
Wine Mono as a stand-in for .NET Framework 4.8: good enough for the installer UI, not for the Desktop App (missing
System.Diagnostics.Eventing.Readertypes).
No Gatekeeper/SIP changes, no quarantine stripping, no --no-sandbox, no TLS/licensing/code-signing bypass, no patched or modified Articulate binaries, and nothing patched in memory. Every fix is in Wine. Outside Wine, the only settings that change how Articulate's software runs are:
DisableNonAdminInstalls, a registry value from Articulate's own deployment guide;- standard Chromium (CEF) command-line switches that the launchers pass to Storyline (
--disable-gpu,--in-process-gpuand--enable-features=NetworkServiceInProcess2); - the Windows setting that turns off WPF hardware acceleration for the Desktop App.
Scripts and documentation are MIT (LICENSE). The Wine patches in tools/wine-patches/ are LGPL-2.1-or-later, the same terms as Wine. tools/winetricks-20260125 is an unmodified, pinned copy of winetricks kept for reference, under its own LGPL-2.1-or-later license.
Not affiliated with, endorsed by, or supported by Articulate Global, LLC. Articulate 360 and Storyline 360 are trademarks of Articulate; the launcher icons in tools/launcher/ are drawn from scratch by the makeicon*.swift scripts to identify the apps in the Dock and are not Articulate artwork. Running Articulate software this way is unsupported by Articulate and requires your own licensed copy.