From 270bf0b2b749d7375df7640927b49f90b60564e1 Mon Sep 17 00:00:00 2001 From: eldadfux Date: Thu, 19 Mar 2026 14:19:00 +0100 Subject: [PATCH 1/4] WIP --- src/routes/docs/products/auth/+layout.svelte | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/routes/docs/products/auth/+layout.svelte b/src/routes/docs/products/auth/+layout.svelte index ed0fa99b64..6fd29ef59d 100644 --- a/src/routes/docs/products/auth/+layout.svelte +++ b/src/routes/docs/products/auth/+layout.svelte @@ -32,6 +32,10 @@ label: 'Users', href: '/docs/products/auth/users' }, + { + label: 'Impersonation', + href: '/docs/products/auth/impersonation' + }, { label: 'Teams', href: '/docs/products/auth/teams' From 85c1d19b875177aa6e90502c6b8c658ede7edd01 Mon Sep 17 00:00:00 2001 From: eldadfux Date: Thu, 19 Mar 2026 14:19:10 +0100 Subject: [PATCH 2/4] WIP --- .../+page.markdoc | 287 +++++++++++++++++ .../+page.markdoc | 164 ++++++++++ .../+page.markdoc | 78 +++++ .../changelog/(entries)/2026-03-14.markdoc | 16 + src/routes/docs/apis/rest/+page.markdoc | 156 ++++++++-- src/routes/docs/products/auth/+layout.svelte | 8 +- src/routes/docs/products/auth/+page.markdoc | 3 + .../products/auth/impersonation/+page.markdoc | 289 ++++++++++++++++++ .../docs/products/auth/users/+page.markdoc | 6 +- .../announcing-user-impersonation/cover.svg | 138 +++++++++ .../cover.png | Bin 0 -> 13945 bytes static/images/changelog/2026-03-14.svg | 125 ++++++++ 12 files changed, 1233 insertions(+), 37 deletions(-) create mode 100644 src/routes/blog/post/announcing-user-impersonation/+page.markdoc create mode 100644 src/routes/blog/post/best-lovable-alternative-worth-exploring/+page.markdoc create mode 100644 src/routes/blog/post/managing-website-assets-repo-cold-start/+page.markdoc create mode 100644 src/routes/changelog/(entries)/2026-03-14.markdoc create mode 100644 src/routes/docs/products/auth/impersonation/+page.markdoc create mode 100644 static/images/blog/announcing-user-impersonation/cover.svg create mode 100644 static/images/blog/managing-website-assets-repo-cold-start/cover.png create mode 100644 static/images/changelog/2026-03-14.svg diff --git a/src/routes/blog/post/announcing-user-impersonation/+page.markdoc b/src/routes/blog/post/announcing-user-impersonation/+page.markdoc new file mode 100644 index 0000000000..bb43c4e1b6 --- /dev/null +++ b/src/routes/blog/post/announcing-user-impersonation/+page.markdoc @@ -0,0 +1,287 @@ +--- +layout: post +title: 'Introducing user impersonation for Appwrite Auth' +description: Trusted operators can now act as another user in Appwrite Auth to debug issues, validate permissions, and support customers without sharing credentials. +date: 2026-03-14 +cover: /images/blog/announcing-user-impersonation/cover.svg +timeToRead: 4 +author: eldad-fux +category: announcement, product +featured: false +--- + +Debugging user-specific issues is one of the hardest parts of building authentication-heavy apps. + +You get a bug report that only happens for one customer. A teammate needs to confirm whether a permission is misconfigured. Support wants to walk through the exact experience an end user is seeing. Until now, that usually meant asking for screenshots, requesting temporary credentials, or trying to recreate the entire account setup by hand. + +Appwrite now supports **user impersonation** in Auth. + +With impersonation, a trusted operator can sign in as themselves, choose a target user, and send subsequent requests using that user's permissions and access level. That makes it much easier to troubleshoot production issues, validate access rules, and review critical flows exactly as the user experiences them. + +# Simpler than previous impersonation flows + +This kind of workflow was already possible before if you were willing to build it yourself with **Server SDKs**, **SSR session handling**, or custom internal tooling. + +Teams could create operator-specific flows that acted on behalf of users, pass sessions into a server-side client, and proxy requests through backend code. That approach worked, but it also meant more plumbing around session handling, more support-only code paths, and more room for mistakes in internal tools. + +With native impersonation support, the flow becomes much simpler: + +- Mark a trusted operator as an impersonator in the Console or through the Users API +- Have them authenticate as themselves +- Set the impersonation target directly on the Appwrite client +- Use the same SDKs and product APIs you already use everywhere else + +Instead of building the entire mechanism around impersonation, you can focus on the operator experience around it. + +# What ships with this release + +This release adds the building blocks needed to support impersonation safely inside Appwrite: + +- A new `impersonator` boolean on the user model +- A dedicated endpoint to enable or disable impersonation for a user +- Console support so trusted operators can be marked as impersonators directly from **Auth > Users** +- Automatic `users.read` scope for impersonators so they can browse project users and build internal user-pickers +- Three client setters for selecting the target user by ID, email, or phone +- Response models that expose `impersonatorUserId` when impersonation is active + +In practice, the flow is simple: + +1. Mark a trusted operator as an impersonator. +2. Have them sign in normally using Appwrite Auth. +3. Set one impersonation value on the client. +4. Appwrite resolves the target user and evaluates the request as that user. + +# Why this matters + +Impersonation removes a lot of friction from real-world support and operations work. + +Here are a few scenarios where it helps immediately: + +- **Customer support**: Reproduce account-specific issues without asking users to share passwords. +- **QA and testing**: Confirm exactly what different users can and cannot access. +- **Permissions debugging**: Validate role, team, or label-based behavior from the user's point of view. +- **Onboarding reviews**: Walk through signup, billing, or upgrade flows as a real user would see them. +- **High-touch enterprise support**: Investigate tenant-specific issues without sharing temporary logins across teams. +- **Internal release validation**: Test new rollout logic against real-world user configurations before support tickets arrive. + +Instead of rebuilding the environment from scratch or guessing what a user is seeing, your team can verify the behavior directly. + +Another practical detail: once a user is marked as an impersonator, Appwrite automatically grants them the `users.read` scope. That means your internal support or operations tools can show a full project user list, add search, and let operators choose a target user from an admin-like UI before they start impersonating. + +# How it looks in code + +Once the operator has signed in as themselves, impersonation becomes a small client configuration step. + +# By user ID + +{% multicode %} + +```client-web +import { Client, Account } from "appwrite"; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserId(''); + +const account = new Account(client); +const user = await account.get(); +``` + +```client-flutter +import 'package:appwrite/appwrite.dart'; + +Client client = Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserId(''); + +Account account = Account(client); +final user = await account.get(); +``` + +```client-apple +import Appwrite + +let client = Client() + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserId("") + +let account = Account(client) +let user = try await account.get() +``` + +```client-android-kotlin +import io.appwrite.Client +import io.appwrite.services.Account + +val client = Client(context) + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserId("") + +val account = Account(client) +val user = account.get() +``` + +{% /multicode %} + +# By email + +{% multicode %} + +```client-web +import { Client, Account } from "appwrite"; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserEmail('user@example.com'); + +const account = new Account(client); +const user = await account.get(); +``` + +```client-flutter +import 'package:appwrite/appwrite.dart'; + +Client client = Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserEmail('user@example.com'); + +Account account = Account(client); +final user = await account.get(); +``` + +```client-apple +import Appwrite + +let client = Client() + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserEmail("user@example.com") + +let account = Account(client) +let user = try await account.get() +``` + +```client-android-kotlin +import io.appwrite.Client +import io.appwrite.services.Account + +val client = Client(context) + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserEmail("user@example.com") + +val account = Account(client) +val user = account.get() +``` + +{% /multicode %} + +# By phone + +{% multicode %} + +```client-web +import { Client, Account } from "appwrite"; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserPhone('+12065550100'); + +const account = new Account(client); +const user = await account.get(); +``` + +```client-flutter +import 'package:appwrite/appwrite.dart'; + +Client client = Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserPhone('+12065550100'); + +Account account = Account(client); +final user = await account.get(); +``` + +```client-apple +import Appwrite + +let client = Client() + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserPhone("+12065550100") + +let account = Account(client) +let user = try await account.get() +``` + +```client-android-kotlin +import io.appwrite.Client +import io.appwrite.services.Account + +val client = Client(context) + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserPhone("+12065550100") + +val account = Account(client) +val user = account.get() +``` + +{% /multicode %} + +That means support and QA teams can keep using the same Appwrite SDK patterns they already know, while switching the effective user only when needed. + +# Built for controlled use + +Impersonation is intentionally designed to work from a **real user-authenticated session**, not from `X-Appwrite-Key` alone. + +That means operators still authenticate as themselves first. Appwrite then uses the impersonation setting on the client only to select the effective user for the request. This keeps the flow explicit and better aligned with internal support tooling, admin panels, and controlled QA environments. + +# How logs are treated + +We also added clear behavior around auditability and visibility: + +- Users with the impersonator capability automatically receive `users.read`, so they can list project users before choosing a target +- The user model includes `impersonatorUserId` when impersonation is active +- Internal audit logs continue to attribute actions to the **original impersonator** +- Internal audit payload data also records the **impersonated target** + +This matters because support and operations teams usually need two answers at the same time: + +1. Who actually performed the action? +2. Which user experience was being impersonated? + +With this release, Appwrite keeps the real actor in internal audits while still preserving the effective target in the audit payload. That makes it much easier to investigate incidents, review support activity, and keep internal tooling accountable. + +On the app side, you can also use `impersonatorUserId` to show a persistent banner whenever someone is currently acting on behalf of another user. + +# How to get started + +To enable impersonation for an operator, you can use the Appwrite Console under **Auth > Users** or the Users API reference flow for updating the impersonator capability. + +After that, authenticated requests from that user can impersonate another user by setting one of the impersonation helpers on the Appwrite client: + +- `setImpersonateUserId()` +- `setImpersonateUserEmail()` +- `setImpersonateUserPhone()` + +If you're building an internal support dashboard, a good pattern is: + +- Let admins search for users +- Start impersonation only after an explicit action +- Show a visible banner while impersonation is active +- Make it easy to stop impersonating and return to the operator's own session + +# More resources + +- [Read the user impersonation docs](/docs/products/auth/impersonation) +- [Manage users with the Users API](/docs/products/auth/users) +- [Explore Appwrite Authentication](/docs/products/auth) diff --git a/src/routes/blog/post/best-lovable-alternative-worth-exploring/+page.markdoc b/src/routes/blog/post/best-lovable-alternative-worth-exploring/+page.markdoc new file mode 100644 index 0000000000..5d66520179 --- /dev/null +++ b/src/routes/blog/post/best-lovable-alternative-worth-exploring/+page.markdoc @@ -0,0 +1,164 @@ +--- +layout: post +title: "Best Lovable alternative worth exploring in 2026" +description: "Looking for a Lovable alternative? This guide explains where Lovable works well, where teams often outgrow it, and why Imagine is a strong option for full-stack product development." +date: 2026-03-13 +cover: /images/blog/introducing-imagine/cover.png +timeToRead: 7 +author: eldad-fux +category: product,init +featured: false +draft: false +callToAction: true +--- + +If you are evaluating alternatives to Lovable, the right answer depends less on which tool is more popular and more on what you need the product to become. + +Lovable has earned its place in the market by making app creation feel accessible. It helps teams move from idea to interface quickly, which is exactly what many early-stage projects need. For mockups, concept validation, lightweight internal tools, and fast UI exploration, that speed is valuable. + +The question is what happens next. + +Once a project moves beyond early validation, the priorities usually change. Teams start thinking about authentication, data models, storage, permissions, backend logic, deployment, and long-term maintainability. At that point, the best Lovable alternative is usually not the one that generates the nicest first screen. It is the one that reduces the distance between prototype and production. + +That is where [Imagine](https://imagine.dev/) becomes especially compelling. + +# Why teams start looking for a Lovable alternative + +Most teams do not switch because the first tool was bad. They switch because the scope of the project changed. + +A tool that feels perfect during the first week can start to feel limiting once the app needs real product infrastructure behind it. In practice, the search for a Lovable alternative often begins when teams need: + +- A workflow that includes both frontend and backend, not just interface generation +- Built-in support for auth, database, storage, and hosting +- A clearer path from prototype to production +- Less integration work across multiple services +- More confidence that what they are generating can keep evolving with the product + +This is an important distinction in the current AI app-building landscape. Some tools are optimized for fast visual output. Others are designed to help you ship something operationally real. + +# Where Lovable still makes sense + +Any credible comparison should start by acknowledging where Lovable is strong. + +Lovable is a good fit when the immediate goal is speed. It is particularly useful for founders, designers, solo builders, and non-technical teams who want to turn an idea into something visible without a lot of setup. That low-friction experience matters, especially in the earliest phase of product exploration. + +If your main objective is to test a concept, share a polished mockup, or get early feedback on a user experience direction, Lovable remains a sensible option. + +The tradeoff is that many projects do not stay in that phase for long. Once the product needs persistent data, user accounts, permissions, files, workflows, or deployment discipline, the evaluation criteria shift. + +# The Lovable alternative most worth exploring: Imagine + +[Imagine](https://imagine.dev/) stands out because it is not only focused on generating applications with AI. It is designed around a full-stack workflow from the start. + +The key difference is its built-in Appwrite integration. + +That matters because Appwrite provides the product infrastructure many teams end up needing anyway, including: + +- Authentication +- Databases +- Storage +- Hosting +- Backend logic + +This changes the role of the AI builder. Instead of producing a front-end shell and leaving the rest to be assembled later, Imagine is positioned to help teams create applications with a backend foundation already in place. + +For teams building something they expect to operate, maintain, and grow, that is a meaningful advantage. + +# Why Imagine is a stronger choice for full-stack product work + +## 1. It reduces the gap between prototype and production + +One of the most common problems with AI-generated apps is that the initial result looks promising, but the second phase becomes a manual rebuild. Teams often discover that the UI came quickly, but the actual product still needs infrastructure, integrations, and architectural decisions that were never part of the original flow. + +Imagine addresses that problem more directly because it is built with Appwrite as part of the experience. That means the app is not being created in isolation from the systems it will depend on. + +For the reader evaluating tools, this is the real question: are you creating a demo, or are you creating the beginning of a product? Imagine is more compelling when the answer is the latter. + +## 2. The backend is part of the workflow, not a separate project + +Many teams underestimate how much time is spent after the interface is generated. User management, database structure, file handling, permissions, deployment, and backend logic quickly become the real work. + +When those pieces are treated as separate follow-up tasks, the cost of the "fast start" can show up later as integration overhead and fragmentation. + +Imagine is valuable because it treats backend capabilities as first-class building blocks. For teams that want a more coherent way to build, that can reduce rework and simplify decision-making early. + +## 3. It helps limit tool sprawl + +A common pattern in modern product development is to assemble a stack from many different services: one for UI generation, one for auth, one for storage, one for data, one for hosting, and additional tooling for workflows or backend behavior. + +That approach can work, but it creates more operational surface area. It introduces more configuration, more handoffs, and more points of failure. + +Imagine is attractive because it consolidates more of that journey into a single product direction. For teams trying to move quickly without accumulating avoidable complexity, that matters. + +## 4. It is better aligned with real application requirements + +Not every project needs a full-stack foundation on day one. But many products reach that point faster than expected. + +Internal tools need access control. SaaS MVPs need user accounts and persistence. Dashboards need structured data. Client portals need storage and permissions. Customer-facing apps need reliability, hosting, and a path to iteration without constant rework. + +Imagine is better aligned with those use cases than tools whose main strength is producing attractive frontends quickly. It is built for teams that already know the app is meant to do real work. + +## 5. It is more relevant for teams thinking about long-term delivery + +As AI builders mature, the market is moving past novelty. Teams are no longer asking only whether a tool can generate an app. They are asking whether the generated app fits into a sustainable development workflow. + +That is where Imagine becomes more interesting. Its appeal is not just speed. It is that the generated output sits closer to a real delivery model, where product infrastructure, deployment, and maintainability are considered part of the outcome. + +{% call_to_action title="Build beyond the first prototype" description="Create apps with AI while keeping auth, data, storage, and hosting in the same workflow." point1="Built-in backend" point2="Built by the Appwrite team" point3="Fewer moving parts" point4="Stronger path to production" cta="Try Imagine" url="https://imagine.dev/" /%} + +# When Lovable may still be the better choice + +This comparison is more useful when it is clear that the best tool depends on the job. + +Lovable may still be the better fit when: + +- You are primarily exploring an idea and want immediate visual output +- The app does not yet need a serious backend +- You want a polished concept quickly for feedback, pitching, or validation +- Your priority is interface iteration rather than production architecture + +Those are legitimate priorities. The mistake is assuming every AI builder should be evaluated on the same axis. + +If you are still testing whether the idea deserves investment, speed to concept may matter more than backend depth. If you are already planning for users, data, workflows, and operations, the balance changes. + +# How to evaluate any Lovable alternative + +If you are comparing tools in this category, these questions are usually more useful than a long feature checklist. + +## What happens after the first version? + +Look beyond the initial output. Can the result evolve into something your team would actually want to maintain, or does the workflow create a likely rebuild later? + +## Is the backend integrated or deferred? + +If your app needs auth, storage, data, or backend logic, this matters immediately. A tool that includes those capabilities in the building experience can save time and reduce architectural drift. + +## How many services will you need to add later? + +A fast prototype can become an expensive setup if it depends on too many separate systems to become production-ready. + +## Does the tool match your stage? + +Some tools are excellent for idea validation. Others are better for building the first real version of a product. Be honest about which phase you are actually in. + +## Are you optimizing for speed alone or for continuity? + +The fastest path to a screen is not always the fastest path to a shipped product. Continuity matters, especially once a team starts building beyond the demo. + +# Final thoughts + +The best Lovable alternative is not the one that looks most similar to Lovable. It is the one that solves the next set of problems your team is likely to face. + +Lovable remains a strong option for fast UI exploration and early validation. But for teams that want an AI builder connected to a real backend foundation from the start, [Imagine](https://imagine.dev/) stands out in a more meaningful way. + +Its advantage is not only that it helps generate applications. It is that it does so within a workflow shaped around Appwrite's backend capabilities, which makes it more relevant for teams building products with real users, real data, and real operational needs. + +That is why Imagine is one of the most worthwhile Lovable alternatives to explore in 2026, especially for teams thinking beyond the prototype. + +# More resources + +- [Imagine](https://imagine.dev/) +- [Introducing Imagine: from ideas to real products](/blog/post/introducing-imagine) +- [Comparing the best vibe coding tools](/blog/post/comparing-vibe-coding-tools) +- [Appwrite Sites documentation](/docs/products/sites) +- [Appwrite Storage documentation](/docs/products/storage) \ No newline at end of file diff --git a/src/routes/blog/post/managing-website-assets-repo-cold-start/+page.markdoc b/src/routes/blog/post/managing-website-assets-repo-cold-start/+page.markdoc new file mode 100644 index 0000000000..832a7e92e7 --- /dev/null +++ b/src/routes/blog/post/managing-website-assets-repo-cold-start/+page.markdoc @@ -0,0 +1,78 @@ +--- +layout: post +title: "Managing your endless website assets on your repo has a price and it's called cold start" +description: Storing all website assets in version control is convenient, but it has hidden costs. Learn when cold starts, CI time, and duplicated storage cause drawbacks, and when solutions like Appwrite Storage are a better fit. +date: 2026-03-11 +cover: /images/blog/managing-website-assets-repo-cold-start/cover.png +timeToRead: 8 +author: eldad-fux +category: product +featured: false +draft: false +callToAction: true +--- + +Keeping website assets in your repository feels right. Images, fonts, and static files live next to your code. You get versioning, a single source of truth, and a simple deploy story: push to Git, and your site builds with everything it needs. For many projects, that workflow is exactly what you want. For others, especially as asset volume and deployment footprint grow, the same approach has a cost. That cost often shows up first as cold start, then in CI and storage. This article walks through where the pain comes from and when to consider moving assets to a dedicated storage layer. + +# When assets in the repo start to hurt + +The upside of assets in VCS is real. Version control tracks every change. Rollbacks are straightforward. New developers clone once and have the full project. The tradeoff is that every time something runs from that repo, a fresh clone, a CI job, or a new deployment, it has to pull and process all of those files. + +Large asset directories mean larger clones, longer installs, and heavier builds. On platforms that scale to zero or spin up new instances per deploy, that work happens on cold start. The first request after a deploy, or the first build in a new environment, pays the full cost: clone repo, install dependencies, build (including copying or processing every image and static file), then serve. The more assets you ship from the repo, the longer and more expensive that cold path becomes. + +Cold start shows up in different ways depending on how you deploy. With serverless or edge functions, a new invocation may need to fetch and unpack the full deployment artifact; large static folders inflate that artifact and the time to first byte. With container-based hosting (for example, [Appwrite Sites](/docs/products/sites)), each new deployment builds from the repo, so clone and build time scale with repo size. With static site generators or frontend frameworks that copy `public` or `static` into the output, every build touches every file. Order-of-magnitude numbers help: a repo that’s 100MB of code and config but 400MB of images and fonts can easily add tens of seconds to every fresh clone and build, and that cost is paid on every new branch, every new environment, and every cache miss. + +# CI time and build cost + +CI pipelines that build and test your site also pay that cost. Every run clones the repository. The more assets you store in the repo, the more data gets transferred and the longer the clone step takes. Build steps that process the `public` or `static` folder-optimizing images, generating manifests, or bundling assets-scale with the number and size of files. That slows down every pull request and main-branch build. + +Build caches (e.g. GitHub Actions cache, persistent volumes) soften the blow by reusing node_modules and sometimes build output. They don’t remove the cost entirely. Cache keys often include lockfile or branch; when the cache misses or you’re on a new runner, you’re back to a full clone and a full build. Large asset trees also make cache upload and download slower, and some CI systems limit cache size or evict old entries. So even with caching, a repo that’s heavy on assets tends to have slower and less predictable CI runs. + +Multiply that by many branches, frequent commits, and parallel jobs, and the cumulative cost in compute time and queue delay can add up. Moving large or frequently changing assets out of the repo can trim clone size and build time, so CI spends less time moving and processing files that don’t need to live next to your code. + +# Duplicated storage across deployments + +If you run the same site in multiple environments or regions, like with [Appwrite Sites](/docs/products/sites) where each site can have several deployments for different regions or previews, each deployment typically gets a full copy of the build output. When that output includes every image, font, and static file from the repo, you’re duplicating the same bytes across every deployment. Storage and egress costs scale with the number of deployments and the size of those assets. + +A simple way to see the impact: if your built site (including all static assets) is 2GB and you run five deployments (e.g. production, staging, and three preview environments), you’re storing 10GB of largely identical data. Add more previews per pull request or more regions, and that multiplier grows. Preview deployments are especially easy to overlook; they’re short-lived, but while they exist, they consume storage, and with a heavy asset set they can make “deploy every PR” policies noticeably more expensive. + +That duplication is sometimes exactly what you want: each deployment is self-contained and easy to reason about. For very large or numerous assets, though, storing them once in a shared layer (such as [Appwrite Storage](/docs/products/storage)) and referencing them by URL can reduce total storage and simplify updates. You change the asset in one place, and every deployment that links to it gets the update without a new build or redeploy. + +# Real-world scenarios where the cost shows up + +A few patterns make the tradeoff especially visible: + +**Documentation or marketing sites with hundreds of images.** Screenshots, diagrams, and hero images are often checked into the repo so content and assets stay in sync. As the library grows, every clone and every build copies and processes all of them. Moving reference images or media to storage and linking from the content (or generating URLs at build time) keeps the repo lean while still giving you a single place to update assets. + +**Sites with large or frequently updated media.** High-resolution images, video thumbnails, or assets that change on a schedule (e.g. campaign banners) don’t benefit much from Git history. They bloat the repo and trigger full rebuilds when only the asset changed. Storing them in a bucket and referencing by URL keeps code deploys fast and lets you update media without touching the repo. + +**Multiple deployments of the same app.** When the same codebase is deployed to production, staging, and per-PR previews-or to multiple regions-every deployment ships a full copy of the built assets. Shared assets (logos, fonts, common images) are duplicated each time. Moving those to a single storage bucket and serving them via CDN-backed URLs cuts duplication and often improves cache hit rates for users. + +None of this means “never put assets in the repo.” It means being aware of where the cost appears so you can choose. + +# Where storage solutions fit + +Storage services like Appwrite Storage are not a replacement for “assets in the repo” in every case. They’re a better fit when: + +- **Assets are large or numerous** and are slowing clones, builds, or cold starts. +- **Assets change independently from code** (e.g. user uploads, marketing imagery, media libraries). Versioning them in Git is awkward; putting them in a bucket with an API and CDN is a better fit. +- **The same assets are used across multiple deployments or apps.** One source of truth in storage avoids duplication and keeps updates in sync. +- **You want to offload optimization and delivery.** A dedicated storage layer can handle resizing, format conversion, and CDN delivery so the app and CI don’t have to. [Image transformation](/docs/products/storage/images) (e.g. on-the-fly resize, crop, or format conversion) is one example: you store a single source image and serve the size or format you need per request, which can cut bandwidth and storage and improve load times without extra build steps or multiple variants in the repo. + +**When to keep assets in the repo:** Small, code-coupled assets-icons, component-level images, or anything that truly belongs with a specific version of the app-are still a good fit for version control. So are assets that must stay in lockstep with code (e.g. a component that expects a specific image path in the tree). The goal is to use the right place for each kind of asset: repo when it’s part of the codebase, storage when it’s data or shared media. + +# A balanced approach + +Keeping some assets in the repo and others in storage is a common and practical approach. Keep UI assets and small static files in the repo so they’re versioned with the code that references them. Use [Appwrite Storage](/docs/products/storage) (or similar) for large media, user-generated content, or assets shared across many deployments. Reference them via URL in your app (for example, a base URL from environment config so the same codebase can point at storage in production and at local or repo-backed paths in development). + +That way you keep a clean, fast clone and build, and you avoid paying the cold start and duplication cost for assets that don’t need to live in version control. + +You don’t have to move everything at once. Start with the heaviest or most duplicated assets (e.g. a shared image or font set used by every deployment), put them in a bucket and switch the app to use the storage URLs. [Appwrite Storage](/docs/products/storage) already provides buckets, permissions, CDN-backed URLs, and [image transformation](/docs/products/storage/images) so you can serve and optimize assets with the same control you’re used to. Leave the rest in the repo until the next time you feel the pain: slower CI, a cold start complaint, or a storage bill that’s higher than you’d like. Re-evaluate as the project grows; the right split today may shift as asset volume and deployment count increase. + +Repo-based assets are fine until they’re not, and “not” usually shows up as a slow clone, a sluggish CI run, or a bill that’s higher than you expected. If you’re hitting that wall, moving the heaviest or most duplicated assets to storage is often enough to get back to a fast, predictable workflow. If you’re not there yet, no need to overthink it. Just keep the tradeoff in mind for the next time the build starts to feel heavy. + +# More resources + +- [Appwrite Storage documentation](/docs/products/storage) +- [Appwrite Sites documentation](/docs/products/sites) +- [7 reasons to migrate from Vercel to Appwrite Sites](/blog/post/migrate-from-vercel-to-appwrite-sites) diff --git a/src/routes/changelog/(entries)/2026-03-14.markdoc b/src/routes/changelog/(entries)/2026-03-14.markdoc new file mode 100644 index 0000000000..ebc4b85b01 --- /dev/null +++ b/src/routes/changelog/(entries)/2026-03-14.markdoc @@ -0,0 +1,16 @@ +--- +layout: changelog +title: 'User impersonation for Appwrite Auth' +date: 2026-03-14 +cover: /images/changelog/2026-03-14.svg +--- + +Trusted operators can now impersonate users in Appwrite Auth to reproduce issues, validate permissions, and provide hands-on support without sharing credentials. + +This release adds a new `impersonator` capability on users, available from the Appwrite Console and the Users API, plus direct SDK support for targeting a user by ID, email, or phone. + +Impersonated requests still begin from a real authenticated user session, and internal audit logs continue to attribute actions to the original impersonator while recording the impersonated target in internal audit payload data. + +{% arrow_link href="/blog/post/announcing-user-impersonation" %} +Read the announcement to learn more +{% /arrow_link %} diff --git a/src/routes/docs/apis/rest/+page.markdoc b/src/routes/docs/apis/rest/+page.markdoc index 656c56acc0..f29673e724 100644 --- a/src/routes/docs/apis/rest/+page.markdoc +++ b/src/routes/docs/apis/rest/+page.markdoc @@ -11,34 +11,65 @@ Appwrite supports multiple protocols for accessing the server, including [REST]( Appwrite's REST APIs expect certain headers to be included with each request: {% table %} + - Header -- +- - Description + --- + - X-Appwrite-Project: [PROJECT-ID] - required - The ID of your Appwrite project + --- + - Content-Type: application/json - required - Content type of the HTTP request. Typically set to `application/json`. + --- + - X-Appwrite-Key: [API-KEY] - optional - API key used for server authentication. Your API key is a secret, **do not** use it in client applications. + --- + - X-Appwrite-JWT: [TOKEN] - optional - Token used for JWT authentication, tokens can be generated using the [Create JWT](/docs/products/auth/jwt) method. + --- + - X-Appwrite-Response-Format: [VERSION-NUMBER] - optional - Version number used for backward compatibility. The response will be formatted to be compatible with the provided version number. This helps Appwrite SDKs keep backward compatibility with Appwrite server API version. + --- + - X-Fallback-Cookies: [FALLBACK-COOKIES] - optional - Fallback cookies used in scenarios where browsers do not allow third-party cookies. Often used when there is no Custom Domain set for your Appwrite API. -{% /table %} + +--- + +- X-Appwrite-Impersonate-User-Id: [USER-ID] +- optional +- Resolves the effective user for an already authenticated impersonator request by Appwrite user ID. Only works when the authenticated user has impersonation enabled. + +--- + +- X-Appwrite-Impersonate-User-Email: [EMAIL] +- optional +- Resolves the effective user for an already authenticated impersonator request by email address. Only works when the authenticated user has impersonation enabled. + +--- + +- X-Appwrite-Impersonate-User-Phone: [PHONE] +- optional +- Resolves the effective user for an already authenticated impersonator request by phone number. Only works when the authenticated user has impersonation enabled. + {% /table %} # Authentication {% #authentication %} @@ -101,6 +132,22 @@ X-Appwrite-Project: X-Appwrite-JWT: [TOKEN] ``` +## Impersonation headers {% #impersonation-headers %} + +When a request is already authenticated as a user with impersonation enabled, you can add one of Appwrite's impersonation headers to resolve a different effective user for that request. + +Use exactly one of these headers: + +- `X-Appwrite-Impersonate-User-Id` +- `X-Appwrite-Impersonate-User-Email` +- `X-Appwrite-Impersonate-User-Phone` + +These headers are ignored for plain API key requests. They are only honored when the request already belongs to a signed-in user who has been marked as an impersonator in the Appwrite Console or through the Users API. + +If you are using an Appwrite SDK instead of raw REST calls, use the corresponding client setters rather than manually attaching these headers. + +Learn more in the [user impersonation docs](/docs/products/auth/impersonation). + # Files {% #files %} Appwrite implements resumable, chunked uploads for files larger than 5MB. Chunked uploads send files in chunks of 5MB to reduce memory footprint and increase resilience when handling large files. [Appwrite SDKs](/docs/sdks) will automatically handle chunked uploads, but it is possible to implement this with the REST API directly. @@ -108,58 +155,76 @@ Appwrite implements resumable, chunked uploads for files larger than 5MB. Chunke Upload endpoints in Appwrite, such as [Create File](/docs/references/cloud/client-web/storage#createFile) and [Create Deployment](/docs/references/cloud/server-nodejs/functions#createDeployment), are different from other endpoints. These endpoints take multipart form data instead of JSON data. To implement chunked uploads, you will need to implement the following headers. If you wish, this logic is already available in any of the [Appwrite SDKs](/docs/sdks). {% table %} + - Header -- +- - Description + --- + - X-Appwrite-Project: [PROJECT-ID] - required - The ID of your Appwrite project + --- + - Content-Type: multipart/form-data; boundary=[FORM-BOUNDARY] - required - Contains the content type of the HTTP request and provides a [boundary](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) that is used to parse the form data. + --- + - Content-Range: bytes [BYTE-RANGE] - required - Contains information about which bytes are being transmitted in this chunk, with the format `[FIRST-BYTE]-[LAST-BYTE]/[TOTAL-BYTES]`. + --- + - X-Appwrite-ID: [FILE-ID] - required - Contains ID of the file this chunk belongs to. + --- + - X-Appwrite-Key: [API-KEY] - optional - API key used for server authentication. Your API key is a secret, **do not** use it in client applications. -{% /table %} + {% /table %} The multipart form data is structured as follows: {% table %} + - Key -- +- - Value - File Name - Description + --- + - fileId - optional - [FILE-ID] - N/A - Contains the file ID of the new file. Only used by file chunks following the first chunk uploaded. + --- + - file - required - [CHUNK-DATA] - [FILE-NAME] - Contains file chunk data. + --- + - permissions - required - [PERMISSION ARRAY] - N/A - Contains an array of permission strings about who can access the new file. -{% /table %} + {% /table %} While cURL and fetch are great tools to explore other REST endpoints, it's impractical to use for chunked file uploads because you need to split files into chunks. @@ -201,60 +266,90 @@ Some use cases do not allow custom headers, such as embedding images from Appwri Appwrite SDKs have helpers to generate permission string formats, but when using Appwrite without SDKs, you'd need to create the strings yourself. {% table %} + - Query method - API string + --- + - `Permission.read()` - `read("")` + --- + - `Permission.create()` - `read("")` + --- + - `Permission.update()` - `update("")` + --- + - `Permission.delete()` - `delete("")` + --- + - `Permission.write()` - `write("")` -{% /table %} + {% /table %} ## Roles {% #roles %} Appwrite SDKs have helpers to generate roles string formats, but when using Appwrite without SDKs, you'd need to create the strings yourself. {% table %} + - Role method - API string + --- + - `Role.any()` - `any` + --- + - `Role.guests()` - `guests` + --- + - `Role.users()` - `users` + --- + - `Role.users([STATUS])` - `users/[STATUS]` + --- + - `Role.user([USER_ID])` - `user:[USER_ID]` + --- + - `Role.user([USER_ID], [STATUS])` - `user:[USER_ID]/[STATUS]` + --- + - `Role.team([TEAM_ID])` - `team:[TEAM_ID]` + --- + - `Role.team([TEAM_ID], [ROLE])` - `team:[TEAM_ID]/[ROLE]` + --- + - `Role.member([MEMBERSHIP_ID])` - `member:[MEMBERSHIP_ID]` -{% /table %} + {% /table %} # Unique ID {% #unique-id %} @@ -266,7 +361,7 @@ Appwrite's SDKs provide a `Query` class to generate JSON query strings. When using Appwrite without an SDK, you can template your own JSON strings. You can discover the query methods available in the [Queries page.](/docs/products/databases/queries) -## Query string format {% #queries-string-format %} +## Query string format {% #queries-string-format %} Appwrite Queries are escaped JSON strings, which look like this. @@ -274,10 +369,11 @@ Appwrite Queries are escaped JSON strings, which look like this. "{\"method\":\"equal\",\"column\":\"name\",\"values\":[\"John\"]}" ``` -Query strings are passed to Appwrite using the `queries` parameter. +Query strings are passed to Appwrite using the `queries` parameter. You can attach multiple query strings by including the array parameter multiple times in the query string: `queries[]="..."&queries[]="..."` For example, the unescaped query string might look like this. + ```text ?queries[0]={"method":"equal","column":"name","values":["John"]}&queries[1]={"method":"limit","values":[6]} ``` @@ -305,16 +401,13 @@ For example, to query for all rows with the name "John" or "Jane", the query str ```json { - "method": "equal", - "column": "name", - "values": [ - "John", - "Jane" - ] + "method": "equal", + "column": "name", + "values": ["John", "Jane"] } ``` -Here are some more examples of the JSON query format. +Here are some more examples of the JSON query format. When in doubt, you can use the Appwrite SDKs to generate the query strings for you. ```json @@ -338,26 +431,27 @@ When in doubt, you can use the Appwrite SDKs to generate the query strings for y ``` ## Query nesting {% #query-nesting %} -Some Appwrite query methods, like `and` and `or`, allow you to nest queries. + +Some Appwrite query methods, like `and` and `or`, allow you to nest queries. When using Appwrite without an SDK, you can template your own JSON strings. In these cases, `column` is empty and `values` is an array of queries. ```json { - "method": "and", - "values": [ - { - "method": "equal", - "column": "name", - "values": ["John"] - }, - { - "method": "between", - "column": "age", - "values": [20, 30] - } - ] + "method": "and", + "values": [ + { + "method": "equal", + "column": "name", + "values": ["John"] + }, + { + "method": "between", + "column": "age", + "values": [20, 30] + } + ] } ``` diff --git a/src/routes/docs/products/auth/+layout.svelte b/src/routes/docs/products/auth/+layout.svelte index 6fd29ef59d..2b12ad7b97 100644 --- a/src/routes/docs/products/auth/+layout.svelte +++ b/src/routes/docs/products/auth/+layout.svelte @@ -32,14 +32,14 @@ label: 'Users', href: '/docs/products/auth/users' }, - { - label: 'Impersonation', - href: '/docs/products/auth/impersonation' - }, { label: 'Teams', href: '/docs/products/auth/teams' }, + { + label: 'Impersonation', + href: '/docs/products/auth/impersonation' + }, { label: 'Preferences', href: '/docs/products/auth/preferences' diff --git a/src/routes/docs/products/auth/+page.markdoc b/src/routes/docs/products/auth/+page.markdoc index 7197b3fb54..b0f1a5110e 100644 --- a/src/routes/docs/products/auth/+page.markdoc +++ b/src/routes/docs/products/auth/+page.markdoc @@ -13,6 +13,7 @@ Add authentication to your app in 5 minutes {% /arrow_link %} # Authentication methods {% #auth-methods %} + Appwrite supports a variety of authentication methods to fit every app and every niche. Explore Appwrite's authentication flows. {% cards %} @@ -49,9 +50,11 @@ Implementing MFA to add extra layers of security to your app. {% /cards %} # Flexible permissions {% #flexible-permissions %} + When users sign up using Appwrite, their identity is automatically attached to a robust permissions system. Appwrite Authentication provides permissions for individual users and groups of users through [teams](/docs/products/auth/teams) and [labels](/docs/products/auth/labels). # Built in preferences {% #built-in-preferences %} + Appwrite **Authentication** comes with built-in [preferences](/docs/products/auth/preferences) for users to manage their account settings. Store notification settings, themes, and other user preferences to be shared across devices. diff --git a/src/routes/docs/products/auth/impersonation/+page.markdoc b/src/routes/docs/products/auth/impersonation/+page.markdoc new file mode 100644 index 0000000000..66c457b2df --- /dev/null +++ b/src/routes/docs/products/auth/impersonation/+page.markdoc @@ -0,0 +1,289 @@ +--- +layout: article +title: User impersonation +description: Let trusted operators act as another user in Appwrite Auth for support, QA, and troubleshooting while keeping the flow controlled and auditable. +--- + +User impersonation lets a trusted user temporarily act as another user in the same Appwrite project. This is useful for support workflows, reproducing user-reported bugs, validating permissions, and checking how your app behaves from the user's point of view without sharing credentials. + +With impersonation, the operator still signs in as themselves first. Appwrite then uses one impersonation setting on the client to resolve the target user and execute the request using that user's permissions. + +{% info title="Important" %} +Impersonation only works on requests that are already authenticated as a user with impersonation enabled. `X-Appwrite-Key` alone is not enough. +{% /info %} + +# How it works {% #how-it-works %} + +Impersonation follows four steps: + +1. Enable the `impersonator` capability for a trusted operator. +2. Have that operator sign in normally using any supported Appwrite Auth flow. +3. Set exactly one impersonation target on the Appwrite client. +4. Appwrite resolves the target user and evaluates the request as that user. + +When impersonation is active, the returned user model includes `impersonatorUserId`. Your app can use this to show a visible banner or disable risky actions while someone is acting on behalf of another user. + +# Enable impersonation for an operator {% #enable-impersonation %} + +You can enable impersonation for a trusted operator in two places: + +- In the Appwrite Console under **Auth > Users**, by opening the user you want to trust and enabling their impersonator capability +- In the Users API, by updating that user's `impersonator` field + +This capability should only be granted to internal support, QA, or operations users who need to inspect app behavior from an end-user perspective. + +{% info title="Recommended setup" %} +Create a dedicated internal operator account for each team member instead of sharing one support account. This makes it easier to review internal audit activity and control access over time. +{% /info %} + +When a user is marked as an impersonator, Appwrite also grants them the `users.read` scope. This allows trusted operators to list users in the project, which is especially useful when building internal admin-style tools that let support or QA teams search for a user and choose who to impersonate next. + +{% arrow_link href="/docs/references/cloud/server-nodejs/users#updateImpersonator" %} +See the Users API reference for update impersonator +{% /arrow_link %} + +# Initialize an impersonated client {% #initialize-an-impersonated-client %} + +After the operator signs in as themselves, initialize the Appwrite client the same way you normally would, then add exactly one impersonation setter on the client. + +Use only one of them per request flow. + +{% info title="SDK support" %} +Use an Appwrite SDK version that includes impersonation support. In client-side apps, the operator's session is typically already persisted for you after login, so impersonation becomes a small client configuration step. +{% /info %} + +# By user ID {% #impersonate-by-id %} + +Impersonating by user ID is the most precise option. Use it when your internal tools already store the Appwrite user ID or when an operator selected a user from your support dashboard. + +{% multicode %} + +```client-web +import { Client, Account } from "appwrite"; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserId(''); + +const account = new Account(client); +const user = await account.get(); + +if (user.impersonatorUserId) { + console.log(`Impersonated by ${user.impersonatorUserId}`); +} +``` + +```client-flutter +import 'package:appwrite/appwrite.dart'; + +Client client = Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserId(''); + +Account account = Account(client); +final user = await account.get(); +print(user.name); +``` + +```client-apple +import Appwrite + +let client = Client() + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserId("") + +let account = Account(client) +let user = try await account.get() +print(user.name) +``` + +```client-android-kotlin +import io.appwrite.Client +import io.appwrite.services.Account + +val client = Client(context) + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserId("") + +val account = Account(client) +val user = account.get() +println(user.name) +``` + +{% /multicode %} + +# By email {% #impersonate-by-email %} + +Impersonating by email is useful in admin panels and support workflows where operators search for users by email address first. + +{% multicode %} + +```client-web +import { Client, Account } from "appwrite"; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserEmail('user@example.com'); + +const account = new Account(client); +const user = await account.get(); +console.log(user.email); +``` + +```client-flutter +import 'package:appwrite/appwrite.dart'; + +Client client = Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserEmail('user@example.com'); + +Account account = Account(client); +final user = await account.get(); +print(user.email); +``` + +```client-apple +import Appwrite + +let client = Client() + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserEmail("user@example.com") + +let account = Account(client) +let user = try await account.get() +print(user.email) +``` + +```client-android-kotlin +import io.appwrite.Client +import io.appwrite.services.Account + +val client = Client(context) + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserEmail("user@example.com") + +val account = Account(client) +val user = account.get() +println(user.email) +``` + +{% /multicode %} + +# By phone {% #impersonate-by-phone %} + +Impersonating by phone is helpful for support flows where the phone number is the primary identifier or when your app is centered around SMS-based authentication. + +{% multicode %} + +```client-web +import { Client, Account } from "appwrite"; + +const client = new Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserPhone('+12065550100'); + +const account = new Account(client); +const user = await account.get(); +console.log(user.phone); +``` + +```client-flutter +import 'package:appwrite/appwrite.dart'; + +Client client = Client() + .setEndpoint('https://.cloud.appwrite.io/v1') + .setProject('') + .setImpersonateUserPhone('+12065550100'); + +Account account = Account(client); +final user = await account.get(); +print(user.phone); +``` + +```client-apple +import Appwrite + +let client = Client() + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserPhone("+12065550100") + +let account = Account(client) +let user = try await account.get() +print(user.phone) +``` + +```client-android-kotlin +import io.appwrite.Client +import io.appwrite.services.Account + +val client = Client(context) + .setEndpoint("https://.cloud.appwrite.io/v1") + .setProject("") + .setImpersonateUserPhone("+12065550100") + +val account = Account(client) +val user = account.get() +println(user.phone) +``` + +{% /multicode %} + +# Choosing the right identifier {% #choosing-the-right-identifier %} + +Each setter resolves the same effective user context, but each one fits a different operator workflow: + +- Use **user ID** when you already have the canonical Appwrite ID +- Use **email** when support teams search by email address +- Use **phone** when your app is centered around phone login or phone-based onboarding + +Only set one impersonation value at a time. If you need to switch targets, create a fresh client or replace the previous impersonation value before continuing. + +# Build safe support tooling {% #build-safe-support-tooling %} + +Impersonation is most useful when you wrap it in explicit operator UX: + +- Use the automatically granted `users.read` scope to build a user picker or searchable support view +- Show a clear banner while impersonation is active +- Display both the operator identity and the effective user identity +- Require an explicit action to start impersonation +- Let operators stop impersonating with one click +- Limit impersonation features to internal tools and trusted roles + +# Common use cases {% #common-use-cases %} + +User impersonation is especially useful when you need to: + +- Reproduce a bug that only appears for a specific user +- Verify permissions and feature access from the user's point of view +- Help customer support teams troubleshoot account issues +- Review onboarding or upgrade flows exactly as an end user sees them + +# Security and visibility {% #security-and-visibility %} + +Keep impersonation limited to trusted operators and internal tools. + +Important behavior to know: + +- Impersonation must start from a real user session, not an API key by itself. +- Users with impersonation enabled are automatically granted the `users.read` scope. +- The target user's permissions are used for the impersonated request. +- The user model exposes `impersonator` and `impersonatorUserId` so your app can react when impersonation is active. +- Internal audit logs attribute the action to the original impersonator and include the impersonated target in internal audit payload data. + +If you build an internal admin panel, use `impersonatorUserId` to make the impersonated state obvious at all times. + +# More resources {% #more-resources %} + +- [Manage users with the Users API](/docs/products/auth/users) +- [REST API impersonation docs](/docs/apis/rest#impersonation-headers) +- [Users API reference](/docs/references/cloud/server-nodejs/users) diff --git a/src/routes/docs/products/auth/users/+page.markdoc b/src/routes/docs/products/auth/users/+page.markdoc index c71865219c..b5b1eca70b 100644 --- a/src/routes/docs/products/auth/users/+page.markdoc +++ b/src/routes/docs/products/auth/users/+page.markdoc @@ -5,13 +5,15 @@ description: Manage user identities and profiles effectively with Appwrite. Dive --- Appwrite Users API is used for managing users in server applications. -Users API can only be used with an API key with the [Server SDK](/docs/sdks#server), to manage all users. +Users API can only be used with an API key with the [Server SDK](/docs/sdks#server), to manage all users. If you need to act on behalf of users through an Appwrite Function or your own backend, use [JWT login](/docs/products/auth/jwt). +Need to troubleshoot from a user's point of view? Use [user impersonation](/docs/products/auth/impersonation) to let trusted operators temporarily act as another user without sharing credentials. + {% partial file="account-vs-user.md" /%} The users API can be used to create users, import users, update user info, get user audit logs, and remove users. {% arrow_link href="/docs/references/cloud/server-nodejs/users" %} -Learn more in the Users API references +Learn more in the Users API references {% /arrow_link %} diff --git a/static/images/blog/announcing-user-impersonation/cover.svg b/static/images/blog/announcing-user-impersonation/cover.svg new file mode 100644 index 0000000000..018803a4a9 --- /dev/null +++ b/static/images/blog/announcing-user-impersonation/cover.svg @@ -0,0 +1,138 @@ + + + + + + + + + + Appwrite Auth + + + User impersonation + + + Act as a user for support, QA, and troubleshooting + + + without sharing credentials. + + + + ID, email, or phone + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/images/blog/managing-website-assets-repo-cold-start/cover.png b/static/images/blog/managing-website-assets-repo-cold-start/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..12579b0cc178ca16976f6e8502058be0589d7af4 GIT binary patch literal 13945 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 literal 0 HcmV?d00001 diff --git a/static/images/changelog/2026-03-14.svg b/static/images/changelog/2026-03-14.svg new file mode 100644 index 0000000000..6ec0e26d04 --- /dev/null +++ b/static/images/changelog/2026-03-14.svg @@ -0,0 +1,125 @@ + + + + + + + + Changelog + + + User impersonation + + + Trusted operators can now act as users + + + for support, QA, and troubleshooting. + + + + Appwrite Auth + + + + + + + + + + + + + + + + + + + + + + + + From 32e9245a5b0aa6d9616121115e0aa72e82830a87 Mon Sep 17 00:00:00 2001 From: eldadfux Date: Sat, 21 Mar 2026 18:50:49 +0100 Subject: [PATCH 3/4] small fixes --- .../blog/post/announcing-user-impersonation/+page.markdoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/routes/blog/post/announcing-user-impersonation/+page.markdoc b/src/routes/blog/post/announcing-user-impersonation/+page.markdoc index bb43c4e1b6..de0ad0e4ad 100644 --- a/src/routes/blog/post/announcing-user-impersonation/+page.markdoc +++ b/src/routes/blog/post/announcing-user-impersonation/+page.markdoc @@ -38,9 +38,9 @@ Instead of building the entire mechanism around impersonation, you can focus on This release adds the building blocks needed to support impersonation safely inside Appwrite: - A new `impersonator` boolean on the user model -- A dedicated endpoint to enable or disable impersonation for a user +- A dedicated endpoint to enable or disable impersonation for a user from any of the server SDKs - Console support so trusted operators can be marked as impersonators directly from **Auth > Users** -- Automatic `users.read` scope for impersonators so they can browse project users and build internal user-pickers +- Automatic `users.read` scope for impersonators so they can browse project users and build internal user-pickers from either client or server side - Three client setters for selecting the target user by ID, email, or phone - Response models that expose `impersonatorUserId` when impersonation is active @@ -48,7 +48,7 @@ In practice, the flow is simple: 1. Mark a trusted operator as an impersonator. 2. Have them sign in normally using Appwrite Auth. -3. Set one impersonation value on the client. +3. Set one impersonation target value on the client using the new client SDK methods. 4. Appwrite resolves the target user and evaluates the request as that user. # Why this matters @@ -241,7 +241,7 @@ That means support and QA teams can keep using the same Appwrite SDK patterns th # Built for controlled use -Impersonation is intentionally designed to work from a **real user-authenticated session**, not from `X-Appwrite-Key` alone. +Impersonation is intentionally designed to work from a **real user-authenticated session**, not from requests authenticated with your **server integration** (project API key) alone. That means operators still authenticate as themselves first. Appwrite then uses the impersonation setting on the client only to select the effective user for the request. This keeps the flow explicit and better aligned with internal support tooling, admin panels, and controlled QA environments. From 15f1972360c1db7ca682a9ef30f73b8f5ca4e3a0 Mon Sep 17 00:00:00 2001 From: eldadfux Date: Sat, 21 Mar 2026 19:10:07 +0100 Subject: [PATCH 4/4] Updated blog cover --- .optimize-cache.json | 1 + .../+page.markdoc | 2 +- .../changelog/(entries)/2026-03-14.markdoc | 2 +- .../announcing-user-impersonation/cover.png | Bin 0 -> 144073 bytes .../announcing-user-impersonation/cover.svg | 138 ------------------ static/images/changelog/2026-03-14.svg | 125 ---------------- 6 files changed, 3 insertions(+), 265 deletions(-) create mode 100644 static/images/blog/announcing-user-impersonation/cover.png delete mode 100644 static/images/blog/announcing-user-impersonation/cover.svg delete mode 100644 static/images/changelog/2026-03-14.svg diff --git a/.optimize-cache.json b/.optimize-cache.json index 162c4a82c6..2e61d947ba 100644 --- a/.optimize-cache.json +++ b/.optimize-cache.json @@ -191,6 +191,7 @@ "images/blog/announcing-time-helper-queries/cover.png": "0ee1d4d1edc65bf8fc3376b761b08efaffa55dd8ca84860ab3a9c34f7d78c25b", "images/blog/announcing-timestamp-overrides/cover.png": "5bfc2ba16b8ca4a82188c0f67b300ed0a7f38b4abc04b06a10ee52b2832fa65b", "images/blog/announcing-transactions-api/cover.png": "604a7721b7bf0a752460a721ffcaff10598abc5f398e7b16a8a58195c2ebf7ea", + "images/blog/announcing-user-impersonation/cover.png": "03c2b9a8aef562caf6b491ddb22626c405e64f2e6ac83525e28e6537f3f927a5", "images/blog/apply-appwrite-how/cover.png": "d23f45ced245b42c8712c021f5d2068c17aebd94fd049cb90222cb9647a41a4a", "images/blog/appwrite-1-8-0-self-hosted-release/cover.png": "c15a9d88ccd16c2dc8333dc74e715e1f4a6c7818d3b4a05f4d68342eacdc0523", "images/blog/appwrite-1-8-1-self-hosted-release/cover.png": "82f0a396c56b6b299b24133079acc6a317c66b2bf02fd91f4862bd3be0f8f373", diff --git a/src/routes/blog/post/announcing-user-impersonation/+page.markdoc b/src/routes/blog/post/announcing-user-impersonation/+page.markdoc index de0ad0e4ad..d6fdf37233 100644 --- a/src/routes/blog/post/announcing-user-impersonation/+page.markdoc +++ b/src/routes/blog/post/announcing-user-impersonation/+page.markdoc @@ -3,7 +3,7 @@ layout: post title: 'Introducing user impersonation for Appwrite Auth' description: Trusted operators can now act as another user in Appwrite Auth to debug issues, validate permissions, and support customers without sharing credentials. date: 2026-03-14 -cover: /images/blog/announcing-user-impersonation/cover.svg +cover: /images/blog/announcing-user-impersonation/cover.png timeToRead: 4 author: eldad-fux category: announcement, product diff --git a/src/routes/changelog/(entries)/2026-03-14.markdoc b/src/routes/changelog/(entries)/2026-03-14.markdoc index ebc4b85b01..0e07e2e564 100644 --- a/src/routes/changelog/(entries)/2026-03-14.markdoc +++ b/src/routes/changelog/(entries)/2026-03-14.markdoc @@ -2,7 +2,7 @@ layout: changelog title: 'User impersonation for Appwrite Auth' date: 2026-03-14 -cover: /images/changelog/2026-03-14.svg +cover: /images/blog/announcing-user-impersonation/cover.png --- Trusted operators can now impersonate users in Appwrite Auth to reproduce issues, validate permissions, and provide hands-on support without sharing credentials. diff --git a/static/images/blog/announcing-user-impersonation/cover.png b/static/images/blog/announcing-user-impersonation/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..076d354c6025d959c07f48bbdbb73c46345c5699 GIT binary patch literal 144073 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

;|=`qRnW-jX9)MGtOcEdhpO;w6bun9$Eej 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 - - - - - - - - - Appwrite Auth - - - User impersonation - - - Act as a user for support, QA, and troubleshooting - - - without sharing credentials. - - - - ID, email, or phone - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/images/changelog/2026-03-14.svg b/static/images/changelog/2026-03-14.svg deleted file mode 100644 index 6ec0e26d04..0000000000 --- a/static/images/changelog/2026-03-14.svg +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - Changelog - - - User impersonation - - - Trusted operators can now act as users - - - for support, QA, and troubleshooting. - - - - Appwrite Auth - - - - - - - - - - - - - - - - - - - - - - - -