DEV Community

Cover image for I've created yet another JavaScript framework

I've created yet another JavaScript framework

Nhan Lam on April 13, 2024

It's 2024 and you've created yet another JavaScript framework. Seriously man! When talking about another Javascript framework, you may laugh and t...
Collapse
 
psypher1 profile image
James 'Dante' Midzi

I have just one question:

Is it blazingly fast? 😂

Collapse
 
lamnhan profile image
Nhan Lam

It's is based on Lit with as much adhere to the web standard as possible. Lit is small and fast, so we may expect that TiniJS will be fast too. But, don't take my word alone, please have a try and see it for yourself. 🥰
Performance is one of the key focus along with small, versatile and interoperable with other framework. So, I will try my best to make the whole system as fast as possible. 🐎

Collapse
 
psypher1 profile image
James 'Dante' Midzi

That good to know... I most definitely shall. Gotta finish this article first 😊

I was making a joke on how any new tech is always touted as 'blazigly fast'; which in my opinion is the wrong metric to aim for (see my article on obsession with speed)

Thread Thread
 
lamnhan profile image
Nhan Lam • Edited

Thank you for the opinion, will definitely check your suggestion. 😇

Collapse
 
amadujallow profile image
Amadu Jallow

Lmao

Collapse
 
shishantbiswas profile image
Shishant Biswas

Time to reset the timer

Collapse
 
lamnhan profile image
Nhan Lam

Haha, 0 day since the last JavaScript framework. 😝

Collapse
 
efpage profile image
Eckehard

Actually that's sad... Once i started to make a list of Javascript-frameworks, but stopped at about 30, not counting all the projects that did not even have a proper documentation. What a waste of brain power... Assume, all this clever people had contributed to a single project. The web would surely be a better place today.

Thread Thread
 
lamnhan profile image
Nhan Lam

Yes, it's sure an inefficient way of utilizing engineer power, but to collaborate on a massive scale with the balancing between abstraction and specificity is not an easy task.
As I mentioned, we might want to shift our viewpoint to look for solutions instead of technologies. The diversity of the web offers us more choices to our problems, as long as something works, just go with it and be satisfied with our choice. 😁

Thread Thread
 
efpage profile image
Eckehard

I was not even able to find out, what your "solution" really covers. You project page contains a lot features that are about to come "in the next version" and current code is marked as "experimental". So, it seems it's more an idea than a production ready solution?

Thread Thread
 
lamnhan profile image
Nhan Lam

Yes, it is not production ready as the version 0.x.x implied, there are lots of work to do. The home page is now merely a introduction to what I have learned, experimented and what I plan for future development. I will continue to work on the docs as well as the missing pieces as I mentioned in the roadmap. I hope I would complete the picture as soon as possible so that you may understand the "solution" of the project. Thanks!

Collapse
 
webreflection profile image
Andrea Giammarchi

js-framework-benchmark or it never happened 😇

