MCPcopy
hub / github.com/gristlabs/grist-core

github.com/gristlabs/grist-core @v1.7.16 sqlite

repository ↗ · DeepWiki ↗ · release v1.7.16 ↗
18,662 symbols 68,696 edges 1,754 files 2,907 documented · 16%
README

Grist

Grist is a modern relational spreadsheet. It combines the flexibility of a spreadsheet with the robustness of a database.

  • grist-core (this repo – also known as Grist Community edition) has what you need to run a powerful server for hosting spreadsheets.
  • grist-desktop is a Linux/macOS/Windows desktop app for viewing and editing spreadsheets stored locally.
  • grist-static is a fully in-browser build of Grist for displaying spreadsheets on a website without back-end support.

Grist is developed by Grist Labs, an NYC-based company 🇺🇸🗽. The French government 🇫🇷 organizations ANCT Données et Territoires and DINUM (Direction Interministérielle du Numérique) have also made significant contributions to the codebase.

The grist-core, grist-desktop, and grist-static repositories are all open-source (Apache License, Version 2.0). Grist Labs sells an edition of Grist with additional features. Grist Labs also offers free and paid hosted services at getgrist.com, as well as cloud packaging.

Questions? Feedback? Want to share what you're building with Grist? Join our official Discord server or visit our Community forum.

To keep up-to-date with everything that's going on, you can sign up for Grist's monthly newsletter.

https://github.com/user-attachments/assets/fe152f60-3d15-4b11-8cb2-05731a90d273

Features in grist-core

To see exactly what is present in grist-core, you can run the desktop app, or use docker. The absolute fastest way to try Grist out is to visit docs.getgrist.com and play with a spreadsheet there immediately – though if you do, please read the list of additional features that are not in grist-core.

However you try it, you'll quickly see that Grist is a hybrid database/spreadsheet, meaning that:

  • Columns work like they do in databases: they are named, and they hold one kind of data.
  • Columns can be filled by formula, spreadsheet-style, with automatic updates when referenced cells change.

This difference can confuse people coming directly from Excel or Google Sheets. Give it a chance! There's also a Grist for Spreadsheet Users article to help get you oriented. If you're coming from Airtable, you'll find the model familiar (and there's also our Grist vs Airtable article for a direct comparison).

Here are some specific feature highlights of Grist (🇫🇷 marks heavy French govt. contributions):

  • Python formulas.
  • A portable, self-contained format.
    • Based on SQLite, the most widely deployed database engine.
    • Any tool that can read SQLite can read numeric and text data from a Grist file.
    • Enables backups that you can confidently restore in full.
    • Great for moving between different hosts.
  • Can be displayed on a static website with grist-static – no special server needed.
  • A self-contained desktop app for viewing and editing locally: grist-desktop.
  • Convenient editing and formatting features.
    • Choices and choice lists, for adding colorful tags to records.
    • References and reference lists, for cross-referencing records in other tables.
    • Two-way references that automatically synchronize between tables.
    • Attachments, to include media or document files in records.
    • Dates and times, toggles, and special numerics such as currency all have specialized editors and formatting options.
    • Conditional Formatting, letting you control the style of cells with formulas to draw attention to important information.
    • Markdown formatting in text cells.
  • Drag-and-drop dashboards.
    • Charts, card views and a calendar widget for visualization.
    • Summary tables for summing and counting across groups.
    • Widget linking streamlines filtering and editing data. Grist has a unique approach to visualization, where you can lay out and link distinct widgets to show together, without cramming mixed material into a table.
    • Filter bar for quick slicing and dicing.
    • Duplicate widgets to quickly build variations of a view.
    • Compare documents to see what changed.
  • Incremental imports.
    • Import a CSV of the last three months activity from your bank...
    • ...and import new activity a month later without fuss or duplication.
  • Native forms. Create forms that feed directly into your spreadsheet without fuss.
    • Supports file attachments, hidden fields, and pre-population via URL parameters.
  • Integrations.
  • Many templates to get you started, from investment research to organizing treasure hunts.
  • Access control options.
  • Collaboration.
    • Comments on cells, with threaded replies and @-mentions.
    • See who else is viewing a document in real time.
    • Suggest changes for others to review and approve, inspired by source control workflows.
  • Self-maintainable.
    • Useful for intranet operation and specific compliance requirements.
    • Sign in with getgrist.com for easy authentication without running your own auth server.
    • Store attachments externally in S3-compatible storage to keep .grist files small (🇫🇷).
    • HTTP long polling as an alternative to WebSockets for restrictive network environments (🇫🇷).
  • Sandboxing options for untrusted documents.
    • On Linux or with Docker, you can enable gVisor sandboxing at the individual document level.
    • On macOS, you can use native sandboxing.
    • On any OS, including Windows, you can use a Wasm-based sandbox via Deno and Pyodide.
  • Translated to many languages (🇫🇷).
  • A high-contrast theme meeting WCAG level AA requirements (🇫🇷).
  • F1 key brings up some quick help. This used to go without saying, but in general Grist has good keyboard support (🇫🇷).
  • We post progress on 𝕏 or Twitter or whatever and publish monthly newsletters.

If you are curious about where Grist is heading, see our roadmap, drop a question in our forum, or browse our extensive documentation.

Features not in grist-core

