### Github
-Whenever you get stuck at any point, take a look at [this repo](https://github.com/dshukertjr/flutter_supabase_quickstart).
+Whenever you get stuck at any point, take a look at [this repo](https://github.com/supasquad/supabase-flutter-quickstart).
## Project set up
@@ -161,7 +161,7 @@ Then let's install the only additional dependency: [supabase-flutter](https://gi
Open the app and copy and paste the following inside `pubspec.yaml` under `dependencies`.
```yaml
-supabase_flutter: ^0.0.4
+supabase_flutter: ^0.0.6
```
Run `flutter pub get` to install the dependencies.
@@ -283,6 +283,26 @@ class AuthState-**Supabase gives Postgres users Supa-powers** +### Supabase gives Postgres users Superpowers -The team implemented a self hosted Supabase setup. For a customer in production in the USA this means they can use AWS infrastructure with -the Supabase API powering an RDS Postgres instance. This gives the perfect balance of rapid development, reduced DevOps, and flexible hosting -options - crucial for their customers. As Supabase uniquely offers realtime for Postgres they are able to allow their customers to see updates -from running procedures. Supabase also offers well supported client libraries that make row level security easy to use, which is crucial for the -Epsilon3 team to deliver on their future roadmap. Finally all this is easy and fast for the team to set up, even when self hosting which means -the team can focus on what they do best - helping their customers run complex operations smoothly. +The team implemented a self-hosted Supabase setup. They use AWS with a self-hosted Supabase API powering an RDS Postgres instance. +This setup gives a balance of rapid development, reduced DevOps, and flexible hosting options. As Supabase uniquely offers real-time for +Postgres, it allows their customers to see updates from running procedures. Supabase offers well-supported client libraries that make +Postgres Row Level Security easy to use, which is a critical item on the Epsilon3 roadmap. -With this implementation Epsilon3 get all the benefits of Postgres plus the smooth developer experience and support that Supabase is known for, -without making compromises to meet compliance needs. +All this was easy for the team to set up, even with self-hosting, so the team was able to focus on what they do best—helping their customers +run complex operations smoothly. With this implementation, Epsilon3 gets all the benefits of Postgres, plus the smooth developer experience and +support that Supabase is known for, without compromising their compliance needs. - + ### Self-hosted Supabase, a superpower -Self-hosting Supabase means the crew at Epsilon3 are able to move fast to revolutionise space operations securely and reliably in realtime -whilst staying compliant. The team are now seeing demand from other industries and are confident in their scaling capability because -they know it's just Postgres under the hood. Check out the Epsilon3 website to learn more about the team and their OS for space operations. -If you are interested in self-hosting Supabase then you can do XYZ action. +Self-hosting Supabase allows the crew at Epsilon3 to move fast. They are revolutionizing space operations securely and reliably in real-time whilst +staying compliant. The team is now seeing demand from other industries and is confident in their scaling capability because they know it's +just Postgres under the hood. + +Check out the [Epsilon3 website](https://www.epsilon3.io/) to learn more about the team and their OS for space operations. If you are interested +in self-hosting Supabase then you can **contact us** to learn more. diff --git a/www/_blog/2021-07-26-supabase-community-day.mdx b/www/_blog/2021-07-26-supabase-community-day.mdx new file mode 100644 index 00000000000..888b6e37f1e --- /dev/null +++ b/www/_blog/2021-07-26-supabase-community-day.mdx @@ -0,0 +1,136 @@ +--- +title: 'Supabase Community Day' +description: Community Day +author: steve_chavez +author_url: https://github.com/steve-chavez +author_image_url: https://github.com/steve-chavez.png +authorURL: https://github.com/steve-chavez +thumb: launch-week-sql-day-1-community-day/launch-week-sql-day-1-community-day-thumb.jpg +image: launch-week-sql-day-1-community-day/launch-week-sql-day-1-community-day-og.jpg +tags: + - launch-week +date: '2021-07-26' +toc_depth: 2 +--- + +Supabase has grown a lot [^1] since last [Launch Week](https://supabase.io/blog/2021/03/25/launch-week), +but it wouldn't be possible without some amazing open source tools. +Since we're shipping a few upgrades this week we feel it's only fair +to shine a spotlight on some tools and community efforts that make Supabase possible. + +## PostgreSQL version 13.3 + + + +PostgreSQL is a big part of Supabase, and it's also a huge inspiration - the speed that they ship, their community organization, +and their absolute dedication towards reliability. PostgreSQL 13.3 was released in June and (from today) every new Supabase project will +be on [PostgreSQL version 13.3](/blog/2021/07/26/supabase-postgres-13). + +### Giving back + +Supabase makes it easy to get started with Postgres, but we think you should try it even if you don't want to use Supabase. Here's a +few ways we make it easy to use PostgreSQL without Supabase: + +- Supabase was the first company to put Postgres in the [Digital Ocean Marketplace](https://marketplace.digitalocean.com/apps/supabase-postgres). +Since then it's been installed over 1000 times (not by us!). +- We provide a Postgres image in the [AWS marketplace](https://aws.amazon.com/marketplace/pp/prodview-lk2pfa5nafecg). +- We're packaging the Marketplace version, [along with "Bundles"](/blog/2021/07/26/supabase-postgres-13#postgresql-bundles) +- We're developing a few extensions: [supautils](https://github.com/supabase/supautils), [pg_net](https://github.com/supabase/pg_net), and a couple more soon to be announced. + +### Get involved + +- Follow the official [PostgreSQL Twitter](https://twitter.com/PostgreSQL) account. +- Join the official [mailing lists](https://www.postgresql.org/community/). + +## PostgREST version 8.0 + + + +This new PostgREST stable version comes with the improvements we've made to make it truly enterprise-grade. Due to our commitment with OSS, +all of our improvements are upstreamed, so you can fully use them on your own self-hosted projects. + +### Highlights + +**Improved Performance**: Due to Supabase's high throughput requirements, PostgREST 8.0 handles up to 50% more throughput on +GET requests, according to our benchmarks. We converted all SELECT queries to use prepared statements and reduced logging +verbosity to make this possible. + +**Reduced downtime**: we need PostgREST to be more "set it and forget it", so reloading schema cache now has zero downtime. + +**Dynamic Configuration**: we've made it easier to handle PostgREST configuration at scale (we manage thousands of PostgREST instances). +This new version includes the ability to use an in-database configuration that is reloadable through a `NOTIFY` command. + +**Less admin burden**: PostgREST previously required the `pg_listen` utility to reload its schema cache. This is no longer needed. +The schema cache is reloadable with a simple `NOTIFY` command. + +**Better diagnostic information**: in the rare cases where PostgREST fails, we want to find the exact root cause quickly. +For this we've improved its logging by adding logging levels and timestamps to all server errors. + +**Simpler OpenAPI**: showing a complete OpenAPI output used to require a highly-privileged `anon` role. With the new `openapi-mode`, +this is no longer needed and `anon` can be kept with minimal privileges. + +The community has made many more enhancements and bug fixes for the new version. See +[v8.0 CHANGELOG](https://github.com/PostgREST/postgrest/releases/tag/v8.0.0) for the full list. + +### Get Started + +Want to get started with PostgREST? The Supabase community has built a number of client libraries to make it simpler to use: + +- Javascript: [postgrest-js](https://github.com/supabase/postgrest-js) +- Rust: [postgrest-rs](https://github.com/supabase/postgrest-rs) +- Go: [postgrest-go](https://github.com/supabase/postgrest-go) +- Python: [postgrest-py](https://github.com/supabase/postgrest-py) +- Dart: [postgrest-dart](https://github.com/supabase/postgrest-dart) +- C#: [postgrest-csharp](https://github.com/supabase/postgrest-csharp) +- Swift: [postgrest-swift](https://github.com/supabase/postgrest-swift) +- Ruby: [postgrest-rb](https://github.com/supabase/postgrest-rb) +- Kotlin: [postgrest-kt](https://github.com/supabase/postgrest-kt) + +### Get involved + +- Help with [PostgREST development](https://github.com/PostgREST/postgrest/blob/main/.github/CONTRIBUTING.md). +- Help with [PostgREST docs translations](https://github.com/PostgREST/postgrest-docs/issues/393). +- Follow the official [PostgREST Twitter](https://twitter.com/postgrest_org) account. + +## Supabase Flutter/Dart (Beta release) + + + +While the Supabase team have been busy with the Javascript libraries, the community have been beavering away with Dart. They've even +[built fully-functional apps](https://www.producthunt.com/posts/spot-2d300f54-7a0a-4dbf-aee2-4a75311217cc) using Supabase Auth and Storage. + +Today the Community are releasing both the Flutter and Dart libraries in Beta (with a bit of help from the Supabase team). + +### Get started + +- Check out the [Flutter Quickstart Guide](https://supabase.io/docs/guides/with-flutter) +- Check out the code: + - Supabase Flutter: [GitHub](https://github.com/supabase/supabase-flutter/) | [Release](https://pub.dev/packages/supabase_flutter) + - Supabase Dart: [GitHub](https://github.com/supabase/supabase-dart/) | [Release](https://pub.dev/packages/supabase) + +### Get involved + +- Help [write](https://supabase.io/docs/handbook/supasquad#author) the Flutter Docs. +- Help [maintain](https://supabase.io/docs/handbook/supasquad#maintainer) the [Flutter](https://github.com/supabase/supabase-flutter/) + and [Dart](https://github.com/supabase/supabase-dart/) libraries. + +## Supabase Discord + + + +OK, OK, we get it - GitHub [Discussions](https://github.com/supabase/supabase/discussions) aren't enough for y'all. While we've been trying +to keep the conversation contained to our GitHub org, the community has been creating [subreddits](https://www.reddit.com/r/Supabase/), +StackOverflow [tags](https://stackoverflow.com/questions/tagged/supabase), and GitHub [topics](https://github.com/topics/supabase). + +A few weeks ago one of the community created a Community-led Discord, and so the team figured we might as well join the fun. + +We'll still be using Discussions for debugging, but if you're looking for a place to hang out with Supabase developers, Discord is where to find it. + +### Get involved + +Join the Supabase Community Discord: [discord.supabase.com](http://discord.supabase.com), say hi, and start building. + +[^1]: + Supabase has been one of the fastest growing startups [on GitHub](https://github.com/supabase/supabase) for four consecutive quarters: + 207% in [Q3](https://runacap.com/ross-index/q3-2020/) 2020; 1,373% in [Q4](https://runacap.com/ross-index/q4-2020/) 2020; + 462% in [Q1](https://runacap.com/ross-index/q1-2021/) 2021; 1,653% in [Q2](https://runacap.com/ross-index/q2-2021/) 2021. diff --git a/www/_blog/2021-07-26-supabase-postgres-13.mdx b/www/_blog/2021-07-26-supabase-postgres-13.mdx new file mode 100644 index 00000000000..2c28c1b715b --- /dev/null +++ b/www/_blog/2021-07-26-supabase-postgres-13.mdx @@ -0,0 +1,122 @@ +--- +title: 'Supabase is now on Postgres 13.3' +description: From today, new Supabase projects will be on a version of Supabase Postgres that runs on Postgres 13.3. +author: angelico_de_los_reyes +author_url: https://github.com/dragarcia +author_image_url: https://github.com/dragarcia.png +authorURL: https://github.com/dragarcia +image: pg13/postgres-13-og.jpg +thumb: pg13/postgres-13-thumb.jpg +tags: + - launch-week + - database +date: '2021-07-26' +toc_depth: 2 +--- + +From today, new Supabase projects will be on a version of [Supabase Postgres](https://github.com/supabase/postgres) that runs +on [Postgres 13.3](https://www.postgresql.org/about/news/postgresql-13-released-2077/). This won't be the only big change however in this version. +Here are a few other things that have changed under the hood. + +## PostgreSQL version 13.3 + +We've jumped from PostgreSQL 12.0 to PostgreSQL [version 13.3](https://www.postgresql.org/docs/13/release-13-3.html), introducing +significant performance improvements and some great new functionality. Some changes include: + +- native [UUID generation](https://www.postgresql.org/docs/13/functions-uuid.html) (!) using `gen_random_uuid` +- a new JSONB [datetime](https://www.postgresql.org/docs/13/functions-json.html) function +- vacuuming indexes in [parallel](https://www.postgresql.org/docs/13/sql-vacuum.html) +- [incremental sorting](https://www.postgresql.org/docs/13/using-explain.html#USING-EXPLAIN-BASICS) +- smaller [btree indexes](https://www.postgresql.org/docs/13/btree-implementation.html#BTREE-DEDUPLICATION) +- improvements to [extended statistics](https://www.postgresql.org/docs/13/planner-stats.html#PLANNER-STATS-EXTENDED) + +## Supabase Versioning + +Our [Postgres repo](https://github.com/supabase/postgres) has jumped from `0.15.0` to `13.3.0`. From now on, both major and minor versions of +Supabase Postgres will follow PostgreSQL. This makes it much easier to ascertain what version of PostgreSQL is installed. In the situation wherein +there are no updates to PostgreSQL in between releases, the patch version will be bumped up. + +## Large System Extensions (LSE) enabled for ARM instances + + + *Disclaimer for self-hosting: This is not available for x86 instances. All instances on the + Supabase platform have this enabled by default.* + + +The recent wave of Graviton 2 instances from AWS introduces support for the Large System Extensions (LSE). This looks to greatly enhance +application performance through atomics, and +[improves locking and synchronisation performance across large systems](https://github.com/aws/aws-graviton-getting-started#building-for-graviton-and-graviton2). + +### Preliminary Benchmarks + +Below is a comparison between the ARM versions of Supabase Postgres `0.15.0` and `13.3.0`. Both are using `m6gd.8xlarge` instances +and follow the PostgreSQL configuration [here](https://www.percona.com/blog/2021/01/22/postgresql-on-arm-based-aws-ec2-instances-is-it-any-good/). +The following configuration of `pgbench` was used. + +```bash hideCopy +pgbench -i -s 150 +``` + +Running the benchmark with 2, 4, 8, 16, 64, and 128 clients: + +```bash hideCopy +pgbench -P 5 -c {num_clients} -j {num_clients} -T 300 -M prepared postgres +``` + + + +## Ubuntu 20.04 + +We have taken the opportunity to upgrade new projects from Ubuntu 18.04 to Ubuntu 20.04. A switch to Ubuntu 20.04 guarantees that the underlying +OS of Supabase Postgres is supported by the Canonical team up until the year 2025 (2023 for Ubuntu 18.04). + +## Built from source + +Driven by the need to enable LSE, the underlying PostgreSQL in this version was built from the ground up instead of downloaded binaries. +Supabase Postgres can now be easily upgraded whenever a new major or minor version of PostgreSQL is released. When PostgreSQL 14 comes out, +expect Supabase Postgres 14 to quickly follow. + +## New Extensions + +### `pgRouting` + +An extension of PostGIS, [`pgRouting`](https://pgrouting.org/) provides geospatial routing functionality. + +More information can be found [here](https://docs.pgrouting.org/latest/en/index.html). + +### `wal2json` + +Converts WAL output into clean and organized JSON objects. + +More information can be found [here](https://github.com/eulerto/wal2json). + +## Enhanced security + +To help combat brute force attacks, `fail2ban` has now been configured to protect direct connections to Postgres. This applies to both +ports `5432` (PostgreSQL) and `6543` (PgBouncer). + +IPs get banned for 10 minutes after three failed attempts, and we'll continue to fine-tune and improve the protections applied to the +database servers based on evolving traffic patterns. + +## PostgreSQL bundles + +`[Coming Soon]` + +Last but not the least, we're diversifying the images of Supabase Postgres available in the AWS and Digital Ocean Marketplaces. + +Instead of a single option, we'll soon offer four configurations of PostgreSQL. Each bundle offers functionality for +common use-cases. For example, if you're using Postgres with Serverless functions, you might want to run the PgBouncer bundle. If you want an +HTTP API with your Postgres offering you might want to run the PostgREST bundle. + +| `Name` | `PostgreSQL` | `PgBouncer` | `PostgREST` | +| ----------------------------------- | ------------ | ----------- | ----------- | +| Supabase Postgres | ✅ | | | +| Supabase Postgres: PgBouncer Bundle | ✅ | ✅ | | +| Supabase Postgres: PostgREST Bundle | ✅ | | ✅ | +| Supabase Postgres: Complete Bundle | ✅ | ✅ | ✅ | + +Each offering will be available for both the `x86` and `arm` architectures. + +## Try PostgreSQL 13 + +Try the new features of PostgreSQL 13.3 today by creating a [new project](https://app.supabase.io/) on Supabase. diff --git a/www/_blog/2021-07-27-spot-flutter-with-postgres.mdx b/www/_blog/2021-07-27-spot-flutter-with-postgres.mdx new file mode 100644 index 00000000000..a7d06ed2e38 --- /dev/null +++ b/www/_blog/2021-07-27-spot-flutter-with-postgres.mdx @@ -0,0 +1,94 @@ +--- +title: 'Spot: a video sharing app built with Flutter' +description: Spot is a geolocation-based video-sharing app with some social networking features. +author: rory_wilding +author_url: https://github.com/roryw10 +author_image_url: https://github.com/roryw10.png +authorURL: https://github.com/roryw10 +image: spot/og-spot-flutter-supabase.jpg +thumb: spot/cover-spot-flutter-supabase.jpg +tags: + - case-study +date: '2021-07-27' +toc_depth: 2 +--- + +Learn why Tyler decided Flutter and Supabase are the perfect tech-stack shipping innovative ideas fast. + +[Tyler Shukert](https://twitter.com/dshukertjr) is an indie developer who has been building websites and applications for seven years. +Tyler is a Firebase & Flutter expert who recently discovered Supabase. After falling in love with Supabase, +Tyler decided to launch his latest app. [Spot](https://www.producthunt.com/posts/spot-2d300f54-7a0a-4dbf-aee2-4a75311217cc) +is a geolocation-based video-sharing app with some social networking features. + +## NoSQL doesn't mean No Schema + +Tyler loves how easy it is to create high-quality web and mobile applications with Firebase. For the past few years he has honed +his Flutter, Angular, and Firebase skills to quickly ship mobile and web apps. But the more his development expertise grew, +the more he understood the limitations of Firebase. + +Before starting a project, Tyler is never sure if the project will grow. It could be an overnight success, or it might need to +pivot in a different direction. He finds this is particularly difficult with Firebase as he faces a denormalization dilemma. +Denormalization means combining the data into a single table to make data retrieval faster. Google promotes denormalization +as best practice for a snappier app experience. Denormalisation in Firebase takes work and requires additional development +time. For new projects, it is often unclear if they will reach a scale justifying the effort denormalization requires. +In relational databases like Postgres, data is normalized, meaning reduced data redundancy with maintained data integrity. + +## Supabase + Flutter: a match made in heaven + +When Tyler discovered Supabase on Twitter, he was intrigued by the promise of Postgres with Firebase-like features. +He wanted the benefits of SQL and Relational schemas, and decided to build an app to test Supabase. + +Tyler had been thinking about building Spot, a mobile app for sharing geo-based video content. When he previously planned Spot, +he felt like hacking around Firebase would be too much effort. After researching the PostGIS extension for geospatial data, +he realized Supabase was the perfect fit. As an avid Flutter fan, Supabase's Dart library was a bonus. +Tyler loves the open-source nature of Supabase and immediately began contributing to the Dart library to enable functionality that he needed. + +Tyler decided that Spot would be perfect to showcase the power of Supabase and Flutter. Since he's active in the open-source community, +he decided to open-source the whole project, making Spot one of the most interesting Supabase examples. + + + +## Comparing Firebase to Supabase + +Although Spot seems like simple, it has a lot of complicated components. Implementing social "Likes" requires `count` functionality, +which is notoriously tricky in Firebase. In Supabase, because it's just Postgres under the hood, `count` is implemented +using a simple SQL `count` query. + +Supabase has Row-Level Security, which Tyler uses as a filter - something he can't do with Firebase. + +Spot uses Supabase Storage for managing large video files. Firebase Storage [has a reputation](https://stackoverflow.com/questions/43851742/firebase-storage-very-slow-compared-to-firebase-hosting) for slowness until it is public, which was a privacy concern for Tyler. With Supabase Storage, this wasn't an issue - storage is performant and secure. + +The Firebase API pricing model makes it is difficult to predict pricing upfront for new projects. With Supabase, +Tyler doesn't need to worry about how many API calls his project makes. + +Supabase gives Spot speed, performance, and predictable pricing. + +As of today, Tyler has around 3000 installs for Spot and is getting ready to add new functionality. He is confident Supabase, +Postgres, and his data structure will enable future development. + + +
++ + +## Spot is Open Source + +With Supabase, Tyler can use Flutter to build a performant app quickly at a low cost. Tyler is now a massive fan of the Supabase +experience and has even joined the SupaSquad. + +You can download and install spot for [iOS](https://apps.apple.com/us/app/spot-videos/id1564675926?utm_source=supabase&utm_campaign=static) +and [Android](https://play.google.com/store/apps/details?id=app.spotvideo&utm_source=supabase&utm_campaign=static) +to see just how snappy his setup is. +Tyler has fully open-sourced his example - you can [clone the repo](https://github.com/dshukertjr/spot) +and use it as the basis of your next big idea. diff --git a/www/_blog/2021-07-27-storage-beta.mdx b/www/_blog/2021-07-27-storage-beta.mdx new file mode 100644 index 00000000000..71a24d3b40e --- /dev/null +++ b/www/_blog/2021-07-27-storage-beta.mdx @@ -0,0 +1,169 @@ +--- +title: 'Supabase Storage now in Beta' +description: Supabase Storage moves into Beta. +author: inian +image: launch-week-sql-day-2/supabase-storage-beta-og.jpg +thumb: launch-week-sql-day-2/supabase-storage-beta.jpg +tags: + - storage + - launch-week +date: '2021-07-27' +toc_depth: 2 +--- + +At Supabase, one of our core values is [Kaizen](https://en.wikipedia.org/wiki/Kaizen) - continuous improvement. And that's exactly what we've been doing with Storage since it [launched](https://supabase.io/blog/2021/03/30/supabase-storage) three months ago. Today, we are launching the Sequel to Storage Alpha (I bet you didn't see that coming): Storage Beta! + +## Streaming Media + +We've added support for streaming audio and video files. + +Clients can use the `Content-Range` HTTP header to request specific parts of a file from a server. This allows them to intelligently download the parts of the video that a user is viewing, without buffering irrelevant sections of the media file. Supabase Storage now supports this header, making it easier to host and watch [nyan cat videos](https://www.youtube.com/watch?v=SkgTxQm9DWM) all day long. + + + +## Public Buckets + +Public Buckets have been one of our most requested features. We launched without them because there are too [many horror stories](https://www.google.com/search?q=s3+bucket+negligence+award&oq=s3+bucket+negligence+award) of S3 buckets unintentionally exposing objects. We wanted to take the time to implement safeguards against this. + +To enable this feature safely, buckets are made private by default, with an extremely prominent warning in the dashboard when you choose to make them public. + +You can make objects public in S3 via multiple mechanisms (e.g. tags, or prefixes). While this allows for flexibility, it makes it hard to discover publicly exposed objects. To prevent any confusion, we decided that buckets must be public in their entirety. This public visibility straightforward - if it's in a public bucket, it's public! + +Objects in public buckets can be accessed via a URL without any Authorization tokens or headers. This makes them perfect for hosting assets for your web or mobile application. + +Public buckets still require [Auth Policies](https://supabase.io/docs/guides/storage#policy-examples) to upload and delete objects, allowing you to securely manage their contents. + + + +## Directory uploads + +You can now upload an entire directory to Supabase Storage and the directory structure is fully preserved after the upload. We used the [File and Directory entries API](https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API) for implementing this. This is a non-standard API, but we didn't find any compatibility issues in the browsers we support. So, now you can upload the [Storage Github repo](https://github.com/supabase/storage-api/) to storage 🤓 + + + +## A New Policy Editor + +Postgres [Row Level Security](https://www.postgresql.org/docs/13/ddl-rowsecurity.html) (RLS) is at the core of Supabase Storage and Auth. RLS lets you define complex policies, tightly integrated with Supabase Auth users, using the language you're already comfortable with - SQL. + +However, getting started with RLS can be daunting. To make it more approachable for beginners, we've included a set of pre-defined templates on our Dashboard, covering common use-cases. + + + +Once you've selected a template, you choose which operations to allow and the Dashboard determines which API functions can access the bucket. For example, a user with INSERT permissions will be able to call the `createObject`, `copyObject` and `getSignedObject` functions in the `supabase-js` library. + + + +After writing the policy definition (which can be any valid SQL expression), you get an opportunity to review the final policy before saving. We made sure that there is no magic going on behind the scenes: you can always see the underlying SQL definition of the policies. As you become more comfortable with Row Level Security, you can define these policies directly using our SQL editor. + +## Using Storage in Local development + +It took some time to enable Storage on self-hosted Supabase. We wanted to provide a completely local experience during development, but storage had a hard dependency on an object storage service like S3. This required developers to create an S3 bucket, an IAM user in AWS, and add the credentials of the IAM user to the local setup, which was far from an ideal experience. + +From day 1, Supabase Storage was designed so that it would be easy to add new Storage backends. We knew we'd add more storage options like Google Cloud Storage or Backblaze, but little did we expect that this would be useful for our self-hosting setup! We implemented a new Storage Backend which [use a local filesystem](https://github.com/supabase/storage-api/blob/master/src/backend/file.ts) for storing objects. You can now get started with Storage without any additional setup, giving you a completely self-contained instance of Supabase. + +Check out our updated [self hosting guide](https://supabase.io/docs/guides/self-hosting) and our [CLI](https://github.com/supabase/cli) to get started. + +## Upload anything + +At launch, you could pass in a `File` object and `supabase-js` used `FormData` to send a request to the storage server to upload the file. This made it easy to send the cache control information and other options directly to the server as a multipart request. + +However, `FormData` is only supported in the browser, making `supabase-js` incompatible with Node.js. The simplest way to solve this would have been to include the [FormData polyfill](https://www.npmjs.com/package/form-data) along with the library. + +At Supabase, we are [maniacal about performance](https://supabase.io/blog/2020/12/13/supabase-dashboard-performance). Keeping our client libraries lean is a key differentiator. Our entire client library (including the clients for postgrest, storage, realtime and auth) is just 15.8 kb. If you are just interested in using a single service like storage, you can use the `storage-js` library directly which is [even smaller](https://bundlephobia.com/package/@supabase/storage-js@1.4.0). This made including polyfills like Formdata a no-go. + + + +We also considered shipping separate bundles for Node.js and the browser. This would have avoided polyfills for APIs which are already supported in each browser. However, this comes with an increase in complexity to our build process, and users would need to choose which flavor of the library to use in different environments like React Native, Deno, etc. We want to make our libraries universal. + +Instead, we modified the storage server to accept Binary data directly. With this change, you can directly upload binary Data and even NodeJS streams to the storage API. + + + +With this change in place, the client library supports uploading `ArrayBuffer`, `ArrayBufferView`, `Blob`, `Buffer`, `File`, `FormData`, `NodeJS.ReadableStream`, `ReadableStream+ As soon as I saw Supabase I knew it was the perfect technology to use alongside Flutter to build apps faster than ever. + For apps like Spot where we handle user submitted files, it is very easy to manage them securely. +
++ Supabaseを最初発見した時にこれとFlutterを組み合わせれば今まで以上に爆速でアプリ開発ができるだろうと思いました。 + Spotのようにユーザーがファイルを投稿するアプリの場合でもセキュアに取り扱うのが簡単で本当に助かります。 +
+
++ ++ As soon as I saw Supabase I knew it was the perfect technology to use alongside Flutter to build + apps faster than ever. For apps like Spot where we handle user submitted files, it is very easy + to manage them securely. +
++ Supabaseを最初発見した時にこれとFlutterを組み合わせれば今まで以上に爆速でアプリ開発ができるだろうと思いました。Spotのようにユーザーがファイルを投稿するアプリの場合でもセキュアに取り扱うのが簡単で本当に助かります。 +
+
++ +## What's next + +We're planning a Content Delivery Network for faster downloads, as well as basic transformation and optimization support for media files (like resizing, etc). We will continue our Kaizen on smaller improvements like allowing configurable upload limits and improving service stability and scalability. + +Anything else you want to see or can help implement in Storage? Reach out on our [Discord channel](https://discord.supabase.com/) and give Storage a try by [creating a project](https://app.supabase.io/) on Supabase! diff --git a/www/components/Nav/Annoucement.tsx b/www/components/Nav/Annoucement.tsx index f67e100fcc9..d5a5c148e91 100644 --- a/www/components/Nav/Annoucement.tsx +++ b/www/components/Nav/Annoucement.tsx @@ -17,12 +17,12 @@ const a: A = data const Annoucement = () => { if (!a.show) return null return ( -+ I think it’s a great service, simple and scalable. I like that the dashboard makes it easy to + check and search for images. +
++ シンプルで拡張性のある素晴らしいサービスだと思います。ダッシュボードで画像が確認しやすく、検索できるのもいいですね。 +
+
- $75
+ $25
@@ -293,7 +293,7 @@ export default function IndexPage() {
- $75
+ $25
+ Clarified pricing on the "Optimzed database instances" to include the starting price + of $50/month. +
+