Update docs and blogs to TablesDB terminology#3037
Conversation
Appwrite WebsiteProject ID: Website (appwrite/website)Project ID: Tip Build commands execute in runtime containers during deployment |
adityaoberai
left a comment
There was a problem hiding this comment.
Please check for patterns of these issues across other blogs
Also, for every blog edited, we need to update the lastUpdated field in the frontmatter
| - question: "How does the Meilisearch sync function stay in sync with new documents?" | ||
| answer: "By default the template syncs documents on demand when the function runs. To keep the index up to date automatically, configure the function to trigger on database events (document.create, document.update, document.delete) so every change is mirrored to Meilisearch in near real time." | ||
| - question: "How does the Meilisearch sync function stay in sync with new rows?" | ||
| answer: "By default the template syncs rows on demand when the function runs. To keep the index up to date automatically, configure the function to trigger on database row events so every change is mirrored to Meilisearch in near real time." |
There was a problem hiding this comment.
We will need to update the function template as well for this to work properly
Also, let's not remove the events from there, we should mention the correct ones instead
| For more information about Appwrite and Appwrite Functions: | ||
|
|
||
| 1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: These documents provide more information on how to use Appwrite Functions. | ||
| 1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: Learn more about how to use Appwrite Functions. |
There was a problem hiding this comment.
| 1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: Learn more about how to use Appwrite Functions. | |
| 1. **[Appwrite Function Docs](/docs/products/functions)**: Learn more about how to use Appwrite Functions. |
| For more information about Appwrite and Appwrite Functions: | ||
|
|
||
| 1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: These documents provide more information on how to use Appwrite Functions. | ||
| 1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: Learn more about how to use Appwrite Functions. |
There was a problem hiding this comment.
| 1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: Learn more about how to use Appwrite Functions. | |
| 1. **[Appwrite Function Docs](/docs/products/functions)**: Learn more about how to use Appwrite Functions. |
| 1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: These documents provide more information on how to use Appwrite Functions. | ||
| 1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: Learn more about how to use Appwrite Functions. | ||
| 2. **[Functions Announcement](https://dev.to/appwrite/serverless-your-way-unleashing-appwrite-functions-true-potential-2l4f)**: Read the full announcement on Functions 1.4. | ||
| 3. **[Appwrite Discord](https://discord.com/invite/appwrite)**: Connect with other developers and the Appwrite team for discussion, questions, and collaboration. |
There was a problem hiding this comment.
| 3. **[Appwrite Discord](https://discord.com/invite/appwrite)**: Connect with other developers and the Appwrite team for discussion, questions, and collaboration. | |
| 3. **[Appwrite Discord](/discord)**: Connect with other developers and the Appwrite team for discussion, questions, and collaboration. |
| 1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: These documents provide more information on how to use Appwrite Functions. | ||
| 1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: Learn more about how to use Appwrite Functions. | ||
| 2. **[Functions Announcement](https://dev.to/appwrite/serverless-your-way-unleashing-appwrite-functions-true-potential-2l4f)**: Read the full announcement on Functions 1.4. | ||
| 3. **[Appwrite Discord](https://discord.com/invite/appwrite)**: Connect with other developers and the Appwrite team for discussion, questions, and collaboration. |
There was a problem hiding this comment.
| 3. **[Appwrite Discord](https://discord.com/invite/appwrite)**: Connect with other developers and the Appwrite team for discussion, questions, and collaboration. | |
| 3. **[Appwrite Discord](/discord)**: Connect with other developers and the Appwrite team for discussion, questions, and collaboration. |
| name: 'articles', | ||
| columns: [ | ||
| { | ||
| key: 'title', | ||
| type: 'varchar', | ||
| size: 255, | ||
| required: true | ||
| }, | ||
| { | ||
| key: 'summary', | ||
| type: 'text', | ||
| required: false | ||
| }, | ||
| { | ||
| key: 'body', | ||
| type: 'mediumtext', | ||
| required: false | ||
| }, | ||
| { | ||
| key: 'raw_data', | ||
| type: 'longtext', | ||
| required: false | ||
| } | ||
| ] |
There was a problem hiding this comment.
This does not need a change, does it?
| Here’s what’s changed: | ||
|
|
||
| - Collections are now Tables | ||
| - Documents are now Rows | ||
| - Attributes are now Columns | ||
| The updated wording now centers Appwrite Databases around tables, rows, and columns. | ||
|
|
||
| To support the terminology change, we’ve added the TablesDB API. | ||
|
|
||
| A new API layer that helps you work with relational database concepts like tables, columns, and rows, without requiring any changes to your existing apps. | ||
|
|
||
| The old document-based methods are now deprecated and will no longer receive major upgrades. They will continue to receive security patches and essential maintenance, and we are ensuring backwards compatibility with those methods for the API, so there’s no need to migrate immediately if a specific issue arises. |
There was a problem hiding this comment.
Changes are unnecessary imho
| const promise = teams.create( | ||
| 'teachers', | ||
| 'Teachers', | ||
| ['maths', 'sciences', 'arts', 'literature'] | ||
| { | ||
| teamId: 'teachers', | ||
| name: 'Teachers', | ||
| roles: ['maths', 'sciences', 'arts', 'literature'] | ||
| } |
| await teams.deleteMembership({ | ||
| teamId: '<TEAM_ID>', | ||
| membershipId: '<MEMBERSHIP_ID>' | ||
| }); |
There was a problem hiding this comment.
These changes should not have been made in this PR, they add lots of extra bloat to review
Any changes to switch to object params should have been in a separate PR
|
|
||
| - **Gradual migration.** You don't have to swap everything at once. Authentication can move first, then storage, then databases. Each service you migrate reduces your maintenance burden. | ||
| - **Data export and import.** Appwrite's databases are standard JSON/document stores. Exporting your existing data and importing it is straightforward for most data models. | ||
| - **Data export and import.** Appwrite's databases store standard JSON row data. Exporting your existing data and importing it is straightforward for most data models. |
There was a problem hiding this comment.
not the right phrasing, we should just say they accept JSON inputs that are mapped to the table schema
…logy # Conflicts: # src/partials/auth-security.md
|
@greptile-apps review |
Greptile SummaryThis PR migrates 204 docs and blog files from the legacy Appwrite Databases terminology (collections, documents, attributes) to the current TablesDB terminology (tables, rows, columns), and simultaneously updates SDK code examples to use object-based named parameters in place of positional arguments across JavaScript, TypeScript, Python, Ruby, and Deno tabs.
Confidence Score: 3/5Two tutorial code spots introduce misleading or broken instructions that readers could follow and get stuck on; the remaining ~202 files are safe. The MariaDB INSERT in the pagination benchmark explicitly bypasses the SDK and writes directly to the underlying database; using a bare table name (
Important Files Changed
|
| @@ -174,7 +173,7 @@ for(let i = 0; i < 100; i++) { | |||
| index++; | |||
There was a problem hiding this comment.
Incorrect internal MariaDB table name in direct-SQL benchmark script
The benchmark blog explicitly states it bypasses the Appwrite SDK and inserts directly into MariaDB: "We could use Appwrite SDK, but talking directly to MariaDB offers more optional write queries for large datasets." The old name _project_${config.projectId}_collection_posts was the actual internal naming convention Appwrite used when storing collection data. Changing it to just posts is almost certainly wrong — in any Appwrite version, including TablesDB, the underlying MariaDB table would have a namespace prefix, not the bare user-supplied table ID. A reader who follows this script verbatim to reproduce the benchmark would execute the INSERT against a non-existent table or the wrong table entirely.
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/routes/blog/post/best-pagination-technique/+page.markdoc
Line: 173
Comment:
**Incorrect internal MariaDB table name in direct-SQL benchmark script**
The benchmark blog explicitly states it bypasses the Appwrite SDK and inserts directly into MariaDB: *"We could use Appwrite SDK, but talking directly to MariaDB offers more optional write queries for large datasets."* The old name `_project_${config.projectId}_collection_posts` was the actual internal naming convention Appwrite used when storing collection data. Changing it to just `posts` is almost certainly wrong — in any Appwrite version, including TablesDB, the underlying MariaDB table would have a namespace prefix, not the bare user-supplied table ID. A reader who follows this script verbatim to reproduce the benchmark would execute the INSERT against a non-existent table or the wrong table entirely.
How can I resolve this? If you propose a fix, please make it concise.| - `createdAt` (DateTime, required) | ||
| - `updatedAt` (DateTime, required) | ||
| ``` | ||
|
|
||
| Notice that the `category` attribute is an enumerated type with a set of predefined values. This structured approach helps us organize and filter expenses effectively. We have both a `date` attribute and a `createdAt` attribute because when an expense is created is not necessarily the same as when it occurred. | ||
| Notice that the `category` column is an enumerated type with a set of predefined values. This structured approach helps us organize and filter expenses effectively. We have both a `date` column and a `createdAt` column because when an expense is created is not necessarily the same as when it occurred. | ||
|
|
||
| To ensure that users can only access their own expenses, Open the collection's **Settings** tab and scroll to **Permissions**. Click **Add role**, select **Users** and check **Create** permission. | ||
| To ensure that users can only access their own expenses, Open the table's **Settings** tab and scroll to **Permissions**. Click **Add role**, select **Users** and check **Create** permission. | ||
|
|
There was a problem hiding this comment.
userId column changed from String to Text — a short ID field should be Varchar
userId is a short identifier (typically ≤ 36 characters for a UUID) that callers will almost certainly filter on (e.g., Query.equal('userId', currentUser.$id)). The varchar / "Short text" type is fully indexable up to 768 characters and is the correct pick for this field. The text column type uses prefix indexing only, cannot be fully indexed, and has no effective size constraint. If this "Text" instruction maps to the text column type in the new Console UI, the tutorial inadvertently guides readers to create a column that cannot be efficiently queried by user ID.
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/routes/blog/post/build-fullstack-svelte-appwrite/+page.markdoc
Line: 100-107
Comment:
**`userId` column changed from `String` to `Text` — a short ID field should be `Varchar`**
`userId` is a short identifier (typically ≤ 36 characters for a UUID) that callers will almost certainly filter on (e.g., `Query.equal('userId', currentUser.$id)`). The `varchar` / "Short text" type is fully indexable up to 768 characters and is the correct pick for this field. The `text` column type uses prefix indexing only, cannot be fully indexed, and has no effective size constraint. If this "Text" instruction maps to the `text` column type in the new Console UI, the tutorial inadvertently guides readers to create a column that cannot be efficiently queried by user ID.
How can I resolve this? If you propose a fix, please make it concise.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
adityaoberai
left a comment
There was a problem hiding this comment.
Approving to unblock


Summary
Testing
bun run checkand diff whitespace validation