If you evaluate Grist by using the hosted version at getgrist.com, be aware that it includes some features that aren't present in grist-core. To be sure you're seeing exactly what is present in grist-core, you can run the desktop app, or use docker.

Here is a list of features available in the full edition of Grist that are not in grist-core, in chronological order of creation. If self-hosting, you can get access to a free trial of all of them by selecting the full edition of Grist on the Admin Panel. The full edition of Grist is free for individuals and small orgs with less than US $1 million in total annual funding. Learn more about that here.

  • GristConnect (2022)
    • Any site that has plugins for letting Discourse use its logins (such as WordPress) can also let Grist use its logins.
    • GristConnect is a niche feature built for a specific client which you probably don't care about – OIDC and SAML support is part of grist-core and covers most authentication use cases.
  • Azure back-end for document storage (2022)
    • With grist-core you can store document versions in anything S3-compatible, which covers a lot of services, but not Azure specifically. The Azure back-end fills that gap.
    • Unless you are a Microsoft shop you probably don't care about this.
  • Audit log streaming (2024)
    • With grist-core a lot of useful information is logged, but not organized specifically with auditing in mind. Audit log streaming supplies that organization, and a UI for setting things up.
    • Enterprises may care about this.
  • Advanced Admin Controls (2025)
    • This is a special page for a Grist installation administrator to monitor and edit user access to resources.
    • It uses a special set of administrative endpoints not present on grist-core.
    • If you're going to be running a large Grist installation, with employees coming and going, you may care about this.
  • Grist Assistant (2025)
    • An AI Formula Assistant - limited to working with formulas - is present in grist-core, but the newer Assistant can help with a wider range of tasks like building tables and dashboards, styling and formatting, explaining access rules, and modifying data.
    • If you have many users who need help building documents or working with data, you may care about this one.
  • Invite Notifications (2025)
    • When a user is added to a document, or a workspace, or a site, with email notifications they will get emailed a link to access the resource.
    • This link isn't special, with grist-core you can just send a link yourself or a colleague.
    • For a big Grist installation with users who aren't in close communication, emails might be nice? Hard to guess if you'll care about this one.
  • Document Change and Comment Notifications (2025)
    • You can achieve change notifications in grist-core using webhooks, but i

Extension points exported contracts — how you extend this code

ExternalFormat (Interface)
* Interface for an object that should convert data from external source to TableDataAction format. [16 implementers]
app/client/components/VirtualDoc.ts
ExternalStorage (Interface)
(no doc) [9 implementers]
app/server/lib/ExternalStorage.ts
DocSchemaImportWarning (Interface)
(no doc) [9 implementers]
app/common/DocSchemaImport.ts
GristDocAPI (Interface)
(no doc) [4 implementers]
app/plugin/GristAPI.ts
Foo (Interface)
* A Dummy Api to contribute to. [1 implementers]
test/client/lib/SafeBrowser.ts
EnterCellOptions (Interface)
* Display the active cell editor and type keys in it, then hit Enter to save, and wait for the server. * If the last
test/nbrowser/gristUtils.ts
QueryRunnerSource (Interface)
* QueryBuilders keep track of a runner that we need for getRawAndEntities, * but access is protected. This interface d
app/gen-server/sqlUtils.ts
NestedLogLevel (Interface)
(no doc) [1 implementers]
test/server/testUtils.ts

Core symbols most depended-on inside this repo

find
called by 4915
app/client/ui/App.ts
click
called by 3934
test/nbrowser/elementUtils.ts
t
called by 2652
app/client/lib/localization.ts
create
called by 1819
app/server/lib/ISandbox.ts
map
called by 1664
app/client/lib/Signal.ts
get
called by 1556
app/common/RecordView.ts
dom
called by 1347
app/client/lib/dom.js
get
called by 1312
app/client/components/Drafts.ts

Shape

Method 8,976
Function 6,351
Class 2,041
Interface 1,274
Enum 19
Route 1

Languages

TypeScript87%
Python13%

Modules by API surface

test/nbrowser/gristUtils.ts431 symbols
app/common/UserAPI.ts311 symbols
app/gen-server/lib/homedb/HomeDBManager.ts250 symbols
app/server/lib/ActiveDoc.ts205 symbols
app/server/lib/GranularAccess.ts195 symbols
app/client/aclui/AccessRules.ts187 symbols
app/server/lib/FlexServer.ts172 symbols
app/server/lib/GristServer.ts142 symbols
sandbox/grist/useractions.py117 symbols
app/client/components/GridView.ts109 symbols
app/client/components/FormRenderer.ts109 symbols
app/server/lib/DocStorage.ts107 symbols

Dependencies from manifests, versioned

@babel/core7.29.6 · 1×
@babel/eslint-parser7.28.5 · 1×
@emoji-mart/data1.2.1 · 1×
@googleapis/drive8.14.0 · 1×
@googleapis/oauth21.0.7 · 1×
@gristlabs/connect-sqlite30.9.11-grist.5 · 1×
@gristlabs/express-session1.18.1-grist1 · 1×
@gristlabs/grist-widget0.0.6 · 1×
@gristlabs/moment-guess1.2.4-grist.1 · 1×
@gristlabs/sqlite36.0.1-grist.1 · 1×
@popperjs/core2.11.8 · 1×
@storybook/addon-essentials8.6.18 · 1×

For agents

$ claude mcp add grist-core \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact