Only Open Source and Free Software technologies are used in this project.
- Advantages of modern JavaScript features
- Static type checking
- Most used language for web development
- Good performance Benchmarks
- Secure by default
- Built-in TypeScript support
- Format / linting and testing tools
- Built with web standards
Comparison with Node.js and Bun:
| Deno | Node.js | Bun |
|---|---|---|
| Secure by default | Insecure by default | Secure by default |
| Built-in TypeScript support | Requires TypeScript compiler | Requires TypeScript compiler |
| Built-in formatting | Requires external tools | Requires external tools |
| Built-in linting | Requires external tools | Requires external tools |
| Built-in testing | Requires external tools | Requires external tools |
| Built with web standards | Not built with web standards | Not built with web standards |
- Fast and lightweight web framework Benchmarks
- Easy to use
- Middleware support
- Build with web standards
Comparison with FastAPI and NestJS:
| Hono | FastAPI | NestJS |
|---|---|---|
| TypeScript (any Runtime) | Python | TypeScript (Node.js Runtime) |
| Fast and lightweight | Fast and lightweight | Fast and lightweight |
| Easy to use | Easy to use | Not easy but not hard to use |
| Advanced Middleware | Limited Middleware | Advanced Middleware |
| Own library | Own library | Express or Fastify |
| Built with web standards | Not built with web standards | Not built with web standards |
- Fast and lightweight ORM Benchmarks
- Easy to use
- Built for SQL databases
Comparison with Prisma:
| Drizzle | Prisma |
|---|---|
| Best performance | Good performance |
| Easy to use | Easy to use |
| Built for SQL | Built for SQL and NoSQL |
- Powerful and open-source relational database
- Supports JSON and JSONB data types
Comparison with MySQL, SQLite, and MongoDB:
| PostgreSQL | MySQL | SQLite | MongoDB |
|---|---|---|---|
| Powerful | Popular | Lightweight | Flexible |
| SQL | SQL | SQL | NoSQL |
| Relational | Relational | Relational | Document |
- Containerization
- Easy to deploy
- Works on any platform
cp .env.dev.example .env.devSet the environment variables in the .env.dev file.
docker compose -f compose.yml up -ddeno install --allow-scripts=npm:bcrypt@5.1.1deno -A --env-file=.env.dev npm:drizzle-kit pushdeno task devcp .env.prod.example .env.prodSet the environment variables in the .env.prod file.
docker compose -f compose.prod.yml up -dGo on running server and open the /doc or /reference route to see Routes
Documentation.
erDiagram
oauths {
serial id PK
integer user_id
integer service_id
text service_user_id
text token
integer token_expires_at
text refresh_token
integer refresh_token_expires_at
}
playgrounds {
serial id PK
text name
integer user_id
}
reactionLinks {
serial id PK
integer trigger_id
integer reaction_id
}
actions {
serial id PK
integer service_id
text name
text description
jsonb settings
jsonb params
}
reactionsPlayground {
serial id PK
integer playground_id
integer reaction_id
jsonb settings
integer x
integer y
}
oidcs {
serial id PK
integer user_id
integer service_id
text service_user_id
text token
integer token_expires_at
text refresh_token
integer refresh_token_expires_at
}
users {
serial id PK
text email
text username
text password
}
services {
serial id PK
text name
text description
}
actionsPlayground {
serial id PK
integer playground_id
integer action_id
jsonb settings
jsonb params
integer x
integer y
}
actionLinks {
serial id PK
integer trigger_id
integer reaction_id
}
crons {
serial id PK
integer action_playground_id
text cron
}
reactions {
serial id PK
integer service_id
text name
text description
jsonb settings
}
oauths ||--o{ users : "user_id"
oauths ||--o{ services : "service_id"
playgrounds ||--o{ users : "user_id"
reactionLinks ||--o{ reactionsPlayground : "trigger_id"
reactionLinks ||--o{ reactionsPlayground : "reaction_id"
actions ||--o{ services : "service_id"
reactionsPlayground ||--o{ playgrounds : "playground_id"
reactionsPlayground ||--o{ reactions : "reaction_id"
oidcs ||--o{ users : "user_id"
oidcs ||--o{ services : "service_id"
actionsPlayground ||--o{ playgrounds : "playground_id"
actionsPlayground ||--o{ actions : "action_id"
actionLinks ||--o{ actionsPlayground : "trigger_id"
actionLinks ||--o{ reactionsPlayground : "reaction_id"
crons ||--o{ actionsPlayground : "action_playground_id"
reactions ||--o{ services : "service_id"