One thing I’ve been thinking about in this area is you could make the “plugin system” completely compiled. Users would have some toml or .rs file they would change and point the rust compiler at a directory and come out with a new binary. You could still add in a “Lua plugin” plugin which enables lua-based plugins without forcing all users to pull down the gear required to use that in rust. It would also make it possible for people to create various “distributions” of the editor with varying complexity and size depending on user needs
I'd say something like LUA or python so people could easily write their own plug-ins. If speed really is a concern then I'd go with wasm.
I’ve been thinking about exactly this for a long time. My only thoughts are you should check out helix to see what you can learn from them if you haven’t already, and you should post or dm me the repo so I can see if there’s anything I can help with!
One way to implement Rust-based "plugins" is to turn the whole application/plugins relation on its head: Publish the main application as a crate, which lets the user build their own executable that uses the main application as a library. That way they can customize the app however they like, if the main app just has hooks for it.
Just in case you weren't aware, there is an emacs-inspired editor in rust: https://github.com/zee-editor/zee
Not sure how active development is anymore. Maybe it could be useful to you for ideas/inspiration.
I think helix has been talking a lot about this issue too. Their solution, as far as I understand it, is to use a LISP language for scripting and extensibility and a wasm plugin system for performance critical plugins. Not sure how far it is into implementation, but something to look out for.
It's not exactly what you are looking for, but you could check emacs-ng. It tries to replace some of emacs' internals with rust and expand the possible scripting lenguajes that can be used with it.
Rust Lang
Rules [Developing]
Observe our code of conduct
- Strive to treat others with respect, patience, kindness, and empathy.
- We observe the Rust Project Code of Conduct.
- Submissions must be on-topic
- Posts must reference Rust or relate to things using Rust. For content that does not, use a text post to explain its relevance.
- Post titles should include useful context.
- For Rust questions, use the stickied Q&A thread. [TBD]
- Arts-and-crafts posts are permitted on weekends.
- No meta posts; message the mods instead.
Constructive criticism only
- Criticism is encouraged, though it must be constructive, useful and actionable.
- If criticizing a project on GitHub, you may not link directly to the project’s issue tracker. Please create a read-only mirror and link that instead.
- Keep things in perspective
- A programming language is rarely worth getting worked up over.
- No zealotry or fanaticism.
- Be charitable in intent. Err on the side of giving others the benefit of the doubt.
No endless relitigation
- Avoid re-treading topics that have been long-settled or utterly exhausted.
- Avoid bikeshedding.
- This is not an official Rust forum, and cannot fulfill feature requests. Use the official venues for that.
No low-effort content
- Showing off your new projects is fine
No memes or image macros
- Please find other communities to post memes
No NSFW Content
- There are many other NSFW communities, let’s keep this related to the language