Apologies if this comes across as critical. I’ve only recently started using Baserow, and I’ve been very impressed with it so far. It’s a great tool, and I’m very happy it exists.
However, I recently skimmed the documentation and sample plugins with the idea of making a custom plugin to add a formula function to my baserow install, and I’m left feeling like this process is far more complicated than it should be.
Say I want to create a new formula function like this:
tocaps("my string") >> "MY STRING"
I would expect that such a plugin could potentially be as simple as the following two files:
# plugin.ts
export default {
name: "My Plugin",
functions: "./functions.ts"
}
# functions.ts
export function tocaps(input: string): string {
return input.toUpperCase();
}
(I only used TypeScript in my example since that’s the language I’m most comfortable in. I don’t actually care what language plugins are written in.)
However, from my limited understanding of how Baserow custom plugins are expected to be built, such a plugin would require many more directories, files, and configurations to achieve the same basic result.
Am I correct in saying this? I’m really hoping I’m wrong here.
Anyway, my strong preference for a Baserow plugin architecture would that it be as thin and unopinionated as possible. Provide some basic entrypoints for the plugin developer to hook into, and then let the developer decide how complicated or simple they want to make their plugin architecture based on the problem they’re trying to solve. I think taking this approach would both make it far easier for people new to Baserow to learn how to build plugins, and simultaneously make it much easier to build a wide variety of powerful plugins without wrestling with Baserow’s assumptions.
Again, I’m currently very impressed with Baserow, but ran into this today and wanted to share my thoughts in the hopes that I’m wrong about how simple a plugin can be, or that my perspective might have some influence on the future direction the team takes with plugin support.