Unleashing Robo.js v0.9.0

Unleashing Robo.js v0.9.0

Faster, Leaner, and All-around Shinier!

You asked, we listened, and then we coded—like, a lot. We're beyond stoked to unleash the mighty Robo.js v0.9.0! 🚀

Major Features 🌟

Thread-Based Runtime: We're Off the Leash 🧵

Remember that cool experimental feature we rolled out a while back? The one you could enable with the spirits flag? Well, now it's not just a flag; it's the default setting!

The Robo.js runtime is now thread-based, and oh boy, does this make a difference—especially if you're on Windows. We're talking 300x faster builds when combined with incremental builds. In dev mode, it's like drinking an espresso shot; you just feel faster. 😎

💡 If you're an old soul and want to stick to forking child processes, don't fret. You can always toggle back to the legacyProcess API. Just remember, we might retire it in future builds.

New /config Folder & Plugin Config Files: Organize Like a Pro 🗂️

Some cloud editors didn't play well with our dot-prefixed config folders, so we listened. Welcome the new /config folder! 🎉

You get all the good stuff from before but in a more organized fashion. Plugin configurations can now have their own dedicated space. We're talking scoped and non-scoped, people!

Scoped vs Non-Scoped

Non-scoped Plugins: Got a plugin called my-awesome-plugin? Your config file would be /config/plugins/my-awesome-plugin.mjs.

Scoped Plugins: Something like @roboplay/plugin-gpt? Go with /config/plugins/roboplay/plugin-gpt.mjs.

Simply export an object from these files, and that gets passed straight into your plugin. Check this out:

{
	openaiKey: process.env.OPENAI_KEY,
	quoteMessage: true,
	systemMessage: "You are Baguette. Use <2k chars. Reply using Violet from Violet Evergarden's writing style. Make at least one pun in each reply."
}
💡 You can continue using the /.config folder just as before. Just know we may eventually drop support for it in a future build.

Zero NPM Dependencies: We're a Big Kid Now 🎉

Yeah, you heard right! We bid adieu to Commander. It's been great, but we've matured and can now parse CLI arguments all by ourselves.

Minor Features 🌱

API Server as a Plugin: Choose Your Weapons 📦

The built-in API server has left the core, becoming the @roboplay/plugin-api. Install it, and it's business as usual—only more modular.

TypeScript Declaration Files: Know What You're Getting Into 📜

When you robo build plugin, you now get TypeScript declaration files. This is huge for plugins that export modules. You're enforcing type safety, making the plugin ecosystem that much more robust. Plugin authors, this one's for you!

Exclude Paths: Curate Your Experience 🚫

Control freaks rejoice! You can now exclude certain paths from being compiled via excludePaths in your main config file.

export default {
  // ... the rest of your config
  excludePaths: [
    '/src/test',
    '/src/modules/example/statics.json'
  ]
}

Flashcore's set Function: Now With Updater Functions 🌠

Just like React’s useState, Flashcore.set() now accepts updater functions. Use it wisely:

Flashcore.set('example', (data) => data + 1);

Forking Logger Instances: Log Like You Mean It 🍴

Plugins getting sophisticated? Keep your logs tidy and focused with the .fork() function. The forked logger will retain its parent's settings but can get its own name prefix. This is excellent for complex plugins with multiple components.

const newLogger = logger.fork('MyAwesomePlugin');

Other Fixes and Improvements 🛠️

  • Quicker restarts after crashes
  • More reliable manifest updates
  • Logs that tell a story, not just a line

Want the nitty-gritty? Dive into our GitHub release notes or check out our updated documentation.