Exploring Imba: A Fun and Fast Web Programming Adventure!
Tags: webdev, javascript, beginners, imba
Published: 2023-07-27 05:23:15

Hey there, fellow developers! Today, I'm going to take you on an exciting journey into the world of [Imba](https://imba.io/), a web programming language that's all about speed and fun! Now, I've had some experience with React and Flutter, so throughout this adventure, I'll be comparing Imba to those familiar friends. Get ready for a delightful ride!

## Imba: The Speedy and Playful Web Language

Imagine a web programming language that's fast like a rocket and playful like a kitten. That's Imba for you! It's all about making your coding experience snappy and enjoyable. The folks behind Imba say it's fast in two ways: **First, its syntax is designed to save you time with built-in tags and styles, so you can type less and build things quickly. Second, its supercharged memoized DOM makes it way faster than those virtual DOM libraries we've seen around.**

> In simpler terms, Imba's memoized DOM is a highly optimized rendering mechanism that stores and reuses previously calculated results, making it much faster than virtual DOM libraries, which perform full re-rendering of components each time there is a change. This means that Imba can update the user interface more efficiently, resulting in a smoother and faster user experience.

## Getting Started: A Smooth Takeoff

As I ventured into the world of Imba, I discovered Scrimba, an interactive code-learning platform built with Imba. Excited, I decided to give it a shot! To get started, I created a [Codespace on GitHub](https://github.com/features/codespaces), which felt like preparing for an intergalactic coding adventure!

## Launching the Imba Project:
Creating a new Imba project was a breeze! I simply ran the command `npx imba create`, and voilà, the project structure magically appeared before my eyes.

Ready, Set, Code!
Next up, I ignited the development server with `npm run dev`. This launched my Imba application on the browser, and I felt like I was at the controls of a spaceship, ready to explore the vast universe of Imba!

## Befriending the Imba VS Code Plugin:
To make my coding journey even smoother, I invited the [Imba VS Code plugin](https://marketplace.visualstudio.com/items?itemName=scrimba.vsimba) to join my Codespaces VS Code party. It provided me with all the goodies: **syntax highlighting, intellisense, go to definition, and code hinting**. It was like having a trusty co-pilot on my coding adventure!

## Inside the Imba Code: A Whimsical World
As I delved into the **main.imba** file, I found myself in a whimsical world of Imba code.

```
global css @root ff:Arial c:white/87 bg:black/85
global css a c:indigo5 c@hover:indigo6
global css body m:0 d:flex ja:center h:100vh

tag app-counter
	count = 0
	<self @click=count++> "count is {count}"

		# css without a selector applies to the enclosing element
		css d:inline-block user-select:none cursor:pointer fs:6 bg:gray9
			p:2.5 5 m:6 bd:1px solid transparent rd:4 tween:border-color 250ms
			bc@hover:indigo5

tag app

	# inline styles with square brackets
	<self[max-width:1280px m:0 auto p:2rem ta:center]>

		# this css applies to nested img elements and not parents
		css img h:35 p:1.5em
			transition:transform 250ms, filter 250ms
			@hover transform:scale(1.1)
				filter:drop-shadow(0 0 4em red5)

		<a href="https://imba.io" target="_blank">
			<img.wing src="https://raw.githubusercontent.com/imba/branding-imba/master/yellow-wing-logo/imba.svg">

		<h1[c:yellow4 fs:3.2em lh:1.1]> "Imba"

		<app-counter>

		css p c:warm1 ws:pre
		css a td:none
		<p>
			"Check out our documentation at "
			<a href="https://imba.io" target="_blank"> "Imba.io"
			"."
		<p>
			"Take the free Imba course on "
			<a href="https://scrimba.com/learn/imba/intro-co3bc40f5b6a7b0cffda32113" target="_blank">
				"Scrimba.com"
			"."

imba.mount <app>

```

Here's what I discovered:

- Global Styles: Picture this - global CSS styles without the fuss of braces and semicolons! Imba's syntax keeps things concise and fun. It's like playing dress-up for your whole web app.

```
global css @root ff:Arial c:white/87 bg:black/85
global css a c:indigo5 c@hover:indigo6
global css body m:0 d:flex ja:center h:100vh
```

- Tag Definitions: In Imba, you can create reusable components with just a friendly tag keyword followed by the component's name. Imagine having a box of toys that you can reuse whenever you want!

```
tag app-counter
	count = 0
	<self @click=count++> "count is {count}"

		# css without a selector applies to the enclosing element
		css d:inline-block user-select:none cursor:pointer fs:6 bg:gray9
			p:2.5 5 m:6 bd:1px solid transparent rd:4 tween:border-color 250ms
			bc@hover:indigo5
```

- Component Magic: Each component feels like a little magic box filled with code and elements. You can nest elements inside, creating a lovely tree of interconnected parts - like a playful puzzle!

```

tag app
	<self[max-width:1280px m:0 auto p:2rem ta:center]>

		<a href="https://imba.io" target="_blank">
			<img.wing src="https://raw.githubusercontent.com/imba/branding-imba/master/yellow-wing-logo/imba.svg">

		<h1[c:yellow4 fs:3.2em lh:1.1]> "Imba"

		<app-counter>

		<p>
			"Check out our documentation at "
			<a href="https://imba.io" target="_blank"> "Imba.io"
			"."
		<p>
			"Take the free Imba course on "
			<a href="https://scrimba.com/learn/imba/intro-co3bc40f5b6a7b0cffda32113" target="_blank">
				"Scrimba.com"
			"."

imba.mount <app>
```

Other features for later..

### Imba vs. React and Flutter: A Friendly Showdown
Now, let's have a friendly showdown between Imba, React, and Flutter, my fellow amigos. (This is not fair btw..)

- Speed: Imba is like a speed demon, with its memoized DOM making it super-fast. React and Flutter are no slouches either, but Imba's speed is something to cheer for!

- Syntax: React and Flutter have their own syntax flavors, but Imba brings its own unique sauce to the table. Its time-saving syntax with built-in tags and styles is like the secret ingredient that makes coding faster and more delightful.

- Tooling: React and Flutter come with robust tooling, and so does Imba. The Imba VS Code plugin is like having a magic wand for seamless coding experience.

- Popularity: Okay, Imba might not be as famous as React and Flutter, but hey, every superhero has their origin story, right? Imba's got the potential to become the next web sensation!

Stay tuned, dear readers! In the upcoming sections, I'll dive into the depths of Imba, exploring its scripting capabilities, smart styling features, full-stack potential, and more, to provide you with a comprehensive understanding of this exciting web programming language.

Finally, no matter which language you choose, the real hero is you - the developer! So keep coding, keep smiling, and let the web world be your playground of possibilities!

Happy coding, my friends, and may your coding adventures be filled with laughter and success! 🚀😄