gristlabs / grist-core Goto Github PK
View Code? Open in Web Editor NEWGrist is the evolution of spreadsheets.
Home Page: https://www.getgrist.com/
License: Apache License 2.0
Grist is the evolution of spreadsheets.
Home Page: https://www.getgrist.com/
License: Apache License 2.0
A more systematic repository of example documents for getting started.
Available in "Examples and Templates" in left-side panel in documents.
There are some security-related certificates that some clients could benefit from, as an alternative to self-hosting Grist and dealing with compliance themselves. We should also confirm GDPR compliance.
Individual Grist documents are stored in SQLite and should support SQL, especially for querying, and ideally also for updating.
Allows someone with read-only access to open details of a cell (previously only truncated content was accessible).
It would be useful to support using libraries such as pandas, scipy, spacy, numpy etc. This requires both iteration on sandboxing (already in the works) and considering how formulas should operate with tabular inputs and outputs.
Links from one part of a document to are now easier to produce (with SELF_HYPERLINK
) and work more cleanly.
Support for cells containing multiple tags.
In addition to laying out widgets side-by-side as is currently possible, it is sometimes useful to collapse some widgets, or to expand one to the full screen. Mobile views address this in a way. Something similar should be available on the desktop.
Search within a document is now more predictable, and easier to limit to a single page.
Added on-boarding features for built-in instruction.
Hello,
I'm trying to import an sqlite database into Grist through open.
I'm getting the error:
Error opening document
You can try reloading the document, or using recovery mode. Recovery mode opens the document to be fully accessible to owners, and inaccessible to others. [NO_METADATA_ERROR: <ID> has no metadata]
Reload throws the same error and recovery mode throws in the console:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
BaseAPI.ts:113 Fetched http://0.0.0.0:8484/o/docs/api/docs/<ID>/recover
errors.ts:50 ERROR: Error: Request to http://0.0.0.0:8484/o/docs/api/docs/<ID>/recover failed with status 500: Internal Server Error (NO_METADATA_ERROR: <ID> has no metadata)
at u (BaseAPI.ts:142)
at d.<anonymous> (BaseAPI.ts:116)
at Generator.next (<anonymous>)
at s (main.bundle.js:12)
h @ knockout-latest.js:1
BaseAPI.ts:142 Uncaught (in promise) Error: Request to http://0.0.0.0:8484/o/docs/api/docs/<ID>/recover failed with status 500: Internal Server Error (NO_METADATA_ERROR: <ID> has no metadata)
at u (BaseAPI.ts:142)
at d.<anonymous> (BaseAPI.ts:116)
at Generator.next (<anonymous>)
at s (main.bundle.js:12)
With a 500 error, I'm not sure if recovery mode is failing at building metadata or expects something in metadata.
How to import a sqlite file into Grist?
Grist has support for importing data, but could do a better job when re-importing updated data from the same source.
Revamp sandboxing approach to support python 3.9 (until now our sandboxing method has limited us to python 2.7).
As preparation for upcoming python upgrades, unicode handling has been improved significantly.
Every app needs to integrate with every other app these days. Grist supports Zapier, has an API, and uses an open data format (Sqlite), but could do more to support the universe of possible integrations.
There is easy and convenient UI to make experimental copies of a document, and to optionally "land" changes in that copy back on the original. But there isn't yet a convenient way to merge changes if the original diverges.
Hello,
I've gt error after container install:
Here are the logs after adding DEBUG=1:
yarn run v1.22.5
,$ NODE_PATH=_build:_build/stubs node _build/stubs/app/server/server.js
,Welcome to Grist.
,2021-07-01 10:26:48.338 - info: == Grist version is 0.1.1 (commit unknown)
,2021-07-01 10:26:48.344 - info: Loading empty config because /config.json missing
,2021-07-01 10:26:48.444 - warn: did not find an appropriately named example workspace in deployment
,2021-07-01 10:26:48.485 - info: No plugins directory: ENOENT: no such file or directory, scandir '/.grist/plugins'
,2021-07-01 10:26:48.486 - info: No plugins directory: ENOENT: no such file or directory, scandir '/plugins'
,2021-07-01 10:26:48.486 - info: Found 0 valid plugins on the system
,2021-07-01 10:26:48.492 - info: Server timeouts: keepAliveTimeout 305000 headersTimeout 306000
,2021-07-01 10:26:48.496 - info: server(home,docs,static) available at 0.0.0.0:8484
,2021-07-01 10:26:48.506 - info: == appRoot: /
,2021-07-01 10:26:48.506 - info: == docsRoot: /persist/docs
,2021-07-01 10:26:48.507 - info: == defaultBaseDomain: undefined
,2021-07-01 10:26:48.507 - info: == pluginUrl: undefined
,2021-07-01 10:26:48.507 - info: == instanceRoot: /
,2021-07-01 10:26:48.507 - info: == tag: unknown
,2021-07-01 10:26:48.507 - info: == database: sqlite:///persist/home.sqlite3
,2021-07-01 10:26:48.507 - info: == userRoot: /.grist
,2021-07-01 10:26:48.507 - info: == loginMiddlewareComment: no-logins
,2021-07-01 10:26:48.507 - info: == s3: disabled
,2021-07-01 10:26:48.507 - info: == docWorkerId: testDocWorkerId_8484
,2021-07-01 10:26:48.512 - info: activity docCount=0, orgCount=0, orgInGoodStandingCount=0, userCount=5, userWithLoginCount=5
,2021-07-01 10:26:49.228 - debug: Auth[GET]: id 5 email [email protected] host 0.0.0.0:8484 path / org
,2021-07-01 10:26:49.245 - debug: Redirecting userId 5 to: http://0.0.0.0:8484/o/docs/
,2021-07-01 10:26:49.261 0.0.0.0:8484 GET / 302 32.205 ms - 98
,2021-07-01 10:26:49.264 - debug: Auth[GET]: id 5 email [email protected] host 0.0.0.0:8484 path / org docs
,2021-07-01 10:26:49.269 0.0.0.0:8484 GET /o/docs/ 200 13.191 ms - 2607
,2021-07-01 10:26:49.299 0.0.0.0:8484 GET /v/unknown/jqueryui/themes/smoothness/jquery-ui.css 304 3.258 ms - -
,2021-07-01 10:26:49.301 0.0.0.0:8484 GET /v/unknown/hljs.default.css 304 0.822 ms - -
,2021-07-01 10:26:49.301 0.0.0.0:8484 GET /v/unknown/bundle.css 304 0.775 ms - -
,2021-07-01 10:26:49.304 0.0.0.0:8484 GET /v/unknown/bootstrap/dist/css/bootstrap.min.css 304 4.596 ms - -
,2021-07-01 10:26:49.304 0.0.0.0:8484 GET /v/unknown/bootstrap-datepicker/dist/css/bootstrap-datepicker3.min.css 304 4.442 ms - -
,2021-07-01 10:26:49.305 0.0.0.0:8484 GET /v/unknown/icons/icons.css 304 3.389 ms - -
,2021-07-01 10:26:49.306 0.0.0.0:8484 GET /v/unknown/jquery/dist/jquery.min.js 304 0.670 ms - -
,2021-07-01 10:26:49.306 0.0.0.0:8484 GET /v/unknown/jqueryui/jquery-ui.min.js 304 0.669 ms - -
,2021-07-01 10:26:49.307 0.0.0.0:8484 GET /v/unknown/browser-check.js 404 10.145 ms - 520
,2021-07-01 10:26:49.307 0.0.0.0:8484 GET /v/unknown/bootstrap/dist/js/bootstrap.min.js 304 0.384 ms - -
,2021-07-01 10:26:49.310 0.0.0.0:8484 GET /v/unknown/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js 304 0.518 ms - -
,2021-07-01 10:26:49.311 0.0.0.0:8484 GET /v/unknown/main.bundle.js 304 0.240 ms - -
,2021-07-01 10:26:49.371 0.0.0.0:8484 GET /v/unknown/img/gplaypattern.png 304 0.350 ms - -
,2021-07-01 10:26:49.580 0.0.0.0:8484 GET /v/unknown/browser-check.js 404 1.891 ms - 520
I'm running Ubuntu 20.04 and have other containers running fine.
Since I'm on proxmox environment I couldn't get the docker variant working, but I got the manual build working fine.
However, how can I access it from outside of localhost? Is there a command to listen on all devices when starting the server?
It is a big planet and Grist belongs everywhere.
One or more columns to the left of a table can now be "frozen" so they remain visible as the table is scrolled to the right.
Conditional formatting is useful for quickly conveying status information about certain rows or cells through color or other visual cues. Grist can do some of this (see https://community.getgrist.com/t/colour-code-table-cells/58) but systematic support for conditional formatting would be valuable.
Support for documents with large audiences or numbers of contributors could do with some streamlining.
We are working with Pabbly to support Grist integration. You can vote for Grist support on the Pabbly side at https://pabbly.hellonext.co/b/Integration-Request/p/grist
Grist should allow the user (and integrators) to trigger other services on common events such as record updates.
Without webhooks, users (and integrators) need to resort to polling, which is less than ideal for everyone concerned. Our Zapier integration currently uses polling, but if we had webhooks it could be upgraded to 'instant' triggers, meaning faster workflows for users and less server load for us. Update: this happened.
Update: there is some unofficial support for webhooks, for those willing to use the Grist API to configure them.
For hosted Grist, Webhook URLs are allowed for the following domains:
If you need a different domain, please request it. There used to be a limit to the domains hosted Grist would deliver to, but now all domains are permitted.
If self-hosting, be sure to add the domain you care about to a comma-separated ALLOWED_WEBHOOK_DOMAINS
environment variable (e.g. zapier.com,pabbly.com,webhook.site
). You can also set ALLOWED_WEBHOOK_DOMAINS
to *
to allow any domain, but we don't recommend this unless either you (1) trust all Grist document authors, or (2) have configured a proxy with GRIST_HTTPS_PROXY
to deliver payloads without exposing your internal endpoints.
Update: there is now a UI for configuring and monitoring webhooks: https://support.getgrist.com/newsletters/2023-05/#webhooks
Support cells containing references to many rows of another table.
Grist's API for accessing table data is currently columnar, which users find confusing. We are working on providing a parallel record-based API, that returns table data as a collection of records. This is more in line with the spreadsheet API ecology.
Currently, the docker instructions do not match the latest version of the code (unless you have a host set up)
gristUrls has a default subdomain of 'api' which, when run with docker, will prepend api
with the IP of the host.
Could we use the api
route by default instead and make this configurable through an environment variable, perhaps?
Setting up columns with "created at" and "updated at" timestamps is now fully supported.
This is already possible in part, but not documented. Needs to be documented and fleshed out.
We have an undocumented custom markup widget, but it would be more convenient to have a native, easily discoverable column type for rich text.
Hello,
Is it possible to do a lookup base on logical operator like >
<
?
I want to look up between tables to append found records into a field based on multiple criteria.
Thanks for this great tool.
I'm trying public sharing.
On the docker version, the default user [email protected] is attributed to anonymous viewer. Since this user is the author, everyone has write access, can be fixed easily but unsecure by default ๐
On your hosted version, making it public for viewers:
Then opening in another browser throws:
well, if it's public ...
Write a spreadsheet from Grist directly into your Google Drive
Read a spreadsheet into Grist directly from your Google Drive.
Creating a POST API request from the background script of a Chrome Extension (have not tested in FF yet) results in an Unauthorized Origin response. I assume this is because of the function referenced below.
Webextensions cannot make POST requests from their content_scripts
anymore and the background
script is the only way moving forward. That does mean that origin is set to the ID of the extension (i.e. chrome://fcdlpgnheghipfpjodagagpdfejijfoi
) and I believe this fails the trust check. Could the handlers for extensions also be added to the trusted domains?
grist-core/app/server/lib/FlexServer.ts
Line 1531 in 9f234b7
Grist is very customizable for slicing and dicing different views of data, but sometimes it would be useful to have a simple, universal way to see non-customized views of all the data a document contains.
I'm sure I didn't fully get the doc at https://support.getgrist.com/api/#tag/Data-Tables
I'm working on your fantastic CRM tutorial with the API.
A POST at http://0.0.0.0:8484/api/docs/hdNL4QimrQYxSeAmoFAaH7/tables/Contacts/data
with BODY as {"name":"test"}
is successfully returning ... 4 rows:
[
3,
4,
5,
6
]
and therefore ...
๐
AFAIU, I need to POST a single character, then record the response for the rowID, then PATCH this row?
There's some room for improvement :)
BTW, the response to the PATCH was null
instead of the rowID.
Grist has a card view that is similar to forms. A polished form experience would be useful to add, in addition to the existing option of integrations via e.g. Zapier.
Custom widgets have proved very useful already for extending Grist (adding invoices, labels, maps, etc). It would be good to improve ease of discoverability and use of widgets, and to make the grist-core and grist-widget repos work well together.
Some UI features are only practical for medium-sized databases. We could do a better job of supporting essential operations on larger documents.
Currently Grist is very US-centric in its approach to formatting currency columns. This needs to be generalized.
Support columns containing information about who created or updated the record. This is an alternative to the existing document history log.
Allows someone with read-only access to open details of a cell (previously only truncated content was accessible).
Self-hosted Grist would benefit from a well-supported login solution.
A bar can be added above widgets to show and set active filters more conveniently.
Support for colors of tags in Choice and ChoiceList columns.
Improve Chart UI to present more configuration options; add new chart types such as gauge, donut, radar (aka spider or web), and stacked bar chart.
Hello,
Your project is great! A lot of potential!
Reading https://support.getgrist.com/api/#tag/Attachments I understand that the API key is enough to authenticate, then we add user to org, workspace, document. But is there a way to add additional rules for record owner (like supabase)?
Like a public table where everyone can read but only record owner can edit/delete his row.
Or is it in your future plans? If so, will it be open source?
Create an easy workflow for users to add custom domains to their Grist documents.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.