Back to Langflow

Investigation: Deprecated macOS Support — Impact on Langflow

docs/DEPRECATED_MACOS_SUPPORT_INVESTIGATION.md

1.10.0.dev2015.3 KB
Original Source

Investigation: Deprecated macOS Support — Impact on Langflow

Jira: LE-265
Date: 2026-04-02
Status: Complete
Related: LE-172 (PyTorch macOS x86_64 + Python 3.13 — resolved in PR #12469)


TL;DR

macOS Intel (x86_64) is in its final phase of deprecation across the entire ecosystem — Apple hardware, operating system, GitHub Actions runners, PyTorch, and the broader ML/AI stack. Langflow already has platform exclusion markers for the most critical torch-dependent extras (PR #12469), but additional deprecations in GitHub Actions runners, macOS versions, and upstream dependencies will require further action over the next 12–18 months.

Key decision required: Set a timeline to officially drop macOS x86_64 from Langflow's support matrix (recommended: Langflow 2.0 or Q4 2026, whichever comes first).


1. Deprecation Landscape

1.1 Apple Hardware & OS Timeline

EventDateImpact
Last Intel MacBook Pro shippedJune 2022No new Intel Mac hardware
macOS Ventura 13 (last Intel-supported release rumoured)Oct 2022Still receiving security updates as of early 2026
macOS Sequoia 15 releasedSept 2024Supports some Intel Macs — expected to be last
macOS 26 (Tahoe) expectedJune 2026Likely final macOS version supporting any Intel Mac
macOS 27 expected2027Expected to drop all Intel Mac support

Key fact: Apple's Rosetta 2 translates x86_64 binaries on Apple Silicon, but native ARM64 builds are preferred. Rosetta support for macOS is expected to continue but individual frameworks (e.g., Metal 3) are ARM-only.

1.2 GitHub Actions Runner Deprecation

RunnerArchitectureStatusDeprecation
macos-13Intel x86_64DeprecatedRemoved Dec 2025
macos-14ARM64 (M1)ActiveCurrent
macos-15ARM64 (M1/M2)ActiveCurrent
macos-latestARM64ActivePoints to macos-15
macos-latest-largeIntel x86_64Active but costlyAt risk — GitHub shifting to ARM
macos-26 (Tahoe)ARM64AvailableCurrent

Key fact: macos-latest-large is the only Intel x86_64 runner available. It is one of the most expensive GitHub Actions runners. GitHub has signaled the shift toward ARM-only macOS runners.

1.3 PyTorch macOS x86_64 Deprecation

EventDate
RFC to deprecate macOS x86_64 buildsNov 2023
PyTorch 2.2.2 — last Intel Mac wheels (cp310, cp311, cp312)March 2024
PyTorch 2.3.0 — no Intel Mac wheels at allApril 2024
Python 3.13 released (no PyTorch wheels for Intel Mac)Oct 2024

Result: No PyTorch wheel exists for macOS x86_64 + Python ≥ 3.13. PyTorch 2.2.2 is the last version with Intel Mac support, and it only covers Python 3.10–3.12.

1.4 Broader ML Ecosystem

LibrarymacOS x86_64 SupportNotes
PyTorch❌ Dropped (after 2.2.2)No wheels for Python 3.13+ on Intel
MLX❌ Never supportedApple Silicon only (arm64 + Python 3.12+)
MLX-VLM❌ Never supportedApple Silicon only
Metal SDK❌ ARM64 onlyMetal 3 requires Apple Silicon
TensorFlow⚠️ Limitedtensorflow-macos deprecated, replaced by tensorflow-metal (ARM64)
ONNX Runtime✅ Still supportedCross-platform, but CoreML EP is ARM64-optimized
sentence-transformers⚠️ Transitively brokenDepends on PyTorch — fails on Intel Mac + Python 3.13
Hugging Face Transformers⚠️ Transitively brokenSame PyTorch dependency chain

2. Current State of Langflow macOS Support

2.1 Platform Exclusion Markers in pyproject.toml

The following extras have platform markers excluding macOS x86_64 (as of PR #12469):

ExtraMarkerReason
altksys_platform != 'darwin' or platform_machine != 'x86_64'PyTorch direct + transitive dep (PR #12469)
langchain-huggingfacesys_platform != 'darwin' or platform_machine != 'x86_64'sentence-transformers → torch (PR #12469)
docling (binary)sys_platform != 'darwin' or platform_machine != 'x86_64'docling-ibm-models → torch (pre-existing)
easyocrsys_platform != 'darwin' or platform_machine != 'x86_64'easyocr → torch (pre-existing)
cugasys_platform == 'darwin' and platform_machine == 'arm64'CUDA alternative, ARM64 only on macOS
mlxsys_platform == 'darwin' and platform_machine == 'arm64' and python_version >= '3.12'Apple Silicon ML framework
metalNo marker (correct — cross-platform)metal_sdk==2.5.1 is getmetal.io cloud SDK, not Apple Metal

Extras with NO macOS exclusion that still work on Intel:

ExtraStatusNotes
docling-core✅ WorksMetadata-only, no torch dependency
ocrmac✅ Workssys_platform == 'darwin' — uses native Vision framework
langchain-unstructured✅ WorksNo torch dependency
graph-retriever✅ WorksNo platform-specific deps
All non-ML extras✅ WorksDatabase, API, monitoring, etc.

2.2 macOS-Specific Runtime Workarounds

WorkaroundLocationPurpose
OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES__main__.py, langflow_launcher.py, CI workflowsPrevents Objective-C fork safety crashes with gunicorn multiprocessing
os.environ["no_proxy"] = "*"__main__.py, langflow_launcher.pyAvoids proxy-related errors with gunicorn on macOS
os.execv() re-exec patternlangflow_launcher.pySets env vars before Objective-C runtime initializes
brew install protobufCI workflow (AMD64 only)protoc not available on Intel CI runners

2.3 CI Matrix Coverage

PlatformPython 3.10Python 3.12Python 3.13
macOS ARM64✅ Stable✅ Stable✅ Experimental
macOS AMD64 (Intel)✅ Stable✅ Stable⚠️ Experimental (continue-on-error)
Linux AMD64✅ Stable✅ Stable✅ Experimental
Windows AMD64✅ Stable✅ Stable✅ Experimental

3. Impact Assessment

3.1 What Works on macOS x86_64 Today

Langflow core functionality (flow builder, API, database, all non-ML components) works on macOS Intel with Python 3.10–3.13. The following features are unavailable:

  • ALTK (Agent Lifecycle Toolkit) components
  • HuggingFace/sentence-transformers embeddings
  • EasyOCR
  • Docling document processing (binary; docling-core metadata still works)
  • MLX inference
  • Metal GPU acceleration
  • CUGA

This is acceptable because Intel Macs lack the GPU capabilities (Metal 3, Neural Engine) that make these ML features performant.

3.2 What Will Break Next

TimelineEventImpact on Langflow
NowPyTorch has no Intel Mac wheels for Python 3.13+Already mitigated (PR #12469)
Q3 2026GitHub may deprecate macos-latest-large (Intel)Stable CI tests for macOS Intel would need migration or removal
Q4 2026macOS 26 (Tahoe) release — potentially last Intel-supporting macOSUsers on Intel Macs stop receiving macOS updates
2027macOS 27 drops Intel Mac supportIntel Mac users stuck on macOS 26; system Python/Homebrew may stop building for x86_64 macOS
2027+Homebrew, Python.org may drop macOS x86_64 buildsIntel Mac users can't easily install Python 3.14+

3.3 CI Cost Exposure

macos-latest-large (Intel x86_64) is the most expensive runner in the matrix:

  • GitHub Actions pricing: macOS large runners cost ~$0.12/min (10× Linux)
  • Current usage: 4 stable jobs + 1 experimental job = 5 Intel Mac CI jobs per workflow run
  • Estimated cost: ~$15–25 per full CI run for Intel Mac jobs alone

4. Recommendations

4.1 Immediate (No Action Needed)

PR #12469 has already addressed the most critical issue:

  • altk and langchain-huggingface excluded on macOS x86_64
  • docling and easyocr already excluded (pre-existing)
  • mlx, cuga are ARM64-only
  • ✅ Experimental CI uses continue-on-error: true

4.2 Short-Term (Langflow 1.10 / Q2 2026)

R1: Add platform_machine marker to metal extra — NOT NEEDED

metal_sdk is the SDK for getmetal.io (a cloud vector search/embedding service), not Apple's Metal GPU framework. It's a pure Python package (py3-none-any.whl) with no platform-specific dependencies. No marker change needed.

R2: Reduce macOS Intel CI to Python 3.12 only

Remove the Python 3.10 stable test on macOS AMD64. Python 3.12 is the most commonly deployed version and provides sufficient coverage:

yaml
# Remove from stable matrix:
# - os: macos
#   arch: amd64
#   runner: macos-latest-large
#   python-version: "3.10"

Saves: ~$5–7 per CI run, reduces alert noise.

R3: Document macOS support matrix in user-facing docs

Add a support matrix page to docs/ clarifying which features require Apple Silicon vs. work on Intel, so users have clear expectations.

4.3 Medium-Term (Langflow 2.0 / Q4 2026)

R4: Drop macOS x86_64 from CI entirely

Once GitHub deprecates macos-latest-large or macOS 26 ships:

  1. Remove all macos-latest-large entries from cross-platform-test.yml
  2. Remove the brew install protobuf step (only needed for Intel runners)
  3. Keep macos-latest (ARM64) as the sole macOS test target

Saves: ~$15–25 per CI run. Reduces matrix complexity.

R5: Audit and clean up OBJC fork safety workaround

The OBJC_DISABLE_INITIALIZE_FORK_SAFETY workaround in __main__.py and langflow_launcher.py applies to all macOS, not just Intel. However, once Intel is dropped:

  • Verify if the issue persists on Apple Silicon with current gunicorn/uvicorn
  • If ARM64-only deployments don't trigger the issue, consider removing the workaround
  • If still needed, keep it but document why

R6: Officially deprecate macOS x86_64 in release notes

Add a deprecation notice in the Langflow 2.0 release notes:

macOS Intel (x86_64) support is deprecated. Langflow 2.0 is the last version tested on Intel Macs. Future releases will only be tested on Apple Silicon (ARM64). Core functionality may continue to work, but ML features require Apple Silicon.

4.4 Long-Term (Langflow 2.x+ / 2027)

R7: Remove all macOS x86_64 platform markers

Once Intel Mac support is officially dropped, simplify pyproject.toml by removing the platform_machine != 'x86_64' guards — they become unnecessary clutter:

toml
# Before (with Intel exclusion)
altk = ["agent-lifecycle-toolkit>=0.10.1,<1.0; sys_platform != 'darwin' or platform_machine != 'x86_64'"]

# After (Intel dropped from support matrix)
altk = ["agent-lifecycle-toolkit>=0.10.1,<1.0"]

R8: Evaluate ARM64-only macOS features

With Intel out of the picture, lean into Apple Silicon capabilities:

  • MLX-based local inference as a first-class feature
  • Metal GPU acceleration for embedding generation
  • Neural Engine integration for on-device ML
  • CoreML model support via ONNX Runtime CoreML EP

5. Risk Matrix

RiskProbabilityImpactMitigation
GitHub removes macos-latest-large runnerHigh (12–18 months)CI breaks for Intel testsR4: Drop Intel from CI proactively
User complaints about missing ML features on Intel MacLowUser frustrationR3: Document support matrix clearly
metal_sdk fails on Intel Mac installN/AN/Ametal_sdk is getmetal.io cloud SDK — cross-platform, no issue
Python 3.14 drops macOS x86_64 supportLow (2027+)Core Langflow broken on IntelR6: Deprecation notice well in advance
OBJC fork safety workaround breaks on new macOSLowServer startup crashR5: Audit and test on macOS 26
Upstream deps (numpy, scipy) drop Intel Mac wheelsMedium (2027+)Broad installation failuresR6/R7: Official deprecation covers this

Current (Langflow 1.9.x)

Feature CategorymacOS ARM64 (Apple Silicon)macOS x86_64 (Intel)
Core (flows, API, database)✅ Full support✅ Full support
ML/AI components (ALTK, HuggingFace)✅ Full support❌ Excluded (no PyTorch wheels)
Document processing (Docling, EasyOCR)✅ Full support❌ Excluded (no PyTorch wheels)
Local inference (MLX, MLX-VLM)✅ Full support (Python 3.12+)❌ Not available (ARM64 only)
GPU acceleration (Metal, CUGA)✅ Full support❌ Not available (ARM64 only)
Native OCR (ocrmac)✅ Full support✅ Full support

Proposed (Langflow 2.0+)

Feature CategorymacOS ARM64 (Apple Silicon)macOS x86_64 (Intel)
All features✅ Full support⚠️ Deprecated — untested, best-effort

7. Summary of Action Items

#ActionTarget ReleasePriorityEffort
Exclude altk and langchain-huggingface on macOS x86_641.9.xCritical✅ Done (PR #12469)
R1Add ARM64 marker to metal extra❌ N/A (metal_sdk is getmetal.io cloud SDK, not Apple Metal)
R2Remove Python 3.10 macOS Intel from stable CI1.10Low4 lines YAML
R3Document macOS support matrix for users1.10MediumNew docs page
R4Drop macOS x86_64 from CI entirely2.0Medium~20 lines YAML
R5Audit OBJC fork safety on Apple Silicon2.0LowInvestigation
R6Official deprecation notice in release notes2.0MediumRelease docs
R7Remove x86_64 platform markers from pyproject.toml2.xLowCleanup
R8Evaluate ARM64-only macOS capabilities2.xLowFeature planning

Appendix A: Complete Platform Marker Inventory

All sys_platform and platform_machine markers in src/backend/base/pyproject.toml:

Line  53: jq         → sys_platform != 'win32'
Line  96: ocrmac     → sys_platform == 'darwin'                    (root pyproject.toml)
Line 258: metal      → (no marker — correct; getmetal.io cloud SDK, not Apple Metal)
Line 293: altk       → sys_platform != 'darwin' or platform_machine != 'x86_64'
Line 297: langchain-huggingface → sys_platform != 'darwin' or platform_machine != 'x86_64'
Line 310: docling    → sys_platform != 'darwin' or platform_machine != 'x86_64'
Line 312: easyocr    → sys_platform != 'darwin' or platform_machine != 'x86_64'
Line 327: cuga       → sys_platform != 'darwin' (non-Mac) + sys_platform == 'darwin' and platform_machine == 'arm64' (Mac ARM)
Line 331: mlx        → sys_platform == 'darwin' and platform_machine == 'arm64' and python_version >= '3.12'
Line 345: gassist    → sys_platform == 'win32'
ReferenceDescriptionStatus
LE-172PyTorch macOS x86_64 + Python 3.13 CI failure✅ Resolved (PR #12469)
LE-265Broader deprecated macOS support investigationThis document
pytorch/pytorch#114602PyTorch RFC: Deprecate macOS x86_64 buildsImplemented
PR #12469Exclude torch-dependent extras on macOS x86_64Merged/Open