We're making it easier to build a secure and high-performing application.
A recap of the most important launches and updates from the week.
Supabase Storage is now officially an S3-Compatible Storage Provider.
Sign in as an anonymous user to authenticate with Supabase
Use embeddings and large language models on the edge with Supabase Edge Functions.
Supabase Branching is now available on Pro Plan and above.
The Oriole team are joining Supabase to build a faster storage engine for Postgres.
Supabase is now available on the AWS Marketplace, Simplifying Procurement for Enterprise Customers.
Launch a new hosted Supabase project directly from the CLI using pre-built applications.
15 Apr 2024 · 2 minute read
We are excited to announce that Supabase Swift libraries are now officially supported by Supabase.
This makes it simple to interact with Supabase from applications on Apple's platforms, including iOS, macOS, watchOS, tvOS, and visionOS:
let url = URL(string: "...")!
let anonKey = "public-anon-key"
let client = SupabaseClient(supabaseURL: url, supabaseKey: anonKey)
struct Country: Decodable {
let id: Int
let name: String
}
let countries: [Country] = try await supabase.from("countries")
.select()
.execute()
.value
This release includes the following new features:
Swift developers can now integrate Supabase services seamlessly with official support. This means:
We want to give a shout out to the community members who have contributed to the development of the Supabase Swift libraries:
grdsdev, satishbabariya, AngCosmin, thecoolwinter, maail, gentilijuanmanuel, mbarnach, mdloucks, mpross512, SaurabhJamadagni, theolampert, tyirenkyi, tmn, multimokia, zunda-pixel, iamlouislab, jxhug, james-william-r, jknlsn, glowcap, Colgates, ChristophePRAT, brianmichel, junjielu.
We've released a new guide to help you get started with the key features available in Supabase Swift.
Build an Open Source Project over 10 days. 5 prize categories.
11 Apr 2024 · 43 minute read
By Raminder Singh, Engineering
Controlling access to data in Postgres is paramount for data security. Postgres provides a robust and flexible permissions model for users to manage access to their data. The permissions model is based on the familiar object, privilege, role model but has subtleties which must be understood by a database administrator to create airtight access.
Database Object - Any entity created in the database. Tables, foreign tables, views, materialized views, types, domains, operators, functions, triggers etc. are database objects.
Privilege - Controls what operation is allowed to be run on a database object. For example, the select privilege on a table controls the ability to read data from the table.
Role - A user or a group. A user is someone who can login to the database. A group is a collection of users to make it easier to manage privileges for users. Unlike a user, a group can't login to the database.
Owner - Every database object has an owner. The owner has complete control over the object. They can modify or delete the object or grant privileges to other users and groups.
Create users with login capability:
create role junior_dev login password 'password';
create role senior_dev login password 'password';
Create groups (roles without login):
create role developers nologin;
Grant privileges on objects:
grant create on schema public to junior_dev;
grant select on table public.apps to senior_dev;
Grant privileges with the option to grant to others:
grant select on public.apps to postgres with grant option;
Revoke privileges:
revoke select on public.apps from senior_dev;
Add users to groups:
grant developers to junior_dev;
grant developers to senior_dev;
Users can impersonate groups they are members of:
set role developers;
reset role;
Revoke group membership:
revoke developers from senior_dev;
Control group membership abilities with options:
set - ability to impersonate the groupinherit - ability to inherit permissions from the groupadmin - ability to add/remove other users from the groupgrant developers to junior_dev with admin option;
Set default privileges for future objects:
alter default privileges in schema public grant select on tables to senior_dev;
View default privileges:
\ddp public
Common role attributes:
login - controls the role's ability to loginsuperuser - controls whether the role is a superusercreatedb - controls whether the role can create databasescreaterole - controls whether the role can create other rolesreplication - controls whether the role can initiate replicationbypassrls - controls whether the role can bypass row level securityconnection limit - limits maximum number of connectionsinherit - controls whether the role can inherit permissions from other rolesSuperuser - A role with the superuser attribute set. Very powerful and bypasses all privilege checks except authentication. Should be used with care. Only superusers can create other superuser roles.
Public - A group role which every other role is automatically a part of. Used to provide common privileges. Can't be deleted, but its privileges can be revoked. Provides default privileges:
connect - ability to connect to the databasetemporary - ability to create temporary tablesexecute - ability to execute functionsusage - ability to use objects like domains, languages or typesA role's privileges are the union of:
public role (implicit membership)public role is a role which every other role is implicitly a member ofsuperuser roles bypass all privilege checks and should be used with caregrant command only grants privileges on existing objects01 Apr 2024 · 3 minute read
We live in a world where data is as critical as air and water, powering everything from global enterprises to personal projects. At Supabase, we create products that are not just cutting-edge but also secure, reliable, and now, timeless.
Today, we are excited to introduce a groundbreaking service that bridges the digital divide with the most enduring medium known to humankind: paper. Meet pg_paper_dump, Supabase's answer to the ultimate data preservation conundrum.
In the digital era, the threat landscape is constantly evolving, with new vulnerabilities emerging at a pace that's hard to keep up with. While digital backups are the norm, they are susceptible to cyber-attacks, hardware failures, and obsolescence.
This vulnerability led us to think outside the digital box and into a realm that is impervious to hacking, immune to electromagnetic pulses, and resistant to time itself: physical paper.
Historical data backup on Papyrus that inspired pg_paper_dump.
pg_paper_dump work?pg_paper_dump.Our Analog Engineering team has developed a container orchestration protocol to coordinate the backup and restore process of large databases.
Sign up for our open beta to get access to pg_paper_dump now or try it out our self-hosted solution.
As all of our products, we have open-sourced the code and made it available to the public to be used without any restrictions here.
We are offering a bridge between these worlds, providing a backup solution that stands the test of time. Join us in redefining data security and making history, one sheet at a time.
Implementing semantic image search with Amazon Titan and Supabase Vector in Python.
Summarize your data by performing calculations across groups of rows in PostgREST
Build a movie-viewing app that recommends another movie based on what the user is viewing using OpenAI, Flutter and Supabase.
Learn about our story to get to the automated performance testing.
Use Adaptive Retrieval to improve query performance with OpenAI's new embedding models
NoSQL Postgres: Add MongoDB compatibility to your Supabase projects with FerretDB
pgvector 0.6.0 brings a significant improvement: parallel index builds for HNSW. Building an HNSW index is now up to 30x faster for unlogged tables.