(also let me know when you'll go tinier with uhtml and its signals based variants)

Collapse
 
lamnhan profile image
Nhan Lam

Hi, that's a great suggestion, it should be benchmarked. For now, you may take Lit 3 as a reference and deduct some percentages.
About signals, you can use signals in Lit, for now 1 implementation available is Preact signal, the Lit team is adding more implementations as we speak. But when it comes to performance, Lit has already have an efficient update system, so signals are probably not gonna contribute much performance in a Lit app.

Collapse
 
webreflection profile image
Andrea Giammarchi

again, try uhtml ... it does everything you are saying Lit does and probably it also did before it ... but it's also faster, you can see that in the benchmark link I've posted. uhtml has Preact, Solid, my own things, and any other Signal implementation you like, it's called uhtml/reactive and it has a faster update system than lit (benchmarks speak again) so give it a try.

Collapse
 
richardevcom profile image
richardevcom

Great job. Congratz!

Collapse
 
jvmmonster profile image
jvm-Monster

Please, I want to know if you used any design concept or design princees or patterns, please let me know and I would really know how you applied them, thank you😊

Collapse
 
lamnhan profile image
Nhan Lam

The project consists of several parts with different common practices, I'm not trying to invent anything fancy concept in terms of design patterns. I use all the familiar concepts that we used to work with, with a little addition on top for a different experience.
For example, the folder structure is a generic Typescript project. The core part is class-based custom elements. The UI system is a collection of custom elements those can be applied to any design systems, ...

Collapse
 
jvmmonster profile image
jvm-Monster

All right, I just started learning design patterns and solid principle in Java, and I found out that it's just hard following those concepts strictly, thanks😁

Collapse
 
ravinn profile image
ravinn • Edited

How does it integrate to a non-JS server-side rendering, or it is for SPA application? I have worked with lit.dev for more than 4 years. I really prefer it because it is easier and straightforward to couple with a non-JS backend. Wrote helper function and libraries to help me do this.

Collapse
 
lamnhan profile image
Nhan Lam

Hi, currently server-side rendering is not supported, even with JS servers. I hope it will be available in the future. Thanks!

Collapse
 
rustyapple profile image
Rusty Apple • Edited

Ah junior devs always coming up with new frameworks instead of trying to fix that every time they face a problem outside of their domain

No worries. Everyone goes through this phase. I've also done that 3-4 times.

Collapse
 
lamnhan profile image
Nhan Lam

Words are so easy!

Collapse
 
manumaan profile image
Manu Muraleedharan

Uh, is it web scale?

Collapse
 
lamnhan profile image
Nhan Lam

Hi, scalability is a subject for public scrutiny. It is very early now, therefore it needs time for the community to try out and have general agreement upon whether it is useful or a completely flop. ☺️

Collapse
 
jesktv profile image
JLDev

It sounds pretty cool👍

Collapse
 
tungbq profile image
Tung Leo

Nice work, bro 😊

Collapse
 
shriekdj profile image
Shrikant Dhayje

Here we go again.

Here we Go Again Meme

Collapse
 
muhtalhakhan profile image
Muhammad Talha Khan

Well, keep on inspiring!

Collapse
 
mauroaccorinti profile image
Mauro Accorinti

Congrats! Really curious to really see how to make a page with this. Following for the next few articles on working with components.

Collapse
 
lamnhan profile image
Nhan Lam

Hi, for now please see this example for how to create components and pages working with the routing system, please visit: stackblitz.com/edit/try-tinijs?fil...
More topics about other aspects will be available in the future. Thanks!

Collapse
 
khangnd profile image
Khang

Congrats mate, wish you all the best moving it forward 👏

Collapse
 
lamnhan profile image
Nhan Lam

Thank you! Please have a try whenever possible. 🙇‍♂️

Collapse
 
artydev profile image
artydev

Congrats :-)

Collapse
 
lamnhan profile image
Nhan Lam

Thank you! Please have a try when you have time and let me know if something not working for you. I'm happy to assist and receive feedbacks from you. 😀

Collapse
 
muhtalhakhan profile image
Muhammad Talha Khan

What was the need of it?

Collapse
 
lamnhan profile image
Nhan Lam

Hi, as I mentioned, I create it to solve the pain points I had working with front-end web. It is not aimed to replace anything, if other frameworks work for you and you are satisfied with them, then you don't need TiniJS. But if you have a chance, please give it a try. Thanks!

Collapse
 
documendous profile image
Documendous

Man that's so awesome heart love emoji :-D

Collapse
 
papansarkar101 profile image
Papan Sarkar

God bless you, Dude!

Collapse
 
smikodanic profile image
Saša M

If you're tired of the complexity of SPA frameworks like Angular, React, or Vue, consider trying Dodo Framework.

Collapse
 
scarylerie profile image
ScaryLerie

I disagree.

Collapse
 
lamnhan profile image
Nhan Lam

