Skip to content

Server package path pulls large Expo/React Native dependency tree into backend installs #123

@southkeys

Description

@southkeys

Library Version

1.3.1

React Native Version

Not used directly in the server-only consumer. The installed dependency tree resolves react-native@0.84.1.

React Version

19.2.4

Expo Version

Not used directly in the server-only consumer. The installed dependency tree resolves expo@55.0.8.

Minimal Reproduction

mkdir voltra-server-repro
  cd voltra-server-repro

  cat > package.json <<'EOF'
  {
    "name": "voltra-server-repro",
    "private": true,
    "version": "1.0.0"
  }
  EOF

> pnpm add @use-voltra/ios-server@1.3.1 react@19.2.4

Additional Information (Optional)

Then inspect what was installed:

> du -sh node_modules
> find node_modules/.pnpm -maxdepth 1 -type d | rg '@use-voltra|expo|react-native|hermes|babel'

Observed result:

  • about 306MB installed in node_modules
  • expo, react-native, @expo/, @react-native/, hermes-*, etc are all installed

Relevant package chain:

  • @use-voltra/ios-server depends on @use-voltra/ios
  • @use-voltra/ios contains mobile/runtime files that import expo and react-native

Example files from installed contents:

  • @use-voltra/ios/build/esm/VoltraModule.js imports expo
  • @use-voltra/ios/build/esm/components/VoltraView.js imports expo
  • @use-voltra/ios/build/esm/events.js imports react-native
  • @use-voltra/ios/build/esm/preload.js imports react-native

Server-side rendering path appears to only need the shared iOS primitives and renderer, but currently the install
pulls the full mobile stack.

Additional Information
This came up in a backend/plugin environment where we only need server-side Live Activity rendering.

We are not importing client/mobile Voltra APIs. We only need the server rendering path conceptually equivalent to:

import { Voltra, renderLiveActivityToString } from 'voltra/server'

The issue is not runtime correctness. The issue is install footprint and package graph shape for server-only
consumers.

What seems to be happening:

  • voltra/server re-exports from @use-voltra/ios-server
  • @use-voltra/ios-server depends on @use-voltra/ios
  • @use-voltra/ios mixes shared iOS component/primitives exports with mobile-only Expo/React Native helpers
  • package managers install the whole package, so server-only consumers still get the mobile stack

This is especially painful in plugin installs where dependencies are installed into isolated plugin directories.

If useful, I can provide:

  • full package tree output
  • disk usage breakdown
  • exact installed-file references

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions