Skip to content

Commit bf0f8fa

Browse files
authored
Merge branch 'main' into feat/add-PH-badge-for-sites
2 parents 9a8ec6a + 94d9c31 commit bf0f8fa

File tree

9 files changed

+235
-8
lines changed

9 files changed

+235
-8
lines changed

src/routes/(init)/init/+page.svelte

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,17 +111,16 @@
111111
illustration: DevKeys,
112112
description:
113113
'Introducing Dev Keys. A new Appwrite feature that lets you bypass rate limits *during local development*. No more slowdowns. No more artificial blockers. Just fast, uninterrupted building.',
114-
url: '/',
114+
url: '/blog/post/announcing-dev-keys',
115115
content: [
116-
{ title: 'How do Dev Keys work', url: '/blog/post/', type: 'Blog' },
117116
{
118-
title: 'Improve your Appwrite developer experience with dev keys',
119-
url: '/blog/docs',
117+
title: 'Improve your Appwrite developer experience with Dev Keys',
118+
url: '/blog/post/improve-devex-dev-keys',
120119
type: 'Blog'
121120
},
122121
{
123122
title: 'Dev Keys',
124-
url: '/',
123+
url: '/docs/advanced/platform/dev-keys',
125124
type: 'Docs',
126125
label: 'Visit docs'
127126
}
@@ -133,7 +132,7 @@
133132
illustration: Formats,
134133
description:
135134
'We have added support for two new image formats in Appwrite Storage: HEIC and AVIF. This will give you more tools to manage, manipulate, and serve images the way you need.',
136-
url: '/',
135+
url: '/blog/post/announcing-new-image-formats',
137136
content: [
138137
{
139138
title: 'How to use AVIF in Storage',
@@ -147,7 +146,7 @@
147146
},
148147
{
149148
title: 'New image formats',
150-
url: '/docs/',
149+
url: '/docs/products/storage/images',
151150
type: 'Docs',
152151
label: 'Visit docs'
153152
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
---
2+
layout: post
3+
title: "Announcing Dev Keys: faster local development without rate limits"
4+
description: This new feature helps you build without interruptions. Designed to keep you productive.
5+
date: 2025-05-21
6+
cover: /images/blog/dev-keys.png
7+
timeToRead: 6
8+
author: chirag-aggarwal
9+
category: product
10+
featured: false
11+
---
12+
13+
You’re building, testing, tweaking. You’re in the zone. Then—bam—rate limit.
14+
15+
We’ve all been there. Development flow interrupted by API limits meant for production traffic. But that ends now.
16+
17+
Introducing **Dev Keys.**
18+
19+
A new Appwrite feature that lets you bypass rate limits *during local development*. No more slowdowns. No more artificial blockers. Just fast, uninterrupted building.
20+
21+
And they’re built specifically for you.
22+
23+
# Built for development
24+
25+
Appwrite has always aimed to give you the best tools to build secure, modern apps. But testing locally with production-level rate limits? That’s been a pain point for too long.
26+
27+
Dev Keys fix that. They let you skip rate limits while developing locally, whether building APIs, wiring up the frontend, or running automated tests.
28+
29+
It’s a simple but powerful shift resulting in fewer errors, faster feedback, and a better overall experience.
30+
31+
And they’re not just about rate limits. Dev Keys are also a great solution for **bypassing CORS restrictions** and **hostname validation errors** during development.
32+
33+
# Unlimited sign-in testing
34+
35+
Building a login screen often requires testing it over and over, tweaking error messages, checking redirects, fixing small UI bugs, etc.
36+
37+
Appwrite’s purposefully low rate limit of 10 calls per hour would make this process slow.
38+
39+
Dev Keys lift that limit up, allowing you to test the sign-in flow as much as you need and perfect your authentication-no interruptions.
40+
41+
# Goodbye auto-refresh rate limit
42+
43+
Let’s say you are working on magic-link sign-in, and using a framework like Next.js, Nuxt, or SvelteKit. These frameworks would refresh the page every time you save a file, making you quickly exhaust your magic-url sign-in request rate limit.
44+
45+
Dev Keys solves this issue, letting you auto-refresh and make requests unlimited times so you can build, tweak, and test your flows without ever running into rate limit errors.
46+
47+
# CORS debugging made effortless
48+
49+
CORS errors can be really annoying to deal with, especially during development in cloud-based environments like GitHub Codespaces, Gitpods, or any other platform that gives your app a random domain.
50+
51+
But with Dev Keys, that’s not an issue anymore. Appwrite would temporarily let any host through, so you can build and test with no more CORS headaches. No more whitelisting of random domains in the console. Just plug in the Dev Key, and get back to building.
52+
53+
# Important features
54+
55+
- **Rate limit bypass**: Make unlimited API requests in local development or CI/CD tests without triggering limits.
56+
- **CORS and hostname validation bypass**: Skip restrictive CORS checks and hostname errors that usually block client-side development.
57+
- **Configurable expiry**: Set Dev Keys to automatically expire after a day, a week or a month.
58+
- **Easy integration**: Works seamlessly with Appwrite SDKs and via headers in API requests.
59+
60+
No production misuse. No long-term security risk. Just a better development experience.
61+
62+
# Why it matters
63+
64+
Hitting a rate limit while testing locally isn’t just annoying, it’s disruptive. It slows development, complicates debugging, and wastes time.
65+
66+
On top of that, during deployment **CORS issues and hostname validation errors** can halt progress unexpectedly, especially during client-side testing. Dev Keys remove those blockers so you can test and ship without interruption.
67+
68+
Dev Keys solve this by allowing you to test at full speed, without compromising your architecture or hitting quotas meant for live apps. Your team ships faster, more confidently, and with fewer friction points.
69+
70+
# Built with you in mind
71+
72+
Dev Keys are designed to allow you to iterate quickly and test thoroughly. Dev Keys keep you moving, whether you’re building a new feature, integrating with an SDK, or automating test cases.
73+
74+
And because they’re scoped and temporary by design, they stay secure and manageable in any workflow.
75+
76+
# How to get started
77+
78+
To create a new Dev Key, navigate to Overview > Integrations > Dev keys and click Create Dev key. You can then implement the Dev Key while initializing the Appwrite client in your app.
79+
80+
[Visit the docs](/docs/advanced/platform/dev-keys) to learn more.
81+
82+
# Build without limits
83+
84+
We built Dev Keys to make your experience with Appwrite even better. Because great development tools shouldn’t get in your way, they should get out of it.
85+
86+
Try Dev Keys today in your next project and see the difference.
87+
88+
Available now on **Appwrite Cloud** and **self-hosted** deployments.
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
---
2+
layout: post
3+
title: Improve your Appwrite developer experience with dev keys
4+
description: Learn how you can create a dev key on Appwrite and use it in a web project to improve your developer experience.
5+
date: 2025-05-21
6+
cover: /images/blog/improve-devex-dev-keys/cover.png
7+
timeToRead: 7
8+
author: aditya-oberai
9+
category: tutorial
10+
featured: false
11+
callToAction: true
12+
---
13+
14+
When building applications with Appwrite, developers often need a way to test and debug services repeatedly over short periods. Sometimes, this can become a hassle, as Appwrite enforces strict rate limits on client apps to prevent abuse. Developers needed a way to bypass these rate limits in their test environments and CI/CD workflows to ensure the robustness of their app functionalities.
15+
16+
And this is the exact problem **dev keys** are here to solve!
17+
18+
# What are dev keys?
19+
20+
Dev keys are a type of secret used by Appwrite's client SDKs. They allow the developer to bypass any rate limits enforced by Appwrite and suppress any CORS errors caused by not using a configured hostname. A developer can configure the expiration date of a dev key to any of the three preset options (1 day, 7 days, or 30 days).
21+
22+
Dev keys should never be used in production environments, as they can make your app more susceptible to abuse and security breaches.
23+
24+
# Try out dev keys in an app
25+
26+
To test dev keys, I created a simple demo web app that sends 200 requests to create a new document in an Appwrite database. To set this app up, you must complete the following steps:
27+
28+
## Step 1: Setup Appwrite project
29+
30+
First, create an [Appwrite Cloud](https://cloud.appwrite.io) account or [self-host Appwrite 1.7](/docs/advanced/self-hosting). Create a project (which will lead you to the project overview page) and head to the **Databases** page from the left sidebar. Create a new database with the ID `testDb` and a new collection with the ID `testCollection`. Store both of these IDs for future usage. In this collection, add the following attribute:
31+
32+
| Name | Type | Required |
33+
| --- | --- | --- |
34+
| `number` | Integer | True |
35+
36+
Then, head to the **Settings** tab of the collection, scroll down to the **Permissions** section, and add the following permissions:
37+
38+
| | Create | Read | Update | Delete |
39+
| --- | --- | --- | --- | --- |
40+
| Any | False | False | False | False |
41+
42+
Lastly, return to the project overview page, head to the **Settings** page from the left sidebar, and copy your **API endpoint** and **project ID** for future usage.
43+
44+
## Step 2: Create web app
45+
46+
Next up, we'll create our test app. This will require us to create two files in our working directory:
47+
48+
- `index.html`
49+
50+
```html
51+
<!DOCTYPE html>
52+
<html lang="en">
53+
<head>
54+
<meta charset="UTF-8">
55+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
56+
<title>Dev keys demo</title>
57+
</head>
58+
<body>
59+
<h1>Dev keys demo</h1>
60+
<p>Click on this button to add 200 documents to the database in less than 1 minute.</p>
61+
<button type="button">Add documents</button>
62+
63+
<!-- Appwrite Web SDK -->
64+
<script src="https://cdn.jsdelivr.net/npm/[email protected]"></script>
65+
66+
<!-- Our app's script -->
67+
<script src="app.js"></script>
68+
</body>
69+
</html>
70+
```
71+
72+
- `app.js`
73+
74+
```js
75+
const client = new Appwrite.Client()
76+
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
77+
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
78+
79+
const database = new Appwrite.Databases(client);
80+
81+
document.querySelector('button').addEventListener('click', async () => {
82+
const promises = [];
83+
for (let i = 0; i < 200; i++) {
84+
const promise = database.createDocument(
85+
'testDb', // Your database ID
86+
'testCollection', // Your collection ID
87+
Appwrite.ID.unique(),
88+
{ number: i + i }
89+
);
90+
promises.push(promise);
91+
console.log('Request initiated:', i+1);
92+
}
93+
94+
await Promise.all(promises);
95+
});
96+
```
97+
98+
If you open the HTML page in your browser and click on the `Add documents` button, you will notice numerous errors in the console with the HTTP code `429`, as Appwrite's rate limits allow one client to create 120 requests per minute for this API endpoint.
99+
100+
## Step 3: Create dev key
101+
102+
Head back to your Appwrite project. On the overview page, select the **Dev keys** tab under the Integrations section and create a new dev key. You can add whatever name and expiry date you like.
103+
104+
![Dev key](/images/blog/improve-devex-dev-keys/dev-key.png)
105+
106+
After creating this dev key, head to the `app.js` file and update the Appwrite client to the following:
107+
108+
```js
109+
const client = new Appwrite.Client()
110+
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1')
111+
.setProject('<YOUR_PROJECT_ID>')
112+
.setDevKey('<YOUR_DEV_KEY>'); // Your dev key
113+
```
114+
115+
## Step 4: Test the app
116+
117+
Reopen the HTML page in your browser. Clicking the `Add documents` button will allow all 200 requests to execute successfully.
118+
119+
# Next steps
120+
121+
And with that, you have successfully tested dev keys! Learn more about Appwrite by visiting the docs and joining the Discord community.
122+
123+
- [Appwrite dev keys docs](/docs/advanced/platform/dev-keys)
124+
- [Appwrite Discord server](/discord)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
layout: changelog
3+
title: "Announcing Dev Keys: faster local development without rate limits"
4+
date: 2025-05-21
5+
cover: /images/changelog/2025-05-21.png
6+
---
7+
8+
Introducing **Dev Keys.**
9+
10+
A new Appwrite feature that lets you bypass rate limits *during local development*. No more slowdowns. No more artificial blockers. Just fast, uninterrupted building.
11+
12+
And they’re built specifically for you.
13+
14+
{% arrow_link href="/blog/post/announcing-dev-keys" %}
15+
Read the announcement to learn more
16+
{% /arrow_link %}

src/routes/docs/products/storage/images/+page.markdoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Below you can find all the different parameters offered by the preview endpoint
3232
| opacity | Set opacity for the output image. Accepts a float value between `0-1`, where `0` makes it transparent. Only works with output formats supporting alpha channels like `png`. |
3333
| rotation | Rotate the output image by a degree. Accepts an integer between `-360` to `360`. |
3434
| background | Set a background-color. Accepts any valid hex color value without the leading `#`. Only works with output formats supporting alpha channels like `png`. |
35-
| output | Set the output image format. If not provided, will use the original image's format. Supported formats are: `jpg`, `jpeg`, `png`, `gif`, and `webp` |
35+
| output | Set the output image format. If not provided, will use the original image's format. Supported formats are: `jpg`, `jpeg`, `png`, `gif`, `webp`, `avif`, and `heic` |
3636

3737
# Examples {% #examples %}
3838
Here are some examples using [Client SDKs](/docs/sdks#client).

static/images/blog/dev-keys.png

301 KB
Loading
165 KB
Loading
114 KB
Loading
301 KB
Loading

0 commit comments

Comments
 (0)