# Introduction

Viduli aims to be a complete framework for building & deploying (micro-)service
backends. It is currently in alpha and not feature complete.

Viduli's core feature is that it provides an instant CRUD api for any mongoDB
collection. You can run powerful mongoDB queries directly in the front end
through the api using the api client. For example, if you have a mongodb
collection of `people` that contains their `name`, `age`, and `gender`. You can
find all females between 20 and 40 in just a single statement, without writing
any backend code:

```ts
const peeps = await client.collection('people')
  .gt('age', 20)
  .lt('age', 40)
  .eq('gender', 'female')
  .find()
```

Yet, the flexibility of having a custom coded backend is not lost. You can still
run arbitrary code, perform validation, and control access in this backend. You
can read more about it in the documentation. (coming soon)

# Getting Started

You can create and use a fully featured CRUD backend in viduli in less than 5
minutes:

## On the backend

### Prerequisites



### Installation

```sh
npm install -g viduli
```

### Start a new project

```sh
viduli init project-name
cd project-name
viduli dev
```

### Create a collection of documents

```sh
viduli generate collection blogs
```

## On the frontend (or any other service consumer)

### Installation

```sh
npm install @viduli/client
```

### Create the client

```ts
import { ViduliClient } from '@viduli/client'

const client = new ViduliClient()
```

### Create a document

```ts
const doc = await client.collection('blogs').create({
  title: 'Hello World!',
  description: 'The world is my oyster.',
  author: 'Arthur C. Clarke'
})
```

## Roadmap

### Viduli TS Framework

- [ ] Document Storage - MongoDb
    - [x] CRUD endpoints
    - [x] Access Policies
    - [x] Domain Events
    - [ ] Realtime subscriptions
    - [ ] Lifecycle hooks
- [ ] Remote Procedure Calls - gRPC
- [ ] Custom Routes - WIP
- [ ] Authentication
    - [x] web3
    - [ ] password
    - [ ] magic link
- [ ] Admin UI
- [ ] TBD: Functions
- [ ] Object Storage
- [ ] Image Compression
- [ ] Table Storage - Prisma Postgresql
    - [ ] CRUD endpoints

### Viduli TS Client

- [ ] Document Queries - WIP
- [ ] Authentication

### Viduli Go Framework and SDK

- [ ] To be planned
