Lumina is a statically typed, web-native language that compiles to JavaScript and WebAssembly.
It has HM type inference, algebraic types, traits, a reactive UI runtime, a REPL, an LSP, and a browser demo written in Lumina itself. The current demo runs without React and uses a Vite plugin that compiles .lm files directly for the browser.
Nice! I'm working on a similar language in some ways.
One decision I made is to specifically not compile to JS. JS/Wasm interop is good enough with Wasm GC that I made the choice to focus on Wasm-only constraints and semantics and not worry about how things like the types being wrong, or how ints translate to JS, how to handle null vs undefined, etc. JS GCs collect objects and cycles across the Wasm boundary, and with the JS string built-ins you can handle strings efficiently.
The first thing you can do is improve your "first impression" in your docs. None of the references to other pages are clickable hyperlinks; which markdown supports without much effort. (Pretty much got me to give up reading because it's the 21st century and hyperlinks have been around for at least 30 years.)
The second thing is to have a general overview of the features of the language on the first page that's a little more then just hello world. Have a loop, a variable, ect. I shouldn't have to "work" to get a feel for what's different and special about your language compared to vanilla Javascript, Typescript, Rust (via WASM,) C# (via WASM) and the countless other transpiled or WASM-compiled languages.
As a longtime Typescript user working more recently in Rust, I appreciate the syntax and overall language design.
Like others in the comments, I’m wondering where this fits into the existing ecosystem. What kinds of problems does Lumina solve especially well vs. Typescript, or a WASM-compatible language?
Syntax looks cool.
Would have expected proper syntax highlighting in the website (and plugin for IDEs).
The website is currently too convoluted until you see actual syntax would highly suggest having code block at the front. See for good reference the landing page of ruby: https://www.ruby-lang.org/en/
Which I actually agree with, as the Wasm ecosystem is trying to be yet another UNCOL outside the browser, bringing CORBA back while pretending it is some great new idea.
I'd also steer clear of any language using TypeScript for the compiler itself, even TypeScript themselves don't want to use TypeScript anymore for the compiler, don't make the same mistake yourself.
I'm not sure I understand the benefit of compiling to both JavaScript and WASM? Since I would normally expect to use both in the same environment, probably I haven't considered something or am overly tired at the moment so asking sincerely.
Lumina is a statically typed, web-native language that compiles to JavaScript and WebAssembly. It has HM type inference, algebraic types, traits, a reactive UI runtime, a REPL, an LSP, and a browser demo written in Lumina itself. The current demo runs without React and uses a Vite plugin that compiles .lm files directly for the browser.
GitHub: https://github.com/nyigoro/lumina-lang npm: https://www.npmjs.com/package/lumina-lang
I’d love feedback on the language design, the web-native direction, and the developer experience.
Nice! I'm working on a similar language in some ways.
One decision I made is to specifically not compile to JS. JS/Wasm interop is good enough with Wasm GC that I made the choice to focus on Wasm-only constraints and semantics and not worry about how things like the types being wrong, or how ints translate to JS, how to handle null vs undefined, etc. JS GCs collect objects and cycles across the Wasm boundary, and with the JS string built-ins you can handle strings efficiently.
I couldn't load your demo, btw.
The first thing you can do is improve your "first impression" in your docs. None of the references to other pages are clickable hyperlinks; which markdown supports without much effort. (Pretty much got me to give up reading because it's the 21st century and hyperlinks have been around for at least 30 years.)
The second thing is to have a general overview of the features of the language on the first page that's a little more then just hello world. Have a loop, a variable, ect. I shouldn't have to "work" to get a feel for what's different and special about your language compared to vanilla Javascript, Typescript, Rust (via WASM,) C# (via WASM) and the countless other transpiled or WASM-compiled languages.
And for any ML inspired language, OCaml, Haskell, Grain, Roc.
Especially Grain, as it was also developed as an ML for WebAssembly.
Have you tried Scala? It checks all the boxes, and is a mature language. The reactive UI runtime is provided by the library Laminar [1].
Technically its type inference is not HM but it's as expressive. In particular it has GADTs and HKTs, which I saw in your docs.
I wonder what you feel is missing from Scala (its .js/Wasm version) that Lumina provides?
[1] https://laminar.dev/
Do you have benchmarks of the Wasm performance compared to other languages?
As a longtime Typescript user working more recently in Rust, I appreciate the syntax and overall language design.
Like others in the comments, I’m wondering where this fits into the existing ecosystem. What kinds of problems does Lumina solve especially well vs. Typescript, or a WASM-compatible language?
Or even ReasonML
on the examples page, the example for string interpolation is a simple function example
Seems like a front-end bug. Click on the tab brings up the right example.
https://nyigoro.abrdns.com/#lumina
What's differentiates this from something like gleam/lustre?
Syntax looks cool. Would have expected proper syntax highlighting in the website (and plugin for IDEs). The website is currently too convoluted until you see actual syntax would highly suggest having code block at the front. See for good reference the landing page of ruby: https://www.ruby-lang.org/en/
I see syntax highlighting on the website fwiw
It would be helpful to show some clarification on what the benefits are compared to TypeScript
Or the plethora of languages compiling to WASM, for that matter
A good effort, but i failed to see any use case why someone will select Lumina over TypeScript. Infact Lumina itself is written in TypeScript.
Surely the ability to compile your WASM is a pretty big benefit over TypeScript, if it’s something you need.
AssemblyScript exists.
AssemblyScript seems to be seriously languishing these days, and the team has falling-outs with a lot of the Wasm ecosystem.
Which I actually agree with, as the Wasm ecosystem is trying to be yet another UNCOL outside the browser, bringing CORBA back while pretending it is some great new idea.
Sure. It isn’t TypeScript though.
C subset + compiler extensions for some embedded systems isn't proper C, and people still call it C, given how close enough it is.
I'd also steer clear of any language using TypeScript for the compiler itself, even TypeScript themselves don't want to use TypeScript anymore for the compiler, don't make the same mistake yourself.
I'm not sure I understand the benefit of compiling to both JavaScript and WASM? Since I would normally expect to use both in the same environment, probably I haven't considered something or am overly tired at the moment so asking sincerely.
I think this project is super interesting and I really like the rust inspiration here. How can one get in touch with you and/or help out the project?