Filesystem Tables And Uploads
Expose local, S3-compatible, and GCS object storage as GraphQL tables.
Filesystem tables
sources:
- name: documents
kind: file
backend: s3
bucket: app-documents
prefix: tenants/${account_id}
presign_ttl: 15m
capabilities:
files.list: true
files.read: true
files.write: falseEvery filesystem table exposes stable columns such as key, size, content_type, etag, modified_at, url, and data.
query {
documents(prefix: "reports/", first: 20, order_by: { key: asc }) {
key
size
content_type
url
}
documents_cursor
}TestIntrospectionIncludesFilesystemRemoteCursorField
core/intro_test.go:328TestBridge_LocalWritesInvalidateFilesystemCacheRefs
core/fstable_bridge_test.go:473Uploads
Uploads accept multipart requests on /api/v1/graphql. Files can either be inlined as base64 variables or streamed into a configured filesystem table.
mutation ($file: Upload!) {
documents(insert: { file: $file }) {
key
size
url
}
}When uploads.storage names a filesystem table, the upload handler streams the file into the backend and replaces the variable with object metadata instead of base64 file data.
TestGenerateUploadKey_DateMarker
serv/upload_storage_test.go:122TestMIMEAllowed_GlobAndExact
serv/upload_test.go:173Policy
Filesystems participate in source capabilities and read-only policy. Use read-only defaults for discovery surfaces and enable writes deliberately.
Read-only filesystems block managed writes and watchers. S3/GCS presigned URLs are cache-bounded so GraphJin does not serve stale URLs past their TTL.
TestBridge_ReadOnlyFilesystemBlocksManagedWrites
core/fstable_bridge_test.go:522TestFilesystemFragmentCacheOptions
core/cache_response_test.go:141