At York IE, the engineering team is working on the Fuel Platform that provides our team with tools to research and analyze companies and markets and create original content that can be shared with clients or the general public. One of the features of this web platform is Smart Notebooks.
Smart Notebooks are, at their core, rich text editors with structured Fuel data and components layered on top. At a higher level they are a CMS for York IE Fuel users to gather and organize information, import data from Fuel, edit text, and publish content on the web privately or publicly. The structure of these components covers common use cases for market research, competitive intelligence, and startup growth.
When architecting Smart Notebooks, we wanted to leverage open-source libraries that would provide rich text functionality, as that would be key to creating original content in a user-friendly way. Ultimately, we went with Slate.
From the Slate documentation:
“Slate lets you build rich, intuitive editors like those in Medium, Dropbox Paper, or Google Docs—which are becoming table stakes for applications on the web—without your codebase getting mired in complexity.”
Slate is a completely customizable framework for building rich text editors. It gives developers a simple text editor at its base, with an expressive API for writing plugins that implement custom, domain-specific features. For the use-case of Smart Notebooks, Slate met all of our requirements:
- Rich text editing
- Custom components (void components)
- JSON data structure
- Collaboration-ready data model
- Active community
So far, we are very happy with our decision to use Slate as the core editor of Smart Notebooks. However, we have come across some caveats as we dive deeper into the library.
Overall, The Slate documentation is very helpful. However, it is lacking a bit of detail since the library was re-written with version 0.50. As noted in that Github issue, this version contains many major changes, particularly with how plugins are written. This resulted in a more shallow learning curve as we started with Slate.
Specifically for the re-written Slate version 0.50+, open-source plugins for Slate are sparse. There is a library, udecode/slate-plugins, that provides an abundance of functionality on top of core Slate. However, this dependency completely alters how plugins are written and behave, so we decided not to use it in our Smart Notebook implementation.
As we continue to develop our Smart Notebooks, we will be creating and open-sourcing some of our Plugins for the latest version of Slate. Our first plugin, York-IE-Labs/slate-lists, is available on Github and published to NPM. This plugin provides basic ordered and unordered list behavior. Feel free to leave feedback as a Github issue or Pull Request!