Good to hear you're still interested.
Avoiding work that becomes a default feature:
I can't promise something will never become core. What I can do is stop you building something that's already planned. Before you start an extension, send me a short description of it and I'll tell you honestly whether it's on our roadmap. If it is, I'll say so up front so you don't spend a weekend on it.
Extensions also have the best chance of lasting when they're specific: a particular community's needs, an integration with an outside service (Discord, game servers, Twitch), or a distinctive look or widget. Broad features most forums would want, like a new post type or a moderation tool, are the ones likely to end up built in.
It's also worth mentioning that, with no promises, we're considering opening ForumSpark up to self-hosting with an extension marketplace. There's a lot of groundwork to do first, which we’ve been doing the last few weeks: the ForumSpark framework itself, how extensions install and uninstall, and making sure third-party extensions run isolated so one can't affect the rest of the board or the platform. If it happens, it could widen what extensions are able to do, so building on ForumSpark now wouldn't be wasted effort.
Client-side vs. server-side storage:
You can do both, but it works differently from Jcink.
Client-side: Your scripts run in the page, so localStorage and sessionStorage work normally. That's fine for per-browser things like preferences or dismissed notices. It isn't shared between users or devices.
Server-side (shared data): We have an App Data API. When a board installs your app, it gets a token that can only read and write your app's own keys on that board. Your service writes values with PUT /api/v1/app-data/{key}, and your templates or widgets display them with {{ app_data.your_slug.key }}. The limits are 50 keys per app per board and 64KB per value.
The main difference from Jcink: the token belongs on your server, not in browser JavaScript. You can't have every visitor's browser write data through AJAX. Shared data comes from a service you run, and the board displays it. Our script scanner also flags fetch() and XMLHttpRequest, so if your script calls out, you'll need to explain why when you submit it for review.
If you have a specific Jcink code in mind, tell me what it stores and I'll tell you the best way to do it here.
JavaScript frameworks:
The forum runs on Livewire and Alpine.js. Alpine is already loaded on every page, so your scripts can use it (for example x-data and $store) without bundling your own copy. Your extension code is plain JavaScript, and we provide a global window.ForumSpark SDK that gives you:
page context: the board, forum, topic and current user
an event bus (ForumSpark.on, emit, off), with Livewire events bridged into it
registerMiniProfileWidget() for adding blocks to user profile cards
dark mode helpers
The posting editor is built on TipTap, and real-time features (shoutbox, chat, notifications) use Laravel Echo. You won't need either for most extensions.
The developer docs cover all of this: Getting Started, JavaScript SDK, Script Injection and App Data.