I Tested Univer: A Real Spreadsheet in Your App (and What's NOT Free)
Read the Portuguese translation →
Author: Prompt Engineer 48 · Watch on YouTube
Video authored by the channel shown, not by IANIA; all rights belong to the creator. Transcript and summary generated automatically; the original-language content is preserved.
Original language: English
Original video: I Tested Univer: A Real Spreadsheet in Your App (and What’s NOT Free) · Channel: Prompt Engineer 48 · 15:40 · Watch on YouTube
Topics: AI agents, Task and workflow automation, AI developer tools, Open source and software ecosystems
Summary
Section titled “Summary”The video tests Univer, an Apache 2.0 toolkit for embedding spreadsheets and other office editors in an app, and demonstrates a working spreadsheet created with a small amount of code. It explores browser-based and headless spreadsheet use, including formula calculations and performance, and shows how the CLI lets an agent draft, inspect, review, merge, and export office files locally. The main caveat is that many features, including charts, pivot tables, and spreadsheet import/export in the SDK, are part of the paid Pro offering rather than the free build. The presenter concludes that Univer is worth considering for embedded spreadsheets or agent workflows, provided users understand the feature and licensing boundaries.
Key points
Section titled “Key points”- Univer is an Apache 2.0 TypeScript SDK made up of packages and plugins for spreadsheets and other office formats.
- Preset mode provides a ready-to-use spreadsheet with little setup; plug-in mode offers finer control; headless mode runs the engine in Node.js without a browser.
- A browser spreadsheet was created with a small amount of code, and formulas recalculated after direct edits and changes made through the facade API.
- The headless formula engine calculates asynchronously, so reading values too soon can return null.
- In the demonstrated benchmark, filling 100,000 rows took about 1.5 seconds, and calculating 100,000 formulas took about 11–13 seconds; memory use was about 1,500 MB.
- The preset production build was 11 MB, with a 6.6 MB main JavaScript file before gzip; the presenter suggests lazy loading or plug-in mode when bundle size matters.
- Charts, pivot tables, Excel import/export in the SDK, collaboration, and other capabilities are among the features reserved for Univer Pro.
- The CLI supports isolated work trees for agent edits, with inspection and screenshots before a human reviews and merges changes; its execute command runs trusted JavaScript and is not a sandbox.
- The presenter tested local Excel and PowerPoint export with the CLI, but did not test the MCP server or install Univer Workspace.
- The CLI is Apache 2.0, but its bundled local-host development license for the Pro runtime does not mean Pro features can be shipped in a product for free; users should review the terms.
Chapters
Section titled “Chapters”| Start | Chapter | Summary |
|---|---|---|
| 00:00 | What Univer is and how it is structured | The presenter introduces Univer, its repository, plugin-based package family, and preset, plug-in, and headless modes. |
| 02:06 | Building and testing a spreadsheet | A small browser spreadsheet is created with preset mode, then edited manually and through the facade API as formulas update. |
| 04:12 | Free features, headless calculations, and performance | The video checks which features are absent from the free SDK, demonstrates asynchronous headless calculations, and measures computation and bundle size. |
| 07:20 | Agent workflows with the Univer CLI | The presenter sets up the CLI and demonstrates an isolated spreadsheet draft that is edited, inspected, reviewed, merged, and exported. |
| 10:29 | Round trips, slides, and the wider ecosystem | The video checks an Excel import round trip, demonstrates a simple PowerPoint slide, and discusses CLI skills, the untested MCP server, and Workspace. |
| 12:34 | Free versus Pro and final assessment | The presenter outlines the free and paid feature boundary, summarizes the observed pros and cons, and explains who might find Univer useful. |
Quotes
Section titled “Quotes”The same calls work in the browser and in node. — 03:42
The formula engine calculate asynchronously. — 05:13
It is not a sandbox. So only run code you trust. — 09:24
Read the license terms before you build on it. — 13:37
the foundations look really good and the free and paid line is the thing you must understand before you start. — 15:10
Concepts and entities
Section titled “Concepts and entities”Univer, Univer CLI, Univer Pro, Univer MCP server, facade API, headless mode, work tree, dream-num/univer, Univer Workspace
Full transcript (original language)
Section titled “Full transcript (original language)”00:00 All right, in this video we are going to look at Univer, an open- source toolkit that lets you put a full spreadsheet inside your own app with about 20 lines of code. And you can see that the formulas work, the totals update, and I can even write into the sheet from code while it’s running. Now, mind you, I tested all of this on my own laptop, no cloud. Let’s go ahead and see what’s real and what’s not. So, what is Univer? It’s an Apache 2.0 O license SDK written in Typescript. And the pitch on the repo
00:30 page right now is the office harness for AI agents. It gives you spreadsheets, documents, slides, canvases, relational tables, and PDF in one runtime. The idea is you don’t send your users to Excel or Google Sheets. You embed the editor in your own product and you control it with code just to ground this in reality. Here are the numbers from the repo page when I recorded this. over 22,000 stars, about 1,900 forks, over 5,800 commits, 150 tags, and the latest release version
01:01 1.0.3 went out 2 days before I recorded. The last commit on the main branch was about an hour old, so this is very much alive and moving fast. Let me pull a few live numbers straight from the GitHub API, so you don’t just have to trust my screenshot. The main repo has 60 packages in its packages folder, and the presets folder has 17 more. You can see the names scroll by sheets, docs, formula engine, render engine, conditional formatting, data validation, find and replace, themes, and a view adapter. So, this is not one library.
01:33 It’s a whole family of small plugins. And that is why plug-in mode exists. And the last line confirms the rest about 22,000 stars. 1869 forks, Apache 2.0, and a push from the day I recorded. Now, there are three ways to run it, and this matters for how you start. Preset mode is a curated bundle of plugins, so you get a working sheet with almost no setup. Plug-in mode gives you full control over every package, which is what you want for custom bundles and lazy loading. And headless mode runs the same engine in Node.js with no screen at
02:06 all, which is how you would let an AI agent or a back-end job crunch. A workbook. We are going to test all three. Let’s start with preset mode. I made a fresh empty project and I ran just one install command. Two packages. the presets package and the sheets core preset. And you can see PNPM resolved 122 packages in all finished in about 5 seconds. And the version is 1.0.3. That’s the whole dependency story for a working spreadsheet. And mind you, this is the real terminal, not an animation. And this is the entire main file. You
02:38 import the sheets core preset, the local, and create univer. You tell it which container to render into, and you call create workbook. Then with the sheet in hand, I write a small table with set values and a total row with set formulas. That’s it. There is no other setup. And this is the real file that I ran. And here it is running in the browser. You can see a real spreadsheet with a ribbon, a formula bar, sheet tabs, and the grid. The totals row says 470, 515, and 565, which is exactly what
03:10 the formulas should give. Now I’ll click a cell and type a new formula myself equals B6 - B2 and it gives 350 470 - 120 correct. Then I change the north Q1 number to 500 and the total updates by itself from 470 to 850. And now watch the column on the right. That is code writing into the live sheet using the facade API while the app is running. Really nice. That facade API is the part I like most. Instead of poking at
03:42 internal commands, you get one friendly object. You grab a workbook, a worksheet, a range, and you call methods like set values, set formulas, set bold, set background. The same calls work in the browser and in node. So the logic you write once can run in both places. That is a really big deal if you want an agent to edit the same sheet your user is looking at. Now, let me be honest about what the free version looks like. If you look at the ribbon here, I only have three tabs. Start formulas and
04:12 view. There is no insert tab and no chart button. And that is not a bug. Per the repo’s own table, charts, pivot tables, import and export of Excel files, real-time collaboration, printing, and a few more are part of Univor Pro, which is a separate commercial product. So, the open- source build is a very good editor and calculation engine, but it’s not a free Excel clone. And I don’t want you to just take the table’s word for it. So, I checked the API itself. I made the same headless workbook and listed every
04:43 method on the worksheet and on the workbook 117 methods on the worksheet 57 on the workbook and when I search for chart pivot or spark line the list is empty. Same for export print and import on the workbook but set values and set formulas are right there. So that matches the readme those features are simply not in the free packages. Okay. Now headless mode because this is where it gets interesting for AI work. This is a plain node script. There is no browser, no doom, no window. I create
05:13 universe with the node preset. Build a workbook, put a few hardware prices in a column, and add a sum and an average formula. Now, let me show you a real gotcha. I hit my first run printed null for both values. The formula engine calculate asynchronously. So, if you read the cell right away, there is nothing there yet. I even tried the calculation and helper and it still came back too early. So in the end I just waited a moment before reading and you can see the second run the sum is 1,09 and the average is 3 336.33
05:47 correct with no browser involved. If you build an agent on this wait for the calculation to finish before you trust a value. So next how fast is it? I wrote a benchmark that fills 100,000 rows with three columns which took about 1 and 1/2 seconds. Then I added a 100,000 formulas, each one multiplying two cells, and the engine finished all of them in about 12.9 seconds in this take, and 11.3 in my first run. I checked the last row against the right answer, and it matched a sum across all 100,000
06:18 cells, took about 6 seconds, and gave 1.25 billion. Now, mind you, the process used about 1,500 MGB of memory. So, this is not tiny, but for serverside spreadsheet math, that’s pretty usable. Now the other side of performance, the size of what you ship. I ran a production build and the output folder came to 11 megabytes with the main JavaScript file at 6.6 MGB which is about 1.7 megabytes gzipped. Most of the rest are language files. You can see each one is a few hundred kilobytes. So
06:49 if page weight matters to you, plan to lazy load this or use plug-in mode and take only the pieces you need. That is a real con of the preset approach. A few requirements to keep in mind. It targets Chrome 88 and newer with Edge, Firefox 90, and Safari 14.1 as the stated minimums. It needs the Intel. Segment feature. So, older browsers need a polyfill. The view layer is React and it supports React 18 and 19. Headless needs node 18.17 or newer. But if you want to
07:20 develop on the repo itself, you need node 22.18. So, nothing exotic, but read this list before you promise it to a client. Now the part that Univer is pushing hardest right now and that is agents. The idea is that an AI agent should work on office files the same way it works on code. It makes its edits in an isolated copy. It checks the result and then a human reviews and decides to merge or throw it away. The tool for that is the universe CLI. So let’s install it and use it exactly as an agent would. First problem and I want to
07:51 be fair about it. The CLI wants node 24 or newer and my machine had node 22. So I installed node 24 into the project folder together with the CLI from npm and I got version 0.4.4. Then I ran doctor and the first time it said blocked a demon build mismatch. That demon was left over from an earlier install of mine in another folder. The message tells you the fix. So, I ran demon stop, ran doctor again, and now it says ready, and it found Chrome for the screenshots. So, it works. But you can
08:23 see that a shared background demon can trip you up when you have two installs. The command list is a nice way to see how it’s designed. You have new and import to create a file or bring in Excel, Word, and PowerPoint files. You have work tree commands to add, mark, ready, merge, or discard a draft. Inspect reads data. Execute runs facade code. Screenshot renders what the unit really looks like and export gives you back real office files. All of it lives in one single universe file which is a
08:53 SQLite database on your own disk. So let’s do it like an agent. I create a new file called agent.univer. Then I open a work tree which is the isolated draft and you can see it gives back an ID. I check the status and notice the main file. The trunk has zero units. Then I add a sheet unit called budget to the work tree and nothing has touched the real thing yet. Now the edit. I wrote a small script that fills in a parts list with quantity and price. Adds a total column with formulas, a grand total, and styles the header row in dark
09:24 blue. And I run it with the execute command against the work tree. You can see it committed. So the draft now has a second commit. One thing worth saying, the doc state clearly that execute runs trusted JavaScript. It is not a sandbox. So only run code you trust. And this is the verify step which I think is the smartest part. The agent doesn’t just trust itself. It reads the data back with inspect. And you can see cell D6 holds the value 145 with the formula still attached. I did that math by hand. 799 + 120 + 90 + 36 and it matches. Then
09:58 it takes a screenshot of the actual rendered sheet so it can see the header color, the totals, everything the user would see. Once the check passes, the agent marks the work tree ready and a human merges it. I did that and you can see it merged into trunk. Then I exported the sheet and I got a real Excel file of 6,95 bytes about 7 kilobytes. So it goes from an AI edit to a review draft to a file you can open in Excel and the whole thing ran locally. No account, no API key. I like this flow a lot. Now let me
10:29 test the round trip because an export is only useful if it comes back correctly. I took that same Excel file I just exported and imported it into a brand new universe file. I read cell D6 and the value is still 145 and the formula sum of D2 to D5 survived. One small detail, the value came back as the text45 but with a number type. So keep an eye on that if you compare values strictly in code. It doesn’t stop at spreadsheets. I asked it to build a slide. The recommended way is to draw
11:00 one SVG that matches the page size and compile it into real editable shapes. I wrote a dark title slide with two stat cards, applied it, and the lint check came back with no problems. You can see the result here and I exported it as a PowerPoint file about 13 kilobytes. Mind you, this is a simple slide, so I wouldn’t call it a full presentation designer, but it proves the loop works for slides, too. One more detail, the CLI ships its own skills version matched to the install. When I listed them, I
11:32 got core, doc, sheet, slide, baseboard, embed, and crossunit formula. And there is an offline API reference too. I searched for set formulas and it found the exact method with its signature and I asked for the border method and got the types and the options. So an agent can look up the real API for the installed version instead of guessing from old training data. That’s a smart design. Now, there’s also a Univer MCP server, and I have to be upfront here. I did not test it. The readme says you first need an API key from the Universe
12:04 console, and you also need to launch a Universe instance, either in their playground or with a start kit. It also asks for a multimodal model, and the project calls itself early stage. I don’t create accounts for demos, so I’m leaving it for you to try. If you do, let me know how it goes. And the ecosystem around it is growing. There’s Univer Workspace, an open-source self-hosted workspace where people and agents create and review Office content. There are plugins for OpenClaw, Deepseek, and Workbuddy, and a skills repo for agents. I did not install
12:34 Workspace, so I can’t tell you how it runs, but as a reference on how to build a full product on top of the SDK, it’s a good thing to read. So, let’s talk about the open-source versus proslit because this decides whether it’s right for you. In the free repo, you get the core, the plug-in system, the render engine, the formula engine, the facade API, and the node headless runtime. For sheets, that means editing formulas, number formats, filter, sort, validation, conditional formatting, tables, and comments. Pro
13:06 adds collaboration, edit history, import and export, printing charts, pivot tables, spark lines, and serverside calculation for docs and slides. A lot of the polish is pro as well. There is one interesting twist. The CLI itself is Apache 2.0 and it exported Excel and PowerPoint files for me for free. But the readme explains that it bundles a local host development license for the Pro runtime which rotates every 90 days and that pro SDK packages and native bindings keep their own terms. So the
13:37 CLI is great for local agent style work, but that doesn’t mean you can ship those pro features inside your own product for free. Read the license terms before you build on it. So, here are the pros from what I actually saw. One, it took about 20 lines and one install to get a working spreadsheet with real formulas. Two, the facade API is clean and it’s the same in the browser and in Node. Three, headless calculation was correct. 100,000 formulas in about 11 to 13 seconds on my laptop. Four, the work
14:08 tree flow of draft, verify, review, merge is exactly how agents should touch important files. Five, the CLI exports real Excel and PowerPoint files with no key. And six, the project is clearly active with a release 2 days old and commits within the hour. And now the cons. Also, from what I saw, one, the free build doesn’t have charts, pivots, or Excel import and export in the SDK. Those are pro. Two, the bundle is heavy. 6.6 mgabytes of main JavaScript before
14:39 gzip. Three, headless values come back null if you read before the engine finishes. Four, the CLI needs node 24. The npm registry listed a newer version than the one I got, and a leftover demon from another install blocked me until I stopped it. Five, the MCP server needs an API key and is early stage, so I couldn’t verify it. And six, the memory use of about 1500 megabytes on a big sheet is something to watch on a small server. So, who is it for? If you are building a product that needs a real
15:10 spreadsheet inside it and you are fine with the open- source feature set or you’re willing to talk to them about Pro, then yes, it’s worth a serious look. If you’re building agent workflows that need to create and verify Excel and PowerPoint files, then the CLI is the part I would try first this week. And if you just want free charts and pivots in your own app, then no, read the Pro Table first. My honest take is the foundations look really good and the free and paid line is the thing you must understand before you start. So in this
15:40 video we have seen how to put a spreadsheet in an app with 20 lines of code, how to run the same engine headless in note and how an agent can edit, verify and export office files with the universe CLI. If you’re interested, you can go ahead and try this out on your own system and let me know how it goes, especially if you test the MCP server. The repo is dream-nam/univer. I’ll see you in another one. Check out the next video.