11 ms·
Supabase Edge Runtime: Self-Hosted Deno Functions
- kiwicopple 3y agohey hn, supabase ceo here This is a webserver for Deno. It is MIT licensed, written in Rust, and based on the latest Deno Runtime (1.32+). It can serve TypeScript, JavaScript, and WASM functions. This one is important for local development and self-hosting. For local development, it ensures there is parity between development and production. For self-hosting, it means you can deploy and manage your Deno Functions on your own hardware. We have provided a Demo repository for deploying to Fly.io [1]. The runtime is not production-ready, but it is in a usable state. Note that we still use Deno Deploy at Supabase, and strongly recommend it for your own Deno functions. In the medium-term, this will reduce our tech-stack by 1 service. We'll remove Kong (a reverse proxy) and replace it with the Deno runtime. I'm excited about some other possibilities that this provides for self-hosting - one that we talked about was the ability to bundle a SQLite file with your functions, for a fully-contained and globally deployed webserver. The team will be around if you have any questions [1] Deploy on Fly: https://github.com/supabase/self-hosted-edge-functions-demo https://github.com/supabase/self-hosted-edge-functions-demo
- CoolCold 3y agoHey! I wonder, why CEO, not even CTO or other Principal Engineer come here in person. Is it cuz company doing so great that CEO has so much free time to spend it on activity of that sort or HN is consider so serious resource to spend time on it even for C level person..
- kiwicopple 3y ago1. HN has been invaluable to us, guiding what we build and highlighting the areas we need to improve. 2. We encourage all of our developers to participate in the discussions, I just am usually just faster to respond. 3. Personally: I love HN and the community. I read it every day and learn a lot from it. I'm a developer like most other readers
- trevor-e 3y agoIs Supabase targeted towards webdev "apps" or mobile "apps"? As a mobile dev I got excited to check out a Firebase + serverless alternative, but the docs seem very targeted towards webdevs and non-native apps. I see there's a 1.0 Swift library that's available, would love if someone can chime in with their experience using that in an iOS app.
- MrOwnPut 3y agoThey seem to have Flutter support but the lack of React Native support is non starter for me.
- kiwicopple 3y agoActually React Native is supported with the JS libs. While we don't have React Native docs, here is one for Expo which should be easy enough to convert: https://supabase.com/docs/guides/getting-started/tutorials/with-expo https://supabase.com/docs/guides/getting-started/tutorials/w... We also support swift: https://supabase.com/docs/reference/swift/introduction https://supabase.com/docs/reference/swift/introduction One more thing - we will have some more announcements for mobile (specifically auth) tomorrow.
- MrOwnPut 3y agoI see, awesome. Thanks for the clarification!
- paradaux 3y agoI'm working on several RN + Supabase projects and it just works ! There were a few kinks initially, like URL polyfil being missing from RN and the need for AsyncStorage alongside supabase.js but they've all been rectified by the team or made more clear using their Expo instructions in the docs — Although maybe it'd be clearer for people that the expo guide is for RN? People who haven't started using RN might not know the connection? It's such a pleasant stack, we're experimenting currently with edge functions in place of an API in certain places, so far it's just to use Cloudflare Turnstile to insert contact form records into a database, but it's super trivial. Excited for the future of edge functions!
- tychi 3y agoGreat work! I've been dabbling with deno for a couple years now, one of the most powerful features I'm excited about is BroadcastChannel[1] support, which works with --unstable in Deno Deploy. One of the challenges I've run into is debugging timeouts in deno deploy, so I'm curious-- 1. is BroadcastChannel supported in supabase self-hosted edge functions? 2. is there more tooling available to supabase edge functions to debug than currently in deno deploy? [1]: https://deno.com/deploy/docs/runtime-broadcast-channel https://deno.com/deploy/docs/runtime-broadcast-channel --- if curious of specifics, this is my work in progress proof of concept, exploring using pathnames for channels, to get anyone on the same url path connected across regions through sockets and broadcast channel: https://github.com/tylerchilds/kickstart/blob/869506c9dae1e1bd6b802b868fb55c33d9dd2be5/src-edge/mod.js https://github.com/tylerchilds/kickstart/blob/869506c9dae1e1...
- laktek 3y ago[Supabase engineer & author of the blog post here.] Thanks! Good Questions 1. We haven't enabled BroadcastChannel in the Edge Runtime. Mainly because we haven't found good use cases for it within Edge Functions (it does make sense as a way to subscribe within a browser client, but not sure how it fits with async/short-lived nature of Edge Functions). Curious about how you plan to use BroadcastChannel in Edge Functions? 2. As I've mentioned in the blog post Edge Runtime allows you to tweak the duration and memory available for an Edge Function (check the examples/main/index.ts in the repo too). Personally, I use this option to debug timeouts and memory issues on Edge Functions. We also plan to introduce better ways to profile your Edge Functions in the future.
- tychi 3y agoThanks Lakshan! I don't think my use-case is necessarily a good fit for edge functions. I am trying to achieve what Supabase realtime/multiplayer accomplishes, but generically. I participate informally with the https://braid.org https://braid.org IETF working group, which to over-simplify is CRDTs over HTTP with subscriptions. I'm interested in web standards and that's what's drawn me to deno, so I'm super excited the more and more I see it being adopted. BroadcastChannel piques my interest because it is perfectly in that gray area of standardization-- it makes total sense on the client and we're on the cusp of discovering what that could look like for servers. In deno deploy, all the instances of my service are able to be linked together by BroadcastChannel, which I'm viewing as a p2p-style architecture. Ultimately, I'm curious about how this works under the hood and if it would be possible to interoperate a BroadcastChannel between Deno Deploy, Supabase, and say a Raspberry Pi in my house. I've gone on a bit of a tangent, but I think maybe I should get involved with the WinterCG, since now that I'm putting my thoughts to words-- seems like it fits their charter.
- wdb 3y agoAny details about the removing of Kong? What did you use it for and how will this help with removing it?
- inian 3y agoWe use Kong as our API Gateway, so it is responsible for authentication, rate limiting, routing, etc. By moving that to edge runtime, we simplify our stack since we already run a edge runtime container to run user functions. The other motivation for doing this is that it makes our API Gateway programmable with user defined functions. For example, you could implement custom transformations for storage or augment the Authorization header with custom claims before calling Postgrest.
- SOLAR_FIELDS 3y agoThis is really exciting Inian. I’ve long felt that api gateways are one of the heavier and more complex parts of the modern infra stack and the work you’re doing to make this more self hostable is laudable!
- ovao 3y agoCongrats on the launch! I’ve been so underwhelmed with Lambda’s lack of forward progress lately and have been wanting to play around a bit with V8 isolates. This looks like a super-easy way to get a runtime spun up and handling requests on AWS.
- helsontaveras18 3y agoOpen question: what are the benefits of replacing Lambda with this new service, if you’re not using any other Supabase functionalities? Our Lambdas are currently written in Typescript and built with esbuild. We zip them and push to AWS.
- easton 3y agoThese would boot faster since you don’t have to boot a whole OS, just a V8 VM. Downside is compatibility, your lambdas would have to be largely rewritten (especially if they rely on any other AWS services). It’s also probably more expensive since you’d have to keep a EC2 or something up running this. Kinda wish Amazon would have an alternative runtime that was more like this. They kinda do with lambda@edge, but that’s only for CloudFront stuff, mostly.
- ovao 3y agoLambda@Edge is a great solution for the locality problem (CloudFront can just route to the nearest edge function, and despite certain headaches, it works well), but what it doesn’t help to solve is the cold start problem. In a sense Lambda@Edge works against it, as provisioned concurrency is only supported for ‘regular’ Lambda functions. At a certain level of scale, the cost of spinning of an ALB Fargate task (which could run these servers relatively easily) ends up being relatively negligible. Although that’s certainly not true for every org.
- ovao 3y agoThe largest advantage currently (in my opinion) is with respect to cold starts. Lambda has gotten significantly better over the years, but cold starts are still a concern, largely because it’s difficult to anticipate the level of needed provisioned concurrency needed to mitigate it. Not having to think about that at all would be a large advantage (I’m ignoring Lambda SnapStart since it’s strictly limited to Java at this time). It’s also the case that there’s just so much historical baggage within Node, mainly with regard to CJS. Developing against Deno at least presents the opportunity for us to move past that and improve DX.
- samuba 3y agoInteresting! Do you have an idea of what it would mean performance/latency wise to replace kong with this?
- laktek 3y agoWe are yet to complete our Kong replacement. Once we do that, we'll probably publish another blog post with performance benchmarks.
- NiekvdMaas 3y agoOne of the biggest annoyances with Deno deploy/functions is that there is no way to store any data. This would be very useful to e.g. cache an auth token, store a key/value pair, etc. See also: https://github.com/denoland/deploy_feedback/issues/110 https://github.com/denoland/deploy_feedback/issues/110 Is any work being done to fix this? Or is this out of scope currently?
- laktek 3y agoYes, this is something we are exploring for Edge Runtime. One cool development is AsyncLocalStorage now works on Deno via a polyfill [0]. We may enable a single node store on Edge Runtime using this. Also, there are some interesting development in Supabase platform to enable Edge Databases, which could also be an answer to this. [0] https://github.com/denoland/deno/issues/7010#issuecomment-1418995646 https://github.com/denoland/deno/issues/7010#issuecomment-14...
- kiwicopple 3y agoThis is the third big release this week (along with a Postgres Pooler and a Logging Server). If you're wondering why there are so many, we generally "build for three months" then do all of our big product announcements in a "Launch Week". We're 2 days into this Launch Week so there will be a few more releases to come.
- drecoe 3y agoHIPAA support this week? :)
- kiwicopple 3y agoWe got SOC2 Type 2 last week, HIPAA is next. We won't do much of an announcement about SOC2, so you can consider this comment the "official announcement" :)
- louislang 3y agoHaving been through the pain of SOC2 Type 2, I'll consider this a big announcement as well!
- deleted 3y ago[deleted]
- robertlagrant 3y agoThese all look really interesting. How do you pick what to make next?
- kiwicopple 3y agoUsually the teams know what they need to build based on user feedback (which we get a lot of). We don't have Product Managers, the developers are expected to be very product-focused and user-facing. After every launch week we ask them what they want to build and then they get to work.
- inian 3y agoHi, Supabase engineer here. This is a webserver built on the Deno runtime. Deno makes it easy to build a custom JavaScript runtime [1]. I am excited about extending this runtime to integrate it better with the rest of the Supabase stack. For example, we can modify the Deno filesystem API to read and write files to Supabase Storage instead. [1] https://deno.com/blog/roll-your-own-javascript-runtime https://deno.com/blog/roll-your-own-javascript-runtime
- rubenfiszel 3y agoThank you for open-sourcing especially under MIT license. I am digging through the codebase and finding a lot of interesting things. I am building another open-source project that is also a self-hosted deno runtime written in Rust, Windmill [1], where we enable to build all of your internal tool and infra (endpoints, workflows, apps) based on scripts (deno, but also python, go, bash). Instead of running one http server continuously for your function, we run it on demand which has its own set of challenges. We are doing something pretty naive right now: we create a fork and call deno run [2]. It's decently efficient (25ms for a naive script e2e). We are familiar with deno_core and use it in other places to run javascript directly, but for typescript, deno didn't expose directly the root entrypoint as a lib so we had to fork it [3] and are now gonna be able to do the transpiling to js AOT and save the fork for sub 5ms script execution. We also want to make some functions togglable as high-performance endpoints and for those we would want them to be spawned as http servers to save the cold start. I'm gonna investigate thoroughly the codebase, and thank you very much for having shared it. [1]: https://github.com/windmill-labs/windmill https://github.com/windmill-labs/windmill [2]: https://github.com/windmill-labs/windmill/blob/main/backend/windmill-worker/src/worker.rs#L1828 https://github.com/windmill-labs/windmill/blob/main/backend/... [3]: https://crates.io/crates/deno_cli_lib_windmill https://crates.io/crates/deno_cli_lib_windmill
- kiwicopple 3y agoLet us know if you have any questions - our engineers are always happy to help other open source communities.
- 999900000999 3y agoDo you have feature parity with Firebase. The main thing I love is getting auth up and running. The Flutter integration is also top notch.
- spiderice 3y agoSupabase Auth is very similar to Firebase Auth. Both are easy to setup with just a couple lines of code. The advantage, imo, is that Supabase just stores your user data in a regular Postgres database so you can then set up relations with other tables. I haven't used Flutter, but it looks like Supabase has a flutter library and documentation on how to use it: https://supabase.com/docs/guides/getting-started/tutorials/with-flutter https://supabase.com/docs/guides/getting-started/tutorials/w... I used Firebase for a long time, and Supabase more recently. I have no desire to go back to Firebase. No longer having to obsess over read/write count (like you do with Firestore), and being able to leverage full SQL when needed, is a game changer.
- kangmingtay 3y agoHi, Supabase Auth Engineer here. We are very close to feature parity with Firebase Auth. Off the top of my head, the 2 features we're missing right now is anonymous authentication and multi-tenancy. We're also gonna be launching something auth-related this week too so stay tuned!
- 999900000999 3y agoWhat a great announcement, I'll definitely consider super base for the next time I need an easy to setup backend.
- samuelstros 3y agojust use a regular server for mid/larger sized apps. i started my web dev journey with JAMStack, Vercel, the "edge". everything is easy as long as one only deploys a full-stack NextJS app. the moment other apps come in, just use a server deployed as VPS and avoid "edge runtime hell". edge runtime hell refers to "you can't do this (function with over 2MB payload), you can't do that (because not supported by X)". EDIT: I implicitly meant with "deploy as VPS" -> deploy your server via Render/Heroku/CI-CD instead of serverless functions running on the "edge".
- r3trohack3r 3y agoI’ve been using Cloudflare workers for a while now and I have to disagree. There are entire classes of problems I no longer worry about with Workers and can just focus on building. My search history is a reflection of that. I’m no longer looking up “how do I put this thing in a Jails or container to limit exposure?” “how do I properly secure an SSH server?” “what is the magic incantation in my NGinx configuration to get an A+ SSL rating?” I also spend less time thinking about ongoing maintenance, automating rotation of SSL certs, keeping system packages up to date, doing a dist-upgrade every few years, maintaining Terraform files to rebootstrap a server from scratch, thinking about hot/cold redundancy, etc. With (some) serverless providers an absolutely massive slice of the responsibility of building a web application is pushed across the API and vendor boundary and is someone else’s responsibility. For me at least, this is huge. I have a handful of clients that don’t have any full time engineering staff, and being able to push the cost of ongoing maintenance down is the only thing that allows them to afford building a custom application.
- supriyo-biswas 3y agoI'm afraid you're trying to make system administration look much harder than it actually is. As an example, adding good defaults to your nginx config is automated by certbot, or you could use caddy. You could run your apps statelessly by containerizing your applications or by simply writing Ansible playbooks and then not have to worry about upgrades - you simply deploy the application on the new server and spin down the old one.
- Mortiffer 3y agodoes any one have good practical experience running Supabase locally? Its against their business model to have this run well so I'm a bit scared of the growing lock-in. (P.S. if Supabase is listening some customers like myself would be willing to pay a significant amount for support in a kubernetes/docker deployment running on our servers. We currently pay $50k - $100k simply for enterprise support contracts for each Cloudera, kafka, Kong, Flink... Not your target customer group so would be silly to add thoughts out laud )
- sonjaqql 3y agoYes! `supabase init` and `supabase start` gets most of the way there! Customizing the ports in `supabase/config.toml` makes having multiple supabase instances running easy. This works great for all the Postgres, auth, and storage things, as well as real-time functionality. My engineers have a single package.json script to get everything up and running. I work at an agency, and the dev teams run supabase locally. We use Prisma for migrations and maintaining our SQL functions and storage configurations. `supabase stop --backup` is our friend. Not being able to run multiple edge functions at a time kept us leaning into Cloud Run and Cloudflare. I'm excited about today's announcement.
- timnpalmer 3y agoHey there - Tim here from Supabase! We have some options to explore here so probably best to connect on a call to get a better understanding of your project and how we can best align to help! Can you send me an email on tim@supabase.io and we can tee up a time? Cheers, Tim
- SOLAR_FIELDS 3y agoI have run self hosted Supabase for awhile in Kubernetes. One of the main gotchas I will warn against is becoming too attached to the CLI, as it’s currently quite tied to assumptions that you’re using hosted Supabase. Also be prepared to do your own infra work if you want something scalable and production ready. The HA guarantees are kind of “bring your own” eg not really there out of the box and IMO the default docker compose setup provided, while thorough and working, serves as more of a proof of concept of the system than something you should actually be running in production.
- MuffinFlavored 3y agoIs this bad for Cloudflare? aka this is competition to their "Workers" product?
- kiwicopple 3y agoThis can definitely be used as an alternative to Workers if you prefer self-hosting. You can also use Deno Deploy (https://deno.com/deploy https://deno.com/deploy), if you want a Workers alternative but don't want to self-host
- MuffinFlavored 3y agoAny thoughts on implementing really "enterprise" languages like Java or C# so you could attract "the big boys" (corporations)? I know the corporations I work at are very anti-node.js and very pro-C# and everything needs to be approved by a tech committee. I don't think we could get Supabase approved (and instead we fork millions a month to Azure instead). Just a bit of feedback. I'm not a fan of C# or Java at all these days given how good Rust, node.js/Typescript/Deno have become. I just now work for 40,000+ person companies where I know this would be a non-starter unless you were super lucky to get all approvals aligned and be on one of the "cool" team. Maybe not the pivot/user feedback that aligns with your goals. :D
- kiwicopple 3y agoWe won't add support for other languages in our Edge Functions (beyond WASM support), but we are adding native support for other languages in our client libraries. For example, we already have C# support: https://supabase.com/docs/reference/csharp/introduction https://supabase.com/docs/reference/csharp/introduction The idea is that you'd just use the client libraries in your favourite framework.
- inian 3y agoWe are planning to focus on the Deno and WASM ecosystem. If C# complies to WASM, we would be able to run it, but have a lot of work to do to make this seamless.
- bryanrasmussen 3y agoIs there something about Deno that makes Edge functions good to be based on it - Netlify also has its Edge functions in Deno https://docs.netlify.com/edge-functions/overview/ https://docs.netlify.com/edge-functions/overview/ maybe just coincidence, but seen two edge functions in Deno implementations in the last hour so makes me wonder.
- inian 3y agoOne reason is that Deno can run on v8 isolates which start up really quickly. This makes the deploys near instantaneous and helps with cold start time too. The DX with Deno is pretty neat since it comes in bundled with a test runner, doc generator, linter, bundler, etc.
- joshxyz 3y agoHonestly Deno is a pain in the ass to work with which is what put us off from continuing to use Supabase. The developer tooling is just not mature yet, and buggy in lots of ways. Edge technologies are nice until they get into your way of work.
- inian 3y agoCan you share some examples where the tooling fell short?
- joshxyz 3y agohttps://github.com/orgs/supabase/discussions/8779 https://github.com/orgs/supabase/discussions/8779 That one lol. Are there any solid reasons to not support other runtimes? Appwrite for example supports Nodejs.
- lytedev 3y agoThis looks like you're complaining that your development environment is not configured to work with Deno and is instead configured to process typescript files for a completely different runtime? Deno's tooling is top notch. The fact that most developers' systems are all setup for Node or some Node-based compilation step is hardly the fault of Deno. Editors in general are still figuring how to have and manage configuration that is flexible enough for different language servers, linters, formatters, test runner, debuggers, etc. It's not really fair to either Deno or even your editor, though your editor is clearly more "at fault" in this scenario.
- guykdm 3y agoRequest pre-processing using JavaScript is amazing! Will I be able to deploy an Astro app on supabase edge functions? I'm building a multi-tenant B2B2C product on supabase that's deployed on a customer's sub-domain, so writing reverse proxy logic in js would be a boon.
- inian 3y agoWe currently block HTML responses on Functions and Storage, but we are considering relaxing that limitation, so that you can host static sites on our Storage. And allowing user-defined functions running on every request to Storage in the edge runtime would get you the reverse proxy logic you are looking for.
- guykdm 3y agojust wondering, what are the main places where deploying on supabase is better than deno-deploy? what's the main integration story with the rest of supabase?
- qbasic_forever 3y agoHow is the real world WASM story for typical server side languages like python, ruby, etc. these days? Last I looked at it WASM seemed to have a lot of warts and complications (and limited real world language support) vs. just spinning up a native process in a container. Can you go from for example python flask API source file to serving requests in WASM with minimal fuss or loss of functionality vs. native CPython?
- robbywashere_ 3y agoWhat does deno give you over node? I am assuming by first impression there are some standard libraries in these functions which aren't available otherwise in node?
- laktek 3y ago[Supabase Engineer & Author of the blog post] What stands out for me about Deno over Node is its overall architecture. 1. It has a built-in permissions model [0] which gives end-user the control over what resources a script can access within a system. 2. As mentioned in the blog post, Deno runtime is extremely modular you can customize it per use case. This helps with security, performance and overall developer experience. 3. Deno has first-class support for Web Platform APIs, which reduces the need for reliance on third-party modules for simple tasks. A good example here is the native fetch module shipped with Deno. Unlike in Node, you don't end up with multiple modules implementing fetch. 4. Built-in tooling - Deno CLI has built-in tooling for formatting, linting, doc generation, benchmarking, etc. This is great for developer ergonomics, especially for people from Go and Rust backgrounds. [0] https://deno.land/manual@v1.32.2/basics/permissions https://deno.land/manual@v1.32.2/basics/permissions
- benatkin 3y agoHow about WASM functions? One of Deno's selling points is sandboxing but WASM takes it to a new level it seems. I've been looking into Spin and also Dapr with WasmEdge. There is even QuickJS which does JavaScript.
- nilslice 3y agoWould love to know what you're interested in doing.. we make Extism[0] which allows you to more or less ignore the lack of a "standard library" for something like V8 wasm environments.. Spin definitely makes it easier to compile high-level source code & have done great work on their SDKs to provide these "standard lib" elements. maybe Extism is useful, but if not please feel free to drop in our Discord[1] and chat w/ the team. [0]: https://github.com/extism/extism https://github.com/extism/extism [1]: https://discord.gg/cx3usBCWnc https://discord.gg/cx3usBCWnc
- laktek 3y ago[Supabase engineer & author of the blog post] You can already use WASM modules within Edge Functions. We have an example on using WASM modules to generate OpenGraph images - https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/opengraph https://github.com/supabase/supabase/tree/master/examples/ed... We are also exploring ways to create functions in WASM-supported languages and run them directly on Edge Runtime. We expect this would be easier WasmGC[0] is shipped and Deno's WASI support improves. [0] https://chromestatus.com/feature/6062715726462976 https://chromestatus.com/feature/6062715726462976
- deleted 3y ago[deleted]
- jonasb 3y agoVery interesting! If I need to do more than one query to the database in series, my intuition is that it would be faster to make those calls in the same region as the database, rather than at the edge. It seems to be true using Vercel's playground[1] (towards Supabase). Any guidance for Supabase based apps? Is it possible to run my functions close to the database? [1] https://edge-data-latency.vercel.app/ https://edge-data-latency.vercel.app/
- kiwicopple 3y agofor when it really matters, then you should just use a Postgres Function. That will be an order of magnitude faster than anything you do to match the region. Supabase has auto-generated APIs (using PostgREST), so you can execute a Postgres Functions like this: const { data, error } = await supabase.rpc('echo', { hello: 'world' })
- MarkBennett 3y agoI’ve been using Deno Deploy as as a paying customer for the last year, both because I want to support what they’re doing and because I appreciate the amazingly tight deployment times. That said, it’s suffered for the lack of access to the file system or dynamic imports which makes things like MDX challenging without adding additional build steps. Do Supabase Edge Functions allow read/write file system access? What about dynamic imports?
- laktek 3y ago[Supabase engineer & Author of the blog post] Hi Mark, hosted Supabase Edge Functions would still run on Deno Deploy, so those limitations would still exist. However, we plan to introduce file system access via integration with Supabase Storage. This is still a rough idea stage, maybe we'll have a solid answer in a couple of months :) For dynamic imports, we haven't looked into it since Supabase users haven't requested it. If you can open an issue on Edge Runtime repo [0] and explain how you intend to use them, we can probably work on a solution. [0] https://github.com/supabase/edge-runtime/issues https://github.com/supabase/edge-runtime/issues
- claytongulick 3y agoI like the direction with working towards eliminating korg here! One of the reasons I chose Directus over Supabase (they can also be used together, it's not either/or) is that I'm one of the rare engineers out there that doesn't like containers. Well, to be more specific: I don't like containers for languages that don't need them. For example, a node monorepo doesn't really need a container, it's just a npm install away from working pretty much anywhere. Or a go static binary. Containers are great for languages/stacks that have more difficult dependencies. That being said, Supabase just had too many moving parts for me. I'm allergic to complexity. I want my stack to be as basic as possible, I want to innovate in the business problem domain space, not the tech stack space. I totally get the "don't reinvent the wheel" idea, but the complexity of a Supabase installation when you look under the hood at what's going on inside the container really turned me off. With Directus, it's just a npm dependency to your node app, nothing else. It'll automatically reflect over your database schema, and progressively enhance it with additional capabilities as you choose, automatic REST and GraphQL APIs with detailed and comprehensive configurable role based row-level security. An automatic and very capable Vue based admin app, and lots of other goodies. All the code is open source, well structured, easy to debug (it runs in-process, it's all just nodejs), and to fork/enhance as needed. Doing the same with Supabase would be difficult, to say the least. I like the direction Supabase is moving with this - consolidating back to more of a monorepo with less internal services and dependencies. I really like the Supabase Postgrest-js client too. One of the things that troubles me about directus is the home-grown DSL for queries. It's limiting and error prone, and impossible to do anything complex (you currently can't even query json fields, though that's coming soon I think). I think Supabase did a really good job with isomorphism with that library. Another thing I think Supabase did right is to just focus on Postgres. Directus is hamstrung by their knex backend and multi-db support, imho. I've been thinking that if I were to build something similar from scratch, I think I'd lean heavily on sequelize and build the whole shebang around that. It already has a very mature and capable DSL for queries that can be adapted to isomorphism with some symbol mapping and injection protection. It has the capability of enforced row-level security with scopes, and you don't have to deal with the issues around Postgrest or Directus' custom DSL. The only thing it doesn't have is automatic schema reflection - it's a model-first ORM. That's a solvable problem though. I've had an "itch" about this for a while. I may be "retiring" in a year or two, and I'm seriously considering taking all the lessons learned from both Supabase and Directus and trying to create a super-simple sequelize based monorepo option as my next thing.