🐤 The friendly full-stack language

Overview

install size Build Status Downloads PRs Welcome License

Imba is a friendly full-stack programming language for the web that compiles to performant JavaScript. It has language level support for defining, extending, subclassing, instantiating and rendering DOM nodes.

Get started

npx imba create hello-world
cd hello-world
npm start

Documentation

To get started with Imba, we recommend reading through the official guide.

Community

Forum Join the chat at https://discord.gg/mkcbkRw

Bi-Weekly Imba Community Meeting

Everyone is welcome! The developer meetings are usually on Monday's every 2 weeks. This is a great place to report your issues, hangout and talk about your project using Imba. If you have an open pull request which has not seen attention, you can ping during the meeting.

For the exact meeting times please use the Meetup group Imba Oslo Meetup, this is where you can see the timezone, cancellations, etc.

You can join us remotely via Zoom.

Did you miss a meeting? No worries, catch up via the meeting notes or video recordings.

Chat

For questions and support please use our community chat on Discord or our discourse.

License

MIT

Copyright (c) 2015-present, Sindre Aarsaether

Comments
  • Benchmark comparison

    Benchmark comparison

    This is an impressive framework and the performance seems to be outstanding. Have you considered posting your framework to https://krausest.github.io/js-framework-benchmark/current.html so that we can do an apples to apples comparison?

    stale 
    opened by mikeptweet 50
  • Imba Rebrand Proposal

    Imba Rebrand Proposal

    Rebranding Process for Imba

    The purpose of this is rebrand is to visually establish Imba as a reputable contender to the major branded web frameworks and languages. This rebranding process is being lead by @iamtirado in a way that is orderly and effective. @iamtirado has 10+ years of experience, in a way that is orderly, and will result in a professional result for the brand. @iamtirado is available to refine any design chosen before the final implementation of the brand.

    The following steps will hopefully make the process orderly and effective:

    2.2 Submit Black & White Logos that fit the identity of Imba (Fun/Fast/Powerful) 2.3 Submit Colors that fit the Identity of Imba (Fun/Fast/Powerful)

    Step 1:

    The process will begin by identifying 3-5 major characteristics for the Imba language and community.

    • [X] 1.1 Comment below with 5 characteristics that exemplify imba and the community to you, and rank them in order of 1-5

    1.1 Result

    Here is a tally of the votes of why we love Imba.

    Fast Performance: 33 votes
    Beautiful Syntax: 29 Votes
    Capability/Functionality: 21 Votes
    Fun to Use: 11 votes
    Rebel: 4 votes
    

    I simply weighed the votes as follows:

    1. = 5votes
    2. = 4votes
    3. = 3votes
    4. = 2 votes
    5. = 1 votes

    I then, combined the votes for the words that were similar as follows

    Fast Performance: Fast(29) + Responsive(4) = 33 Beautiful Syntax: elegant(9) + clean(5) + simple(7) + easy(3) + comfortable(1) + readable(4) = 29 Capability/Functionality: smart(9) + innovative(5) + expressive(5) + intuitive(2) = 21 Fun to use: funny(2) + playful(5) + fun(3) + quirky(1) = 11 Rebel: rebel(1) + antimainstream(3) + radical = 4

    Conclusion

    Developers are drawn to Imba primarily because of its unmatched performance. Secondly, by its simple, readable syntax. Thirdly, by its near-limitless functionality. And lastly, perhaps because the vDOM has such a strong community behind it, you will find that early Imba adopters must have a bit of a rebellious spirit to challenge it.

    Identity of Imba

    Since the votes add up to 98, we can treat the votes as a percentage as you think of future contributions to the brand.

    Imba's identity lies 33% on Speed, 29% on Simplicity, 21% on Functionality, 11% fun and 4% Rebellious.

    We can attribute the other 2% to other single votes that didn't get clumped in like fresh or future.


    Step 2

    • [x] 2.1 In 3~7 words, write a tagline for Imba that embodies Imba's Identity. The less words, the better.

    2.1 Result:

    Tagline: The Fun, Fast, Powerful Web Lang.
    

    The tagline is simple and clear, and incorporates 3 elements of Imba that are key to Imba users. Easy language was mentioned a lot. Fast was mentioned a lot, but creator of Imba recognizes that it may not always be the "fastest", Powerful is another key feature of Imba, because it's not only fast, and easy, it's also highly capable of building fully-capable web applications from front end to backend.

    Fun/Play/Simple = 10 mentions Fast = 7 Mentions Smart/Powerful/Pro = 3 mentions

    • [x] 2.2 Submit Black & white Logos that embody the identity of Imba Starting with a black and white logo design makes sure that the logo has a better design, and then color can be integrated unto the design. Think about a language Icon for code editors as you design.

    • [x] 2.3 Submit Colors that embody the identity of Imba, with moodboard or mockups if possible. (https://coolors.co/ is a great tool for building and sharing a color palette.

    🚧 WORKING ON STEP 3.0

    Step 3: Final Brand Proposal


    Code of Conduct

    Any creative process will seem subjective to personal opinion to most people, and opinions can be endless.

    • Keep your input short, constructive, and focused around the identity of the brand, rather than personal identity.
    • Address comments to the task at hand, and use reactions to provide feedback.
    • For back and forth discussion, discuss in gitter to keep the thread clean.

    We appreciate any orderly involvement in this thread by anyone. Special attention to @somebee @foxbunny @altteo @madmaniak @russoturisto @allain @sh4hids @nemanjaglumac @athif23 @perborgen

    proposal 
    opened by ericvida 49
  • Indicate and implement that Indentation is canonically tabs-only

    Indicate and implement that Indentation is canonically tabs-only

    The imba documentation does not indicate what constitutes valid indentation.

    In discussion with @somebee there was agreement that it is tabs only.

    Please document & adjust the lexer to only use tabs as indentation.

    I'm looking through the lexer now to see if I can find where the lexer makes that decision.

    enhancement 
    opened by mindlace 25
  • Router reload route=

    Router reload route="/page"

    Imba Version: 2.0.0-alpha.100

    import 'imba/router'
    
    let counter = 0
    
    imba.mount <header>
    	<a route-to="/"> "Main"
    	<a route-to="/one-page"> "ONE-PAGE"
    	<a route-to="/two-page"> "TWO-PAGE"
    imba.mount <main>
    	<em> "Counter: { ++counter }"
    	<div route='/one-page'> "It one-page"
    	<div route='/two-page'> "It two-page"
    	<div route='/'> "It main-page"
    imba.mount <footer>
    
    

    It stopped working after clicking on links

    video.mp4.zip

    opened by qwars 21
  • border aliases missing

    border aliases missing

    Any particular reason why these are missing?

    b: red5 5px solid - border: bb: red5 5px solid - border-bottom bt: red5 5px solid - border-top bl: red5 5px solid - border-left br: red5 5px solid - border-right

    v2 styles stale 
    opened by ericvida 17
  • CSS in Imba way

    CSS in Imba way

    Maybe we could include css in Imba as it was done with html? I see it this way: we can have additional to render function (for example style) where we write css for the current Imba tag with readable and light syntax (stylus alike) and with hierarchy. At the moment css in the comments looks at the wrong place.

    def style
         [self]
               color:red
               display: block
               [div]
                      color: white
    
    enhancement 
    opened by altteo 17
  • New predeclared font-sizes

    New predeclared font-sizes

    The 3xl syntax interferes a little with dimensions / numbers with units, and does not feel too clean imho. It is also definitely possible to just use concrete font sizes instead of any of these aliases, but I've grown to like them, and think that designing becomes easier when we deliberately constrain ourselves with these types of presets. Same goes for box shadows and border radius etc.

    Let's keep the sm- md- lg- variants out of the discussion - they are a separate issue/discussion.

    So, to cover more ground I'm proposing another size alias, hg for huge. Then we have sm md lg xl hg. There are some potential variations here. The current proposal I'm liking the most is:

    xxs 10px
    xs  12px
    sm  14px
    md  16px
    lg  18px
    xl  20px
    xxl 24px
    xxxl 30px
    hg 36px
    xh 48px
    xxh 64px
    xxxh 96px
    

    For reference, here is the current scale:

    xxs 10px
    xs  12px
    sm  14px
    md  16px
    lg  18px
    xl  20px
    2xl 24px
    3xl 30px
    4xl 36px
    5xl 48px
    6xl 64px
    

    What are your thoughts?

    v2 styles stale 
    opened by somebee 15
  • Get an official mascot

    Get an official mascot

    For Imba v2 we are trying to get an official mascot. Below are some proposals from Torarin Jørstad, which ones do you like best? Please reply with either a screenshot of the versions or color and position.

    Thanks.


    Imba - Red Imba - Blue Imba - Purple Imba - Yellow

    enhancement 
    opened by aalemayhu 14
  • Generate and store dynamic ranges with range syntax

    Generate and store dynamic ranges with range syntax

    Description

    (1) Ability to generate a range with the range syntax.

    const range1 = [0..2] # --> [0, 1, 2]
    const range2 = [0...2] # --> [0, 1]
    

    (2) Ability to generate a dynamic range with the range syntax.

    const start = 0
    const end = 2
    
    const range1 = [start..end] # --> [0, 1, 2]
    const range2 = [start...end] # --> [0, 1]
    

    Why

    This would be really useful in keeping things DRY. We could declare a range and reuse it in multiple places if needed.

    Possible Implementation & Open Questions

    I am very new to this language so maybe I'm missing something here. :)

    stale 
    opened by benjamin-andersen 13
  • Imba todomvc benchmark is cheating :(

    Imba todomvc benchmark is cheating :(

    (Posted this comment on HN, but figured I'd copy it here for discussion.)

    I just spent an hour looking at the Imba benchmark. Yep, it's cheating. Which is a shame, because I really like the framework as a whole.

    The vast majority of the speedup comes from a single sneaky line of code. The majority of their "Everything" benchmark's time is spent in the reorder step. They've implemented this as "remove a random todo, render, push the removed todo back onto the end, render." The Imba implementation, and it alone, caches the rendered todo view, so that they can re-use it once the todo is reinserted. This single optimization is responsible for the vast bulk of their claimed speed. Removing it puts Imba only 2x faster than React, not 60x.

    If you want to try it yourself, look at line 55 of app.js. Change:

        res.push((this['_' + todo.id] = this['_' + todo.id] || t$('todo')).setObject(todo).end());
    

    ... to:

        res.push(t$('todo').setObject(todo).end());
    

    Furthermore, this isn't a caching strategy you'd want to use in a real app. It holds onto all DOM nodes ever created, thereby leaking quite a lot of memory.

    Again, I think Imba is cool, and fast, just not otherworldly fast. I hope this was just an "oops!" and not an intentional misrepresentation.

    opened by adamhaile 13
  • If-expression inside tags gets wrong cache key

    If-expression inside tags gets wrong cache key

    tag foo
        def render
            <self>
                if true
                    <h3> "hello"
                    <h3> "world"
    

    Compiles to:

    return this.setChildren((true) && (
        [(this[-1] = this[-1] || t$('h3')).setContent("hello").end(),
        (this[-1] = this[-1] || t$('h3')).setContent("world").end()
        ]
    )).synced();
    

    The error seems to be caused by the key being chosen by var key = parent.tree.indexOf(self), and self isn't a children of the foo-tree.

    bug 
    opened by judofyr 13
  • & + & css selector doesn't compile correctly

    & + & css selector doesn't compile correctly

    Description

    I get a warning in the console for css & + & mt:1.2em

    ▲ [WARNING] Unexpected "{" [css-syntax-error]
    
        app/shared/types/markdoc/config.imba?styles:3:9:
          3 │ .ku-af + {margin-top: 1.2em;}
            ╵          ^
    

    Reproduction

    https://scrimba.com/scrim/cqmnDrt7

    System Environment

    *
    
    bug 
    opened by haikyuu 0
  • compilation bug when setting class property

    compilation bug when setting class property

    Description

    this code

    class Command
            process
    	def run
    		process = new WCProcess({proc, cmd: self})
    		console.log "ran {cmd}", process
    
    return process = new WCProcess({ proc, cmd: this }), console.log("ran " + this.cmd, process);
    

    and JS complains about undefined process

    Reproduction

    System Environment

    *
    
    bug 
    opened by haikyuu 0
  • Infer type for array declarations

    Infer type for array declarations

    Currently imba can infer when a definition is an object with no need of curly braces

    let object = 
    	one: "one"
    	two: "two"
    	three: "three"
    

    Could the same be done for arrays?

    let array_of_objects =
    	a: "a"
    	b: "b"
    	c: "c"
    	---	
    	one: "one"
    	two: "two"
    	three: "three"
    let array_of_primitives =
    	"one"
    	2
    	three
    	{key:val}
    	key:val # same outcome as previous
    	[array]
    	true
    

    Maybe allow it if we specify the data type?

    let data\array = 
    	"one"
    	2
    	three
    

    I also want to propose an additional syntax for object arrays. Could this be made possible? It would save many lines of code for me on some data heavy projects.

    let array_of_objects =
    ---	a: "a"
    	b: "b"
    	c: "c"
    ---	one: "one"
    	two: "two"
    	three: "three"
    
    opened by ericvida 1
  • [Bug] Imba throws SimLink error on Windows

    [Bug] Imba throws SimLink error on Windows

    Description

    I was trying to boot up the imba.io docs server, and I expected the server to boot up. Instead, I got this ugly error message:

    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '@jest/[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '@jest/[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '@jest/[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: '[email protected]',
    npm WARN EBADENGINE   required: { node: '^14.15.0 || ^16.10.0 || >=18.0.0' },
    npm WARN EBADENGINE   current: { node: 'v17.8.0', npm: '8.7.0' }
    npm WARN EBADENGINE }
    
    up to date, audited 300 packages in 12s
    
    73 packages are looking for funding
      run `npm fund` for details
    
    found 0 vulnerabilities
    
    > [email protected] build
    > npm run build-content && npm run build-api-docs && imba build index.imba
    
    
    > [email protected] build-content
    > imba scripts/build-content.imba
    
    error here Error: EPERM: operation not permitted, symlink 'C:\Users\Robotics\imba\imba.io\node_modules' -> 'C:\Users\Robotics\AppData\Local\Temp\tmp-1968-wIERrm3Vx0Wd\node_modules'
        at Object.symlinkSync (node:fs:1668:3)
        at De.write (C:\Users\Robotics\imba\imba.io\node_modules\imba\bin\imba.imba.js:172:2634)
        at C:\Users\Robotics\imba\imba.io\node_modules\imba\bin\imba.imba.js:169:768
        at processTicksAndRejections (node:internal/process/task_queues:96:5) {
      errno: -4048,
      syscall: 'symlink',
      code: 'EPERM',
      path: 'C:\\Users\\Robotics\\imba\\imba.io\\node_modules',
      dest: 'C:\\Users\\Robotics\\AppData\\Local\\Temp\\tmp-1968-wIERrm3Vx0Wd\\node_modules'
    }
    Error: Cannot find module 'marked'
    Require stack:
    - C:\Users\Robotics\AppData\Local\Temp\tmp-1968-wIERrm3Vx0Wd\build-content.js
        at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
        at Function.Module._load (node:internal/modules/cjs/loader:778:27)
        at Module.require (node:internal/modules/cjs/loader:999:19)
        at require (node:internal/modules/cjs/helpers:102:18)
        at renderer (C:\Users\Robotics\imba\imba.io\src\util\markdown.imba:1:16)
        at C:\Users\Robotics\AppData\Local\Temp\tmp-1968-wIERrm3Vx0Wd\build-content.js:9:59
        at Object.<anonymous> (C:\Users\Robotics\imba\imba.io\scripts\build-content.imba:7:10)
        at Module._compile (node:internal/modules/cjs/loader:1099:14)
        at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
        at Module.load (node:internal/modules/cjs/loader:975:32) {
      code: 'MODULE_NOT_FOUND',
      requireStack: [
        'C:\\Users\\Robotics\\AppData\\Local\\Temp\\tmp-1968-wIERrm3Vx0Wd\\build-content.js'
      ]
    }
    
    Node.js v17.8.0 
    

    Run the command below to reproduce the issue.

    Reproduction

    npx imba create test-throw && cd test-throw && npm i && npm run build
    

    System Environment

    System:
        OS: Windows 10 10.0.19043
        CPU: (2) x64 Intel(R) Celeron(R) CPU  N3060  @ 1.60GHz
        Memory: 1.02 GB / 3.91 GB
      Binaries:
        Node: 17.8.0 - C:\Program Files\nodejs\node.EXE
        npm: 8.7.0 - C:\Program Files\nodejs\npm.CMD
      Browsers:
        Edge: Spartan (44.19041.1266.0), Chromium (107.0.1418.35)
        Internet Explorer: 11.0.19041.1566
      npmPackages:
        imba: ^2.0.0-alpha.223 => 2.0.0-alpha.225
    
    bug 
    opened by IRod22 4
  • generated.imba._.d.ts not found

    generated.imba._.d.ts not found

    Description

    vscode is complaining this error for tsconfig.json

    and ts-plugin cannot see the type of global component

    i have to diable checkJs to silent these errors

    opened by selegiline 0
  • [email protected](Oct 24, 2022)

  • [email protected](Oct 19, 2022)

  • v0.9.1(Oct 13, 2022)

  • [email protected](Oct 8, 2022)

  • [email protected](Oct 1, 2022)

  • v0.7.3(Sep 22, 2022)

  • [email protected](Sep 22, 2022)

  • [email protected](Sep 22, 2022)

  • v0.7.0(Sep 16, 2022)

  • [email protected](Sep 16, 2022)

  • [email protected](Sep 15, 2022)

  • [email protected](Sep 15, 2022)

  • [email protected](Sep 9, 2022)

  • [email protected](Sep 8, 2022)

    This is the initial Release of The Imba plugin for Vite. You can see a couple of examples in packages/e2e-tests

    Usage

    Create a vite.config.js file

    import {defineConfig} from 'vite'
    import {imba} from 'vite-plugin-imba'
    
    export default defineConfig({ plugins: [imba()] })
    

    Full example in stackblitz https://stackblitz.com/edit/vitejs-vite-c8f2on?file=main.imba 🎉

    Source code(tar.gz)
    Source code(zip)
  • v1.5.2(Dec 30, 2019)

  • v1.4.8(Sep 18, 2019)

    • Made splats compatible with ES6 containers like Set (#167)
    • Cache compilation for node runtime when 'IMBA_CACHE_DIR' process variable is set
    Source code(tar.gz)
    Source code(zip)
  • v1.4.7(Sep 4, 2019)

    • Added code of conduct and GitHub templates by @koolamusic
    • Fix webworker issue in event manager by @somebee
    • Fix trigger value zero is null by @scanf
    • Fix run-chrome test by @scanf
    Source code(tar.gz)
    Source code(zip)
  • 1.4.3(Jun 22, 2019)

    • Support for ** and **= operators (#192 by @taw)
    • Fix imbapack crash with newer webpack (#194 by @gdamjan)
    • Fix --stdio/-s option for imbac (#178 by @shreeve)
    • Make special variables in event handlers default to event methods
    • Include all global attributes on Imba.Tag
    Source code(tar.gz)
    Source code(zip)
  • 1.4.1(Nov 21, 2018)

    Notable changes

    • Make Imba.setInterval automatically commit on each interval
    • Compile is to === (instead of ==)
    • Compile isnt to !== (instead of !=)
    • Require Node >=8.0.0
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Nov 21, 2018)

    Notable changes

    • Introduce new root scope per file for more consistent self
    • Fix export const
    • Add <input number=bool> for numeric inputs
    • Only prevent native click if tap was prevented
    • Print out compiler warnings in imbac and webpack loader
    • Pass through stdio configuration from imbapack to webpack
    • Don't include comments by default in webpack loader
    • Disallow cross-scope calling of root 'def' functions (breaking change)
    Source code(tar.gz)
    Source code(zip)
  • 1.3.0-beta.1(Feb 4, 2018)

    Lots of exciting things coming in Imba 1.3.

    Event modifiers

    Inspired by Vue, we have now added support for event modifiers, which makes it much easier to decouple your actions from the events triggering them. The modifiers supported thus far are;

    • .stop
    • .prevent
    • .bubble
    • .silent
    • .self

    We also added support for keydown/keyup modifiers:

    • .enter
    • .left
    • .right
    • .up
    • .down
    • .space
    • .tab
    • .esc

    And mouse modifiers

    • .left
    • .middle
    • .right

    Proper documentation will follow when we move towards final release.

    Form Input Bindings

    Also inspired by Vue, we're adding basic support for binding form input values to the data, using the 'model' property on the input. It currently has most of the same functionality provided in Vue, so until we have docs in place you can learn about it in their guide :)

    Changelog

    • Add support for event modifiers (e.g. <div :keydown.enter.halt=...>)
    • Add support for form input bindings (e.g. <input[data] model='myField'>)
    • Allow all attributes on svg elements
    • Remove deprecated selector-syntax
    • Remove deprecated methods on Imba.Tag (object,width,height,append,prepend,style,setStyle)
    • Remove deprecated methods on Imba.Event (keychar,keycombo,source)
    • Remove deprecated Imba.isClient and Imba.isServer
    • Improve performance of setText
    • Improve performance of non-keyed tag lists
    • 30% smaller library (now 53k minified, 14k gzipped)
    Source code(tar.gz)
    Source code(zip)
  • 1.1.1(Jan 21, 2018)

  • 1.1.0(Jan 16, 2018)

    Changes

    • Introduce module keyword for singleton classes
    • Allow aliasing imports with import x as y from ...
    • Always escape attributes textContent when rendering on server
    Source code(tar.gz)
    Source code(zip)
  • v0.15.0-alpha.1(Mar 1, 2016)

  • v0.14.5(Feb 24, 2016)

    Changelog

    • tag.initialize can now be defined / overridden
    • Dynamic flags <div .{flag}> works as expected
    • Added more missing attributes to html elements
    • Allow defining properties with reserved names
    • prop watch: now accepts a Function
    • Minor bugfixes

    Notable changes

    Custom initialize

    If you need to initialize anything when a tag is spawned you can now override the initialize method. It takes the dom-object as the only argument. Remember to call super since initialize does link up the dom node with the tag.

    Dynamic flags

    Dynamic flags are now more usable, especially in tag trees. Imba now remember the previous value.

    var items = [
      {type: 'todo', id: 3421, title: "Release version"},
      {type: 'project', id: 1252, title: "Imba"},
      {type: 'todo', id: 12451, title: "Write releasenotes" }
    ]
    
    tag list < ul
      def render
        <self> for item in items
          <li.item .{item:type}> item:title
    

    In the example above, each <li> will have a className that reflects the type of item like <li.project>, <li.todo>. And if an item changes type (or the li is reused for another data-item) it will change the flag -- rather than adding the new now.

    Source code(tar.gz)
    Source code(zip)
  • v0.14.4(Feb 23, 2016)

Owner
Imba
✌🏽 The friendly full-stack language
Imba
⚡️The Fullstack React Framework — built on Next.js

The Fullstack React Framework "Zero-API" Data Layer — Built on Next.js — Inspired by Ruby on Rails Read the Documentation “Zero-API” data layer lets y

⚡️Blitz 12.5k Jan 4, 2023
🐤 The friendly full-stack language

Imba is a friendly full-stack programming language for the web that compiles to performant JavaScript. It has language level support for defining, ext

Imba 5.9k Dec 31, 2022
The interpretation implementation implemented programming language built for fun. I'm currently boring in full stack web development. So, I crafted this one LoL. 👻

What's Wuttyi? Everything is expression ?? I just developed this tiny programming language because of boring in higher level programming construct. Mo

Aung Myat Moe 9 Dec 13, 2022
Full-Stack Instgram Clone using MERN Stack and Socket.io

Instagram MERN Full-Stack Instgram Clone using MERN Stack and Socket.io Visit Now ?? ??️ Tech Stack Frontend: Backend: Realtime Communication: Cloud S

Jigar Sable 326 Dec 27, 2022
It is a solo Project and In this repo I try to build a E-Commerce full-stack website with MERN stack technologies. For Practice purpose.

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Alok Kumar 5 Aug 3, 2022
ApostropheCMS is a full-featured, open-source CMS built with Node.js that seeks to empower organizations by combining in-context editing and headless architecture in a full-stack JS environment.

ApostropheCMS ApostropheCMS is a full-featured, open source CMS built with Node.js that seeks to empower organizations by combining in-context editing

Apostrophe Technologies 3.9k Jan 4, 2023
ApostropheCMS is a full-featured, open-source CMS built with Node.js that seeks to empower organizations by combining in-context editing and headless architecture in a full-stack JS environment.

ApostropheCMS ApostropheCMS is a full-featured, open source CMS built with Node.js that seeks to empower organizations by combining in-context editing

Apostrophe Technologies 3.9k Jan 4, 2023
A Full Stack Amazon Clone which created using ReactJS with full E-Commerce Functionality!!

Amazon Clone with ReactJS A small web app that tries to imitate the desktop web version of amazon site, you can add items to the basket, delete them,

Özge Coşkun Gürsucu 50 Oct 3, 2022
Hadmean is an internal tool generator. It is language agnostic, schema driven, extremely customizable, featured packed, user-friendly and has just one installation step.

Hadmean Report a Bug · Request a Feature · Ask a Question Table of Contents About Quick Demo Motivation Why you should try Hadmean Getting Started Pre

Hadmean 344 Dec 29, 2022
i18n-language.js is Simple i18n language with Vanilla Javascript

i18n-language.js i18n-language.js is Simple i18n language with Vanilla Javascript Write by Hyun SHIN Demo Page: http://i18n-language.s3-website.ap-nor

Shin Hyun 21 Jul 12, 2022
When a person that doesn't know how to create a programming language tries to create a programming language

Kochanowski Online Spróbuj Kochanowskiego bez konfiguracji projektu! https://mmusielik.xyz/projects/kochanowski Instalacja Stwórz nowy projekt przez n

Maciej Musielik 18 Dec 4, 2022
Write "hello world" in your native language, code "hello world" in your favorite programming language!

Hello World, All languages! ?? ?? Write "hello world" in your native language, code "hello world" in your favorite language! #hacktoberfest2022 How to

Carolina Calixto 6 Dec 13, 2022
Long stack traces for node.js inspired by https://github.com/tlrobinson/long-stack-traces

longjohn Long stack traces for node.js with configurable call trace length Inspiration I wrote this while trying to add long-stack-traces to my server

Matt Insler 815 Dec 23, 2022
This is MERN Stack Ecommerce Project Made to Teach MERN Stack on YouTube

MERN E-COMMERCE TUTORIAL Hi! My name is Abhishek Singh, I have created this tutorial to teach MERN Stack for free on YouTube. Prerequisite Must have b

Abhishek Singh 558 Jan 5, 2023
Online Inventory Control System for an apparel manufacturing company "CASANOVA" (Pvt) Ltd. Technology stack: Node.js, Express.js, MongoDB Atlas, React.js (MERN Stack).

Project Name - Online Inventory Control System for an apparel manufacturing company "CASANOVA". The project was given a "A" grade. Group Leader - IT20

Pasindu Rukshan 1 Dec 26, 2021
Catamyst Frontend Stack - Discussion and demo for Frontend Web Development with Modern Tech Stack

Catamyst Frontend Stack Discussion and demo for Frontend Web Development with Modern Tech Stack. Made by M Haidar Hanif from Catamyst. Haidar is the F

Catamyst Community 48 Dec 24, 2022
A technology stack solution using the AWS Serverless architecture.Atlas stack for building applications focused on generating value.

Atlas A technology stack solution using the AWS Serverless architecture.Atlas stack for building applications focused on generating value. Description

Atlas 9 Dec 15, 2022
Fast and type-safe full stack framework, for TypeScript

Fast and type-safe full stack framework, for TypeScript Why frourio ? Even if you write both the frontend and backend in TypeScript, you can't statica

frourio 1.1k Dec 26, 2022
Full stack CQRS, DDD, Event Sourcing framework for Node.js

reSolve is a full stack functional JavaScript framework. CQRS - independent Command and Query sides. DDD Aggregate support. Event sourcing - using eve

ReImagined 709 Dec 27, 2022
:bento: Full-Stack solution to quickly build PWA applications with Vue.js and Firebase

Welcome to bento-starter ?? ?? bento-starter is an Open-Source Full-Stack solution that helps you to build fast and maintainable web applications usin

Franck Abgrall 1.5k Dec 24, 2022