Javelit just got 5 new components: - warning, success, and info status - header and subheader According to the statistics computed from Streamlit projects I presented last week, these components are often used! I hope they'll be useful to Javelit's users.
The developer experience has also been improved. Have you ever spent minutes trying to understand why a component is not appearing in your app, just to realize you forgot to call .use() on it? I did! Javelit now detects this mistake and warns you in the app:
// works fine
Jt.text("Hello").use();
// I forgot to call .use() !
Jt.markdown("World");
By the way, I made sure the code for this toast element is reusable for a future toast component.
The message when the app is empty is now more helpful: The compilation failure modal was improved:
The hot-reload experience was also improved, I'll write about it next week!
Naming and renaming this project
This project was originally called Jeamlit. I didn't put too much thought into this name, as I needed something quick. The project has container, layout and component abstractions. There are already so many projects using these abstractions. Adding yet another class named "Container" is not kind to the IDE auto-imports and the developer experience: The list goes on... so I wanted a simple prefix I could add to all classes of the public API. I took Streamlit, java-ified the name a bit and tadam! Jeamlit was born. Not creative but good enough: IDE friendly API
I bought the jeamlit.io, .app, and .com domains and moved on. I even shared the project on Reddit under the Jeamlit name. Why the last minute change, then? Let's say an email from Streamlit's legal team convinced me I could find something better 😉 I didn't want to change the prefix though. Renaming the classes in the code and the package name was simple, but updating the documentation was painful and error-prone. This means I had to find a name looking like J______t. I quickly thought about Javelot, which is the French word for Javelin and incidentally starts like Java, but the domains were already taken by a tech project. I ended up with Javelit because it was close and the domain names were available.
So here goes my alternate-reality official rationale for the Javelit name:
"Javelot is the French word for Javelin. A javelin is light and fast. This project is lit. Javelit."
Yes. Sorry.
That's all for this week. The next weeks will get more technical as I'll explain how the hot-reload is implemented in Javelit. Unlike most Java hot-reload mechanisms, Javelit supports adding dependencies, files, and classes on the fly. This involves interesting trade-offs and design considerations. Stay tuned!
Take care. Cyril
Thanks for reading. No AI was used in any way to write this blog. I am not a native English speaker. I'd be happy to get your (human) feedback on the writing.