grid api

I found that people find `fileopt` to be pretty confusing - it's such a different operation, that it sort of warrants its own function