Posted 8 February 2026, 5:09 pm EST
Hello Mescius Support Team,
We’re in the process of adopting the new SpreadJS Collaboration Server and would appreciate guidance on recommended backend integration patterns, especially where collaboration intersects with server-side spreadsheet introspection and automated updates.
High-level architecture
Our application is hosted in Azure and consists of:
- Frontend: React SPA using:
- SpreadJS
- SpreadJS Designer Component
- Backend API: .NET / EF Core
- PostgreSQL (Npgsql)
- HotChocolate GraphQL + REST endpoints
- Azure Service Bus listeners for async/batch workflows
- Simulation system:
- Multiple .NET microservices
- Workflow orchestration via Service Bus topics/subscriptions
- Simulation results written to Blob Storage, with completion events sent via Service Bus
Pre-collaboration approach
Before adopting collaboration:
- Each spreadsheet was stored as SpreadJS SJS binary (
) in PostgreSQL via EF.bytea - On demand, the .NET API:
- Loaded the SJS
- Opened it using Document Solutions for Excel (DsExcel)
- Read (and occasionally wrote) spreadsheet data programmatically
- Simulation completion handlers (Service Bus processors in .NET) would:
- Load the spreadsheet
- Insert simulation results using DsExcel
- Save the updated SJS back to the database
Current collaboration setup
We have now implemented:
- SpreadJS Collaboration Server (Node.js) with:
- PostgreSQL backend (separate database/schema from our .NET API)
- Default OT snapshot + operation storage as documented
- React client using SpreadJS Designer connected directly to the collaboration server
In this new model:
- The spreadsheet SJS is no longer stored in our .NET database
- The collaboration server owns persistence via its snapshot/operation model
Challenges we’re trying to solve
We have two primary concerns and want to align with best practices rather than building against internal assumptions.
1. Backend introspection / read-only access
Our .NET API still needs to load and introspect spreadsheets to extract structured data (tables, named ranges, calculated values, etc.).
Previously, DsExcel operated directly on stored SJS files.
With collaboration:
- The persisted format is a collaboration snapshot, not SJS or SSJSON
- DsExcel cannot open collaboration snapshots directly
Questions:
- Is the recommended approach to:
- Export the current collaboration document to SJS / SSJSON / XLSX via the collaboration server and then consume that in DsExcel?
- Are there supported or recommended APIs/patterns for server-side “read-only” access to collaboration documents?
- Is running SpreadJS headlessly in Node to load a snapshot and extract values considered a supported approach?
2. Automated spreadsheet updates from simulation workflows
When simulations complete, their results must be inserted into the spreadsheet automatically.
Previously:
- This was done in .NET via Service Bus listeners using DsExcel.
With collaboration:
- The spreadsheet is now owned by the collaboration server
- Writing directly to the collaboration database is clearly undesirable
Questions:
- Is the recommended approach to:
- Apply updates as collaboration operations (e.g., via a “bot” or server-side client that joins the document and writes data)?
- Is there guidance or examples for server-side, non-interactive updates to collaborative spreadsheets?
- Would you recommend moving Service Bus processing related to spreadsheet updates into the Node collaboration service, or exposing an API on the collaboration service that applies updates on behalf of other backend systems?
What we’re trying to avoid
- Writing directly to collaboration PostgreSQL tables
- Relying on undocumented snapshot formats
- Designing a workflow that will break with future collaboration updates
What we’re looking for
- Confirmation of supported / recommended integration patterns
- Clarification on how Mescius envisions:
- Backend reads
- Backend writes
- Automated (non-user) edits
in a collaborative SpreadJS environment
- Any relevant documentation, samples, or architectural guidance we may have missed
We’re happy to share simplified code samples or diagrams if that helps clarify our use case.
Thanks in advance for your help — we’re excited about collaboration support and want to make sure we’re building on it correctly.
Best regards,
Eric
