{"library":"react-relay-network-modern-ssr","title":"react-relay-network-modern-ssr","description":"Server-side rendering middleware for the react-relay-network-modern package, enabling data fetching and cache management for Relay Modern during SSR. Current stable version is 1.4.0 (released 2020-03-02), with infrequent releases. It provides a RelayServerSSR class that supports three modes: default fetch-based, direct schema injection with graphql-js, and asynchronous context preparation. Key differentiator: it requires two-pass rendering to populate the Relay store before final HTML output and ships TypeScript definitions. It is unmaintained since 2020 and relies on peer dependencies graphql, react-relay, and react-relay-network-modern.","language":"javascript","status":"maintenance","last_verified":"Sat Apr 25","install":{"commands":["npm install react-relay-network-modern-ssr"],"cli":null},"imports":["import RelayServerSSR from 'react-relay-network-modern-ssr/lib/server'","import RelayClientSSR from 'react-relay-network-modern-ssr/lib/client'","import SSRCacheMiddleware from 'react-relay-network-modern-ssr/lib/client'"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import express from 'express';\nimport ReactDOMServer from 'react-dom/server';\nimport { RelayNetworkLayer } from 'react-relay-network-modern';\nimport RelayServerSSR from 'react-relay-network-modern-ssr/lib/server';\nimport serialize from 'serialize-javascript';\nimport { Environment, Network, RecordSource, Store } from 'relay-runtime';\nimport schema from './schema';\n\nconst app = express();\n\napp.get('/*', async (req, res, next) => {\n  const relayServerSSR = new RelayServerSSR();\n\n  const network = new RelayNetworkLayer([\n    relayServerSSR.getMiddleware({\n      schema,\n      contextValue: {}\n    })\n  ]);\n\n  const source = new RecordSource();\n  const store = new Store(source);\n  const relayEnvironment = new Environment({ network, store });\n\n  // First render to kick off data fetching\n  ReactDOMServer.renderToString(<App relayEnvironment={relayEnvironment} />);\n\n  // Wait for all queries to complete\n  const relayData = await relayServerSSR.getCache();\n\n  // Second render with primed store\n  const appHtml = ReactDOMServer.renderToString(\n    <App\n      relayEnvironment={new Environment({\n        network: Network.create(() => relayData[0][1]),\n        store\n      })}\n    />\n  );\n\n  res.status(200).send(`\n    <html>\n      <body>\n        <div id=\"react-root\">${appHtml}</div>\n        <script>window.__RELAY_BOOTSTRAP_DATA__ = ${serialize(relayData)};</script>\n        <script src=\"/assets/bundle.js\"></script>\n      </body>\n    </html>\n  `);\n});\n\napp.listen(3000);","lang":"typescript","description":"Complete Express SSR setup with RelayServerSSR – two-pass rendering, schema injection, cache retrieval, and HTML serialization.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}