Omnibaas, a provider-agnostic Infrastructure-as-Code compiler for BaaS services

davidecampora1 pts1 comments

GitHub - davidecampora/Omnibaas: Provider-agnostic Infrastructure-as-Code compiler for Baas services · GitHub

/" data-turbo-transient="true" />

Skip to content

Search or jump to...

Search code, repositories, users, issues, pull requests...

-->

Search

Clear

Search syntax tips

Provide feedback

--><br>We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

-->

Name

Query

To see all available qualifiers, see our documentation.

Cancel

Create saved search

Sign in

/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up

Appearance settings

Resetting focus

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

davidecampora

Omnibaas

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>1 Commit<br>1 Commit

adapters

adapters

types

types

.gitignore

.gitignore

README.md

README.md

backend.yaml

backend.yaml

bun.lock

bun.lock

example.ts

example.ts

package.json

package.json

terraformer.ts

terraformer.ts

tsconfig.json

tsconfig.json

utils.ts

utils.ts

View all files

Repository files navigation

Omnibaas

⚠️ Current status: Early Proof of Concept. APIs and configuration format may change.

Omnibaas is a provider-agnostic Infrastructure-as-Code compiler for Baas services:

Describe once. Deploy anywhere.

backend.yaml<br>Omnibaas Terraformer<br>Provider adapter<br>┌───────────┴───────────┐<br>▼ ▼ ▼<br>Appwrite Supabase PostgreSQL

Nowadays Baas services are strongly growing in popularity, especially thanks to no-code and AI development tools that choose to use them, but there's a problem, once your application is built around a BaaS provider, migrating to another one becomes increasingly difficult, even if pricing, reliability, or available features change over time , despite most BaaS providers share the same core features.

If you share my vision and want to contribute to the development of the projecty, please leave a star :)

Omnibaas wants to let the developer (or the LLM) write a universal schema for his backend and deploy it on whatever platform he prefers, whenever he wants to. At the moment Omnibaas is structured as follows:

backend.yaml: this is the core of Omnibaas, it defines your backend structures

The terraformer: validates, compares, plans and deploys your backend infrastructure

Adapters: These are essentially connectors, written in a common format known by the terraformer

backend.yaml

This file defines the schema of your backend (basically like .prisma file for prisma ORM ;) ), it is intended to be written in a YAML format. At the moment you can define:

Auth methods that you want to enable on your baas provider

dbs (and if you want them to be enabled to user or not)

tables and fields with four types of data(string, number, boolean, datetime) and required attribute ("?" at the end of the field key)

I left a backend.yaml sample for you.

The terraformer

Create a new Instance of the Terraformer Class to start using Omnibaas, at the moment it expose 4 methods:

validate: pass it a new configuration to validate it through zod and be sure to avoid annoying errors later

introspect : translate your current provider configuration in Omnibaas format

plan: pass your current and future configurations to get a summary of what the terraformer will do and the implementation plan<br>summary example:

Following auth methods will be disabled: magic-url, email-otp, anonymous, invites, jwt Following dbs will be created: db1, db2 Models restaurant, hotel of db1 DB will be created Models photo, video of db2 DB will be created

apply : pass it your implementation plan and let the terraformer do the rest for you

You can find a clear example of terraformer usage in example.ts<br>Terraformer class is basically provider agnostic , the adapters act like bridges between it and backend providers. With this structure it would be possible to call the introspect method for a provider and re-apply its configuration on another (maybe cheaper or faster) in seconds.

Adapters

At the moment I've written only the adapter for appwrite baas (/adapters/appwrite.ts). Adapter class MUST expose methods described in adapter interface in /types/types.ts. You need to connect Omnibaas to your Baas ? Just go ahead and write your adapter.

Roadmap

✅ Appwrite adapter

🚧 Add support to more types

🚧 Firebase adapter

🚧 Supabase adapter

⬜ Add storage support

⬜ PostgreSQL adapter(long-term)

Omnibaas structure is born to be community driven, so do not hesitate in opening issues or pull...

omnibaas backend terraformer provider baas adapter

Related Articles