https://github.com/desolid/desolid
🤖 Desolid: Single file, self hosted, backend as a service
https://github.com/desolid/desolid
baas graphql headless headless-cms minimalistic
Last synced: 12 months ago
JSON representation
🤖 Desolid: Single file, self hosted, backend as a service
- Host: GitHub
- URL: https://github.com/desolid/desolid
- Owner: desolid
- License: mit
- Created: 2020-02-05T04:31:29.000Z (over 6 years ago)
- Default Branch: develop
- Last Pushed: 2023-02-12T05:18:33.000Z (over 3 years ago)
- Last Synced: 2025-07-08T15:03:59.091Z (12 months ago)
- Topics: baas, graphql, headless, headless-cms, minimalistic
- Language: TypeScript
- Homepage: https://desolid.netlify.app/
- Size: 5.67 MB
- Stars: 19
- Watchers: 2
- Forks: 2
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rainmana - desolid/desolid - 🤖 Desolid: Single file, self hosted, backend as a service (TypeScript)
README
# 🤖 Desolid: Single file BaaS
Open source, single file, self hosted, Backend as a service.
Documentation: [https://desolid.netlify.app/](https://desolid.netlify.app/)
Blog: [https://dev.to/desolid](https://dev.to/desolid)
## Features
- GraphQL API: CRUDs
- Authentication & Authorization: inline definition
- File storage: Local and S3 support
- Database agnostic: SQLite, MariaDB, PostgreSQL, MS SQL Server
## Quick start
Let's create an api for a blog service:
1. Install NodeJS
2. Create a desolid schema file: `schema.graphql`
```graphql
extend enum UserGroup {
Editor
Author
}
extend type User
@model
@authorization(
CREATE: [Admin, Editor]
READ: [Admin, "$user.id == {{id}}"]
UPDATE: [Admin, "$user.id == {{id}}"]
DELETE: [Admin] #
) {
avatar: File @upload(accept: ["image/jpeg"], size: { max: "5", min: "0.1" })
}
"""
This is a description of a Post
"""
type Post
@model
@authorization(
READ: [Admin, Editor, "{{published}} || $user.id == {{author.id}}"]
CREATE: [Admin, Editor, "$user.group == 'Author' && !$input.published"]
UPDATE: [Admin, Editor, "$user.id == {{author.id}} && !$input.published"]
DELETE: [Admin, Editor, "!{{published}} && $user.id == {{author.id}}"] #
) {
id: ID!
createdAt: DateTime!
updatedAt: DateTime!
author: User!
title: String!
content: String!
published: Boolean!
categories: [Category]
}
"""
This is a description of a Category
"""
type Category
@model
@authorization(
CREATE: [Admin, Editor]
UPDATE: [Admin, Editor]
DELETE: [Admin, Editor] #
) {
id: ID!
createdAt: DateTime!
updatedAt: DateTime!
name: String!
posts: [Post]
}
```
3. Run this command on your terminal
```bash
npx desolid
```
- Compiles the schema and creates CRUDs
- Creates and uses by default a SQLite database on the root `./database.sqlite`
- Stores files under `./upload` directory
- Logs errors and warnings on `./desolid.log` file
- Must output something like this:
```bash
____ _ _ _
| _ \ ___ ___ ___ | | (_) __| |
| | | | / _ \ / __| / _ \ | | | | / _` |
| |_| | | __/ \__ \ | (_) | | | | | | (_| |
|____/ \___| |___/ \___/ |_| |_| \__,_|
🤖 Desolid: Single file self hosted backend as a service
🔥 v0.2.11 running in "win32" on "./home/user/app"
[2020-05-20 10:38:57] INFO Compiling Schema ...
[2020-05-20 10:38:57] WARN Authentication Secret value didn't set into configuration file. the genrated JWT tokens will expire on every restart.
[2020-05-20 10:38:57] INFO Connecting to database ...
[2020-05-20 10:38:57] INFO Connected to "sqlite://./databse.sqlite"
[2020-05-20 10:38:57] INFO Starting server ...
[2020-05-20 10:38:57] INFO Server is running on http://localhost:3000
[2020-05-20 10:38:57] INFO 🚀 in 488ms
```
4. Open [http://localhost:3000/](http://localhost:3000/) on your browser.
## Acknowledgement
This project is based On these cool stuffs:
- TypeScript: [https://github.com/Microsoft/TypeScript](https://github.com/Microsoft/TypeScript)
- Sequlize: [https://github.com/sequelize/sequelize](https://github.com/sequelize/sequelize)
- Nexus Schema: [https://github.com/graphql-nexus/schema](https://github.com/graphql-nexus/schema)
- GraphQL Yoga: [https://github.com/prisma-labs/graphql-yoga](https://github.com/prisma-labs/graphql-yoga)
- FlyDrive: [https://github.com/Slynova-Org/flydrive](https://github.com/Slynova-Org/flydrive)