Hi, please kindly share more about your point of view so that I may learn more about your experience. Thank you! 😊

Collapse
 
fridaycandours profile image
Friday candour

You did well man.

Collapse
 
netssrmrz profile image
Esteban Ramirez

Nice project, though I don't see how you've resolved your pain points. My solution was to not use any frameworks and instead use the basic web components API without Lit.

Collapse
 
lamnhan profile image
Nhan Lam

Thank you for having a look. I will explain more about how to solve the pain points I had in future articles, one of the big part is the UI library where its components are designed to accommodate any design systems and can be used within TiniJS or with any other frameworks, an experimental version can be found at ui.tinijs.dev
Why I don't just use native Web Components without the Lit library? I thought about it before, but since the API of Web Components is not very efficient in term of development experience. Lit provides a reasonable solution to the maintainability problem we have with native Web Components, so in my opinion, it is the best choice now for working with Web Components. 🙇‍♂️

Collapse
 
neurabot profile image
Neurabot

Congrats. That's fine.

Collapse
 
tohodo profile image
Tommy

Looks promising. Are you going to add more components? I see a ton of missing components as of today.

Collapse
 
lamnhan profile image
Nhan Lam

Thank you for noticing TiniJS!
The UI part is currently at a very beginning, as of the 0.20.0, we can only utilize the basic design tokens in our own components since it almost has no prebuilt components compared to other UI library.
But, adding more useful prebuilt components as well as polish the theme families is currently in the progress. I do really hope to catchup with others by implementing 20+ essential components in 8 design flavors.

Collapse
 
hashirdev profile image
Hashir Afzal

Great man. Keep it up

Collapse
 
diku1968 profile image
Dhiren Pathak

Great, thank you

Collapse
 
hadderakk profile image
hadderakk

At this point, I mean, why the hell not...
Jokes aside, really curious to know how much it took from first decision until now.

Xin chúc mừng!

Collapse
 
lamnhan profile image
Nhan Lam

Hi, thank you for taking a look! 😇
A bit of insight about the journey so far, I started the experiment for around a month in November 2022, but because of a work schedule, I postponed further exploration, so nothing really happens back then.
After the work schedule was concluded, I've begun the development since July 2023, I work mainly on my free time, so the total condensed time would be approximately 3 months or so.

Collapse
 
valvonvorn profile image
val von vorn

Congrats and nice article!

Collapse
 
daelmaak profile image
Daniel Macák

Nice website :), but in the article I am miss a reason why one'd want to use your framework, like comparing why your framework is better than others.

Collapse
 
lamnhan profile image
Nhan Lam

Thank you for the opinion! 👍
A short introduction surely not going to cover all the aspects of what I have in store for framework. I will continue work to improve the documentation and adding the missing pieces to the framework. Until then, we may have a better picture of what TiniJS offers compared to all the already established frameworks.

Collapse
 
leandro_nnz profile image
Leandro Nuñez

Awesome job! I bet it has a lot of joy and disgrace behind the ui 😂
Congratulations! Keep up!

Collapse
 
kristijanlazarev profile image
Kristijan Lazarev

Yes finally!

Collapse
 
omoptical profile image
Omri Suleiman

you had me up to "bootstrap"

horrible, unless you love 27 layers of pointless div

Collapse
 
lamnhan profile image
Nhan Lam

Hi, "Bootstrap" here is not the Bootstrap framework. I'm trying to solve the problem I had with CSS frameworks, so no way I use the same approach as any CSS frameworks.
The "Bootstrap" that I mentioned is a Theme Family for the UI system. I design a components library that accommodate as much design systems as possible, for now only the Bootstrap family available because it is one of the most basic one. In the future, I would like to add more theme families, such as: Material, Fluent, ... all can be used with one unified experience. 🙇‍♂️

Collapse
 
tharindufdo profile image
Tharindu Dulshan Fernando

Congrats!