Releases: teableio/teable
v1.4.1
Highlight 🎉
Trash
You can restore space, base, and table from trash now!
Drag and drop attachments to reorder
Community contributions from @zholadev ❤️
output.mp4
Upload attachment into cell
Upload via file
curl -X POST 'https://app.teable.io/table/__tableId__/record/__recordId__/__fieldId__/uploadAttachment' \
-H 'Authorization: Bearer __token__' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@/path/to/your/file.jpg'
Upload via URL
curl -X POST 'https://app.teable.io/table/__tableId__/record/__recordId__/__fieldId__/uploadAttachment' \
-H 'Authorization: Bearer __token__' \
-H 'Content-Type: multipart/form-data' \
-F 'fileUrl=https://example.com/image.jpg'
Response Updated Record
{
"id": "rec123456789ABCDE",
"fields": {
"fld123456789ABCDE": [
{
"id": "act75TiSyhcS7hfrizW",
"name": "example.jpg",
"path": "table/example",
"size": 392903,
"token": "tokenxxxxx",
"width": 976,
"height": 1000,
"mimetype": "image/jpeg",
"presignedUrl": "https://sss.teable.io/pvt-assets/table/previewURL"
}
],
}
}
What's Changed
- fix: create record and modify field bad cases by @tea-artist in #879
- fix: undo link / formula field badcases by @tea-artist in #882
- feat: limit primary field type by @tea-artist in #883
- fix: can not clear show as for formula and rollup by @tea-artist in #884
- fix: some field and cell mutation error by @tea-artist in #886
- fix: lost synchronization after socket reconnected by @tea-artist in #888
- fix: get history ops error after reconnected by @tea-artist in #889
- fix: should clean rollup when clean link by @tea-artist in #891
- feat: integrate umami metrics by @tea-artist in #892
- fix: use server env by @tea-artist in #894
- fix: grid prefilling editable on disabled update record by @boris-w in #895
- feat: trash by @Sky-FE in #890
- fix: can not batch delete records when contains multiple link by @tea-artist in #899
- feat: attachment dnd by @zholadev in #878
- fix: e2e sqlite test fail by @tea-artist in #900
- feat: Added Elestio as one-click deploy option by @kaiwalyakoparkar in #853
- fix: formula crash when number NaN by @tea-artist in #902
- fix: the permission with the trash by @Sky-FE in #901
- feat: upload attachment api by @tea-artist in #903
- fix: minio private network by @tea-artist in #904
- fix: add internal port for minio by @tea-artist in #905
- chore: publish 1.4.1 release by @tea-artist in #906
New Contributors
- @zholadev made their first contribution in #878
- @kaiwalyakoparkar made their first contribution in #853
Full Changelog: v1.4.0...v1.4.1
v1.4.0
Highlight 🎉
Undo and Redo
All operations in table can be undone and redone
undo.redo.en.mp4
Base collaborator
You can now invite collaborators into the base without entering the space
Npm package @teable/openapi
You can now use @teable/openapi to make API calls and get good type hints. Documentation is still being prepared you can find all APIs in the code base https://github.com/teableio/teable/tree/develop/packages/openapi/src,
npm install @teable/openapi --save
import { configApi, createRecords } from '@teable/openapi';
configApi({
endpoint: 'https://app.teable.io',
token: '__token__',
});
const response = await createRecords('__tableId__', {
records: [
{
fields: {
Name: 'John Doe',
Age: 30
}
}
]
});
console.log(response.data);
Contributions from the community ❤️
- Delete record in edit header by @spiritanand
- French translation by @simon-moulin
- Japanese translation by @tkymmm
What's Changed
- fix: crash due to incompatible cell value components with rollup field by @Sky-FE in #831
- translation: add french by @simon-moulin in #827
- feat: delete record in edit header by @spiritanand in #828
- refactor: reconstruct filter with abstract by @caoxing9 in #818
- fix: duplicate filter update by @caoxing9 in #841
- fix: user tag style by @caoxing9 in #843
- chore: packages release under MIT license by @tea-artist in #844
- feat: base collaborator by @boris-w in #837
- fix: shared page ssr translation by @boris-w in #847
- fix: usage base by @boris-w in #849
- feat: field convert limit by @caoxing9 in #848
- fix: import relative by @caoxing9 in #810
- fix: import encode error crash by @caoxing9 in #855
- perf: filter field convert sync by @caoxing9 in #857
- fix: fail add filter group online by @caoxing9 in #858
- feat: added Japanese translation by @tkymmm in #854
- fix: export grid view by @caoxing9 in #859
- fix: dragging rows by @Sky-FE in #861
- fix: unable to edit and delete base collaborators by @boris-w in #865
- feat: enhance base query builder by @boris-w in #867
- feat: undo redo by @tea-artist in #839
- fix: undo i18n by @tea-artist in #868
- fix: undo record missing link value by @tea-artist in #870
- fix: record history functionality in SQLite database by @Sky-FE in #873
- feat: add configApi method by @tea-artist in #874
New Contributors
- @simon-moulin made their first contribution in #827
- @spiritanand made their first contribution in #828
- @tkymmm made their first contribution in #854
Full Changelog: v1.3.2...v1.4.0
v1.3.2
Highlight 🎉
Record modification history
View the record modification history of the entire table in the upper right corner of the table
View the edit history of the current record in the upper right corner of the edit form
Created by and last modified by field
Two new fields!
You can combine with filters to create more flexible views
Switch language and full Chinese support
We have completed most of the text collection work and can now easily add more languages!
Fix
- When updating the user name, the name of the user field is not updated.
- Garbled characters appear when importing non-English csv
What's Changed
- feat: switch language by @tea-artist in #781
- fix:
FieldSelctor
overflow could not scroll in some cases by @caoxing9 in #782 - feat: i18n complement by @tea-artist in #784
- feat: i18n formula by @tea-artist in #785
- fix: design page i18n by @tea-artist in #787
- chore: update i18n map by @caoxing9 in #788
- chore: add wait for migration by @tea-artist in #791
- chore: retry migration with wait-for by @tea-artist in #792
- chore: adjusting copy-paste success toast disappearance time and chec… by @boris-w in #797
- fix: Updating Strings "noTips" and "importAlert" - Update table.json by @solankimihir in #794
- fix: Changed default value of 1 to 0 for second parameter of REPT() by @solankimihir in #798
- fix: shadcn ui scripts by @boris-w in #799
- fix: restrict the encoding format of attachment names to utf-8 by @boris-w in #802
- chore: better env example by @tea-artist in #803
- feat: record history by @Sky-FE in #793
- feat: sql query by @boris-w in #721
- fix: the attachments rendering in the record history by @Sky-FE in #806
- feat: new isUnrestricted parameter returned by base query interface by @boris-w in #807
- fix: copy error in safari by @boris-w in #808
- build: parallel building amd and arm by @tea-artist in #809
- chore: one-click deploy button for RepoCloud.io by @cosark in #599
- fix: the permission issues related to the record history by @Sky-FE in #815
- refactor: get base permission by cls permissions by @boris-w in #817
- feat: created by and last modified by field by @tea-artist in #816
- fix: computed field cell updates by @boris-w in #819
- perf: expand record rendering by @Sky-FE in #822
- fix: auto update name in user-related cell by @tea-artist in #823
- refactor: redefining the permit action structure by @boris-w in #825
- feat: controller standard event by @tea-artist in #826
New Contributors
- @solankimihir made their first contribution in #794
- @cosark made their first contribution in #599
Full Changelog: v1.3.1...v1.3.2
v1.3.1
Highlight 🎉
Embed a shared view
Shared view allows you to control themes and toolbars
Fix
- Grid rendering error during collaboration
- Filter crashes when field deleted
What's Changed
- fix: link crash by @tea-artist in #757
- fix: worker file path error by @caoxing9 in #758
- feat: i18n relative by @caoxing9 in #759
- chore: add new override interface by @tea-artist in #760
- chore: update esbuild node version by @caoxing9 in #761
- fix: filter i18n by @caoxing9 in #762
- fix: filter add item in group blur close content by @caoxing9 in #763
- fix: setting head title by @tea-artist in #764
- fix: the grid rendering issues during collaboration by @Sky-FE in #765
- build: tag docker with develop merge by @tea-artist in #768
- fix: user field typecast by @boris-w in #766
- fix: filtered fields are deleted by @boris-w in #774
- feat: embed view by @tea-artist in #775
- fix: url crash by @tea-artist in #776
- fix: unMatch operator symbol when select number cellValueType field by @caoxing9 in #778
- fix: skip duplicate index by @tea-artist in #779
Full Changelog: v1.3.0-beta.0...v1.3.1
v1.3.0-beta.0
Highlight 🎉
Added unique value constraint for fields (exclusive feature)
Added non-empty validation for fields
Introduced a visual API query builder. Constructing API requests has become easier than ever 🥳.
Creating a record allows users to execute it after filling out the entire row.
Date picker now supports selecting year and month
Number fields show unformatted values during editing
Attachments now support S3 integration
QR code displayed when sharing URL
- Completed Chinese translation
- Added email notifications for successful imports
- Improved CSV import speed by 100%
- With API typecast enabled, user fields can be filled with username/id/email
Bug Fixes
- Fixed the issue where Lookup User could not be filtered
- Fixed the issue where file names were lost when downloading attachments
- Fixed the issue where new rows could not be copy-pasted
- Fixed the issue where attachments could not be displayed in certain cases
What's Changed
- chore: add workflow running key by @tea-artist in #681
- feat: filter support compact mode by @caoxing9 in #682
- feat: add helm chart to support k8s deployment by @tea-artist in #671
- fix: failed to modify the link relationship when exsiting lookup/rollup ref by @tea-artist in #684
- fix: email should lowercase by @tea-artist in #686
- chore: setup nestjs app for E2E testing by @Sky-FE in #688
- feat: dayjs i18n hooks by @caoxing9 in #689
- refactor: create record by @Sky-FE in #692
- chore: helm namespace support by @tea-artist in #694
- fix: the calendar component supports selecting the year and month by @Sky-FE in #693
- fix: media src did not config by @tea-artist in #696
- feat: add automation node icons by @caoxing9 in #697
- feat: oauth server by @boris-w in #678
- feat: update automation node icon by @caoxing9 in #698
- feat: oauth revoke by @boris-w in #701
- fix: oauth beta tag by @boris-w in #702
- feat: number editor cancel format display origin value by @caoxing9 in #703
- fix: error hooks filename by @caoxing9 in #704
- feat: support s3 storage by @boris-w in #705
- feat: support OIDC by @boris-w in #617
- fix: invoke analyze table api get
403
by token by @caoxing9 in #709 - feat: add automation permission definition by @caoxing9 in #708
- chore: add s3 env example by @boris-w in #706
- fix: migration pgcrypto by @tea-artist in #710
- feat: share url support generate qrcode by @caoxing9 in #712
- fix: paste from excel with spaces in multiple rows by @boris-w in #711
- feat: space billing by @Sky-FE in #713
- fix: space setting with permission by @Sky-FE in #716
- feat: table i18n by @caoxing9 in #717
- refactor: attachment remove bucket by @boris-w in #715
- fix: group color judgement error by @caoxing9 in #720
- refactor: better email notify by @tea-artist in #724
- feat: automation relative base by @caoxing9 in #725
- fix: lookup user filter by @boris-w in #723
- fix: i18n error by @caoxing9 in #726
- perf: optimise import & export by @caoxing9 in #729
- fix: import table lose primary key by @caoxing9 in #730
- feat: field validation by @Sky-FE in #731
- feat: optimizing route jumps for view deleted by @boris-w in #733
- fix: typecase support for user field by @tea-artist in #734
- perf: import new table only by sql by @caoxing9 in #735
- fix: usage limit by @Sky-FE in #738
- fix: view sort order different with manual sort by @caoxing9 in #739
- chore: adjusting the base sidebar option permission display control by @boris-w in #737
- fix: the shared form attachments upload by @Sky-FE in #740
- fix: download file missing file name by @boris-w in #741
- refactor: paste the expansion line to create the record with the fiel… by @boris-w in #742
- feat: query builder for developer by @tea-artist in #743
- fix: typo by @tea-artist in #744
- feat: copy and paste operations for pre-filled rows in the grid by @Sky-FE in #748
- feat: more params available in query builder by @tea-artist in #750
- refactor: react query by @tea-artist in #752
- chore: publish 1.3.0-beta.0 release by @tea-artist in #754
Full Changelog: v1.2.1-beta.0...v1.3.0-beta.0
v1.2.1-beta.0
Highlight 🎉
Admin Panel
After installation, The first user assumes the administrator role, gaining comprehensive control over the application settings.
- User Self-Registration: Administrators can enable or disable user self-registration.
- Invitation-Based Registration: Administrators can allow or restrict users from being invited to register.
- Space Creation: Admins can control whether users are permitted to create new spaces.
Migration from 1.2.0 > #680
Bug Fixes
In this update, we've made a total of 33 fixes across various aspects of the platform to enhance user experience and system performance. Key categories include:
- UI Enhancements: Improved responsiveness and consistency across various interface components.
- Data Handling: Significantly increased stability for data imports.
- Permissions and Security: Patched vulnerabilities in certain scenarios to bolster security.
- Performance Optimizations: Enhanced interaction performance by up to 5 times in scenarios with extensive select choices.
What's Changed
- fix: formula and rollup options components by @Sky-FE in #559
- fix: csv stream import get error character by @caoxing9 in #560
- refactor: socket permission by @boris-w in #561
- refactor: support for overriding field, view, and record permission s… by @boris-w in #567
- fix: grid view in share replicate impact(filter, sort, group, search,… by @boris-w in #568
- fix: lose notify when import error by @caoxing9 in #562
- fix: standardize the copy html structure to avoid too many meaningles… by @boris-w in #570
- fix: collaborator hovercard transparent by @caoxing9 in #571
- fix: group by date field by @Sky-FE in #563
- fix: hover sidebar be sheltered by @caoxing9 in #575
- chore: clean outdated code by @tea-artist in #576
- fix: openapi build config by @tea-artist in #577
- fix: link cellValue in expand record on share pages by @boris-w in #578
- feat: authority matrix by @boris-w in #581
- fix: add db_connection permission action to resolve db connection per… by @boris-w in #596
- fix: export csv file with special character table name abort by @caoxing9 in #600
- feat: table permission integration by @boris-w in #601
- feat: in-place import optimize by @caoxing9 in #602
- fix: table list permission by @boris-w in #603
- fix: useFields in share page by @boris-w in #605
- refactor: sharedb work flow by @boris-w in #606
- fix: sort selector conflict by @caoxing9 in #607
- fix: exclude field ids by @boris-w in #608
- fix: getSnapshot in shareDB by @boris-w in #610
- fix: permission omission in table list by @boris-w in #612
- fix: corrected error in handling paste for European date format by @boris-w in #611
- fix: share permission by @boris-w in #614
- fix: avoid full query sql in share page by @boris-w in #616
- feat: add record use modal ui by @boris-w in #618
- chore: check the whole table when getting group points without passin… by @boris-w in #619
- perf: select field rendering by @Sky-FE in #620
- feat: add automation mixInput form icon by @caoxing9 in #621
- chore: backend e2e supports defining apps in the config of the global… by @boris-w in #623
- fix: table permissions on the design page by @boris-w in #625
- fix: redirect page error after changing password by @boris-w in #627
- refactor: add email in user by @tea-artist in #629
- feat: pin space and base by @boris-w in #628
- fix: drag to the first by @boris-w in #631
- feat: order space card by @boris-w in #632
- fix: space card order by @boris-w in #633
- chore: add page error log by @tea-artist in #636
- feat: space setting by @Sky-FE in #638
- fix: UI issues with the select field editor by @Sky-FE in #640
- feat: support email invitation for unregistered users by @boris-w in #637
- fix: sort space cards based on pin order by @boris-w in #641
- refactor: setting i18n files by default using environment variables by @boris-w in #642
- fix: page layout by @Sky-FE in #643
- fix: run nextjs' localPaths at the outermost level by @boris-w in #644
- fix: request not being sent when browser is offline by @boris-w in #645
- fix: ui permission control by @boris-w in #647
- refactor: presence listener by @tea-artist in #648
- feat: add forbidden page by @boris-w in #649
- fix: grid hotkeys by @Sky-FE in #653
- feat: remove sidebar animate for smooth by @caoxing9 in #654
- feat: extend filter
FieldValue
to support custom by @caoxing9 in #657 - fix: filtering and grouping collapsed by @Sky-FE in #652
- refactor: selecting deleted records in a grid view using a selection api by @boris-w in #656
- fix: share Unauthorized should be 401 by @boris-w in #659
- refactor: organizing withAuthSSR error handling by @boris-w in #655
- refactor: filter recordIds method by @tea-artist in #661
- chore: mark form entry for create record by @tea-artist in #662
- feat: publish by @boris-w in #664
- feat: split base
BaseFieldValue
andBaseOperatorSelect
to scale by @caoxing9 in #665 - fix: filter
FieldSelect
boundary processing by @caoxing9 in #667 - fix: production logging missing by @tea-artist in #669
- fix: auto replace storage prefix by @tea-artist in #670
- fix: event missing after redis reconnected by @tea-artist in #674
- refactor: remove get table full by @boris-w in #673
- fix: logs not show in container by @tea-artist in #675
- fix: Import excel relative bugs by @caoxing9 in #676
- feat: billing by @Sky-FE in #672
- feat: space invitation setting by @Sky-FE in #679
Full Changelog: v1.2.0-beta...v1.2.1-beta.0
v1.2.0-beta
Highlight 🎉
Kanban
kanban-release-output.mp4
Import&Export
- feat: support excel import by @caoxing9 in #431
- feat: support increment import by @caoxing9 in #484
- feat: compatible
tsv
import by @caoxing9 in #446 - feat: export csv by @caoxing9 in #493
import-output.mp4
Auth
Search
- feat: search api by @tea-artist in #507
- feat: support search along with link filter by @tea-artist in #517
search-output.mp4
What's Changed
- feat: support excel import by @caoxing9 in #431
- feat: integrate github login by @boris-w in #432
- chore: remove electron by @tea-artist in #438
- feat: credit check by @tea-artist in #436
- refactor: more appropriate email template structure by @boris-w in #437
- chore: make pnpm automatically install the specified version of Node.js by @dammy001 in #433
- fix: the error of copying and pasting empty content by @boris-w in #443
- feat: compatible
tsv
import by @caoxing9 in #446 - fix: rename link results in illegal data by @tea-artist in #448
- fix: unexpected horizontal lines on login page by @boris-w in #447
- test: import test file save in tmp dir by @caoxing9 in #449
- docs: add deploy on Zeabur in Readme by @MichaelYuhe in #451
- build: image support
multi-platforms
& app image supportcsp-open
by @Pengap in #445 - fix: allow default db address by @tea-artist in #461
- feat: forgot password and setup new password by @boris-w in #452
- fix: execute repeat when import upload by @caoxing9 in #464
- fix: notify jump url & upgrade deps by @Pengap in #465
- fix: ensure interface-provided 'orderBy' parameter overrides view's default sort by @boris-w in #463
- feat: support google oauth2 by @boris-w in #466
- refactor: api for adjusting the order by @tea-artist in #453
- feat: ci add
coverallsapp/github-action
by @Pengap in #468 - fix: vitest
coverage.reporter
config by @Pengap in #469 - chore(example): update dockers examples by @Pengap in #474
- docs: Update header titles for consistency by @codesmith-emmy in #455
- Add one-click deploy on sealos. by @zzjin in #462
- chore: Update constants.ts by @eltociear in #457
- refactor: row order by @tea-artist in #473
- feat: release packages prepare by @boris-w in #477
- docs: fix discord by @tea-artist in #480
- fix: sharing pages set anonymizer user information by default by @boris-w in #481
- fix: drag row order not work by @tea-artist in #482
- fix: Date Picker timezone by @Pengap in #483
- refactor: move zod schema to openapi by @tea-artist in #487
- chore: husky to v9 and upgrade more deps by @Pengap in #494
- chore: add licenses for non-NPM packages by @tea-artist in #495
- fix: unexpected link convert by @tea-artist in #496
- fix: create access token expiration date format by @boris-w in #499
- fix: volumes use host directory permission error by @Pengap in #501
- fix: notify url splicing error by @Pengap in #504
- fix: date field grouping collapse by @Sky-FE in #505
- feat: export csv by @caoxing9 in #493
- fix: filter popover interaction by @caoxing9 in #511
- feat: support increment import by @caoxing9 in #484
- feat: search api by @tea-artist in #507
- fix: useHotkeys ref causes key non-response by @tea-artist in #513
- feat: support search along with link filter by @tea-artist in #517
- fix: search link candidate mismatch by @tea-artist in #521
- fix: popover unexpect disappeared by @tea-artist in #522
- fix: sync ensure upload file dir by @caoxing9 in #524
- fix: link candidate list error by @tea-artist in #531
- fix: form related by @Sky-FE in #535
- refactor: user and link selector by @boris-w in #514
- fix: hide field display in expand records by @boris-w in #537
- fix: copy safari and optimize some error messages by @boris-w in #542
- feat: Kanban view by @Sky-FE in #528
- fix: date field paste by @boris-w in #545
- fix: invalid single select link in filter by @boris-w in #547
- feat: collaborator cursor support across grid view by @caoxing9 in #530
- chore: adjusting cookie expiration time for login session by @boris-w in #544
- feat: support import result notify by @caoxing9 in #510
- fix: kanban icon by @Sky-FE in #549
- fix: inplace import field selector overflow can not scroll by @caoxing9 in #551
- fix: field list order may random by @tea-artist in #552
- fix: compatible with old sorting by @tea-artist in #553
- refactor: the hotkeys for the grid by @Sky-FE in #554
New Contributors
- @dammy001 made their first contribution in #433
- @MichaelYuhe made their first contribution in #451
- @zzjin made their first contribution in #462
- @eltociear made their first contribution in #457
Full Changelog: v1.1.0-beta...v1.2.0-beta
v1.1.0-beta
Highlight 🎉
- feat: support excel import by @caoxing9 in #431
- feat: compatible
tsv
import by @caoxing9 in #446 - feat: integrate github login by @boris-w in #432
- feat: support google oauth2 by @boris-w in #466
- feat: forgot password and setup new password by @boris-w in #452
- build: image support
multi-platforms
& app image supportcsp-open
by @Pengap in #445 - refactor: row order by @tea-artist in #473
What's Changed
- fix: link editor of the form by @Sky-FE in #425
- fix: the grid cannot be scrolled vertically in Firefox by @Sky-FE in #430
- fix: unable to quickly add a record by @Sky-FE in #435
- feat: support excel import by @caoxing9 in #431
- feat: integrate github login by @boris-w in #432
- chore: remove electron by @tea-artist in #438
- feat: credit check by @tea-artist in #436
- refactor: more appropriate email template structure by @boris-w in #437
- chore: make pnpm automatically install the specified version of Node.js by @dammy001 in #433
- fix: the error of copying and pasting empty content by @boris-w in #443
- feat: compatible
tsv
import by @caoxing9 in #446 - fix: rename link results in illegal data by @tea-artist in #448
- fix: unexpected horizontal lines on login page by @boris-w in #447
- test: import test file save in tmp dir by @caoxing9 in #449
- docs: add deploy on Zeabur in Readme by @MichaelYuhe in #451
- build: image support
multi-platforms
& app image supportcsp-open
by @Pengap in #445 - fix: allow default db address by @tea-artist in #461
- feat: forgot password and setup new password by @boris-w in #452
- fix: execute repeat when import upload by @caoxing9 in #464
- fix: notify jump url & upgrade deps by @Pengap in #465
- fix: ensure interface-provided 'orderBy' parameter overrides view's default sort by @boris-w in #463
- feat: support google oauth2 by @boris-w in #466
- refactor: api for adjusting the order by @tea-artist in #453
- feat: ci add
coverallsapp/github-action
by @Pengap in #468 - fix: vitest
coverage.reporter
config by @Pengap in #469 - chore(example): update dockers examples by @Pengap in #474
- docs: Update header titles for consistency by @codesmith-emmy in #455
- Add one-click deploy on sealos. by @zzjin in #462
- chore: Update constants.ts by @eltociear in #457
- refactor: row order by @tea-artist in #473
New Contributors
- @dammy001 made their first contribution in #433
- @MichaelYuhe made their first contribution in #451
- @codesmith-emmy made their first contribution in #455
- @zzjin made their first contribution in #462
- @eltociear made their first contribution in #457
Full Changelog: v1.0.0-beta...v1.1.0-beta
v1.0.0-beta
What's Changed
💥 Teable v1.0.0-beta, has been released!
Teable is a Super fast, Real-time, Professional, Developer friendly, No-code database built on Postgres. It uses a simple, spreadsheet-like interface to create complex enterprise-level database applications. Unlock efficient app development with no code, free from the hurdles of data security and scalability.
Full Changelog: https://github.com/teableio/teable/commits/v1.0.0-beta