Core · Library · Experimental

Built-in File Support

Files that belong to your app, not a bolted-on service. Secure, simple, and ready on day one.

Every real app ends up needing files. Avatars. Documents. Uploads of one kind or another. And every stack solves it the same tired way: a second service to wire up, a third place to hold permissions, and a fourth where bugs like to live.

sp00ky treats files like any other part of your app. You say what kind of files you want, who can touch them, and how big they can be. sp00ky takes care of the rest.

Ready the moment you need it

There is nothing to bolt on. No extra service. No sidecar. No separate dashboard to keep tidy. Files live next to your data and behave the same way. If you can ship your app, you can ship files.

Safe by default

Permissions are enforced where it counts, right inside your database. Nobody can sneak past them by calling a different URL, patching the client, or guessing a path. The rules you write are the rules that run.

Flip on private per-user folders and every user gets their own space automatically. Your code writes avatar.jpg. The right user owns it. Nobody else can see it.

Instant feedback, every time

Wrong file type? Too big? Your users find out the moment they pick the file, not after an awkward round-trip to the server. Less frustration, fewer support tickets, happier uploads.

Sensible defaults, fast starts

Most apps want the same handful of buckets: avatars, images, documents, audio, video. sp00ky ships all of them as one-click presets with reasonable limits. Pick one and keep moving. Tune it later when you actually need to.

Preset Good for Max size
AvatarsProfile pictures and headshots2 MB
ImagesGalleries, thumbnails, hero shots10 MB
DocumentsPDFs, spreadsheets, contracts25 MB
AudioVoice notes, podcasts, recordings50 MB
VideoShort clips and screen recordings100 MB
CustomWhatever your app actually needsYour call

Where we are today

Built-in file support is live and labelled experimental. You can build with it today. You should not put it on a hot path just yet.

Storage currently lives in memory, so files do not survive a server restart. Real backends, starting with S3 and filesystem, are next on the roadmap. Large-file niceties like chunked and resumable uploads are planned. The way you use the feature is designed to stay the same, so anything you write today should keep working as the rest lands.

Ready to build something amazing?

Full docs, install guide, and API reference — all in one place.

Read the docs