[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-appwrite-appwrite-go":3,"mdc-aia905-key":36,"related-repo-appwrite-appwrite-go":3461,"related-org-appwrite-appwrite-go":3565},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":34,"mdContent":35},"appwrite-go","build Go applications with Appwrite SDK","Appwrite Go SDK skill. Use when building server-side Go applications with Appwrite. Covers user management, database\u002Ftable CRUD, file storage, and functions via API keys. Uses per-service packages and functional options pattern.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"appwrite","Appwrite","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fappwrite.png",[12,16,19,20,23],{"name":13,"slug":14,"type":15},"Backend","backend","tag",{"name":17,"slug":18,"type":15},"Database","database",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Storage","storage",{"name":24,"slug":25,"type":15},"Go","go",23,"https:\u002F\u002Fgithub.com\u002Fappwrite\u002Fskills","2026-07-12T08:45:19.875231",null,0,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":29},[],"https:\u002F\u002Fgithub.com\u002Fappwrite\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fappwrite-go","---\nname: appwrite-go\ndescription: Appwrite Go SDK skill. Use when building server-side Go applications with Appwrite. Covers user management, database\u002Ftable CRUD, file storage, and functions via API keys. Uses per-service packages and functional options pattern.\n---\n\n\n# Appwrite Go SDK\n\n## Installation\n\n```bash\ngo get github.com\u002Fappwrite\u002Fsdk-for-go\n```\n\n## Setting Up the Client\n\n```go\nimport (\n    \"os\"\n\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fclient\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fid\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fusers\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Ftablesdb\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fstorage\"\n)\n\nclt := client.New(\n    client.WithEndpoint(\"https:\u002F\u002F\u003CREGION>.cloud.appwrite.io\u002Fv1\"),\n    client.WithProject(os.Getenv(\"APPWRITE_PROJECT_ID\")),\n    client.WithKey(os.Getenv(\"APPWRITE_API_KEY\")),\n)\n```\n\n## Code Examples\n\n### User Management\n\n```go\nservice := users.New(clt)\n\n\u002F\u002F Create user\nuser, err := service.Create(\n    id.Unique(),\n    \"user@example.com\",\n    \"password123\",\n    users.WithCreateName(\"User Name\"),\n)\n\n\u002F\u002F List users\nlist, err := service.List()\n\n\u002F\u002F Get user\nfetched, err := service.Get(\"[USER_ID]\")\n\n\u002F\u002F Delete user\n_, err = service.Delete(\"[USER_ID]\")\n```\n\n### Database Operations\n\n> **Note:** Use `TablesDB` (not the deprecated `Databases` class) for all new code. Only use `Databases` if the existing codebase already relies on it or the user explicitly requests it.\n>\n> **Tip:** Prefer explicit functional option parameters (e.g., `tablesdb.WithUpdateRowData(...)`) over bare positional arguments where available. Only use positional-only style if the existing codebase already uses it or the user explicitly requests it.\n\n```go\nservice := tablesdb.New(clt)\n\n\u002F\u002F Create database\ndb, err := service.Create(id.Unique(), \"My Database\")\n\n\u002F\u002F Create row\ndoc, err := service.CreateRow(\n    \"[DATABASE_ID]\",\n    \"[TABLE_ID]\",\n    id.Unique(),\n    map[string]interface{}{\"title\": \"Hello World\"},\n)\n\n\u002F\u002F List rows\nresults, err := service.ListRows(\"[DATABASE_ID]\", \"[TABLE_ID]\")\n\n\u002F\u002F Get row\nrow, err := service.GetRow(\"[DATABASE_ID]\", \"[TABLE_ID]\", \"[ROW_ID]\")\n\n\u002F\u002F Update row\n_, err = service.UpdateRow(\n    \"[DATABASE_ID]\",\n    \"[TABLE_ID]\",\n    \"[ROW_ID]\",\n    tablesdb.WithUpdateRowData(map[string]interface{}{\"title\": \"Updated\"}),\n)\n\n\u002F\u002F Delete row\n_, err = service.DeleteRow(\"[DATABASE_ID]\", \"[TABLE_ID]\", \"[ROW_ID]\")\n```\n\n#### String Column Types\n\n> **Note:** The legacy `string` type is deprecated. Use explicit column types for all new columns.\n\n| Type | Max characters | Indexing | Storage |\n|------|---------------|----------|---------|\n| `varchar` | 16,383 | Full index (if size ≤ 768) | Inline in row |\n| `text` | 16,383 | Prefix only | Off-page |\n| `mediumtext` | 4,194,303 | Prefix only | Off-page |\n| `longtext` | 1,073,741,823 | Prefix only | Off-page |\n\n- `varchar` is stored inline and counts towards the 64 KB row size limit. Prefer for short, indexed fields like names, slugs, or identifiers.\n- `text`, `mediumtext`, and `longtext` are stored off-page (only a 20-byte pointer lives in the row), so they don't consume the row size budget. `size` is not required for these types.\n\n```go\n\u002F\u002F Create table with explicit string column types\n_, err = service.CreateTable(\n    \"[DATABASE_ID]\",\n    id.Unique(),\n    \"articles\",\n    tablesdb.WithCreateTableColumns([]map[string]interface{}{\n        {\"key\": \"title\",    \"type\": \"varchar\",    \"size\": 255, \"required\": true},\n        {\"key\": \"summary\",  \"type\": \"text\",                    \"required\": false},\n        {\"key\": \"body\",     \"type\": \"mediumtext\",              \"required\": false},\n        {\"key\": \"raw_data\", \"type\": \"longtext\",                \"required\": false},\n    }),\n)\n```\n\n### Query Methods\n\n```go\nimport \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fquery\"\n\n\u002F\u002F Filtering\nquery.Equal(\"field\", \"value\")             \u002F\u002F == (or pass slice for IN)\nquery.NotEqual(\"field\", \"value\")          \u002F\u002F !=\nquery.LessThan(\"field\", 100)             \u002F\u002F \u003C\nquery.LessThanEqual(\"field\", 100)        \u002F\u002F \u003C=\nquery.GreaterThan(\"field\", 100)          \u002F\u002F >\nquery.GreaterThanEqual(\"field\", 100)     \u002F\u002F >=\nquery.Between(\"field\", 1, 100)           \u002F\u002F 1 \u003C= field \u003C= 100\nquery.IsNull(\"field\")                    \u002F\u002F is null\nquery.IsNotNull(\"field\")                 \u002F\u002F is not null\nquery.StartsWith(\"field\", \"prefix\")      \u002F\u002F starts with\nquery.EndsWith(\"field\", \"suffix\")        \u002F\u002F ends with\nquery.Contains(\"field\", \"sub\")           \u002F\u002F contains\nquery.Search(\"field\", \"keywords\")        \u002F\u002F full-text search (requires index)\n\n\u002F\u002F Sorting\nquery.OrderAsc(\"field\")\nquery.OrderDesc(\"field\")\n\n\u002F\u002F Pagination\nquery.Limit(25)                          \u002F\u002F max rows (default 25, max 100)\nquery.Offset(0)                          \u002F\u002F skip N rows\nquery.CursorAfter(\"[ROW_ID]\")            \u002F\u002F cursor pagination (preferred)\nquery.CursorBefore(\"[ROW_ID]\")\n\n\u002F\u002F Selection & Logic\nquery.Select([]string{\"field1\", \"field2\"})\nquery.Or([]string{query.Equal(\"a\", 1), query.Equal(\"b\", 2)})    \u002F\u002F OR\nquery.And([]string{query.GreaterThan(\"age\", 18), query.LessThan(\"age\", 65)})  \u002F\u002F AND (default)\n```\n\n### File Storage\n\n```go\nimport \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Ffile\"\n\nservice := storage.New(clt)\n\n\u002F\u002F Upload file\nf, err := service.CreateFile(\n    \"[BUCKET_ID]\",\n    \"[FILE_ID]\",\n    file.NewInputFile(\"\u002Fpath\u002Fto\u002Ffile.png\", \"file.png\"),\n)\n\n\u002F\u002F List files\nfiles, err := service.ListFiles(\"[BUCKET_ID]\")\n\n\u002F\u002F Delete file\n_, err = service.DeleteFile(\"[BUCKET_ID]\", \"[FILE_ID]\")\n```\n\n#### InputFile Factory Methods\n\n```go\nimport \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Ffile\"\n\nfile.NewInputFile(\"\u002Fpath\u002Fto\u002Ffile.png\", \"file.png\")          \u002F\u002F from filesystem path\nfile.NewInputFileFromReader(reader, \"file.png\", size)        \u002F\u002F from io.Reader (size required)\nfile.NewInputFileFromBytes(data, \"file.png\")                 \u002F\u002F from []byte\n```\n\n### Teams\n\n```go\nimport \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fteams\"\n\nsvc := teams.New(clt)\n\n\u002F\u002F Create team\nteam, err := svc.Create(id.Unique(), \"Engineering\")\n\n\u002F\u002F List teams\nlist, err := svc.List()\n\n\u002F\u002F Create membership (invite user by email)\nmembership, err := svc.CreateMembership(\n    \"[TEAM_ID]\",\n    []string{\"editor\"},\n    teams.WithCreateMembershipEmail(\"user@example.com\"),\n)\n\n\u002F\u002F List memberships\nmembers, err := svc.ListMemberships(\"[TEAM_ID]\")\n\n\u002F\u002F Update membership roles\n_, err = svc.UpdateMembership(\"[TEAM_ID]\", \"[MEMBERSHIP_ID]\", []string{\"admin\"})\n\n\u002F\u002F Delete team\n_, err = svc.Delete(\"[TEAM_ID]\")\n```\n\n> **Role-based access:** Use `role.Team(\"[TEAM_ID]\")` for all team members or `role.Team(\"[TEAM_ID]\", \"editor\")` for a specific team role when setting permissions.\n\n### Serverless Functions\n\n```go\nimport \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Ffunctions\"\n\nsvc := functions.New(clt)\n\n\u002F\u002F Execute function\nexecution, err := svc.CreateExecution(\n    \"[FUNCTION_ID]\",\n    functions.WithCreateExecutionBody(`{\"key\": \"value\"}`),\n)\n\n\u002F\u002F List executions\nexecutions, err := svc.ListExecutions(\"[FUNCTION_ID]\")\n```\n\n#### Writing a Function Handler (Go runtime)\n\n```go\n\u002F\u002F src\u002Fmain.go — Appwrite Function entry point\npackage handler\n\nimport (\n    \"github.com\u002Fopen-runtimes\u002Ftypes-for-go\u002Fv4\u002Fopenruntimes\"\n)\n\nfunc Main(context openruntimes.Context) openruntimes.Response {\n    \u002F\u002F context.Req.Body        — raw body (string)\n    \u002F\u002F context.Req.BodyJson    — parsed JSON (map[string]interface{})\n    \u002F\u002F context.Req.Headers     — headers (map[string]string)\n    \u002F\u002F context.Req.Method      — HTTP method\n    \u002F\u002F context.Req.Path        — URL path\n    \u002F\u002F context.Req.Query       — query params (map[string]string)\n\n    context.Log(\"Processing: \" + context.Req.Method + \" \" + context.Req.Path)\n\n    if context.Req.Method == \"GET\" {\n        return context.Res.Json(map[string]interface{}{\"message\": \"Hello!\"})\n    }\n\n    return context.Res.Json(map[string]interface{}{\"success\": true})\n    \u002F\u002F context.Res.Text(\"Hello\")                  \u002F\u002F plain text\n    \u002F\u002F context.Res.Empty()                         \u002F\u002F 204\n    \u002F\u002F context.Res.Redirect(\"https:\u002F\u002F...\")          \u002F\u002F 302\n}\n```\n\n### Server-Side Rendering (SSR) Authentication\n\nSSR apps using Go frameworks (net\u002Fhttp, Gin, Echo, Chi, etc.) use the **server SDK** to handle auth. You need two clients:\n\n- **Admin client** — uses an API key, creates sessions, bypasses rate limits (reusable singleton)\n- **Session client** — uses a session cookie, acts on behalf of a user (create per-request, never share)\n\n```go\nimport (\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fclient\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Faccount\"\n)\n\n\u002F\u002F Admin client (reusable)\nadminClient := client.New(\n    client.WithEndpoint(\"https:\u002F\u002F\u003CREGION>.cloud.appwrite.io\u002Fv1\"),\n    client.WithProject(os.Getenv(\"APPWRITE_PROJECT_ID\")),\n    client.WithKey(os.Getenv(\"APPWRITE_API_KEY\")),\n)\n\n\u002F\u002F Session client (create per-request)\nsessionClient := client.New(\n    client.WithEndpoint(\"https:\u002F\u002F\u003CREGION>.cloud.appwrite.io\u002Fv1\"),\n    client.WithProject(os.Getenv(\"APPWRITE_PROJECT_ID\")),\n)\n\ncookie, err := r.Cookie(\"a_session_[PROJECT_ID]\")\nif err == nil {\n    sessionClient.SetSession(cookie.Value)\n}\n```\n\n#### Email\u002FPassword Login\n\n```go\nhttp.HandleFunc(\"\u002Flogin\", func(w http.ResponseWriter, r *http.Request) {\n    svc := account.New(adminClient)\n    session, err := svc.CreateEmailPasswordSession(r.FormValue(\"email\"), r.FormValue(\"password\"))\n    if err != nil {\n        http.Error(w, err.Error(), http.StatusBadRequest)\n        return\n    }\n\n    \u002F\u002F Cookie name must be a_session_\u003CPROJECT_ID>\n    http.SetCookie(w, &http.Cookie{\n        Name:     \"a_session_[PROJECT_ID]\",\n        Value:    session.Secret,\n        HttpOnly: true,\n        Secure:   true,\n        SameSite: http.SameSiteStrictMode,\n        Path:     \"\u002F\",\n    })\n\n    w.Header().Set(\"Content-Type\", \"application\u002Fjson\")\n    w.Write([]byte(`{\"success\": true}`))\n})\n```\n\n#### Authenticated Requests\n\n```go\nhttp.HandleFunc(\"\u002Fuser\", func(w http.ResponseWriter, r *http.Request) {\n    cookie, err := r.Cookie(\"a_session_[PROJECT_ID]\")\n    if err != nil {\n        http.Error(w, \"Unauthorized\", http.StatusUnauthorized)\n        return\n    }\n\n    sessionClient := client.New(\n        client.WithEndpoint(\"https:\u002F\u002F\u003CREGION>.cloud.appwrite.io\u002Fv1\"),\n        client.WithProject(os.Getenv(\"APPWRITE_PROJECT_ID\")),\n        client.WithSession(cookie.Value),\n    )\n\n    svc := account.New(sessionClient)\n    user, err := svc.Get()\n    \u002F\u002F Marshal user to JSON and write response\n})\n```\n\n#### OAuth2 SSR Flow\n\n```go\n\u002F\u002F Step 1: Redirect to OAuth provider\nhttp.HandleFunc(\"\u002Foauth\", func(w http.ResponseWriter, r *http.Request) {\n    svc := account.New(adminClient)\n    redirectURL, err := svc.CreateOAuth2Token(\n        \"github\",\n        account.WithCreateOAuth2TokenSuccess(\"https:\u002F\u002Fexample.com\u002Foauth\u002Fsuccess\"),\n        account.WithCreateOAuth2TokenFailure(\"https:\u002F\u002Fexample.com\u002Foauth\u002Ffailure\"),\n    )\n    if err != nil {\n        http.Error(w, err.Error(), http.StatusInternalServerError)\n        return\n    }\n    http.Redirect(w, r, redirectURL, http.StatusFound)\n})\n\n\u002F\u002F Step 2: Handle callback — exchange token for session\nhttp.HandleFunc(\"\u002Foauth\u002Fsuccess\", func(w http.ResponseWriter, r *http.Request) {\n    svc := account.New(adminClient)\n    session, err := svc.CreateSession(r.URL.Query().Get(\"userId\"), r.URL.Query().Get(\"secret\"))\n    if err != nil {\n        http.Error(w, err.Error(), http.StatusBadRequest)\n        return\n    }\n\n    http.SetCookie(w, &http.Cookie{\n        Name: \"a_session_[PROJECT_ID]\", Value: session.Secret,\n        HttpOnly: true, Secure: true, SameSite: http.SameSiteStrictMode, Path: \"\u002F\",\n    })\n    w.Write([]byte(`{\"success\": true}`))\n})\n```\n\n> **Cookie security:** Always use `HttpOnly`, `Secure`, and `SameSiteStrictMode` to prevent XSS. The cookie name must be `a_session_\u003CPROJECT_ID>`.\n\n> **Forwarding user agent:** Call `sessionClient.SetForwardedUserAgent(r.Header.Get(\"User-Agent\"))` to record the end-user's browser info for debugging and security.\n\n## Error Handling\n\n```go\nimport \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fapperr\"\n\ndoc, err := service.GetRow(\"[DATABASE_ID]\", \"[TABLE_ID]\", \"[ROW_ID]\")\nif err != nil {\n    var appErr *apperr.AppwriteException\n    if errors.As(err, &appErr) {\n        fmt.Println(appErr.Message)    \u002F\u002F human-readable message\n        fmt.Println(appErr.Code)       \u002F\u002F HTTP status code (int)\n        fmt.Println(appErr.Type)       \u002F\u002F error type (e.g. \"document_not_found\")\n    }\n}\n```\n\n**Common error codes:**\n\n| Code | Meaning |\n|------|---------|\n| `401` | Unauthorized — missing or invalid session\u002FAPI key |\n| `403` | Forbidden — insufficient permissions |\n| `404` | Not found — resource does not exist |\n| `409` | Conflict — duplicate ID or unique constraint |\n| `429` | Rate limited — too many requests |\n\n## Permissions & Roles (Critical)\n\nAppwrite uses permission strings to control access to resources. Each permission pairs an action (`read`, `update`, `delete`, `create`, or `write` which grants create + update + delete) with a role target. By default, **no user has access** unless permissions are explicitly set at the row\u002Ffile level or inherited from the table\u002Fbucket settings. Permissions are arrays of strings built with the `permission` and `role` helpers.\n\n```go\nimport (\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fpermission\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Frole\"\n)\n```\n\n### Database Row with Permissions\n\n```go\ndoc, err := service.CreateRow(\n    \"[DATABASE_ID]\",\n    \"[TABLE_ID]\",\n    \"[ROW_ID]\",\n    map[string]interface{}{\"title\": \"Hello World\"},\n    tablesdb.WithCreateRowPermissions([]string{\n        permission.Read(role.User(\"[USER_ID]\")),     \u002F\u002F specific user can read\n        permission.Update(role.User(\"[USER_ID]\")),   \u002F\u002F specific user can update\n        permission.Read(role.Team(\"[TEAM_ID]\")),     \u002F\u002F all team members can read\n        permission.Read(role.Any()),                 \u002F\u002F anyone (including guests) can read\n    }),\n)\n```\n\n### File Upload with Permissions\n\n```go\nf, err := service.CreateFile(\n    \"[BUCKET_ID]\",\n    \"[FILE_ID]\",\n    file.NewInputFile(\"\u002Fpath\u002Fto\u002Ffile.png\", \"file.png\"),\n    storage.WithCreateFilePermissions([]string{\n        permission.Read(role.Any()),\n        permission.Update(role.User(\"[USER_ID]\")),\n        permission.Delete(role.User(\"[USER_ID]\")),\n    }),\n)\n```\n\n> **When to set permissions:** Set row\u002Ffile-level permissions when you need per-resource access control. If all rows in a table share the same rules, configure permissions at the table\u002Fbucket level and leave row permissions empty.\n\n> **Common mistakes:**\n> - **Forgetting permissions** — the resource becomes inaccessible to all users (including the creator)\n> - **`role.Any()` with `write`\u002F`update`\u002F`delete`** — allows any user, including unauthenticated guests, to modify or remove the resource\n> - **`permission.Read(role.Any())` on sensitive data** — makes the resource publicly readable\n\n",{"data":37,"body":38},{"name":4,"description":6},{"type":39,"children":40},"root",[41,50,57,91,97,238,244,251,400,406,463,701,708,728,867,914,1014,1020,1273,1279,1409,1415,1460,1466,1665,1693,1699,1798,1804,2027,2033,2045,2068,2237,2243,2415,2421,2558,2564,2794,2837,2858,2864,2956,2964,3071,3077,3142,3179,3185,3281,3287,3368,3381,3455],{"type":42,"tag":43,"props":44,"children":46},"element","h1",{"id":45},"appwrite-go-sdk",[47],{"type":48,"value":49},"text","Appwrite Go SDK",{"type":42,"tag":51,"props":52,"children":54},"h2",{"id":53},"installation",[55],{"type":48,"value":56},"Installation",{"type":42,"tag":58,"props":59,"children":64},"pre",{"className":60,"code":61,"language":62,"meta":63,"style":63},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com\u002Fappwrite\u002Fsdk-for-go\n","bash","",[65],{"type":42,"tag":66,"props":67,"children":68},"code",{"__ignoreMap":63},[69],{"type":42,"tag":70,"props":71,"children":74},"span",{"class":72,"line":73},"line",1,[75,80,86],{"type":42,"tag":70,"props":76,"children":78},{"style":77},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[79],{"type":48,"value":25},{"type":42,"tag":70,"props":81,"children":83},{"style":82},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[84],{"type":48,"value":85}," get",{"type":42,"tag":70,"props":87,"children":88},{"style":82},[89],{"type":48,"value":90}," github.com\u002Fappwrite\u002Fsdk-for-go\n",{"type":42,"tag":51,"props":92,"children":94},{"id":93},"setting-up-the-client",[95],{"type":48,"value":96},"Setting Up the Client",{"type":42,"tag":58,"props":98,"children":101},{"className":99,"code":100,"language":25,"meta":63,"style":63},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import (\n    \"os\"\n\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fclient\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fid\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fusers\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Ftablesdb\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fstorage\"\n)\n\nclt := client.New(\n    client.WithEndpoint(\"https:\u002F\u002F\u003CREGION>.cloud.appwrite.io\u002Fv1\"),\n    client.WithProject(os.Getenv(\"APPWRITE_PROJECT_ID\")),\n    client.WithKey(os.Getenv(\"APPWRITE_API_KEY\")),\n)\n",[102],{"type":42,"tag":66,"props":103,"children":104},{"__ignoreMap":63},[105,113,122,132,141,150,159,168,177,186,194,203,212,221,230],{"type":42,"tag":70,"props":106,"children":107},{"class":72,"line":73},[108],{"type":42,"tag":70,"props":109,"children":110},{},[111],{"type":48,"value":112},"import (\n",{"type":42,"tag":70,"props":114,"children":116},{"class":72,"line":115},2,[117],{"type":42,"tag":70,"props":118,"children":119},{},[120],{"type":48,"value":121},"    \"os\"\n",{"type":42,"tag":70,"props":123,"children":125},{"class":72,"line":124},3,[126],{"type":42,"tag":70,"props":127,"children":129},{"emptyLinePlaceholder":128},true,[130],{"type":48,"value":131},"\n",{"type":42,"tag":70,"props":133,"children":135},{"class":72,"line":134},4,[136],{"type":42,"tag":70,"props":137,"children":138},{},[139],{"type":48,"value":140},"    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fclient\"\n",{"type":42,"tag":70,"props":142,"children":144},{"class":72,"line":143},5,[145],{"type":42,"tag":70,"props":146,"children":147},{},[148],{"type":48,"value":149},"    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fid\"\n",{"type":42,"tag":70,"props":151,"children":153},{"class":72,"line":152},6,[154],{"type":42,"tag":70,"props":155,"children":156},{},[157],{"type":48,"value":158},"    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fusers\"\n",{"type":42,"tag":70,"props":160,"children":162},{"class":72,"line":161},7,[163],{"type":42,"tag":70,"props":164,"children":165},{},[166],{"type":48,"value":167},"    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Ftablesdb\"\n",{"type":42,"tag":70,"props":169,"children":171},{"class":72,"line":170},8,[172],{"type":42,"tag":70,"props":173,"children":174},{},[175],{"type":48,"value":176},"    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fstorage\"\n",{"type":42,"tag":70,"props":178,"children":180},{"class":72,"line":179},9,[181],{"type":42,"tag":70,"props":182,"children":183},{},[184],{"type":48,"value":185},")\n",{"type":42,"tag":70,"props":187,"children":189},{"class":72,"line":188},10,[190],{"type":42,"tag":70,"props":191,"children":192},{"emptyLinePlaceholder":128},[193],{"type":48,"value":131},{"type":42,"tag":70,"props":195,"children":197},{"class":72,"line":196},11,[198],{"type":42,"tag":70,"props":199,"children":200},{},[201],{"type":48,"value":202},"clt := client.New(\n",{"type":42,"tag":70,"props":204,"children":206},{"class":72,"line":205},12,[207],{"type":42,"tag":70,"props":208,"children":209},{},[210],{"type":48,"value":211},"    client.WithEndpoint(\"https:\u002F\u002F\u003CREGION>.cloud.appwrite.io\u002Fv1\"),\n",{"type":42,"tag":70,"props":213,"children":215},{"class":72,"line":214},13,[216],{"type":42,"tag":70,"props":217,"children":218},{},[219],{"type":48,"value":220},"    client.WithProject(os.Getenv(\"APPWRITE_PROJECT_ID\")),\n",{"type":42,"tag":70,"props":222,"children":224},{"class":72,"line":223},14,[225],{"type":42,"tag":70,"props":226,"children":227},{},[228],{"type":48,"value":229},"    client.WithKey(os.Getenv(\"APPWRITE_API_KEY\")),\n",{"type":42,"tag":70,"props":231,"children":233},{"class":72,"line":232},15,[234],{"type":42,"tag":70,"props":235,"children":236},{},[237],{"type":48,"value":185},{"type":42,"tag":51,"props":239,"children":241},{"id":240},"code-examples",[242],{"type":48,"value":243},"Code Examples",{"type":42,"tag":245,"props":246,"children":248},"h3",{"id":247},"user-management",[249],{"type":48,"value":250},"User Management",{"type":42,"tag":58,"props":252,"children":254},{"className":99,"code":253,"language":25,"meta":63,"style":63},"service := users.New(clt)\n\n\u002F\u002F Create user\nuser, err := service.Create(\n    id.Unique(),\n    \"user@example.com\",\n    \"password123\",\n    users.WithCreateName(\"User Name\"),\n)\n\n\u002F\u002F List users\nlist, err := service.List()\n\n\u002F\u002F Get user\nfetched, err := service.Get(\"[USER_ID]\")\n\n\u002F\u002F Delete user\n_, err = service.Delete(\"[USER_ID]\")\n",[255],{"type":42,"tag":66,"props":256,"children":257},{"__ignoreMap":63},[258,266,273,281,289,297,305,313,321,328,335,343,351,358,366,374,382,391],{"type":42,"tag":70,"props":259,"children":260},{"class":72,"line":73},[261],{"type":42,"tag":70,"props":262,"children":263},{},[264],{"type":48,"value":265},"service := users.New(clt)\n",{"type":42,"tag":70,"props":267,"children":268},{"class":72,"line":115},[269],{"type":42,"tag":70,"props":270,"children":271},{"emptyLinePlaceholder":128},[272],{"type":48,"value":131},{"type":42,"tag":70,"props":274,"children":275},{"class":72,"line":124},[276],{"type":42,"tag":70,"props":277,"children":278},{},[279],{"type":48,"value":280},"\u002F\u002F Create user\n",{"type":42,"tag":70,"props":282,"children":283},{"class":72,"line":134},[284],{"type":42,"tag":70,"props":285,"children":286},{},[287],{"type":48,"value":288},"user, err := service.Create(\n",{"type":42,"tag":70,"props":290,"children":291},{"class":72,"line":143},[292],{"type":42,"tag":70,"props":293,"children":294},{},[295],{"type":48,"value":296},"    id.Unique(),\n",{"type":42,"tag":70,"props":298,"children":299},{"class":72,"line":152},[300],{"type":42,"tag":70,"props":301,"children":302},{},[303],{"type":48,"value":304},"    \"user@example.com\",\n",{"type":42,"tag":70,"props":306,"children":307},{"class":72,"line":161},[308],{"type":42,"tag":70,"props":309,"children":310},{},[311],{"type":48,"value":312},"    \"password123\",\n",{"type":42,"tag":70,"props":314,"children":315},{"class":72,"line":170},[316],{"type":42,"tag":70,"props":317,"children":318},{},[319],{"type":48,"value":320},"    users.WithCreateName(\"User Name\"),\n",{"type":42,"tag":70,"props":322,"children":323},{"class":72,"line":179},[324],{"type":42,"tag":70,"props":325,"children":326},{},[327],{"type":48,"value":185},{"type":42,"tag":70,"props":329,"children":330},{"class":72,"line":188},[331],{"type":42,"tag":70,"props":332,"children":333},{"emptyLinePlaceholder":128},[334],{"type":48,"value":131},{"type":42,"tag":70,"props":336,"children":337},{"class":72,"line":196},[338],{"type":42,"tag":70,"props":339,"children":340},{},[341],{"type":48,"value":342},"\u002F\u002F List users\n",{"type":42,"tag":70,"props":344,"children":345},{"class":72,"line":205},[346],{"type":42,"tag":70,"props":347,"children":348},{},[349],{"type":48,"value":350},"list, err := service.List()\n",{"type":42,"tag":70,"props":352,"children":353},{"class":72,"line":214},[354],{"type":42,"tag":70,"props":355,"children":356},{"emptyLinePlaceholder":128},[357],{"type":48,"value":131},{"type":42,"tag":70,"props":359,"children":360},{"class":72,"line":223},[361],{"type":42,"tag":70,"props":362,"children":363},{},[364],{"type":48,"value":365},"\u002F\u002F Get user\n",{"type":42,"tag":70,"props":367,"children":368},{"class":72,"line":232},[369],{"type":42,"tag":70,"props":370,"children":371},{},[372],{"type":48,"value":373},"fetched, err := service.Get(\"[USER_ID]\")\n",{"type":42,"tag":70,"props":375,"children":377},{"class":72,"line":376},16,[378],{"type":42,"tag":70,"props":379,"children":380},{"emptyLinePlaceholder":128},[381],{"type":48,"value":131},{"type":42,"tag":70,"props":383,"children":385},{"class":72,"line":384},17,[386],{"type":42,"tag":70,"props":387,"children":388},{},[389],{"type":48,"value":390},"\u002F\u002F Delete user\n",{"type":42,"tag":70,"props":392,"children":394},{"class":72,"line":393},18,[395],{"type":42,"tag":70,"props":396,"children":397},{},[398],{"type":48,"value":399},"_, err = service.Delete(\"[USER_ID]\")\n",{"type":42,"tag":245,"props":401,"children":403},{"id":402},"database-operations",[404],{"type":48,"value":405},"Database Operations",{"type":42,"tag":407,"props":408,"children":409},"blockquote",{},[410,445],{"type":42,"tag":411,"props":412,"children":413},"p",{},[414,420,422,428,430,436,438,443],{"type":42,"tag":415,"props":416,"children":417},"strong",{},[418],{"type":48,"value":419},"Note:",{"type":48,"value":421}," Use ",{"type":42,"tag":66,"props":423,"children":425},{"className":424},[],[426],{"type":48,"value":427},"TablesDB",{"type":48,"value":429}," (not the deprecated ",{"type":42,"tag":66,"props":431,"children":433},{"className":432},[],[434],{"type":48,"value":435},"Databases",{"type":48,"value":437}," class) for all new code. Only use ",{"type":42,"tag":66,"props":439,"children":441},{"className":440},[],[442],{"type":48,"value":435},{"type":48,"value":444}," if the existing codebase already relies on it or the user explicitly requests it.",{"type":42,"tag":411,"props":446,"children":447},{},[448,453,455,461],{"type":42,"tag":415,"props":449,"children":450},{},[451],{"type":48,"value":452},"Tip:",{"type":48,"value":454}," Prefer explicit functional option parameters (e.g., ",{"type":42,"tag":66,"props":456,"children":458},{"className":457},[],[459],{"type":48,"value":460},"tablesdb.WithUpdateRowData(...)",{"type":48,"value":462},") over bare positional arguments where available. Only use positional-only style if the existing codebase already uses it or the user explicitly requests it.",{"type":42,"tag":58,"props":464,"children":466},{"className":99,"code":465,"language":25,"meta":63,"style":63},"service := tablesdb.New(clt)\n\n\u002F\u002F Create database\ndb, err := service.Create(id.Unique(), \"My Database\")\n\n\u002F\u002F Create row\ndoc, err := service.CreateRow(\n    \"[DATABASE_ID]\",\n    \"[TABLE_ID]\",\n    id.Unique(),\n    map[string]interface{}{\"title\": \"Hello World\"},\n)\n\n\u002F\u002F List rows\nresults, err := service.ListRows(\"[DATABASE_ID]\", \"[TABLE_ID]\")\n\n\u002F\u002F Get row\nrow, err := service.GetRow(\"[DATABASE_ID]\", \"[TABLE_ID]\", \"[ROW_ID]\")\n\n\u002F\u002F Update row\n_, err = service.UpdateRow(\n    \"[DATABASE_ID]\",\n    \"[TABLE_ID]\",\n    \"[ROW_ID]\",\n    tablesdb.WithUpdateRowData(map[string]interface{}{\"title\": \"Updated\"}),\n)\n\n\u002F\u002F Delete row\n_, err = service.DeleteRow(\"[DATABASE_ID]\", \"[TABLE_ID]\", \"[ROW_ID]\")\n",[467],{"type":42,"tag":66,"props":468,"children":469},{"__ignoreMap":63},[470,478,485,493,501,508,516,524,532,540,547,555,562,569,577,585,592,600,608,616,625,634,642,649,658,667,675,683,692],{"type":42,"tag":70,"props":471,"children":472},{"class":72,"line":73},[473],{"type":42,"tag":70,"props":474,"children":475},{},[476],{"type":48,"value":477},"service := tablesdb.New(clt)\n",{"type":42,"tag":70,"props":479,"children":480},{"class":72,"line":115},[481],{"type":42,"tag":70,"props":482,"children":483},{"emptyLinePlaceholder":128},[484],{"type":48,"value":131},{"type":42,"tag":70,"props":486,"children":487},{"class":72,"line":124},[488],{"type":42,"tag":70,"props":489,"children":490},{},[491],{"type":48,"value":492},"\u002F\u002F Create database\n",{"type":42,"tag":70,"props":494,"children":495},{"class":72,"line":134},[496],{"type":42,"tag":70,"props":497,"children":498},{},[499],{"type":48,"value":500},"db, err := service.Create(id.Unique(), \"My Database\")\n",{"type":42,"tag":70,"props":502,"children":503},{"class":72,"line":143},[504],{"type":42,"tag":70,"props":505,"children":506},{"emptyLinePlaceholder":128},[507],{"type":48,"value":131},{"type":42,"tag":70,"props":509,"children":510},{"class":72,"line":152},[511],{"type":42,"tag":70,"props":512,"children":513},{},[514],{"type":48,"value":515},"\u002F\u002F Create row\n",{"type":42,"tag":70,"props":517,"children":518},{"class":72,"line":161},[519],{"type":42,"tag":70,"props":520,"children":521},{},[522],{"type":48,"value":523},"doc, err := service.CreateRow(\n",{"type":42,"tag":70,"props":525,"children":526},{"class":72,"line":170},[527],{"type":42,"tag":70,"props":528,"children":529},{},[530],{"type":48,"value":531},"    \"[DATABASE_ID]\",\n",{"type":42,"tag":70,"props":533,"children":534},{"class":72,"line":179},[535],{"type":42,"tag":70,"props":536,"children":537},{},[538],{"type":48,"value":539},"    \"[TABLE_ID]\",\n",{"type":42,"tag":70,"props":541,"children":542},{"class":72,"line":188},[543],{"type":42,"tag":70,"props":544,"children":545},{},[546],{"type":48,"value":296},{"type":42,"tag":70,"props":548,"children":549},{"class":72,"line":196},[550],{"type":42,"tag":70,"props":551,"children":552},{},[553],{"type":48,"value":554},"    map[string]interface{}{\"title\": \"Hello World\"},\n",{"type":42,"tag":70,"props":556,"children":557},{"class":72,"line":205},[558],{"type":42,"tag":70,"props":559,"children":560},{},[561],{"type":48,"value":185},{"type":42,"tag":70,"props":563,"children":564},{"class":72,"line":214},[565],{"type":42,"tag":70,"props":566,"children":567},{"emptyLinePlaceholder":128},[568],{"type":48,"value":131},{"type":42,"tag":70,"props":570,"children":571},{"class":72,"line":223},[572],{"type":42,"tag":70,"props":573,"children":574},{},[575],{"type":48,"value":576},"\u002F\u002F List rows\n",{"type":42,"tag":70,"props":578,"children":579},{"class":72,"line":232},[580],{"type":42,"tag":70,"props":581,"children":582},{},[583],{"type":48,"value":584},"results, err := service.ListRows(\"[DATABASE_ID]\", \"[TABLE_ID]\")\n",{"type":42,"tag":70,"props":586,"children":587},{"class":72,"line":376},[588],{"type":42,"tag":70,"props":589,"children":590},{"emptyLinePlaceholder":128},[591],{"type":48,"value":131},{"type":42,"tag":70,"props":593,"children":594},{"class":72,"line":384},[595],{"type":42,"tag":70,"props":596,"children":597},{},[598],{"type":48,"value":599},"\u002F\u002F Get row\n",{"type":42,"tag":70,"props":601,"children":602},{"class":72,"line":393},[603],{"type":42,"tag":70,"props":604,"children":605},{},[606],{"type":48,"value":607},"row, err := service.GetRow(\"[DATABASE_ID]\", \"[TABLE_ID]\", \"[ROW_ID]\")\n",{"type":42,"tag":70,"props":609,"children":611},{"class":72,"line":610},19,[612],{"type":42,"tag":70,"props":613,"children":614},{"emptyLinePlaceholder":128},[615],{"type":48,"value":131},{"type":42,"tag":70,"props":617,"children":619},{"class":72,"line":618},20,[620],{"type":42,"tag":70,"props":621,"children":622},{},[623],{"type":48,"value":624},"\u002F\u002F Update row\n",{"type":42,"tag":70,"props":626,"children":628},{"class":72,"line":627},21,[629],{"type":42,"tag":70,"props":630,"children":631},{},[632],{"type":48,"value":633},"_, err = service.UpdateRow(\n",{"type":42,"tag":70,"props":635,"children":637},{"class":72,"line":636},22,[638],{"type":42,"tag":70,"props":639,"children":640},{},[641],{"type":48,"value":531},{"type":42,"tag":70,"props":643,"children":644},{"class":72,"line":26},[645],{"type":42,"tag":70,"props":646,"children":647},{},[648],{"type":48,"value":539},{"type":42,"tag":70,"props":650,"children":652},{"class":72,"line":651},24,[653],{"type":42,"tag":70,"props":654,"children":655},{},[656],{"type":48,"value":657},"    \"[ROW_ID]\",\n",{"type":42,"tag":70,"props":659,"children":661},{"class":72,"line":660},25,[662],{"type":42,"tag":70,"props":663,"children":664},{},[665],{"type":48,"value":666},"    tablesdb.WithUpdateRowData(map[string]interface{}{\"title\": \"Updated\"}),\n",{"type":42,"tag":70,"props":668,"children":670},{"class":72,"line":669},26,[671],{"type":42,"tag":70,"props":672,"children":673},{},[674],{"type":48,"value":185},{"type":42,"tag":70,"props":676,"children":678},{"class":72,"line":677},27,[679],{"type":42,"tag":70,"props":680,"children":681},{"emptyLinePlaceholder":128},[682],{"type":48,"value":131},{"type":42,"tag":70,"props":684,"children":686},{"class":72,"line":685},28,[687],{"type":42,"tag":70,"props":688,"children":689},{},[690],{"type":48,"value":691},"\u002F\u002F Delete row\n",{"type":42,"tag":70,"props":693,"children":695},{"class":72,"line":694},29,[696],{"type":42,"tag":70,"props":697,"children":698},{},[699],{"type":48,"value":700},"_, err = service.DeleteRow(\"[DATABASE_ID]\", \"[TABLE_ID]\", \"[ROW_ID]\")\n",{"type":42,"tag":702,"props":703,"children":705},"h4",{"id":704},"string-column-types",[706],{"type":48,"value":707},"String Column Types",{"type":42,"tag":407,"props":709,"children":710},{},[711],{"type":42,"tag":411,"props":712,"children":713},{},[714,718,720,726],{"type":42,"tag":415,"props":715,"children":716},{},[717],{"type":48,"value":419},{"type":48,"value":719}," The legacy ",{"type":42,"tag":66,"props":721,"children":723},{"className":722},[],[724],{"type":48,"value":725},"string",{"type":48,"value":727}," type is deprecated. Use explicit column types for all new columns.",{"type":42,"tag":729,"props":730,"children":731},"table",{},[732,760],{"type":42,"tag":733,"props":734,"children":735},"thead",{},[736],{"type":42,"tag":737,"props":738,"children":739},"tr",{},[740,746,751,756],{"type":42,"tag":741,"props":742,"children":743},"th",{},[744],{"type":48,"value":745},"Type",{"type":42,"tag":741,"props":747,"children":748},{},[749],{"type":48,"value":750},"Max characters",{"type":42,"tag":741,"props":752,"children":753},{},[754],{"type":48,"value":755},"Indexing",{"type":42,"tag":741,"props":757,"children":758},{},[759],{"type":48,"value":21},{"type":42,"tag":761,"props":762,"children":763},"tbody",{},[764,792,817,842],{"type":42,"tag":737,"props":765,"children":766},{},[767,777,782,787],{"type":42,"tag":768,"props":769,"children":770},"td",{},[771],{"type":42,"tag":66,"props":772,"children":774},{"className":773},[],[775],{"type":48,"value":776},"varchar",{"type":42,"tag":768,"props":778,"children":779},{},[780],{"type":48,"value":781},"16,383",{"type":42,"tag":768,"props":783,"children":784},{},[785],{"type":48,"value":786},"Full index (if size ≤ 768)",{"type":42,"tag":768,"props":788,"children":789},{},[790],{"type":48,"value":791},"Inline in row",{"type":42,"tag":737,"props":793,"children":794},{},[795,803,807,812],{"type":42,"tag":768,"props":796,"children":797},{},[798],{"type":42,"tag":66,"props":799,"children":801},{"className":800},[],[802],{"type":48,"value":48},{"type":42,"tag":768,"props":804,"children":805},{},[806],{"type":48,"value":781},{"type":42,"tag":768,"props":808,"children":809},{},[810],{"type":48,"value":811},"Prefix only",{"type":42,"tag":768,"props":813,"children":814},{},[815],{"type":48,"value":816},"Off-page",{"type":42,"tag":737,"props":818,"children":819},{},[820,829,834,838],{"type":42,"tag":768,"props":821,"children":822},{},[823],{"type":42,"tag":66,"props":824,"children":826},{"className":825},[],[827],{"type":48,"value":828},"mediumtext",{"type":42,"tag":768,"props":830,"children":831},{},[832],{"type":48,"value":833},"4,194,303",{"type":42,"tag":768,"props":835,"children":836},{},[837],{"type":48,"value":811},{"type":42,"tag":768,"props":839,"children":840},{},[841],{"type":48,"value":816},{"type":42,"tag":737,"props":843,"children":844},{},[845,854,859,863],{"type":42,"tag":768,"props":846,"children":847},{},[848],{"type":42,"tag":66,"props":849,"children":851},{"className":850},[],[852],{"type":48,"value":853},"longtext",{"type":42,"tag":768,"props":855,"children":856},{},[857],{"type":48,"value":858},"1,073,741,823",{"type":42,"tag":768,"props":860,"children":861},{},[862],{"type":48,"value":811},{"type":42,"tag":768,"props":864,"children":865},{},[866],{"type":48,"value":816},{"type":42,"tag":868,"props":869,"children":870},"ul",{},[871,882],{"type":42,"tag":872,"props":873,"children":874},"li",{},[875,880],{"type":42,"tag":66,"props":876,"children":878},{"className":877},[],[879],{"type":48,"value":776},{"type":48,"value":881}," is stored inline and counts towards the 64 KB row size limit. Prefer for short, indexed fields like names, slugs, or identifiers.",{"type":42,"tag":872,"props":883,"children":884},{},[885,890,892,897,899,904,906,912],{"type":42,"tag":66,"props":886,"children":888},{"className":887},[],[889],{"type":48,"value":48},{"type":48,"value":891},", ",{"type":42,"tag":66,"props":893,"children":895},{"className":894},[],[896],{"type":48,"value":828},{"type":48,"value":898},", and ",{"type":42,"tag":66,"props":900,"children":902},{"className":901},[],[903],{"type":48,"value":853},{"type":48,"value":905}," are stored off-page (only a 20-byte pointer lives in the row), so they don't consume the row size budget. ",{"type":42,"tag":66,"props":907,"children":909},{"className":908},[],[910],{"type":48,"value":911},"size",{"type":48,"value":913}," is not required for these types.",{"type":42,"tag":58,"props":915,"children":917},{"className":99,"code":916,"language":25,"meta":63,"style":63},"\u002F\u002F Create table with explicit string column types\n_, err = service.CreateTable(\n    \"[DATABASE_ID]\",\n    id.Unique(),\n    \"articles\",\n    tablesdb.WithCreateTableColumns([]map[string]interface{}{\n        {\"key\": \"title\",    \"type\": \"varchar\",    \"size\": 255, \"required\": true},\n        {\"key\": \"summary\",  \"type\": \"text\",                    \"required\": false},\n        {\"key\": \"body\",     \"type\": \"mediumtext\",              \"required\": false},\n        {\"key\": \"raw_data\", \"type\": \"longtext\",                \"required\": false},\n    }),\n)\n",[918],{"type":42,"tag":66,"props":919,"children":920},{"__ignoreMap":63},[921,929,937,944,951,959,967,975,983,991,999,1007],{"type":42,"tag":70,"props":922,"children":923},{"class":72,"line":73},[924],{"type":42,"tag":70,"props":925,"children":926},{},[927],{"type":48,"value":928},"\u002F\u002F Create table with explicit string column types\n",{"type":42,"tag":70,"props":930,"children":931},{"class":72,"line":115},[932],{"type":42,"tag":70,"props":933,"children":934},{},[935],{"type":48,"value":936},"_, err = service.CreateTable(\n",{"type":42,"tag":70,"props":938,"children":939},{"class":72,"line":124},[940],{"type":42,"tag":70,"props":941,"children":942},{},[943],{"type":48,"value":531},{"type":42,"tag":70,"props":945,"children":946},{"class":72,"line":134},[947],{"type":42,"tag":70,"props":948,"children":949},{},[950],{"type":48,"value":296},{"type":42,"tag":70,"props":952,"children":953},{"class":72,"line":143},[954],{"type":42,"tag":70,"props":955,"children":956},{},[957],{"type":48,"value":958},"    \"articles\",\n",{"type":42,"tag":70,"props":960,"children":961},{"class":72,"line":152},[962],{"type":42,"tag":70,"props":963,"children":964},{},[965],{"type":48,"value":966},"    tablesdb.WithCreateTableColumns([]map[string]interface{}{\n",{"type":42,"tag":70,"props":968,"children":969},{"class":72,"line":161},[970],{"type":42,"tag":70,"props":971,"children":972},{},[973],{"type":48,"value":974},"        {\"key\": \"title\",    \"type\": \"varchar\",    \"size\": 255, \"required\": true},\n",{"type":42,"tag":70,"props":976,"children":977},{"class":72,"line":170},[978],{"type":42,"tag":70,"props":979,"children":980},{},[981],{"type":48,"value":982},"        {\"key\": \"summary\",  \"type\": \"text\",                    \"required\": false},\n",{"type":42,"tag":70,"props":984,"children":985},{"class":72,"line":179},[986],{"type":42,"tag":70,"props":987,"children":988},{},[989],{"type":48,"value":990},"        {\"key\": \"body\",     \"type\": \"mediumtext\",              \"required\": false},\n",{"type":42,"tag":70,"props":992,"children":993},{"class":72,"line":188},[994],{"type":42,"tag":70,"props":995,"children":996},{},[997],{"type":48,"value":998},"        {\"key\": \"raw_data\", \"type\": \"longtext\",                \"required\": false},\n",{"type":42,"tag":70,"props":1000,"children":1001},{"class":72,"line":196},[1002],{"type":42,"tag":70,"props":1003,"children":1004},{},[1005],{"type":48,"value":1006},"    }),\n",{"type":42,"tag":70,"props":1008,"children":1009},{"class":72,"line":205},[1010],{"type":42,"tag":70,"props":1011,"children":1012},{},[1013],{"type":48,"value":185},{"type":42,"tag":245,"props":1015,"children":1017},{"id":1016},"query-methods",[1018],{"type":48,"value":1019},"Query Methods",{"type":42,"tag":58,"props":1021,"children":1023},{"className":99,"code":1022,"language":25,"meta":63,"style":63},"import \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fquery\"\n\n\u002F\u002F Filtering\nquery.Equal(\"field\", \"value\")             \u002F\u002F == (or pass slice for IN)\nquery.NotEqual(\"field\", \"value\")          \u002F\u002F !=\nquery.LessThan(\"field\", 100)             \u002F\u002F \u003C\nquery.LessThanEqual(\"field\", 100)        \u002F\u002F \u003C=\nquery.GreaterThan(\"field\", 100)          \u002F\u002F >\nquery.GreaterThanEqual(\"field\", 100)     \u002F\u002F >=\nquery.Between(\"field\", 1, 100)           \u002F\u002F 1 \u003C= field \u003C= 100\nquery.IsNull(\"field\")                    \u002F\u002F is null\nquery.IsNotNull(\"field\")                 \u002F\u002F is not null\nquery.StartsWith(\"field\", \"prefix\")      \u002F\u002F starts with\nquery.EndsWith(\"field\", \"suffix\")        \u002F\u002F ends with\nquery.Contains(\"field\", \"sub\")           \u002F\u002F contains\nquery.Search(\"field\", \"keywords\")        \u002F\u002F full-text search (requires index)\n\n\u002F\u002F Sorting\nquery.OrderAsc(\"field\")\nquery.OrderDesc(\"field\")\n\n\u002F\u002F Pagination\nquery.Limit(25)                          \u002F\u002F max rows (default 25, max 100)\nquery.Offset(0)                          \u002F\u002F skip N rows\nquery.CursorAfter(\"[ROW_ID]\")            \u002F\u002F cursor pagination (preferred)\nquery.CursorBefore(\"[ROW_ID]\")\n\n\u002F\u002F Selection & Logic\nquery.Select([]string{\"field1\", \"field2\"})\nquery.Or([]string{query.Equal(\"a\", 1), query.Equal(\"b\", 2)})    \u002F\u002F OR\nquery.And([]string{query.GreaterThan(\"age\", 18), query.LessThan(\"age\", 65)})  \u002F\u002F AND (default)\n",[1024],{"type":42,"tag":66,"props":1025,"children":1026},{"__ignoreMap":63},[1027,1035,1042,1050,1058,1066,1074,1082,1090,1098,1106,1114,1122,1130,1138,1146,1154,1161,1169,1177,1185,1192,1200,1208,1216,1224,1232,1239,1247,1255,1264],{"type":42,"tag":70,"props":1028,"children":1029},{"class":72,"line":73},[1030],{"type":42,"tag":70,"props":1031,"children":1032},{},[1033],{"type":48,"value":1034},"import \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fquery\"\n",{"type":42,"tag":70,"props":1036,"children":1037},{"class":72,"line":115},[1038],{"type":42,"tag":70,"props":1039,"children":1040},{"emptyLinePlaceholder":128},[1041],{"type":48,"value":131},{"type":42,"tag":70,"props":1043,"children":1044},{"class":72,"line":124},[1045],{"type":42,"tag":70,"props":1046,"children":1047},{},[1048],{"type":48,"value":1049},"\u002F\u002F Filtering\n",{"type":42,"tag":70,"props":1051,"children":1052},{"class":72,"line":134},[1053],{"type":42,"tag":70,"props":1054,"children":1055},{},[1056],{"type":48,"value":1057},"query.Equal(\"field\", \"value\")             \u002F\u002F == (or pass slice for IN)\n",{"type":42,"tag":70,"props":1059,"children":1060},{"class":72,"line":143},[1061],{"type":42,"tag":70,"props":1062,"children":1063},{},[1064],{"type":48,"value":1065},"query.NotEqual(\"field\", \"value\")          \u002F\u002F !=\n",{"type":42,"tag":70,"props":1067,"children":1068},{"class":72,"line":152},[1069],{"type":42,"tag":70,"props":1070,"children":1071},{},[1072],{"type":48,"value":1073},"query.LessThan(\"field\", 100)             \u002F\u002F \u003C\n",{"type":42,"tag":70,"props":1075,"children":1076},{"class":72,"line":161},[1077],{"type":42,"tag":70,"props":1078,"children":1079},{},[1080],{"type":48,"value":1081},"query.LessThanEqual(\"field\", 100)        \u002F\u002F \u003C=\n",{"type":42,"tag":70,"props":1083,"children":1084},{"class":72,"line":170},[1085],{"type":42,"tag":70,"props":1086,"children":1087},{},[1088],{"type":48,"value":1089},"query.GreaterThan(\"field\", 100)          \u002F\u002F >\n",{"type":42,"tag":70,"props":1091,"children":1092},{"class":72,"line":179},[1093],{"type":42,"tag":70,"props":1094,"children":1095},{},[1096],{"type":48,"value":1097},"query.GreaterThanEqual(\"field\", 100)     \u002F\u002F >=\n",{"type":42,"tag":70,"props":1099,"children":1100},{"class":72,"line":188},[1101],{"type":42,"tag":70,"props":1102,"children":1103},{},[1104],{"type":48,"value":1105},"query.Between(\"field\", 1, 100)           \u002F\u002F 1 \u003C= field \u003C= 100\n",{"type":42,"tag":70,"props":1107,"children":1108},{"class":72,"line":196},[1109],{"type":42,"tag":70,"props":1110,"children":1111},{},[1112],{"type":48,"value":1113},"query.IsNull(\"field\")                    \u002F\u002F is null\n",{"type":42,"tag":70,"props":1115,"children":1116},{"class":72,"line":205},[1117],{"type":42,"tag":70,"props":1118,"children":1119},{},[1120],{"type":48,"value":1121},"query.IsNotNull(\"field\")                 \u002F\u002F is not null\n",{"type":42,"tag":70,"props":1123,"children":1124},{"class":72,"line":214},[1125],{"type":42,"tag":70,"props":1126,"children":1127},{},[1128],{"type":48,"value":1129},"query.StartsWith(\"field\", \"prefix\")      \u002F\u002F starts with\n",{"type":42,"tag":70,"props":1131,"children":1132},{"class":72,"line":223},[1133],{"type":42,"tag":70,"props":1134,"children":1135},{},[1136],{"type":48,"value":1137},"query.EndsWith(\"field\", \"suffix\")        \u002F\u002F ends with\n",{"type":42,"tag":70,"props":1139,"children":1140},{"class":72,"line":232},[1141],{"type":42,"tag":70,"props":1142,"children":1143},{},[1144],{"type":48,"value":1145},"query.Contains(\"field\", \"sub\")           \u002F\u002F contains\n",{"type":42,"tag":70,"props":1147,"children":1148},{"class":72,"line":376},[1149],{"type":42,"tag":70,"props":1150,"children":1151},{},[1152],{"type":48,"value":1153},"query.Search(\"field\", \"keywords\")        \u002F\u002F full-text search (requires index)\n",{"type":42,"tag":70,"props":1155,"children":1156},{"class":72,"line":384},[1157],{"type":42,"tag":70,"props":1158,"children":1159},{"emptyLinePlaceholder":128},[1160],{"type":48,"value":131},{"type":42,"tag":70,"props":1162,"children":1163},{"class":72,"line":393},[1164],{"type":42,"tag":70,"props":1165,"children":1166},{},[1167],{"type":48,"value":1168},"\u002F\u002F Sorting\n",{"type":42,"tag":70,"props":1170,"children":1171},{"class":72,"line":610},[1172],{"type":42,"tag":70,"props":1173,"children":1174},{},[1175],{"type":48,"value":1176},"query.OrderAsc(\"field\")\n",{"type":42,"tag":70,"props":1178,"children":1179},{"class":72,"line":618},[1180],{"type":42,"tag":70,"props":1181,"children":1182},{},[1183],{"type":48,"value":1184},"query.OrderDesc(\"field\")\n",{"type":42,"tag":70,"props":1186,"children":1187},{"class":72,"line":627},[1188],{"type":42,"tag":70,"props":1189,"children":1190},{"emptyLinePlaceholder":128},[1191],{"type":48,"value":131},{"type":42,"tag":70,"props":1193,"children":1194},{"class":72,"line":636},[1195],{"type":42,"tag":70,"props":1196,"children":1197},{},[1198],{"type":48,"value":1199},"\u002F\u002F Pagination\n",{"type":42,"tag":70,"props":1201,"children":1202},{"class":72,"line":26},[1203],{"type":42,"tag":70,"props":1204,"children":1205},{},[1206],{"type":48,"value":1207},"query.Limit(25)                          \u002F\u002F max rows (default 25, max 100)\n",{"type":42,"tag":70,"props":1209,"children":1210},{"class":72,"line":651},[1211],{"type":42,"tag":70,"props":1212,"children":1213},{},[1214],{"type":48,"value":1215},"query.Offset(0)                          \u002F\u002F skip N rows\n",{"type":42,"tag":70,"props":1217,"children":1218},{"class":72,"line":660},[1219],{"type":42,"tag":70,"props":1220,"children":1221},{},[1222],{"type":48,"value":1223},"query.CursorAfter(\"[ROW_ID]\")            \u002F\u002F cursor pagination (preferred)\n",{"type":42,"tag":70,"props":1225,"children":1226},{"class":72,"line":669},[1227],{"type":42,"tag":70,"props":1228,"children":1229},{},[1230],{"type":48,"value":1231},"query.CursorBefore(\"[ROW_ID]\")\n",{"type":42,"tag":70,"props":1233,"children":1234},{"class":72,"line":677},[1235],{"type":42,"tag":70,"props":1236,"children":1237},{"emptyLinePlaceholder":128},[1238],{"type":48,"value":131},{"type":42,"tag":70,"props":1240,"children":1241},{"class":72,"line":685},[1242],{"type":42,"tag":70,"props":1243,"children":1244},{},[1245],{"type":48,"value":1246},"\u002F\u002F Selection & Logic\n",{"type":42,"tag":70,"props":1248,"children":1249},{"class":72,"line":694},[1250],{"type":42,"tag":70,"props":1251,"children":1252},{},[1253],{"type":48,"value":1254},"query.Select([]string{\"field1\", \"field2\"})\n",{"type":42,"tag":70,"props":1256,"children":1258},{"class":72,"line":1257},30,[1259],{"type":42,"tag":70,"props":1260,"children":1261},{},[1262],{"type":48,"value":1263},"query.Or([]string{query.Equal(\"a\", 1), query.Equal(\"b\", 2)})    \u002F\u002F OR\n",{"type":42,"tag":70,"props":1265,"children":1267},{"class":72,"line":1266},31,[1268],{"type":42,"tag":70,"props":1269,"children":1270},{},[1271],{"type":48,"value":1272},"query.And([]string{query.GreaterThan(\"age\", 18), query.LessThan(\"age\", 65)})  \u002F\u002F AND (default)\n",{"type":42,"tag":245,"props":1274,"children":1276},{"id":1275},"file-storage",[1277],{"type":48,"value":1278},"File Storage",{"type":42,"tag":58,"props":1280,"children":1282},{"className":99,"code":1281,"language":25,"meta":63,"style":63},"import \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Ffile\"\n\nservice := storage.New(clt)\n\n\u002F\u002F Upload file\nf, err := service.CreateFile(\n    \"[BUCKET_ID]\",\n    \"[FILE_ID]\",\n    file.NewInputFile(\"\u002Fpath\u002Fto\u002Ffile.png\", \"file.png\"),\n)\n\n\u002F\u002F List files\nfiles, err := service.ListFiles(\"[BUCKET_ID]\")\n\n\u002F\u002F Delete file\n_, err = service.DeleteFile(\"[BUCKET_ID]\", \"[FILE_ID]\")\n",[1283],{"type":42,"tag":66,"props":1284,"children":1285},{"__ignoreMap":63},[1286,1294,1301,1309,1316,1324,1332,1340,1348,1356,1363,1370,1378,1386,1393,1401],{"type":42,"tag":70,"props":1287,"children":1288},{"class":72,"line":73},[1289],{"type":42,"tag":70,"props":1290,"children":1291},{},[1292],{"type":48,"value":1293},"import \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Ffile\"\n",{"type":42,"tag":70,"props":1295,"children":1296},{"class":72,"line":115},[1297],{"type":42,"tag":70,"props":1298,"children":1299},{"emptyLinePlaceholder":128},[1300],{"type":48,"value":131},{"type":42,"tag":70,"props":1302,"children":1303},{"class":72,"line":124},[1304],{"type":42,"tag":70,"props":1305,"children":1306},{},[1307],{"type":48,"value":1308},"service := storage.New(clt)\n",{"type":42,"tag":70,"props":1310,"children":1311},{"class":72,"line":134},[1312],{"type":42,"tag":70,"props":1313,"children":1314},{"emptyLinePlaceholder":128},[1315],{"type":48,"value":131},{"type":42,"tag":70,"props":1317,"children":1318},{"class":72,"line":143},[1319],{"type":42,"tag":70,"props":1320,"children":1321},{},[1322],{"type":48,"value":1323},"\u002F\u002F Upload file\n",{"type":42,"tag":70,"props":1325,"children":1326},{"class":72,"line":152},[1327],{"type":42,"tag":70,"props":1328,"children":1329},{},[1330],{"type":48,"value":1331},"f, err := service.CreateFile(\n",{"type":42,"tag":70,"props":1333,"children":1334},{"class":72,"line":161},[1335],{"type":42,"tag":70,"props":1336,"children":1337},{},[1338],{"type":48,"value":1339},"    \"[BUCKET_ID]\",\n",{"type":42,"tag":70,"props":1341,"children":1342},{"class":72,"line":170},[1343],{"type":42,"tag":70,"props":1344,"children":1345},{},[1346],{"type":48,"value":1347},"    \"[FILE_ID]\",\n",{"type":42,"tag":70,"props":1349,"children":1350},{"class":72,"line":179},[1351],{"type":42,"tag":70,"props":1352,"children":1353},{},[1354],{"type":48,"value":1355},"    file.NewInputFile(\"\u002Fpath\u002Fto\u002Ffile.png\", \"file.png\"),\n",{"type":42,"tag":70,"props":1357,"children":1358},{"class":72,"line":188},[1359],{"type":42,"tag":70,"props":1360,"children":1361},{},[1362],{"type":48,"value":185},{"type":42,"tag":70,"props":1364,"children":1365},{"class":72,"line":196},[1366],{"type":42,"tag":70,"props":1367,"children":1368},{"emptyLinePlaceholder":128},[1369],{"type":48,"value":131},{"type":42,"tag":70,"props":1371,"children":1372},{"class":72,"line":205},[1373],{"type":42,"tag":70,"props":1374,"children":1375},{},[1376],{"type":48,"value":1377},"\u002F\u002F List files\n",{"type":42,"tag":70,"props":1379,"children":1380},{"class":72,"line":214},[1381],{"type":42,"tag":70,"props":1382,"children":1383},{},[1384],{"type":48,"value":1385},"files, err := service.ListFiles(\"[BUCKET_ID]\")\n",{"type":42,"tag":70,"props":1387,"children":1388},{"class":72,"line":223},[1389],{"type":42,"tag":70,"props":1390,"children":1391},{"emptyLinePlaceholder":128},[1392],{"type":48,"value":131},{"type":42,"tag":70,"props":1394,"children":1395},{"class":72,"line":232},[1396],{"type":42,"tag":70,"props":1397,"children":1398},{},[1399],{"type":48,"value":1400},"\u002F\u002F Delete file\n",{"type":42,"tag":70,"props":1402,"children":1403},{"class":72,"line":376},[1404],{"type":42,"tag":70,"props":1405,"children":1406},{},[1407],{"type":48,"value":1408},"_, err = service.DeleteFile(\"[BUCKET_ID]\", \"[FILE_ID]\")\n",{"type":42,"tag":702,"props":1410,"children":1412},{"id":1411},"inputfile-factory-methods",[1413],{"type":48,"value":1414},"InputFile Factory Methods",{"type":42,"tag":58,"props":1416,"children":1418},{"className":99,"code":1417,"language":25,"meta":63,"style":63},"import \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Ffile\"\n\nfile.NewInputFile(\"\u002Fpath\u002Fto\u002Ffile.png\", \"file.png\")          \u002F\u002F from filesystem path\nfile.NewInputFileFromReader(reader, \"file.png\", size)        \u002F\u002F from io.Reader (size required)\nfile.NewInputFileFromBytes(data, \"file.png\")                 \u002F\u002F from []byte\n",[1419],{"type":42,"tag":66,"props":1420,"children":1421},{"__ignoreMap":63},[1422,1429,1436,1444,1452],{"type":42,"tag":70,"props":1423,"children":1424},{"class":72,"line":73},[1425],{"type":42,"tag":70,"props":1426,"children":1427},{},[1428],{"type":48,"value":1293},{"type":42,"tag":70,"props":1430,"children":1431},{"class":72,"line":115},[1432],{"type":42,"tag":70,"props":1433,"children":1434},{"emptyLinePlaceholder":128},[1435],{"type":48,"value":131},{"type":42,"tag":70,"props":1437,"children":1438},{"class":72,"line":124},[1439],{"type":42,"tag":70,"props":1440,"children":1441},{},[1442],{"type":48,"value":1443},"file.NewInputFile(\"\u002Fpath\u002Fto\u002Ffile.png\", \"file.png\")          \u002F\u002F from filesystem path\n",{"type":42,"tag":70,"props":1445,"children":1446},{"class":72,"line":134},[1447],{"type":42,"tag":70,"props":1448,"children":1449},{},[1450],{"type":48,"value":1451},"file.NewInputFileFromReader(reader, \"file.png\", size)        \u002F\u002F from io.Reader (size required)\n",{"type":42,"tag":70,"props":1453,"children":1454},{"class":72,"line":143},[1455],{"type":42,"tag":70,"props":1456,"children":1457},{},[1458],{"type":48,"value":1459},"file.NewInputFileFromBytes(data, \"file.png\")                 \u002F\u002F from []byte\n",{"type":42,"tag":245,"props":1461,"children":1463},{"id":1462},"teams",[1464],{"type":48,"value":1465},"Teams",{"type":42,"tag":58,"props":1467,"children":1469},{"className":99,"code":1468,"language":25,"meta":63,"style":63},"import \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fteams\"\n\nsvc := teams.New(clt)\n\n\u002F\u002F Create team\nteam, err := svc.Create(id.Unique(), \"Engineering\")\n\n\u002F\u002F List teams\nlist, err := svc.List()\n\n\u002F\u002F Create membership (invite user by email)\nmembership, err := svc.CreateMembership(\n    \"[TEAM_ID]\",\n    []string{\"editor\"},\n    teams.WithCreateMembershipEmail(\"user@example.com\"),\n)\n\n\u002F\u002F List memberships\nmembers, err := svc.ListMemberships(\"[TEAM_ID]\")\n\n\u002F\u002F Update membership roles\n_, err = svc.UpdateMembership(\"[TEAM_ID]\", \"[MEMBERSHIP_ID]\", []string{\"admin\"})\n\n\u002F\u002F Delete team\n_, err = svc.Delete(\"[TEAM_ID]\")\n",[1470],{"type":42,"tag":66,"props":1471,"children":1472},{"__ignoreMap":63},[1473,1481,1488,1496,1503,1511,1519,1526,1534,1542,1549,1557,1565,1573,1581,1589,1596,1603,1611,1619,1626,1634,1642,1649,1657],{"type":42,"tag":70,"props":1474,"children":1475},{"class":72,"line":73},[1476],{"type":42,"tag":70,"props":1477,"children":1478},{},[1479],{"type":48,"value":1480},"import \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fteams\"\n",{"type":42,"tag":70,"props":1482,"children":1483},{"class":72,"line":115},[1484],{"type":42,"tag":70,"props":1485,"children":1486},{"emptyLinePlaceholder":128},[1487],{"type":48,"value":131},{"type":42,"tag":70,"props":1489,"children":1490},{"class":72,"line":124},[1491],{"type":42,"tag":70,"props":1492,"children":1493},{},[1494],{"type":48,"value":1495},"svc := teams.New(clt)\n",{"type":42,"tag":70,"props":1497,"children":1498},{"class":72,"line":134},[1499],{"type":42,"tag":70,"props":1500,"children":1501},{"emptyLinePlaceholder":128},[1502],{"type":48,"value":131},{"type":42,"tag":70,"props":1504,"children":1505},{"class":72,"line":143},[1506],{"type":42,"tag":70,"props":1507,"children":1508},{},[1509],{"type":48,"value":1510},"\u002F\u002F Create team\n",{"type":42,"tag":70,"props":1512,"children":1513},{"class":72,"line":152},[1514],{"type":42,"tag":70,"props":1515,"children":1516},{},[1517],{"type":48,"value":1518},"team, err := svc.Create(id.Unique(), \"Engineering\")\n",{"type":42,"tag":70,"props":1520,"children":1521},{"class":72,"line":161},[1522],{"type":42,"tag":70,"props":1523,"children":1524},{"emptyLinePlaceholder":128},[1525],{"type":48,"value":131},{"type":42,"tag":70,"props":1527,"children":1528},{"class":72,"line":170},[1529],{"type":42,"tag":70,"props":1530,"children":1531},{},[1532],{"type":48,"value":1533},"\u002F\u002F List teams\n",{"type":42,"tag":70,"props":1535,"children":1536},{"class":72,"line":179},[1537],{"type":42,"tag":70,"props":1538,"children":1539},{},[1540],{"type":48,"value":1541},"list, err := svc.List()\n",{"type":42,"tag":70,"props":1543,"children":1544},{"class":72,"line":188},[1545],{"type":42,"tag":70,"props":1546,"children":1547},{"emptyLinePlaceholder":128},[1548],{"type":48,"value":131},{"type":42,"tag":70,"props":1550,"children":1551},{"class":72,"line":196},[1552],{"type":42,"tag":70,"props":1553,"children":1554},{},[1555],{"type":48,"value":1556},"\u002F\u002F Create membership (invite user by email)\n",{"type":42,"tag":70,"props":1558,"children":1559},{"class":72,"line":205},[1560],{"type":42,"tag":70,"props":1561,"children":1562},{},[1563],{"type":48,"value":1564},"membership, err := svc.CreateMembership(\n",{"type":42,"tag":70,"props":1566,"children":1567},{"class":72,"line":214},[1568],{"type":42,"tag":70,"props":1569,"children":1570},{},[1571],{"type":48,"value":1572},"    \"[TEAM_ID]\",\n",{"type":42,"tag":70,"props":1574,"children":1575},{"class":72,"line":223},[1576],{"type":42,"tag":70,"props":1577,"children":1578},{},[1579],{"type":48,"value":1580},"    []string{\"editor\"},\n",{"type":42,"tag":70,"props":1582,"children":1583},{"class":72,"line":232},[1584],{"type":42,"tag":70,"props":1585,"children":1586},{},[1587],{"type":48,"value":1588},"    teams.WithCreateMembershipEmail(\"user@example.com\"),\n",{"type":42,"tag":70,"props":1590,"children":1591},{"class":72,"line":376},[1592],{"type":42,"tag":70,"props":1593,"children":1594},{},[1595],{"type":48,"value":185},{"type":42,"tag":70,"props":1597,"children":1598},{"class":72,"line":384},[1599],{"type":42,"tag":70,"props":1600,"children":1601},{"emptyLinePlaceholder":128},[1602],{"type":48,"value":131},{"type":42,"tag":70,"props":1604,"children":1605},{"class":72,"line":393},[1606],{"type":42,"tag":70,"props":1607,"children":1608},{},[1609],{"type":48,"value":1610},"\u002F\u002F List memberships\n",{"type":42,"tag":70,"props":1612,"children":1613},{"class":72,"line":610},[1614],{"type":42,"tag":70,"props":1615,"children":1616},{},[1617],{"type":48,"value":1618},"members, err := svc.ListMemberships(\"[TEAM_ID]\")\n",{"type":42,"tag":70,"props":1620,"children":1621},{"class":72,"line":618},[1622],{"type":42,"tag":70,"props":1623,"children":1624},{"emptyLinePlaceholder":128},[1625],{"type":48,"value":131},{"type":42,"tag":70,"props":1627,"children":1628},{"class":72,"line":627},[1629],{"type":42,"tag":70,"props":1630,"children":1631},{},[1632],{"type":48,"value":1633},"\u002F\u002F Update membership roles\n",{"type":42,"tag":70,"props":1635,"children":1636},{"class":72,"line":636},[1637],{"type":42,"tag":70,"props":1638,"children":1639},{},[1640],{"type":48,"value":1641},"_, err = svc.UpdateMembership(\"[TEAM_ID]\", \"[MEMBERSHIP_ID]\", []string{\"admin\"})\n",{"type":42,"tag":70,"props":1643,"children":1644},{"class":72,"line":26},[1645],{"type":42,"tag":70,"props":1646,"children":1647},{"emptyLinePlaceholder":128},[1648],{"type":48,"value":131},{"type":42,"tag":70,"props":1650,"children":1651},{"class":72,"line":651},[1652],{"type":42,"tag":70,"props":1653,"children":1654},{},[1655],{"type":48,"value":1656},"\u002F\u002F Delete team\n",{"type":42,"tag":70,"props":1658,"children":1659},{"class":72,"line":660},[1660],{"type":42,"tag":70,"props":1661,"children":1662},{},[1663],{"type":48,"value":1664},"_, err = svc.Delete(\"[TEAM_ID]\")\n",{"type":42,"tag":407,"props":1666,"children":1667},{},[1668],{"type":42,"tag":411,"props":1669,"children":1670},{},[1671,1676,1677,1683,1685,1691],{"type":42,"tag":415,"props":1672,"children":1673},{},[1674],{"type":48,"value":1675},"Role-based access:",{"type":48,"value":421},{"type":42,"tag":66,"props":1678,"children":1680},{"className":1679},[],[1681],{"type":48,"value":1682},"role.Team(\"[TEAM_ID]\")",{"type":48,"value":1684}," for all team members or ",{"type":42,"tag":66,"props":1686,"children":1688},{"className":1687},[],[1689],{"type":48,"value":1690},"role.Team(\"[TEAM_ID]\", \"editor\")",{"type":48,"value":1692}," for a specific team role when setting permissions.",{"type":42,"tag":245,"props":1694,"children":1696},{"id":1695},"serverless-functions",[1697],{"type":48,"value":1698},"Serverless Functions",{"type":42,"tag":58,"props":1700,"children":1702},{"className":99,"code":1701,"language":25,"meta":63,"style":63},"import \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Ffunctions\"\n\nsvc := functions.New(clt)\n\n\u002F\u002F Execute function\nexecution, err := svc.CreateExecution(\n    \"[FUNCTION_ID]\",\n    functions.WithCreateExecutionBody(`{\"key\": \"value\"}`),\n)\n\n\u002F\u002F List executions\nexecutions, err := svc.ListExecutions(\"[FUNCTION_ID]\")\n",[1703],{"type":42,"tag":66,"props":1704,"children":1705},{"__ignoreMap":63},[1706,1714,1721,1729,1736,1744,1752,1760,1768,1775,1782,1790],{"type":42,"tag":70,"props":1707,"children":1708},{"class":72,"line":73},[1709],{"type":42,"tag":70,"props":1710,"children":1711},{},[1712],{"type":48,"value":1713},"import \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Ffunctions\"\n",{"type":42,"tag":70,"props":1715,"children":1716},{"class":72,"line":115},[1717],{"type":42,"tag":70,"props":1718,"children":1719},{"emptyLinePlaceholder":128},[1720],{"type":48,"value":131},{"type":42,"tag":70,"props":1722,"children":1723},{"class":72,"line":124},[1724],{"type":42,"tag":70,"props":1725,"children":1726},{},[1727],{"type":48,"value":1728},"svc := functions.New(clt)\n",{"type":42,"tag":70,"props":1730,"children":1731},{"class":72,"line":134},[1732],{"type":42,"tag":70,"props":1733,"children":1734},{"emptyLinePlaceholder":128},[1735],{"type":48,"value":131},{"type":42,"tag":70,"props":1737,"children":1738},{"class":72,"line":143},[1739],{"type":42,"tag":70,"props":1740,"children":1741},{},[1742],{"type":48,"value":1743},"\u002F\u002F Execute function\n",{"type":42,"tag":70,"props":1745,"children":1746},{"class":72,"line":152},[1747],{"type":42,"tag":70,"props":1748,"children":1749},{},[1750],{"type":48,"value":1751},"execution, err := svc.CreateExecution(\n",{"type":42,"tag":70,"props":1753,"children":1754},{"class":72,"line":161},[1755],{"type":42,"tag":70,"props":1756,"children":1757},{},[1758],{"type":48,"value":1759},"    \"[FUNCTION_ID]\",\n",{"type":42,"tag":70,"props":1761,"children":1762},{"class":72,"line":170},[1763],{"type":42,"tag":70,"props":1764,"children":1765},{},[1766],{"type":48,"value":1767},"    functions.WithCreateExecutionBody(`{\"key\": \"value\"}`),\n",{"type":42,"tag":70,"props":1769,"children":1770},{"class":72,"line":179},[1771],{"type":42,"tag":70,"props":1772,"children":1773},{},[1774],{"type":48,"value":185},{"type":42,"tag":70,"props":1776,"children":1777},{"class":72,"line":188},[1778],{"type":42,"tag":70,"props":1779,"children":1780},{"emptyLinePlaceholder":128},[1781],{"type":48,"value":131},{"type":42,"tag":70,"props":1783,"children":1784},{"class":72,"line":196},[1785],{"type":42,"tag":70,"props":1786,"children":1787},{},[1788],{"type":48,"value":1789},"\u002F\u002F List executions\n",{"type":42,"tag":70,"props":1791,"children":1792},{"class":72,"line":205},[1793],{"type":42,"tag":70,"props":1794,"children":1795},{},[1796],{"type":48,"value":1797},"executions, err := svc.ListExecutions(\"[FUNCTION_ID]\")\n",{"type":42,"tag":702,"props":1799,"children":1801},{"id":1800},"writing-a-function-handler-go-runtime",[1802],{"type":48,"value":1803},"Writing a Function Handler (Go runtime)",{"type":42,"tag":58,"props":1805,"children":1807},{"className":99,"code":1806,"language":25,"meta":63,"style":63},"\u002F\u002F src\u002Fmain.go — Appwrite Function entry point\npackage handler\n\nimport (\n    \"github.com\u002Fopen-runtimes\u002Ftypes-for-go\u002Fv4\u002Fopenruntimes\"\n)\n\nfunc Main(context openruntimes.Context) openruntimes.Response {\n    \u002F\u002F context.Req.Body        — raw body (string)\n    \u002F\u002F context.Req.BodyJson    — parsed JSON (map[string]interface{})\n    \u002F\u002F context.Req.Headers     — headers (map[string]string)\n    \u002F\u002F context.Req.Method      — HTTP method\n    \u002F\u002F context.Req.Path        — URL path\n    \u002F\u002F context.Req.Query       — query params (map[string]string)\n\n    context.Log(\"Processing: \" + context.Req.Method + \" \" + context.Req.Path)\n\n    if context.Req.Method == \"GET\" {\n        return context.Res.Json(map[string]interface{}{\"message\": \"Hello!\"})\n    }\n\n    return context.Res.Json(map[string]interface{}{\"success\": true})\n    \u002F\u002F context.Res.Text(\"Hello\")                  \u002F\u002F plain text\n    \u002F\u002F context.Res.Empty()                         \u002F\u002F 204\n    \u002F\u002F context.Res.Redirect(\"https:\u002F\u002F...\")          \u002F\u002F 302\n}\n",[1808],{"type":42,"tag":66,"props":1809,"children":1810},{"__ignoreMap":63},[1811,1819,1827,1834,1841,1849,1856,1863,1871,1879,1887,1895,1903,1911,1919,1926,1934,1941,1949,1957,1965,1972,1980,1993,2006,2019],{"type":42,"tag":70,"props":1812,"children":1813},{"class":72,"line":73},[1814],{"type":42,"tag":70,"props":1815,"children":1816},{},[1817],{"type":48,"value":1818},"\u002F\u002F src\u002Fmain.go — Appwrite Function entry point\n",{"type":42,"tag":70,"props":1820,"children":1821},{"class":72,"line":115},[1822],{"type":42,"tag":70,"props":1823,"children":1824},{},[1825],{"type":48,"value":1826},"package handler\n",{"type":42,"tag":70,"props":1828,"children":1829},{"class":72,"line":124},[1830],{"type":42,"tag":70,"props":1831,"children":1832},{"emptyLinePlaceholder":128},[1833],{"type":48,"value":131},{"type":42,"tag":70,"props":1835,"children":1836},{"class":72,"line":134},[1837],{"type":42,"tag":70,"props":1838,"children":1839},{},[1840],{"type":48,"value":112},{"type":42,"tag":70,"props":1842,"children":1843},{"class":72,"line":143},[1844],{"type":42,"tag":70,"props":1845,"children":1846},{},[1847],{"type":48,"value":1848},"    \"github.com\u002Fopen-runtimes\u002Ftypes-for-go\u002Fv4\u002Fopenruntimes\"\n",{"type":42,"tag":70,"props":1850,"children":1851},{"class":72,"line":152},[1852],{"type":42,"tag":70,"props":1853,"children":1854},{},[1855],{"type":48,"value":185},{"type":42,"tag":70,"props":1857,"children":1858},{"class":72,"line":161},[1859],{"type":42,"tag":70,"props":1860,"children":1861},{"emptyLinePlaceholder":128},[1862],{"type":48,"value":131},{"type":42,"tag":70,"props":1864,"children":1865},{"class":72,"line":170},[1866],{"type":42,"tag":70,"props":1867,"children":1868},{},[1869],{"type":48,"value":1870},"func Main(context openruntimes.Context) openruntimes.Response {\n",{"type":42,"tag":70,"props":1872,"children":1873},{"class":72,"line":179},[1874],{"type":42,"tag":70,"props":1875,"children":1876},{},[1877],{"type":48,"value":1878},"    \u002F\u002F context.Req.Body        — raw body (string)\n",{"type":42,"tag":70,"props":1880,"children":1881},{"class":72,"line":188},[1882],{"type":42,"tag":70,"props":1883,"children":1884},{},[1885],{"type":48,"value":1886},"    \u002F\u002F context.Req.BodyJson    — parsed JSON (map[string]interface{})\n",{"type":42,"tag":70,"props":1888,"children":1889},{"class":72,"line":196},[1890],{"type":42,"tag":70,"props":1891,"children":1892},{},[1893],{"type":48,"value":1894},"    \u002F\u002F context.Req.Headers     — headers (map[string]string)\n",{"type":42,"tag":70,"props":1896,"children":1897},{"class":72,"line":205},[1898],{"type":42,"tag":70,"props":1899,"children":1900},{},[1901],{"type":48,"value":1902},"    \u002F\u002F context.Req.Method      — HTTP method\n",{"type":42,"tag":70,"props":1904,"children":1905},{"class":72,"line":214},[1906],{"type":42,"tag":70,"props":1907,"children":1908},{},[1909],{"type":48,"value":1910},"    \u002F\u002F context.Req.Path        — URL path\n",{"type":42,"tag":70,"props":1912,"children":1913},{"class":72,"line":223},[1914],{"type":42,"tag":70,"props":1915,"children":1916},{},[1917],{"type":48,"value":1918},"    \u002F\u002F context.Req.Query       — query params (map[string]string)\n",{"type":42,"tag":70,"props":1920,"children":1921},{"class":72,"line":232},[1922],{"type":42,"tag":70,"props":1923,"children":1924},{"emptyLinePlaceholder":128},[1925],{"type":48,"value":131},{"type":42,"tag":70,"props":1927,"children":1928},{"class":72,"line":376},[1929],{"type":42,"tag":70,"props":1930,"children":1931},{},[1932],{"type":48,"value":1933},"    context.Log(\"Processing: \" + context.Req.Method + \" \" + context.Req.Path)\n",{"type":42,"tag":70,"props":1935,"children":1936},{"class":72,"line":384},[1937],{"type":42,"tag":70,"props":1938,"children":1939},{"emptyLinePlaceholder":128},[1940],{"type":48,"value":131},{"type":42,"tag":70,"props":1942,"children":1943},{"class":72,"line":393},[1944],{"type":42,"tag":70,"props":1945,"children":1946},{},[1947],{"type":48,"value":1948},"    if context.Req.Method == \"GET\" {\n",{"type":42,"tag":70,"props":1950,"children":1951},{"class":72,"line":610},[1952],{"type":42,"tag":70,"props":1953,"children":1954},{},[1955],{"type":48,"value":1956},"        return context.Res.Json(map[string]interface{}{\"message\": \"Hello!\"})\n",{"type":42,"tag":70,"props":1958,"children":1959},{"class":72,"line":618},[1960],{"type":42,"tag":70,"props":1961,"children":1962},{},[1963],{"type":48,"value":1964},"    }\n",{"type":42,"tag":70,"props":1966,"children":1967},{"class":72,"line":627},[1968],{"type":42,"tag":70,"props":1969,"children":1970},{"emptyLinePlaceholder":128},[1971],{"type":48,"value":131},{"type":42,"tag":70,"props":1973,"children":1974},{"class":72,"line":636},[1975],{"type":42,"tag":70,"props":1976,"children":1977},{},[1978],{"type":48,"value":1979},"    return context.Res.Json(map[string]interface{}{\"success\": true})\n",{"type":42,"tag":70,"props":1981,"children":1982},{"class":72,"line":26},[1983,1988],{"type":42,"tag":70,"props":1984,"children":1985},{},[1986],{"type":48,"value":1987},"    \u002F\u002F context.Res.Text(\"Hello\")",{"type":42,"tag":70,"props":1989,"children":1990},{},[1991],{"type":48,"value":1992},"                  \u002F\u002F plain text\n",{"type":42,"tag":70,"props":1994,"children":1995},{"class":72,"line":651},[1996,2001],{"type":42,"tag":70,"props":1997,"children":1998},{},[1999],{"type":48,"value":2000},"    \u002F\u002F context.Res.Empty()",{"type":42,"tag":70,"props":2002,"children":2003},{},[2004],{"type":48,"value":2005},"                         \u002F\u002F 204\n",{"type":42,"tag":70,"props":2007,"children":2008},{"class":72,"line":660},[2009,2014],{"type":42,"tag":70,"props":2010,"children":2011},{},[2012],{"type":48,"value":2013},"    \u002F\u002F context.Res.Redirect(\"https:\u002F\u002F...\")",{"type":42,"tag":70,"props":2015,"children":2016},{},[2017],{"type":48,"value":2018},"          \u002F\u002F 302\n",{"type":42,"tag":70,"props":2020,"children":2021},{"class":72,"line":669},[2022],{"type":42,"tag":70,"props":2023,"children":2024},{},[2025],{"type":48,"value":2026},"}\n",{"type":42,"tag":245,"props":2028,"children":2030},{"id":2029},"server-side-rendering-ssr-authentication",[2031],{"type":48,"value":2032},"Server-Side Rendering (SSR) Authentication",{"type":42,"tag":411,"props":2034,"children":2035},{},[2036,2038,2043],{"type":48,"value":2037},"SSR apps using Go frameworks (net\u002Fhttp, Gin, Echo, Chi, etc.) use the ",{"type":42,"tag":415,"props":2039,"children":2040},{},[2041],{"type":48,"value":2042},"server SDK",{"type":48,"value":2044}," to handle auth. You need two clients:",{"type":42,"tag":868,"props":2046,"children":2047},{},[2048,2058],{"type":42,"tag":872,"props":2049,"children":2050},{},[2051,2056],{"type":42,"tag":415,"props":2052,"children":2053},{},[2054],{"type":48,"value":2055},"Admin client",{"type":48,"value":2057}," — uses an API key, creates sessions, bypasses rate limits (reusable singleton)",{"type":42,"tag":872,"props":2059,"children":2060},{},[2061,2066],{"type":42,"tag":415,"props":2062,"children":2063},{},[2064],{"type":48,"value":2065},"Session client",{"type":48,"value":2067}," — uses a session cookie, acts on behalf of a user (create per-request, never share)",{"type":42,"tag":58,"props":2069,"children":2071},{"className":99,"code":2070,"language":25,"meta":63,"style":63},"import (\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fclient\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Faccount\"\n)\n\n\u002F\u002F Admin client (reusable)\nadminClient := client.New(\n    client.WithEndpoint(\"https:\u002F\u002F\u003CREGION>.cloud.appwrite.io\u002Fv1\"),\n    client.WithProject(os.Getenv(\"APPWRITE_PROJECT_ID\")),\n    client.WithKey(os.Getenv(\"APPWRITE_API_KEY\")),\n)\n\n\u002F\u002F Session client (create per-request)\nsessionClient := client.New(\n    client.WithEndpoint(\"https:\u002F\u002F\u003CREGION>.cloud.appwrite.io\u002Fv1\"),\n    client.WithProject(os.Getenv(\"APPWRITE_PROJECT_ID\")),\n)\n\ncookie, err := r.Cookie(\"a_session_[PROJECT_ID]\")\nif err == nil {\n    sessionClient.SetSession(cookie.Value)\n}\n",[2072],{"type":42,"tag":66,"props":2073,"children":2074},{"__ignoreMap":63},[2075,2082,2089,2097,2104,2111,2119,2127,2134,2141,2148,2155,2162,2170,2178,2185,2192,2199,2206,2214,2222,2230],{"type":42,"tag":70,"props":2076,"children":2077},{"class":72,"line":73},[2078],{"type":42,"tag":70,"props":2079,"children":2080},{},[2081],{"type":48,"value":112},{"type":42,"tag":70,"props":2083,"children":2084},{"class":72,"line":115},[2085],{"type":42,"tag":70,"props":2086,"children":2087},{},[2088],{"type":48,"value":140},{"type":42,"tag":70,"props":2090,"children":2091},{"class":72,"line":124},[2092],{"type":42,"tag":70,"props":2093,"children":2094},{},[2095],{"type":48,"value":2096},"    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Faccount\"\n",{"type":42,"tag":70,"props":2098,"children":2099},{"class":72,"line":134},[2100],{"type":42,"tag":70,"props":2101,"children":2102},{},[2103],{"type":48,"value":185},{"type":42,"tag":70,"props":2105,"children":2106},{"class":72,"line":143},[2107],{"type":42,"tag":70,"props":2108,"children":2109},{"emptyLinePlaceholder":128},[2110],{"type":48,"value":131},{"type":42,"tag":70,"props":2112,"children":2113},{"class":72,"line":152},[2114],{"type":42,"tag":70,"props":2115,"children":2116},{},[2117],{"type":48,"value":2118},"\u002F\u002F Admin client (reusable)\n",{"type":42,"tag":70,"props":2120,"children":2121},{"class":72,"line":161},[2122],{"type":42,"tag":70,"props":2123,"children":2124},{},[2125],{"type":48,"value":2126},"adminClient := client.New(\n",{"type":42,"tag":70,"props":2128,"children":2129},{"class":72,"line":170},[2130],{"type":42,"tag":70,"props":2131,"children":2132},{},[2133],{"type":48,"value":211},{"type":42,"tag":70,"props":2135,"children":2136},{"class":72,"line":179},[2137],{"type":42,"tag":70,"props":2138,"children":2139},{},[2140],{"type":48,"value":220},{"type":42,"tag":70,"props":2142,"children":2143},{"class":72,"line":188},[2144],{"type":42,"tag":70,"props":2145,"children":2146},{},[2147],{"type":48,"value":229},{"type":42,"tag":70,"props":2149,"children":2150},{"class":72,"line":196},[2151],{"type":42,"tag":70,"props":2152,"children":2153},{},[2154],{"type":48,"value":185},{"type":42,"tag":70,"props":2156,"children":2157},{"class":72,"line":205},[2158],{"type":42,"tag":70,"props":2159,"children":2160},{"emptyLinePlaceholder":128},[2161],{"type":48,"value":131},{"type":42,"tag":70,"props":2163,"children":2164},{"class":72,"line":214},[2165],{"type":42,"tag":70,"props":2166,"children":2167},{},[2168],{"type":48,"value":2169},"\u002F\u002F Session client (create per-request)\n",{"type":42,"tag":70,"props":2171,"children":2172},{"class":72,"line":223},[2173],{"type":42,"tag":70,"props":2174,"children":2175},{},[2176],{"type":48,"value":2177},"sessionClient := client.New(\n",{"type":42,"tag":70,"props":2179,"children":2180},{"class":72,"line":232},[2181],{"type":42,"tag":70,"props":2182,"children":2183},{},[2184],{"type":48,"value":211},{"type":42,"tag":70,"props":2186,"children":2187},{"class":72,"line":376},[2188],{"type":42,"tag":70,"props":2189,"children":2190},{},[2191],{"type":48,"value":220},{"type":42,"tag":70,"props":2193,"children":2194},{"class":72,"line":384},[2195],{"type":42,"tag":70,"props":2196,"children":2197},{},[2198],{"type":48,"value":185},{"type":42,"tag":70,"props":2200,"children":2201},{"class":72,"line":393},[2202],{"type":42,"tag":70,"props":2203,"children":2204},{"emptyLinePlaceholder":128},[2205],{"type":48,"value":131},{"type":42,"tag":70,"props":2207,"children":2208},{"class":72,"line":610},[2209],{"type":42,"tag":70,"props":2210,"children":2211},{},[2212],{"type":48,"value":2213},"cookie, err := r.Cookie(\"a_session_[PROJECT_ID]\")\n",{"type":42,"tag":70,"props":2215,"children":2216},{"class":72,"line":618},[2217],{"type":42,"tag":70,"props":2218,"children":2219},{},[2220],{"type":48,"value":2221},"if err == nil {\n",{"type":42,"tag":70,"props":2223,"children":2224},{"class":72,"line":627},[2225],{"type":42,"tag":70,"props":2226,"children":2227},{},[2228],{"type":48,"value":2229},"    sessionClient.SetSession(cookie.Value)\n",{"type":42,"tag":70,"props":2231,"children":2232},{"class":72,"line":636},[2233],{"type":42,"tag":70,"props":2234,"children":2235},{},[2236],{"type":48,"value":2026},{"type":42,"tag":702,"props":2238,"children":2240},{"id":2239},"emailpassword-login",[2241],{"type":48,"value":2242},"Email\u002FPassword Login",{"type":42,"tag":58,"props":2244,"children":2246},{"className":99,"code":2245,"language":25,"meta":63,"style":63},"http.HandleFunc(\"\u002Flogin\", func(w http.ResponseWriter, r *http.Request) {\n    svc := account.New(adminClient)\n    session, err := svc.CreateEmailPasswordSession(r.FormValue(\"email\"), r.FormValue(\"password\"))\n    if err != nil {\n        http.Error(w, err.Error(), http.StatusBadRequest)\n        return\n    }\n\n    \u002F\u002F Cookie name must be a_session_\u003CPROJECT_ID>\n    http.SetCookie(w, &http.Cookie{\n        Name:     \"a_session_[PROJECT_ID]\",\n        Value:    session.Secret,\n        HttpOnly: true,\n        Secure:   true,\n        SameSite: http.SameSiteStrictMode,\n        Path:     \"\u002F\",\n    })\n\n    w.Header().Set(\"Content-Type\", \"application\u002Fjson\")\n    w.Write([]byte(`{\"success\": true}`))\n})\n",[2247],{"type":42,"tag":66,"props":2248,"children":2249},{"__ignoreMap":63},[2250,2258,2266,2274,2282,2290,2298,2305,2312,2320,2328,2336,2344,2352,2360,2368,2376,2384,2391,2399,2407],{"type":42,"tag":70,"props":2251,"children":2252},{"class":72,"line":73},[2253],{"type":42,"tag":70,"props":2254,"children":2255},{},[2256],{"type":48,"value":2257},"http.HandleFunc(\"\u002Flogin\", func(w http.ResponseWriter, r *http.Request) {\n",{"type":42,"tag":70,"props":2259,"children":2260},{"class":72,"line":115},[2261],{"type":42,"tag":70,"props":2262,"children":2263},{},[2264],{"type":48,"value":2265},"    svc := account.New(adminClient)\n",{"type":42,"tag":70,"props":2267,"children":2268},{"class":72,"line":124},[2269],{"type":42,"tag":70,"props":2270,"children":2271},{},[2272],{"type":48,"value":2273},"    session, err := svc.CreateEmailPasswordSession(r.FormValue(\"email\"), r.FormValue(\"password\"))\n",{"type":42,"tag":70,"props":2275,"children":2276},{"class":72,"line":134},[2277],{"type":42,"tag":70,"props":2278,"children":2279},{},[2280],{"type":48,"value":2281},"    if err != nil {\n",{"type":42,"tag":70,"props":2283,"children":2284},{"class":72,"line":143},[2285],{"type":42,"tag":70,"props":2286,"children":2287},{},[2288],{"type":48,"value":2289},"        http.Error(w, err.Error(), http.StatusBadRequest)\n",{"type":42,"tag":70,"props":2291,"children":2292},{"class":72,"line":152},[2293],{"type":42,"tag":70,"props":2294,"children":2295},{},[2296],{"type":48,"value":2297},"        return\n",{"type":42,"tag":70,"props":2299,"children":2300},{"class":72,"line":161},[2301],{"type":42,"tag":70,"props":2302,"children":2303},{},[2304],{"type":48,"value":1964},{"type":42,"tag":70,"props":2306,"children":2307},{"class":72,"line":170},[2308],{"type":42,"tag":70,"props":2309,"children":2310},{"emptyLinePlaceholder":128},[2311],{"type":48,"value":131},{"type":42,"tag":70,"props":2313,"children":2314},{"class":72,"line":179},[2315],{"type":42,"tag":70,"props":2316,"children":2317},{},[2318],{"type":48,"value":2319},"    \u002F\u002F Cookie name must be a_session_\u003CPROJECT_ID>\n",{"type":42,"tag":70,"props":2321,"children":2322},{"class":72,"line":188},[2323],{"type":42,"tag":70,"props":2324,"children":2325},{},[2326],{"type":48,"value":2327},"    http.SetCookie(w, &http.Cookie{\n",{"type":42,"tag":70,"props":2329,"children":2330},{"class":72,"line":196},[2331],{"type":42,"tag":70,"props":2332,"children":2333},{},[2334],{"type":48,"value":2335},"        Name:     \"a_session_[PROJECT_ID]\",\n",{"type":42,"tag":70,"props":2337,"children":2338},{"class":72,"line":205},[2339],{"type":42,"tag":70,"props":2340,"children":2341},{},[2342],{"type":48,"value":2343},"        Value:    session.Secret,\n",{"type":42,"tag":70,"props":2345,"children":2346},{"class":72,"line":214},[2347],{"type":42,"tag":70,"props":2348,"children":2349},{},[2350],{"type":48,"value":2351},"        HttpOnly: true,\n",{"type":42,"tag":70,"props":2353,"children":2354},{"class":72,"line":223},[2355],{"type":42,"tag":70,"props":2356,"children":2357},{},[2358],{"type":48,"value":2359},"        Secure:   true,\n",{"type":42,"tag":70,"props":2361,"children":2362},{"class":72,"line":232},[2363],{"type":42,"tag":70,"props":2364,"children":2365},{},[2366],{"type":48,"value":2367},"        SameSite: http.SameSiteStrictMode,\n",{"type":42,"tag":70,"props":2369,"children":2370},{"class":72,"line":376},[2371],{"type":42,"tag":70,"props":2372,"children":2373},{},[2374],{"type":48,"value":2375},"        Path:     \"\u002F\",\n",{"type":42,"tag":70,"props":2377,"children":2378},{"class":72,"line":384},[2379],{"type":42,"tag":70,"props":2380,"children":2381},{},[2382],{"type":48,"value":2383},"    })\n",{"type":42,"tag":70,"props":2385,"children":2386},{"class":72,"line":393},[2387],{"type":42,"tag":70,"props":2388,"children":2389},{"emptyLinePlaceholder":128},[2390],{"type":48,"value":131},{"type":42,"tag":70,"props":2392,"children":2393},{"class":72,"line":610},[2394],{"type":42,"tag":70,"props":2395,"children":2396},{},[2397],{"type":48,"value":2398},"    w.Header().Set(\"Content-Type\", \"application\u002Fjson\")\n",{"type":42,"tag":70,"props":2400,"children":2401},{"class":72,"line":618},[2402],{"type":42,"tag":70,"props":2403,"children":2404},{},[2405],{"type":48,"value":2406},"    w.Write([]byte(`{\"success\": true}`))\n",{"type":42,"tag":70,"props":2408,"children":2409},{"class":72,"line":627},[2410],{"type":42,"tag":70,"props":2411,"children":2412},{},[2413],{"type":48,"value":2414},"})\n",{"type":42,"tag":702,"props":2416,"children":2418},{"id":2417},"authenticated-requests",[2419],{"type":48,"value":2420},"Authenticated Requests",{"type":42,"tag":58,"props":2422,"children":2424},{"className":99,"code":2423,"language":25,"meta":63,"style":63},"http.HandleFunc(\"\u002Fuser\", func(w http.ResponseWriter, r *http.Request) {\n    cookie, err := r.Cookie(\"a_session_[PROJECT_ID]\")\n    if err != nil {\n        http.Error(w, \"Unauthorized\", http.StatusUnauthorized)\n        return\n    }\n\n    sessionClient := client.New(\n        client.WithEndpoint(\"https:\u002F\u002F\u003CREGION>.cloud.appwrite.io\u002Fv1\"),\n        client.WithProject(os.Getenv(\"APPWRITE_PROJECT_ID\")),\n        client.WithSession(cookie.Value),\n    )\n\n    svc := account.New(sessionClient)\n    user, err := svc.Get()\n    \u002F\u002F Marshal user to JSON and write response\n})\n",[2425],{"type":42,"tag":66,"props":2426,"children":2427},{"__ignoreMap":63},[2428,2436,2444,2451,2459,2466,2473,2480,2488,2496,2504,2512,2520,2527,2535,2543,2551],{"type":42,"tag":70,"props":2429,"children":2430},{"class":72,"line":73},[2431],{"type":42,"tag":70,"props":2432,"children":2433},{},[2434],{"type":48,"value":2435},"http.HandleFunc(\"\u002Fuser\", func(w http.ResponseWriter, r *http.Request) {\n",{"type":42,"tag":70,"props":2437,"children":2438},{"class":72,"line":115},[2439],{"type":42,"tag":70,"props":2440,"children":2441},{},[2442],{"type":48,"value":2443},"    cookie, err := r.Cookie(\"a_session_[PROJECT_ID]\")\n",{"type":42,"tag":70,"props":2445,"children":2446},{"class":72,"line":124},[2447],{"type":42,"tag":70,"props":2448,"children":2449},{},[2450],{"type":48,"value":2281},{"type":42,"tag":70,"props":2452,"children":2453},{"class":72,"line":134},[2454],{"type":42,"tag":70,"props":2455,"children":2456},{},[2457],{"type":48,"value":2458},"        http.Error(w, \"Unauthorized\", http.StatusUnauthorized)\n",{"type":42,"tag":70,"props":2460,"children":2461},{"class":72,"line":143},[2462],{"type":42,"tag":70,"props":2463,"children":2464},{},[2465],{"type":48,"value":2297},{"type":42,"tag":70,"props":2467,"children":2468},{"class":72,"line":152},[2469],{"type":42,"tag":70,"props":2470,"children":2471},{},[2472],{"type":48,"value":1964},{"type":42,"tag":70,"props":2474,"children":2475},{"class":72,"line":161},[2476],{"type":42,"tag":70,"props":2477,"children":2478},{"emptyLinePlaceholder":128},[2479],{"type":48,"value":131},{"type":42,"tag":70,"props":2481,"children":2482},{"class":72,"line":170},[2483],{"type":42,"tag":70,"props":2484,"children":2485},{},[2486],{"type":48,"value":2487},"    sessionClient := client.New(\n",{"type":42,"tag":70,"props":2489,"children":2490},{"class":72,"line":179},[2491],{"type":42,"tag":70,"props":2492,"children":2493},{},[2494],{"type":48,"value":2495},"        client.WithEndpoint(\"https:\u002F\u002F\u003CREGION>.cloud.appwrite.io\u002Fv1\"),\n",{"type":42,"tag":70,"props":2497,"children":2498},{"class":72,"line":188},[2499],{"type":42,"tag":70,"props":2500,"children":2501},{},[2502],{"type":48,"value":2503},"        client.WithProject(os.Getenv(\"APPWRITE_PROJECT_ID\")),\n",{"type":42,"tag":70,"props":2505,"children":2506},{"class":72,"line":196},[2507],{"type":42,"tag":70,"props":2508,"children":2509},{},[2510],{"type":48,"value":2511},"        client.WithSession(cookie.Value),\n",{"type":42,"tag":70,"props":2513,"children":2514},{"class":72,"line":205},[2515],{"type":42,"tag":70,"props":2516,"children":2517},{},[2518],{"type":48,"value":2519},"    )\n",{"type":42,"tag":70,"props":2521,"children":2522},{"class":72,"line":214},[2523],{"type":42,"tag":70,"props":2524,"children":2525},{"emptyLinePlaceholder":128},[2526],{"type":48,"value":131},{"type":42,"tag":70,"props":2528,"children":2529},{"class":72,"line":223},[2530],{"type":42,"tag":70,"props":2531,"children":2532},{},[2533],{"type":48,"value":2534},"    svc := account.New(sessionClient)\n",{"type":42,"tag":70,"props":2536,"children":2537},{"class":72,"line":232},[2538],{"type":42,"tag":70,"props":2539,"children":2540},{},[2541],{"type":48,"value":2542},"    user, err := svc.Get()\n",{"type":42,"tag":70,"props":2544,"children":2545},{"class":72,"line":376},[2546],{"type":42,"tag":70,"props":2547,"children":2548},{},[2549],{"type":48,"value":2550},"    \u002F\u002F Marshal user to JSON and write response\n",{"type":42,"tag":70,"props":2552,"children":2553},{"class":72,"line":384},[2554],{"type":42,"tag":70,"props":2555,"children":2556},{},[2557],{"type":48,"value":2414},{"type":42,"tag":702,"props":2559,"children":2561},{"id":2560},"oauth2-ssr-flow",[2562],{"type":48,"value":2563},"OAuth2 SSR Flow",{"type":42,"tag":58,"props":2565,"children":2567},{"className":99,"code":2566,"language":25,"meta":63,"style":63},"\u002F\u002F Step 1: Redirect to OAuth provider\nhttp.HandleFunc(\"\u002Foauth\", func(w http.ResponseWriter, r *http.Request) {\n    svc := account.New(adminClient)\n    redirectURL, err := svc.CreateOAuth2Token(\n        \"github\",\n        account.WithCreateOAuth2TokenSuccess(\"https:\u002F\u002Fexample.com\u002Foauth\u002Fsuccess\"),\n        account.WithCreateOAuth2TokenFailure(\"https:\u002F\u002Fexample.com\u002Foauth\u002Ffailure\"),\n    )\n    if err != nil {\n        http.Error(w, err.Error(), http.StatusInternalServerError)\n        return\n    }\n    http.Redirect(w, r, redirectURL, http.StatusFound)\n})\n\n\u002F\u002F Step 2: Handle callback — exchange token for session\nhttp.HandleFunc(\"\u002Foauth\u002Fsuccess\", func(w http.ResponseWriter, r *http.Request) {\n    svc := account.New(adminClient)\n    session, err := svc.CreateSession(r.URL.Query().Get(\"userId\"), r.URL.Query().Get(\"secret\"))\n    if err != nil {\n        http.Error(w, err.Error(), http.StatusBadRequest)\n        return\n    }\n\n    http.SetCookie(w, &http.Cookie{\n        Name: \"a_session_[PROJECT_ID]\", Value: session.Secret,\n        HttpOnly: true, Secure: true, SameSite: http.SameSiteStrictMode, Path: \"\u002F\",\n    })\n    w.Write([]byte(`{\"success\": true}`))\n})\n",[2568],{"type":42,"tag":66,"props":2569,"children":2570},{"__ignoreMap":63},[2571,2579,2587,2594,2602,2610,2618,2626,2633,2640,2648,2655,2662,2670,2677,2684,2692,2700,2707,2715,2722,2729,2736,2743,2750,2757,2765,2773,2780,2787],{"type":42,"tag":70,"props":2572,"children":2573},{"class":72,"line":73},[2574],{"type":42,"tag":70,"props":2575,"children":2576},{},[2577],{"type":48,"value":2578},"\u002F\u002F Step 1: Redirect to OAuth provider\n",{"type":42,"tag":70,"props":2580,"children":2581},{"class":72,"line":115},[2582],{"type":42,"tag":70,"props":2583,"children":2584},{},[2585],{"type":48,"value":2586},"http.HandleFunc(\"\u002Foauth\", func(w http.ResponseWriter, r *http.Request) {\n",{"type":42,"tag":70,"props":2588,"children":2589},{"class":72,"line":124},[2590],{"type":42,"tag":70,"props":2591,"children":2592},{},[2593],{"type":48,"value":2265},{"type":42,"tag":70,"props":2595,"children":2596},{"class":72,"line":134},[2597],{"type":42,"tag":70,"props":2598,"children":2599},{},[2600],{"type":48,"value":2601},"    redirectURL, err := svc.CreateOAuth2Token(\n",{"type":42,"tag":70,"props":2603,"children":2604},{"class":72,"line":143},[2605],{"type":42,"tag":70,"props":2606,"children":2607},{},[2608],{"type":48,"value":2609},"        \"github\",\n",{"type":42,"tag":70,"props":2611,"children":2612},{"class":72,"line":152},[2613],{"type":42,"tag":70,"props":2614,"children":2615},{},[2616],{"type":48,"value":2617},"        account.WithCreateOAuth2TokenSuccess(\"https:\u002F\u002Fexample.com\u002Foauth\u002Fsuccess\"),\n",{"type":42,"tag":70,"props":2619,"children":2620},{"class":72,"line":161},[2621],{"type":42,"tag":70,"props":2622,"children":2623},{},[2624],{"type":48,"value":2625},"        account.WithCreateOAuth2TokenFailure(\"https:\u002F\u002Fexample.com\u002Foauth\u002Ffailure\"),\n",{"type":42,"tag":70,"props":2627,"children":2628},{"class":72,"line":170},[2629],{"type":42,"tag":70,"props":2630,"children":2631},{},[2632],{"type":48,"value":2519},{"type":42,"tag":70,"props":2634,"children":2635},{"class":72,"line":179},[2636],{"type":42,"tag":70,"props":2637,"children":2638},{},[2639],{"type":48,"value":2281},{"type":42,"tag":70,"props":2641,"children":2642},{"class":72,"line":188},[2643],{"type":42,"tag":70,"props":2644,"children":2645},{},[2646],{"type":48,"value":2647},"        http.Error(w, err.Error(), http.StatusInternalServerError)\n",{"type":42,"tag":70,"props":2649,"children":2650},{"class":72,"line":196},[2651],{"type":42,"tag":70,"props":2652,"children":2653},{},[2654],{"type":48,"value":2297},{"type":42,"tag":70,"props":2656,"children":2657},{"class":72,"line":205},[2658],{"type":42,"tag":70,"props":2659,"children":2660},{},[2661],{"type":48,"value":1964},{"type":42,"tag":70,"props":2663,"children":2664},{"class":72,"line":214},[2665],{"type":42,"tag":70,"props":2666,"children":2667},{},[2668],{"type":48,"value":2669},"    http.Redirect(w, r, redirectURL, http.StatusFound)\n",{"type":42,"tag":70,"props":2671,"children":2672},{"class":72,"line":223},[2673],{"type":42,"tag":70,"props":2674,"children":2675},{},[2676],{"type":48,"value":2414},{"type":42,"tag":70,"props":2678,"children":2679},{"class":72,"line":232},[2680],{"type":42,"tag":70,"props":2681,"children":2682},{"emptyLinePlaceholder":128},[2683],{"type":48,"value":131},{"type":42,"tag":70,"props":2685,"children":2686},{"class":72,"line":376},[2687],{"type":42,"tag":70,"props":2688,"children":2689},{},[2690],{"type":48,"value":2691},"\u002F\u002F Step 2: Handle callback — exchange token for session\n",{"type":42,"tag":70,"props":2693,"children":2694},{"class":72,"line":384},[2695],{"type":42,"tag":70,"props":2696,"children":2697},{},[2698],{"type":48,"value":2699},"http.HandleFunc(\"\u002Foauth\u002Fsuccess\", func(w http.ResponseWriter, r *http.Request) {\n",{"type":42,"tag":70,"props":2701,"children":2702},{"class":72,"line":393},[2703],{"type":42,"tag":70,"props":2704,"children":2705},{},[2706],{"type":48,"value":2265},{"type":42,"tag":70,"props":2708,"children":2709},{"class":72,"line":610},[2710],{"type":42,"tag":70,"props":2711,"children":2712},{},[2713],{"type":48,"value":2714},"    session, err := svc.CreateSession(r.URL.Query().Get(\"userId\"), r.URL.Query().Get(\"secret\"))\n",{"type":42,"tag":70,"props":2716,"children":2717},{"class":72,"line":618},[2718],{"type":42,"tag":70,"props":2719,"children":2720},{},[2721],{"type":48,"value":2281},{"type":42,"tag":70,"props":2723,"children":2724},{"class":72,"line":627},[2725],{"type":42,"tag":70,"props":2726,"children":2727},{},[2728],{"type":48,"value":2289},{"type":42,"tag":70,"props":2730,"children":2731},{"class":72,"line":636},[2732],{"type":42,"tag":70,"props":2733,"children":2734},{},[2735],{"type":48,"value":2297},{"type":42,"tag":70,"props":2737,"children":2738},{"class":72,"line":26},[2739],{"type":42,"tag":70,"props":2740,"children":2741},{},[2742],{"type":48,"value":1964},{"type":42,"tag":70,"props":2744,"children":2745},{"class":72,"line":651},[2746],{"type":42,"tag":70,"props":2747,"children":2748},{"emptyLinePlaceholder":128},[2749],{"type":48,"value":131},{"type":42,"tag":70,"props":2751,"children":2752},{"class":72,"line":660},[2753],{"type":42,"tag":70,"props":2754,"children":2755},{},[2756],{"type":48,"value":2327},{"type":42,"tag":70,"props":2758,"children":2759},{"class":72,"line":669},[2760],{"type":42,"tag":70,"props":2761,"children":2762},{},[2763],{"type":48,"value":2764},"        Name: \"a_session_[PROJECT_ID]\", Value: session.Secret,\n",{"type":42,"tag":70,"props":2766,"children":2767},{"class":72,"line":677},[2768],{"type":42,"tag":70,"props":2769,"children":2770},{},[2771],{"type":48,"value":2772},"        HttpOnly: true, Secure: true, SameSite: http.SameSiteStrictMode, Path: \"\u002F\",\n",{"type":42,"tag":70,"props":2774,"children":2775},{"class":72,"line":685},[2776],{"type":42,"tag":70,"props":2777,"children":2778},{},[2779],{"type":48,"value":2383},{"type":42,"tag":70,"props":2781,"children":2782},{"class":72,"line":694},[2783],{"type":42,"tag":70,"props":2784,"children":2785},{},[2786],{"type":48,"value":2406},{"type":42,"tag":70,"props":2788,"children":2789},{"class":72,"line":1257},[2790],{"type":42,"tag":70,"props":2791,"children":2792},{},[2793],{"type":48,"value":2414},{"type":42,"tag":407,"props":2795,"children":2796},{},[2797],{"type":42,"tag":411,"props":2798,"children":2799},{},[2800,2805,2807,2813,2814,2820,2821,2827,2829,2835],{"type":42,"tag":415,"props":2801,"children":2802},{},[2803],{"type":48,"value":2804},"Cookie security:",{"type":48,"value":2806}," Always use ",{"type":42,"tag":66,"props":2808,"children":2810},{"className":2809},[],[2811],{"type":48,"value":2812},"HttpOnly",{"type":48,"value":891},{"type":42,"tag":66,"props":2815,"children":2817},{"className":2816},[],[2818],{"type":48,"value":2819},"Secure",{"type":48,"value":898},{"type":42,"tag":66,"props":2822,"children":2824},{"className":2823},[],[2825],{"type":48,"value":2826},"SameSiteStrictMode",{"type":48,"value":2828}," to prevent XSS. The cookie name must be ",{"type":42,"tag":66,"props":2830,"children":2832},{"className":2831},[],[2833],{"type":48,"value":2834},"a_session_\u003CPROJECT_ID>",{"type":48,"value":2836},".",{"type":42,"tag":407,"props":2838,"children":2839},{},[2840],{"type":42,"tag":411,"props":2841,"children":2842},{},[2843,2848,2850,2856],{"type":42,"tag":415,"props":2844,"children":2845},{},[2846],{"type":48,"value":2847},"Forwarding user agent:",{"type":48,"value":2849}," Call ",{"type":42,"tag":66,"props":2851,"children":2853},{"className":2852},[],[2854],{"type":48,"value":2855},"sessionClient.SetForwardedUserAgent(r.Header.Get(\"User-Agent\"))",{"type":48,"value":2857}," to record the end-user's browser info for debugging and security.",{"type":42,"tag":51,"props":2859,"children":2861},{"id":2860},"error-handling",[2862],{"type":48,"value":2863},"Error Handling",{"type":42,"tag":58,"props":2865,"children":2867},{"className":99,"code":2866,"language":25,"meta":63,"style":63},"import \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fapperr\"\n\ndoc, err := service.GetRow(\"[DATABASE_ID]\", \"[TABLE_ID]\", \"[ROW_ID]\")\nif err != nil {\n    var appErr *apperr.AppwriteException\n    if errors.As(err, &appErr) {\n        fmt.Println(appErr.Message)    \u002F\u002F human-readable message\n        fmt.Println(appErr.Code)       \u002F\u002F HTTP status code (int)\n        fmt.Println(appErr.Type)       \u002F\u002F error type (e.g. \"document_not_found\")\n    }\n}\n",[2868],{"type":42,"tag":66,"props":2869,"children":2870},{"__ignoreMap":63},[2871,2879,2886,2894,2902,2910,2918,2926,2934,2942,2949],{"type":42,"tag":70,"props":2872,"children":2873},{"class":72,"line":73},[2874],{"type":42,"tag":70,"props":2875,"children":2876},{},[2877],{"type":48,"value":2878},"import \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fapperr\"\n",{"type":42,"tag":70,"props":2880,"children":2881},{"class":72,"line":115},[2882],{"type":42,"tag":70,"props":2883,"children":2884},{"emptyLinePlaceholder":128},[2885],{"type":48,"value":131},{"type":42,"tag":70,"props":2887,"children":2888},{"class":72,"line":124},[2889],{"type":42,"tag":70,"props":2890,"children":2891},{},[2892],{"type":48,"value":2893},"doc, err := service.GetRow(\"[DATABASE_ID]\", \"[TABLE_ID]\", \"[ROW_ID]\")\n",{"type":42,"tag":70,"props":2895,"children":2896},{"class":72,"line":134},[2897],{"type":42,"tag":70,"props":2898,"children":2899},{},[2900],{"type":48,"value":2901},"if err != nil {\n",{"type":42,"tag":70,"props":2903,"children":2904},{"class":72,"line":143},[2905],{"type":42,"tag":70,"props":2906,"children":2907},{},[2908],{"type":48,"value":2909},"    var appErr *apperr.AppwriteException\n",{"type":42,"tag":70,"props":2911,"children":2912},{"class":72,"line":152},[2913],{"type":42,"tag":70,"props":2914,"children":2915},{},[2916],{"type":48,"value":2917},"    if errors.As(err, &appErr) {\n",{"type":42,"tag":70,"props":2919,"children":2920},{"class":72,"line":161},[2921],{"type":42,"tag":70,"props":2922,"children":2923},{},[2924],{"type":48,"value":2925},"        fmt.Println(appErr.Message)    \u002F\u002F human-readable message\n",{"type":42,"tag":70,"props":2927,"children":2928},{"class":72,"line":170},[2929],{"type":42,"tag":70,"props":2930,"children":2931},{},[2932],{"type":48,"value":2933},"        fmt.Println(appErr.Code)       \u002F\u002F HTTP status code (int)\n",{"type":42,"tag":70,"props":2935,"children":2936},{"class":72,"line":179},[2937],{"type":42,"tag":70,"props":2938,"children":2939},{},[2940],{"type":48,"value":2941},"        fmt.Println(appErr.Type)       \u002F\u002F error type (e.g. \"document_not_found\")\n",{"type":42,"tag":70,"props":2943,"children":2944},{"class":72,"line":188},[2945],{"type":42,"tag":70,"props":2946,"children":2947},{},[2948],{"type":48,"value":1964},{"type":42,"tag":70,"props":2950,"children":2951},{"class":72,"line":196},[2952],{"type":42,"tag":70,"props":2953,"children":2954},{},[2955],{"type":48,"value":2026},{"type":42,"tag":411,"props":2957,"children":2958},{},[2959],{"type":42,"tag":415,"props":2960,"children":2961},{},[2962],{"type":48,"value":2963},"Common error codes:",{"type":42,"tag":729,"props":2965,"children":2966},{},[2967,2983],{"type":42,"tag":733,"props":2968,"children":2969},{},[2970],{"type":42,"tag":737,"props":2971,"children":2972},{},[2973,2978],{"type":42,"tag":741,"props":2974,"children":2975},{},[2976],{"type":48,"value":2977},"Code",{"type":42,"tag":741,"props":2979,"children":2980},{},[2981],{"type":48,"value":2982},"Meaning",{"type":42,"tag":761,"props":2984,"children":2985},{},[2986,3003,3020,3037,3054],{"type":42,"tag":737,"props":2987,"children":2988},{},[2989,2998],{"type":42,"tag":768,"props":2990,"children":2991},{},[2992],{"type":42,"tag":66,"props":2993,"children":2995},{"className":2994},[],[2996],{"type":48,"value":2997},"401",{"type":42,"tag":768,"props":2999,"children":3000},{},[3001],{"type":48,"value":3002},"Unauthorized — missing or invalid session\u002FAPI key",{"type":42,"tag":737,"props":3004,"children":3005},{},[3006,3015],{"type":42,"tag":768,"props":3007,"children":3008},{},[3009],{"type":42,"tag":66,"props":3010,"children":3012},{"className":3011},[],[3013],{"type":48,"value":3014},"403",{"type":42,"tag":768,"props":3016,"children":3017},{},[3018],{"type":48,"value":3019},"Forbidden — insufficient permissions",{"type":42,"tag":737,"props":3021,"children":3022},{},[3023,3032],{"type":42,"tag":768,"props":3024,"children":3025},{},[3026],{"type":42,"tag":66,"props":3027,"children":3029},{"className":3028},[],[3030],{"type":48,"value":3031},"404",{"type":42,"tag":768,"props":3033,"children":3034},{},[3035],{"type":48,"value":3036},"Not found — resource does not exist",{"type":42,"tag":737,"props":3038,"children":3039},{},[3040,3049],{"type":42,"tag":768,"props":3041,"children":3042},{},[3043],{"type":42,"tag":66,"props":3044,"children":3046},{"className":3045},[],[3047],{"type":48,"value":3048},"409",{"type":42,"tag":768,"props":3050,"children":3051},{},[3052],{"type":48,"value":3053},"Conflict — duplicate ID or unique constraint",{"type":42,"tag":737,"props":3055,"children":3056},{},[3057,3066],{"type":42,"tag":768,"props":3058,"children":3059},{},[3060],{"type":42,"tag":66,"props":3061,"children":3063},{"className":3062},[],[3064],{"type":48,"value":3065},"429",{"type":42,"tag":768,"props":3067,"children":3068},{},[3069],{"type":48,"value":3070},"Rate limited — too many requests",{"type":42,"tag":51,"props":3072,"children":3074},{"id":3073},"permissions-roles-critical",[3075],{"type":48,"value":3076},"Permissions & Roles (Critical)",{"type":42,"tag":411,"props":3078,"children":3079},{},[3080,3082,3088,3089,3095,3096,3102,3103,3109,3111,3117,3119,3124,3126,3132,3134,3140],{"type":48,"value":3081},"Appwrite uses permission strings to control access to resources. Each permission pairs an action (",{"type":42,"tag":66,"props":3083,"children":3085},{"className":3084},[],[3086],{"type":48,"value":3087},"read",{"type":48,"value":891},{"type":42,"tag":66,"props":3090,"children":3092},{"className":3091},[],[3093],{"type":48,"value":3094},"update",{"type":48,"value":891},{"type":42,"tag":66,"props":3097,"children":3099},{"className":3098},[],[3100],{"type":48,"value":3101},"delete",{"type":48,"value":891},{"type":42,"tag":66,"props":3104,"children":3106},{"className":3105},[],[3107],{"type":48,"value":3108},"create",{"type":48,"value":3110},", or ",{"type":42,"tag":66,"props":3112,"children":3114},{"className":3113},[],[3115],{"type":48,"value":3116},"write",{"type":48,"value":3118}," which grants create + update + delete) with a role target. By default, ",{"type":42,"tag":415,"props":3120,"children":3121},{},[3122],{"type":48,"value":3123},"no user has access",{"type":48,"value":3125}," unless permissions are explicitly set at the row\u002Ffile level or inherited from the table\u002Fbucket settings. Permissions are arrays of strings built with the ",{"type":42,"tag":66,"props":3127,"children":3129},{"className":3128},[],[3130],{"type":48,"value":3131},"permission",{"type":48,"value":3133}," and ",{"type":42,"tag":66,"props":3135,"children":3137},{"className":3136},[],[3138],{"type":48,"value":3139},"role",{"type":48,"value":3141}," helpers.",{"type":42,"tag":58,"props":3143,"children":3145},{"className":99,"code":3144,"language":25,"meta":63,"style":63},"import (\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fpermission\"\n    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Frole\"\n)\n",[3146],{"type":42,"tag":66,"props":3147,"children":3148},{"__ignoreMap":63},[3149,3156,3164,3172],{"type":42,"tag":70,"props":3150,"children":3151},{"class":72,"line":73},[3152],{"type":42,"tag":70,"props":3153,"children":3154},{},[3155],{"type":48,"value":112},{"type":42,"tag":70,"props":3157,"children":3158},{"class":72,"line":115},[3159],{"type":42,"tag":70,"props":3160,"children":3161},{},[3162],{"type":48,"value":3163},"    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Fpermission\"\n",{"type":42,"tag":70,"props":3165,"children":3166},{"class":72,"line":124},[3167],{"type":42,"tag":70,"props":3168,"children":3169},{},[3170],{"type":48,"value":3171},"    \"github.com\u002Fappwrite\u002Fsdk-for-go\u002Frole\"\n",{"type":42,"tag":70,"props":3173,"children":3174},{"class":72,"line":134},[3175],{"type":42,"tag":70,"props":3176,"children":3177},{},[3178],{"type":48,"value":185},{"type":42,"tag":245,"props":3180,"children":3182},{"id":3181},"database-row-with-permissions",[3183],{"type":48,"value":3184},"Database Row with Permissions",{"type":42,"tag":58,"props":3186,"children":3188},{"className":99,"code":3187,"language":25,"meta":63,"style":63},"doc, err := service.CreateRow(\n    \"[DATABASE_ID]\",\n    \"[TABLE_ID]\",\n    \"[ROW_ID]\",\n    map[string]interface{}{\"title\": \"Hello World\"},\n    tablesdb.WithCreateRowPermissions([]string{\n        permission.Read(role.User(\"[USER_ID]\")),     \u002F\u002F specific user can read\n        permission.Update(role.User(\"[USER_ID]\")),   \u002F\u002F specific user can update\n        permission.Read(role.Team(\"[TEAM_ID]\")),     \u002F\u002F all team members can read\n        permission.Read(role.Any()),                 \u002F\u002F anyone (including guests) can read\n    }),\n)\n",[3189],{"type":42,"tag":66,"props":3190,"children":3191},{"__ignoreMap":63},[3192,3199,3206,3213,3220,3227,3235,3243,3251,3259,3267,3274],{"type":42,"tag":70,"props":3193,"children":3194},{"class":72,"line":73},[3195],{"type":42,"tag":70,"props":3196,"children":3197},{},[3198],{"type":48,"value":523},{"type":42,"tag":70,"props":3200,"children":3201},{"class":72,"line":115},[3202],{"type":42,"tag":70,"props":3203,"children":3204},{},[3205],{"type":48,"value":531},{"type":42,"tag":70,"props":3207,"children":3208},{"class":72,"line":124},[3209],{"type":42,"tag":70,"props":3210,"children":3211},{},[3212],{"type":48,"value":539},{"type":42,"tag":70,"props":3214,"children":3215},{"class":72,"line":134},[3216],{"type":42,"tag":70,"props":3217,"children":3218},{},[3219],{"type":48,"value":657},{"type":42,"tag":70,"props":3221,"children":3222},{"class":72,"line":143},[3223],{"type":42,"tag":70,"props":3224,"children":3225},{},[3226],{"type":48,"value":554},{"type":42,"tag":70,"props":3228,"children":3229},{"class":72,"line":152},[3230],{"type":42,"tag":70,"props":3231,"children":3232},{},[3233],{"type":48,"value":3234},"    tablesdb.WithCreateRowPermissions([]string{\n",{"type":42,"tag":70,"props":3236,"children":3237},{"class":72,"line":161},[3238],{"type":42,"tag":70,"props":3239,"children":3240},{},[3241],{"type":48,"value":3242},"        permission.Read(role.User(\"[USER_ID]\")),     \u002F\u002F specific user can read\n",{"type":42,"tag":70,"props":3244,"children":3245},{"class":72,"line":170},[3246],{"type":42,"tag":70,"props":3247,"children":3248},{},[3249],{"type":48,"value":3250},"        permission.Update(role.User(\"[USER_ID]\")),   \u002F\u002F specific user can update\n",{"type":42,"tag":70,"props":3252,"children":3253},{"class":72,"line":179},[3254],{"type":42,"tag":70,"props":3255,"children":3256},{},[3257],{"type":48,"value":3258},"        permission.Read(role.Team(\"[TEAM_ID]\")),     \u002F\u002F all team members can read\n",{"type":42,"tag":70,"props":3260,"children":3261},{"class":72,"line":188},[3262],{"type":42,"tag":70,"props":3263,"children":3264},{},[3265],{"type":48,"value":3266},"        permission.Read(role.Any()),                 \u002F\u002F anyone (including guests) can read\n",{"type":42,"tag":70,"props":3268,"children":3269},{"class":72,"line":196},[3270],{"type":42,"tag":70,"props":3271,"children":3272},{},[3273],{"type":48,"value":1006},{"type":42,"tag":70,"props":3275,"children":3276},{"class":72,"line":205},[3277],{"type":42,"tag":70,"props":3278,"children":3279},{},[3280],{"type":48,"value":185},{"type":42,"tag":245,"props":3282,"children":3284},{"id":3283},"file-upload-with-permissions",[3285],{"type":48,"value":3286},"File Upload with Permissions",{"type":42,"tag":58,"props":3288,"children":3290},{"className":99,"code":3289,"language":25,"meta":63,"style":63},"f, err := service.CreateFile(\n    \"[BUCKET_ID]\",\n    \"[FILE_ID]\",\n    file.NewInputFile(\"\u002Fpath\u002Fto\u002Ffile.png\", \"file.png\"),\n    storage.WithCreateFilePermissions([]string{\n        permission.Read(role.Any()),\n        permission.Update(role.User(\"[USER_ID]\")),\n        permission.Delete(role.User(\"[USER_ID]\")),\n    }),\n)\n",[3291],{"type":42,"tag":66,"props":3292,"children":3293},{"__ignoreMap":63},[3294,3301,3308,3315,3322,3330,3338,3346,3354,3361],{"type":42,"tag":70,"props":3295,"children":3296},{"class":72,"line":73},[3297],{"type":42,"tag":70,"props":3298,"children":3299},{},[3300],{"type":48,"value":1331},{"type":42,"tag":70,"props":3302,"children":3303},{"class":72,"line":115},[3304],{"type":42,"tag":70,"props":3305,"children":3306},{},[3307],{"type":48,"value":1339},{"type":42,"tag":70,"props":3309,"children":3310},{"class":72,"line":124},[3311],{"type":42,"tag":70,"props":3312,"children":3313},{},[3314],{"type":48,"value":1347},{"type":42,"tag":70,"props":3316,"children":3317},{"class":72,"line":134},[3318],{"type":42,"tag":70,"props":3319,"children":3320},{},[3321],{"type":48,"value":1355},{"type":42,"tag":70,"props":3323,"children":3324},{"class":72,"line":143},[3325],{"type":42,"tag":70,"props":3326,"children":3327},{},[3328],{"type":48,"value":3329},"    storage.WithCreateFilePermissions([]string{\n",{"type":42,"tag":70,"props":3331,"children":3332},{"class":72,"line":152},[3333],{"type":42,"tag":70,"props":3334,"children":3335},{},[3336],{"type":48,"value":3337},"        permission.Read(role.Any()),\n",{"type":42,"tag":70,"props":3339,"children":3340},{"class":72,"line":161},[3341],{"type":42,"tag":70,"props":3342,"children":3343},{},[3344],{"type":48,"value":3345},"        permission.Update(role.User(\"[USER_ID]\")),\n",{"type":42,"tag":70,"props":3347,"children":3348},{"class":72,"line":170},[3349],{"type":42,"tag":70,"props":3350,"children":3351},{},[3352],{"type":48,"value":3353},"        permission.Delete(role.User(\"[USER_ID]\")),\n",{"type":42,"tag":70,"props":3355,"children":3356},{"class":72,"line":179},[3357],{"type":42,"tag":70,"props":3358,"children":3359},{},[3360],{"type":48,"value":1006},{"type":42,"tag":70,"props":3362,"children":3363},{"class":72,"line":188},[3364],{"type":42,"tag":70,"props":3365,"children":3366},{},[3367],{"type":48,"value":185},{"type":42,"tag":407,"props":3369,"children":3370},{},[3371],{"type":42,"tag":411,"props":3372,"children":3373},{},[3374,3379],{"type":42,"tag":415,"props":3375,"children":3376},{},[3377],{"type":48,"value":3378},"When to set permissions:",{"type":48,"value":3380}," Set row\u002Ffile-level permissions when you need per-resource access control. If all rows in a table share the same rules, configure permissions at the table\u002Fbucket level and leave row permissions empty.",{"type":42,"tag":407,"props":3382,"children":3383},{},[3384,3392],{"type":42,"tag":411,"props":3385,"children":3386},{},[3387],{"type":42,"tag":415,"props":3388,"children":3389},{},[3390],{"type":48,"value":3391},"Common mistakes:",{"type":42,"tag":868,"props":3393,"children":3394},{},[3395,3405,3439],{"type":42,"tag":872,"props":3396,"children":3397},{},[3398,3403],{"type":42,"tag":415,"props":3399,"children":3400},{},[3401],{"type":48,"value":3402},"Forgetting permissions",{"type":48,"value":3404}," — the resource becomes inaccessible to all users (including the creator)",{"type":42,"tag":872,"props":3406,"children":3407},{},[3408,3437],{"type":42,"tag":415,"props":3409,"children":3410},{},[3411,3417,3419,3424,3426,3431,3432],{"type":42,"tag":66,"props":3412,"children":3414},{"className":3413},[],[3415],{"type":48,"value":3416},"role.Any()",{"type":48,"value":3418}," with ",{"type":42,"tag":66,"props":3420,"children":3422},{"className":3421},[],[3423],{"type":48,"value":3116},{"type":48,"value":3425},"\u002F",{"type":42,"tag":66,"props":3427,"children":3429},{"className":3428},[],[3430],{"type":48,"value":3094},{"type":48,"value":3425},{"type":42,"tag":66,"props":3433,"children":3435},{"className":3434},[],[3436],{"type":48,"value":3101},{"type":48,"value":3438}," — allows any user, including unauthenticated guests, to modify or remove the resource",{"type":42,"tag":872,"props":3440,"children":3441},{},[3442,3453],{"type":42,"tag":415,"props":3443,"children":3444},{},[3445,3451],{"type":42,"tag":66,"props":3446,"children":3448},{"className":3447},[],[3449],{"type":48,"value":3450},"permission.Read(role.Any())",{"type":48,"value":3452}," on sensitive data",{"type":48,"value":3454}," — makes the resource publicly readable",{"type":42,"tag":3456,"props":3457,"children":3458},"style",{},[3459],{"type":48,"value":3460},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3462,"total":196},[3463,3478,3496,3510,3518,3537,3551],{"slug":3464,"name":3464,"fn":3465,"description":3466,"org":3467,"tags":3468,"stars":26,"repoUrl":27,"updatedAt":3477},"appwrite-cli","manage Appwrite projects via CLI","Appwrite CLI skill. Use when managing Appwrite projects from the command line. Covers installation, login, project initialization, multi-file project configuration, deploying functions\u002Fsites\u002Ftables\u002Fbuckets\u002Fteams\u002Fwebhooks\u002Ftopics, flag-based list queries, non-interactive CI\u002FCD mode, and generating type-safe SDKs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3469,3470,3471,3474],{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":3472,"slug":3473,"type":15},"CLI","cli",{"name":3475,"slug":3476,"type":15},"Deployment","deployment","2026-07-12T08:45:23.213081",{"slug":3479,"name":3479,"fn":3480,"description":3481,"org":3482,"tags":3483,"stars":26,"repoUrl":27,"updatedAt":3495},"appwrite-dart","build applications with Appwrite Dart SDK","Appwrite Dart SDK skill. Use when building Flutter apps (mobile, web, desktop) or server-side Dart applications with Appwrite. Covers client-side auth (email, OAuth), database queries, file uploads with native file handling, real-time subscriptions, and server-side admin via API keys for user management, database administration, storage, and functions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3484,3485,3486,3489,3492],{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":3487,"slug":3488,"type":15},"Dart","dart",{"name":3490,"slug":3491,"type":15},"Flutter","flutter",{"name":3493,"slug":3494,"type":15},"Mobile","mobile","2026-07-12T08:45:33.336948",{"slug":3497,"name":3497,"fn":3498,"description":3499,"org":3500,"tags":3501,"stars":26,"repoUrl":27,"updatedAt":3509},"appwrite-dotnet","build .NET applications with Appwrite SDK","Appwrite .NET SDK skill. Use when building server-side C# or .NET applications with Appwrite, including ASP.NET and Blazor integrations. Covers user management, database\u002Ftable CRUD, file storage, and functions via API keys.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3502,3505,3506,3507,3508],{"name":3503,"slug":3504,"type":15},".NET","net",{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":21,"slug":22,"type":15},"2026-07-12T08:45:28.556413",{"slug":4,"name":4,"fn":5,"description":6,"org":3511,"tags":3512,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3513,3514,3515,3516,3517],{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":24,"slug":25,"type":15},{"name":21,"slug":22,"type":15},{"slug":3519,"name":3519,"fn":3520,"description":3521,"org":3522,"tags":3523,"stars":26,"repoUrl":27,"updatedAt":3536},"appwrite-kotlin","build applications with Appwrite Kotlin SDK","Appwrite Kotlin SDK skill. Use when building native Android apps or server-side Kotlin\u002FJVM backends with Appwrite. Covers client-side auth (email, OAuth with Activity integration), database queries, file uploads, real-time subscriptions with coroutine support, and server-side admin via API keys for user management, database administration, storage, and functions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3524,3527,3528,3531,3532,3533],{"name":3525,"slug":3526,"type":15},"Android","android",{"name":9,"slug":8,"type":15},{"name":3529,"slug":3530,"type":15},"Auth","auth",{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":3534,"slug":3535,"type":15},"Kotlin","kotlin","2026-07-12T08:45:40.750646",{"slug":3538,"name":3538,"fn":3539,"description":3540,"org":3541,"tags":3542,"stars":26,"repoUrl":27,"updatedAt":3550},"appwrite-php","build PHP applications with Appwrite","Appwrite PHP SDK skill. Use when building server-side PHP applications with Appwrite, including Laravel and Symfony integrations. Covers user management, database\u002Ftable CRUD, file storage, and functions via API keys.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3543,3544,3545,3546,3549],{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":3547,"slug":3548,"type":15},"PHP","php",{"name":21,"slug":22,"type":15},"2026-07-12T08:45:21.794433",{"slug":3552,"name":3552,"fn":3553,"description":3554,"org":3555,"tags":3556,"stars":26,"repoUrl":27,"updatedAt":3564},"appwrite-python","build Python applications with Appwrite","Appwrite Python SDK skill. Use when building server-side Python applications with Appwrite, including Django, Flask, and FastAPI integrations. Covers user management, database\u002Ftable CRUD, file storage, and functions via API keys.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3557,3558,3559,3560,3563],{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":3561,"slug":3562,"type":15},"Python","python",{"name":21,"slug":22,"type":15},"2026-07-12T08:45:37.768328",{"items":3566,"total":196},[3567,3574,3582,3590,3598,3607,3615,3623,3638,3652,3671],{"slug":3464,"name":3464,"fn":3465,"description":3466,"org":3568,"tags":3569,"stars":26,"repoUrl":27,"updatedAt":3477},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3570,3571,3572,3573],{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":3472,"slug":3473,"type":15},{"name":3475,"slug":3476,"type":15},{"slug":3479,"name":3479,"fn":3480,"description":3481,"org":3575,"tags":3576,"stars":26,"repoUrl":27,"updatedAt":3495},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3577,3578,3579,3580,3581],{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":3487,"slug":3488,"type":15},{"name":3490,"slug":3491,"type":15},{"name":3493,"slug":3494,"type":15},{"slug":3497,"name":3497,"fn":3498,"description":3499,"org":3583,"tags":3584,"stars":26,"repoUrl":27,"updatedAt":3509},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3585,3586,3587,3588,3589],{"name":3503,"slug":3504,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":21,"slug":22,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":3591,"tags":3592,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3593,3594,3595,3596,3597],{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":24,"slug":25,"type":15},{"name":21,"slug":22,"type":15},{"slug":3519,"name":3519,"fn":3520,"description":3521,"org":3599,"tags":3600,"stars":26,"repoUrl":27,"updatedAt":3536},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3601,3602,3603,3604,3605,3606],{"name":3525,"slug":3526,"type":15},{"name":9,"slug":8,"type":15},{"name":3529,"slug":3530,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":3534,"slug":3535,"type":15},{"slug":3538,"name":3538,"fn":3539,"description":3540,"org":3608,"tags":3609,"stars":26,"repoUrl":27,"updatedAt":3550},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3610,3611,3612,3613,3614],{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":3547,"slug":3548,"type":15},{"name":21,"slug":22,"type":15},{"slug":3552,"name":3552,"fn":3553,"description":3554,"org":3616,"tags":3617,"stars":26,"repoUrl":27,"updatedAt":3564},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3618,3619,3620,3621,3622],{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":3561,"slug":3562,"type":15},{"name":21,"slug":22,"type":15},{"slug":3624,"name":3624,"fn":3625,"description":3626,"org":3627,"tags":3628,"stars":26,"repoUrl":27,"updatedAt":3637},"appwrite-ruby","build applications with Appwrite Ruby SDK","Appwrite Ruby SDK skill. Use when building server-side Ruby applications with Appwrite, including Rails and Sinatra integrations. Covers user management, database\u002Ftable CRUD, file storage, and functions via API keys.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3629,3632,3633,3634],{"name":3630,"slug":3631,"type":15},"API Development","api-development",{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":3635,"slug":3636,"type":15},"Ruby","ruby","2026-07-12T08:45:34.567568",{"slug":3639,"name":3639,"fn":3640,"description":3641,"org":3642,"tags":3643,"stars":26,"repoUrl":27,"updatedAt":3651},"appwrite-rust","build server-side applications with Appwrite","Appwrite Rust SDK skill. Use when building server-side Rust applications with Appwrite. Covers async client setup with API keys, user management, TablesDB database\u002Ftable\u002Frow operations, file storage, function executions, permissions, queries, and error handling. Uses the crates.io `appwrite` package and Tokio.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3644,3645,3646,3647,3648],{"name":3630,"slug":3631,"type":15},{"name":3529,"slug":3530,"type":15},{"name":17,"slug":18,"type":15},{"name":1278,"slug":1275,"type":15},{"name":3649,"slug":3650,"type":15},"Rust","rust","2026-07-12T08:45:25.167378",{"slug":3653,"name":3653,"fn":3654,"description":3655,"org":3656,"tags":3657,"stars":26,"repoUrl":27,"updatedAt":3670},"appwrite-swift","build applications with Appwrite Swift SDK","Appwrite Swift SDK skill. Use when building native iOS, macOS, watchOS, or tvOS apps, or server-side Swift applications with Appwrite. Covers client-side auth (email, OAuth), database queries, file uploads, real-time subscriptions with async\u002Fawait, and server-side admin via API keys for user management, database administration, storage, and functions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3658,3659,3660,3661,3664,3667],{"name":9,"slug":8,"type":15},{"name":3529,"slug":3530,"type":15},{"name":17,"slug":18,"type":15},{"name":3662,"slug":3663,"type":15},"iOS","ios",{"name":3665,"slug":3666,"type":15},"macOS","macos",{"name":3668,"slug":3669,"type":15},"Swift","swift","2026-07-12T08:45:26.722393",{"slug":3672,"name":3672,"fn":3673,"description":3674,"org":3675,"tags":3676,"stars":26,"repoUrl":27,"updatedAt":3689},"appwrite-typescript","build applications with Appwrite TypeScript SDK","Appwrite TypeScript SDK skill. Use when building browser-based JavaScript\u002FTypeScript apps, React Native mobile apps, or server-side Node.js\u002FDeno backends with Appwrite. Covers client-side auth (email, OAuth, anonymous), database queries, file uploads, real-time subscriptions, and server-side admin via API keys for user management, database administration, storage, and functions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3677,3678,3679,3680,3683,3686],{"name":9,"slug":8,"type":15},{"name":3529,"slug":3530,"type":15},{"name":17,"slug":18,"type":15},{"name":3681,"slug":3682,"type":15},"JavaScript","javascript",{"name":3684,"slug":3685,"type":15},"Node.js","node-js",{"name":3687,"slug":3688,"type":15},"TypeScript","typescript","2026-07-12T08:45:31.181727"]