Functionality | Go | Typescript | MVP |
---|---|---|---|
Schema in code | ✔️ | ✔️ | ✔️ |
privacy | ✔️ | ✔️ | ✔️ |
EntQuery | ✔️ | ✔️ | |
Mutations/actions | ✔️ | ✔️ | ✔️ |
per field privacy | ✔️ | ||
data loaders (n+1 issue) | ✔️ | ✔️ | |
support different caches | ✔️ | ||
per request in memory cache (raw data) | ✔️ | ✔️ | |
per request in memory cache (viewer|ents) | ✔️ | ||
auth | ✔️ | ✔️ | |
patterns | mixins | ✔️ | ✔️ | |
Correct imports in generated file | ✔️ | ✔️ | ✔️ |
custom functions/accessors in ents | ✔️ | ✔️ | ✔️ |
custom top level functions | ✔️ | ✔️ | ✔️ |
sharding | |||
file uploads | ✔️ | ✔️ | |
encryption at rest | |||
Fb style fbobject and everything that comes with that e.g. FriendFeed style indices etc and go from there |
|||
can viewer do | |||
load multiple ids easily | ✔️ | ✔️ | ✔️ |
concurrency | ✔️ | ✔️ | ✔️ |
load ents/ids from unique/indices | ✔️ | ✔️ | ✔️ |
Init/setup | ✔️ | ✔️ | |
CLI | ✔️ | ✔️ | ✔️ |
database migrations | ✔️ | ✔️ | ✔️ |
ent configuration (code ideal/yaml second) | ✔️ | ✔️ | |
load assoc config in memory once | ✔️ | ||
deleted_at and similar ways to change behavior | ✔️ | ||
dockerize everything to run in production/download easily | ✔️ | ✔️ | |
Different primary id types | ✔️ | ||
privacy at creation/edit/etc | ✔️ | ✔️ | |
sql builder/custom sql queries | ✔️ | ✔️ | ✔️ |
Colocation (part of sharding) | |||
Payments | |||
integration with microservices/different data sources | |||
different databases (other than postgres) | |||
GraphQL | ✔️ | ✔️ | ✔️ |
easy testing | ✔️ | ||
import from db | strong follow-on | ||
import from other schemas? | strong follow-on | ||
feature flags (+ built into permissions) |
Functionality | Go | Typescript | MVP |
---|---|---|---|
Fields | ✔️ | ✔️ | ✔️ |
Custom Table name | ✔️ | ✔️ | ✔️ |
Default Table name | ✔️ | ✔️ | |
Edges | ✔️ | ✔️ | ✔️ |
actions | ✔️ | ✔️ | ✔️ |
composite indices | ✔️ | ✔️ | |
composite unique fields | ✔️ | ✔️ | |
composite primary keys | ✔️ | ✔️ | |
patterns | ✔️ | ✔️ | |
hide from graphql | ✔️ | ✔️ |
Functionality | Go | Typescript | MVP |
---|---|---|---|
Server default (stored in db) | ✔️ | ✔️ | ✔️ |
override db name | ✔️ | ✔️ | ✔️ |
override graphql name | ✔️ | ✔️ | ✔️ |
unique field | ✔️ | ✔️ | ✔️ |
hide from graphql | ✔️ | ✔️ | ✔️ |
private | ✔️ | ✔️ | ✔️ |
index | ✔️ | ✔️ | ✔️ |
foreign key | ✔️ | ✔️ | ✔️ |
field edge | ✔️ | ✔️ | ✔️ |
primary key | ✔️ | ✔️ | |
disableUserEditable | ✔️ | ✔️ | |
default value on create | ✔️ | ✔️ | |
default value on edit | ✔️ | ✔️ |
Functionality | Go | Typescript | MVP |
---|---|---|---|
validate | ✔️ | ✔️ | ✔️ |
format | ✔️ | ✔️ | ✔️ |
allow blank? | |||
allow nil? |
Functionality | Go | Typescript | MVP |
---|---|---|---|
Uuid | ✔️ | ✔️ | ✔️ |
String | ✔️ | ✔️ | ✔️ |
int | ✔️ | ✔️ | ✔️ |
float | ✔️ | ✔️ | ✔️ |
bool | ✔️ | ✔️ | ✔️ |
time | ✔️ | ✔️ | ✔️ |
ints | ✔️ | ✔️ | ✔️ |
strings | ✔️ | ✔️ | ✔️ |
floats | ✔️ | ✔️ | ✔️ |
json (but not postgres type) | ✔️ | ✔️ | |
postgres json | |||
string enums | ✔️ | ✔️ | |
int enums | |||
custom type (part of json) | ✔️ | ✔️ | |
✔️ | ✔️ | ✔️ | |
password | ✔️ | ✔️ | ✔️ |
phone number | ✔️ | ✔️ | ✔️ |
Url | ✔️ | ✔️ |
Functionality | Go | Typescript | MVP |
---|---|---|---|
foreign keys | ✔️ | ✔️ | ✔️ |
assoc edges | ✔️ | ✔️ | ✔️ |
assoc group | ✔️ | ✔️ | ✔️ |
three way edge with id in data field | ✔️ | ||
Easy customizations for the popular edges in different frameworks etc: e.g. one-way, many-to-many that does the right thing |
✔️ | ||
polymorphic edges | ✔️ | ✔️ | |
"join tables" | ✔️ |
Functionality | Go | Typescript | MVP |
---|---|---|---|
unique | ✔️ | ✔️ | ✔️ |
symmetric | ✔️ | ✔️ | ✔️ |
Inverse | ✔️ | ✔️ | ✔️ |
Counts | ✔️ | ✔️ | |
polymorphic edges | ✔️ |
Functionality | Go | Typescript | MVP |
---|---|---|---|
status | ✔️ |
Functionality | Go | Typescript | MVP |
---|---|---|---|
base case (everything) | ✔️ | ✔️ | ✔️ |
persisted queries | ✔️ | ||
only gql errors returned to the user | ✔️ | ||
Subscriptions | |||
easy testing | ✔️ | ✔️ | |
entquery | ✔️ | ✔️ |
Functionality | Go | Typescript | MVP |
---|---|---|---|
ids | ✔️ | ✔️ | |
Edges | ✔️ | ✔️ | |
fetch one id | ✔️ | ||
Intersection | |||
per edge privacy | ✔️ | ||
union | |||
custom logic | |||
counts (raw | privacy backed) | ✔️ | ✔️ | |
ordering (sort by time/ name etc easily) | ✔️ | ||
filters e.g. pagination | ✔️ | ✔️ | |
named custom queries | ✔️ | ✔️ | |
toggle btw crazy joins and loading objects one by one |
Functionality | Go | Typescript | MVP |
---|---|---|---|
default | ✔️ | ||
Up | ✔️ | ||
down | ✔️ | ||
custom fields | ✔️ |
Functionality | Go | Typescript | MVP |
---|---|---|---|
custom actions (schema) | ✔️ | ✔️ | ✔️ |
Easy create/edit/delete generated/editable | ✔️ | ✔️ | ✔️ |
observers | ✔️ | ✔️ | ✔️ |
validators | ✔️ | ✔️ | ✔️ |
triggers | ✔️ | ✔️ | ✔️ |
permissions | ✔️ | ✔️ | ✔️ |
inverse edge (write field edge) | ✔️ | ✔️ | ✔️ |
nullable fields | ✔️ | ✔️ | ✔️ |
custom mutation fields | ✔️ | ✔️ | |
custom data/time for edges | ✔️ | ✔️ | ✔️ |
placeholders and resolvers | ✔️ | ✔️ | ✔️ |
integrate fields | ✔️ | ✔️ | ✔️ |
built in transactions | ✔️ | ✔️ | ✔️ |
default observers (send text | email | slack) | strong nice to have | ||
custom actions called from custom functions | ✔️ |
Functionality | Go | Typescript | MVP |
---|---|---|---|
Redis | ✔️ | ||
Memory | ✔️ | ||
memcache |
Functionality | Go | Typescript | MVP |
---|---|---|---|
passwordless | |||
email/password | ✔️ | ✔️ | ✔️ |
phone number/pin | ✔️ | ✔️ | |
auth0 | ✔️ | ✔️ | |
passport | ✔️ | ✔️ | |
github | |||
sessions | |||
stateless | |||
mfa | |||
2fa | |||
apple | |||
Face ID |
Functionality | Go | Typescript | MVP |
---|---|---|---|
Uuid | ✔️ | ✔️ | ✔️ |
int64 (auto increment) | ✔️ | ||
Int32 (auto increment) | |||
custom id (not auto increment) |