I'm Sindre, CTO at Scrimba.com. We're about to launch a major overhaul of Imba, the programming language we use for everything here at Scrimba. The language has been developed over many years, and it powers both the frontend and backend of Scrimba (100K+ monthly users). Imba is not an academic exercise or a toy project. Check out https://imba.io for more details!
Since we've been flying under the radar for several years I thought I should post about it here now that we are approaching beta of this major update.
The main benefit of Imba is speed. Both in development and performance.
- Imba's Memoized DOM approach is an order of magnitude faster than Virtual DOMs (Vue, React). See this article for a short introduction to the approach.
- Imba's time-saving syntax with built-in tags and styles results in less typing and switching files
- Imba works with node and the npm ecosystem, and integrates tightly with both js and typescript
Here are some of the features worth mentioning 👇
Minimal syntax
Imba's syntax is minimal, beautiful, and packed with clever features. It combines logic, markup and styling in a powerful way. Less keystrokes, and less switching files means you'll be able to build things fast.
Runs on both server and client
Imba powers both the frontend and the backend of Scrimba.com, our learning platform with 100K+ monthly active users. On the frontend, Imba replaces e.g. Vue or React, and on the backend, it works with the Node ecosystem (e.g. npm).
Integrated styling
Inspired by tailwind, Imba brings styles directly into your code. Styles can be scoped to files, components, and even parts of your tag trees. Style modifiers like @hover, @lg, @landscape and @dark can be used for extremely concise yet powerful styling.
Blazing fast, Zero config
Imba comes with a built-in bundler based on the blazing fast esbuild. Import stylesheets, images, typescript, html, workers and more without any configuration. Bundling is so fast that there is no difference between production and development mode - it all happens on-demand.
When you run your app with the imba command it automatically bundles and compiles your imba code, along with typescript, css and many other file types. It provides automatic reloading of both the server and client.
Typing and tooling
The tooling is implemented as a typescript server plugin giving us great intellisense, diagnostics, and even cross-file refactorings that works with js/ts files in the same project. You can import types just like in typescript, and annotate variables, parameters and expressions. Like the language, the tooling is still in alpha, but improving every day.
Get involved!
If you'd like to learn more about Imba, please join our Discord server. We also host community meetings (watch recordings of here).
Imba has been under active development for 6+ years now, and activity is only ramping up. We're looking for contributors who would like to help improve documentation and the ecosystem around Imba.
We really think Imba will add a lot of value in an already crowded space of languages and frameworks. if you're the type who loves to tinker with new things, I'd wholeheartedly recommend you to check it out :)





Latest comments (43)
Same thing here – If it were good ol' HTML/CSS/JS (or as close as possible) it would be awesome
Wooohoo, it's been some time since I've heard of Imba. Congrats on the new version (if you call it so).
I've been using Imba v2 in alpha/beta for 6 months now and I can honestly say there is nothing else like it.
The speed, the convenience and the way you can use component styles are truly special.
Does the react comparison take into account using React.memo()?
Update:
Found the source:
github.com/somebee/dom-reconciler-...
I don't see the memo method being used, would it make sense to enable memorization?
Otherwise I feel like we are comparing oranges and apples here. :)
Implying React does not support memorization because it's not enabled by default seems a bit misinformed. :)
@somebee : with regards to typing, is it possible to type the output of functions as well?
Also, can we create interfaces and types, like in Typescript? Would that just be done in TS files, and imported and used in.imba files? Or does Imba itself have support for these features?
Overall, this looks very interesting, but a feature-set that can compete with Typescript would probably be the biggest barrier to adoption for me.
It is not currently possible to annotate the return type of a function without resorting to a jsdoc comment above the function declaration. This is currently a limitation that I hope to resolve before final v2 release. That said, I find the type inference of typescript very powerful, so if you use typed parameters etc it will almost always infer the correct return type.
We're considering support for creating types and interfaces, but for now you'll need to do that in separate .d.ts files :)
I can start using it when there are extensions for vscode like snippets.
Let me know if there are any
What kind of snippets are you thinking? The ability to create your own snippets? Imba has a vscode extension that is relatively robust with autocompletions and refactoring tools etc.
Wow nice
No I am just asking about autocomplete and auto import kind of extension.
This is the expected behavior
Thanks 😊
It is like Ruby or Python or Tailwindcss, some will love other will hate. I use it and is quite impressive!!
You almost have to be a machine, remember shortcuts. See just how human is not need to close the tag .... the machine needs to know where it is closed not you, like in Python...
Why scrimba do not have a Imba course?
Yes, we've been waiting until v2 is ready. There will definitely be a course on Imba this year :)
I think they will, maybe because they just finish the v2 this year and have so much change over v1.
Imba looks appealing a lot. Great work folks!
👏👏👏