Lamdera: A year in review; v1.0.0, paid plans, carbon mission and more

Hi friends!

It’s been a little over a year since the Lamdera Open Alpha announcement! :hushed: Things have progressed a lot in the last year, and people have built some really amazing things on Lamdera.

Over 350 people signed up for the Alpha with almost 200 apps created and more than 1000 deployments!

With the latest Lamdera v1.0.0 release, I thought I’d give a summary of what’s been happening.

New features

A lot of work has gone into all aspects, but here are the big takeaways;

  • lamdera live now provides a full-stack local-development environment, it works right out of the box with no config or extra dependencies. It will also live reload on code changes and work across multiple browsers.
  • Application config; a type-safe alternative to ENV vars, including compiler-guaranteed “backend only” secret values.
  • Client connect/disconnect tracking subscriptions are now a core feature.
  • Major wire improvements with payload sizes that are as much as 90% smaller than JSON encodings – and type safe!
  • Tooling support; Lamdera now works with Elm IDE tooling and tools like elm-test, elm-review and elm-spa!
  • Major rewrite to the 0.19.1 Elm Compiler codebase including a 2x improvement to compilation speed bringing things almost inline with Elm.
  • A large swathe of bug fixes, performance improvements and enhancements from user feedback.
  • Public documentation including conversion guides.

If you’d like to see the details, you can check out the list of release notes.

Moving to v1.0.0

The Alpha has been primarily about experimenting. Some things had to be broken a lot initially.

Things are now at a stage where the core API design makes sense and isn’t churning greatly.

More importantly, Lamdera now has some baseline data guarantees:

  • A full-state backend data snapshot mechanism
  • Realtime BackendMsg persistence (allowing for point-in-time data restoration between backups)
  • New infrastructure features allowing apps to self-upgrade for future major version or wire data format changes

In addition to all the new features, this brings a level of stability and recoverability that was not available in the early Alpha releases.

From here on the alpha releases will stop, and we’ll continue with semver versioning.

So, if you’ve passed on Lamdera before, you might like to re-evaluate the reasons to not use Lamdera again!

Paid plans

The https://lamdera.com/ website is now live!

There are now three new paid tiers:

  • Hobby, for personal apps
  • Pro, for professional apps
  • Enterprise for companies with teams

You can check out the full set of features on the new Pricing page.

A frequently recurring theme across the last couple years has been people asking about when Lamdera can be used for business/commercial apps. This also includes concerns like resourcing, backups, support, custom domains, self-hosting and source code access.

This release signals a readyness for early business usage.

If you’re a professional or business using Elm today, and yearning for a simpler life where your time is spent building value instead of glue, please give Lamdera a try and get in touch!

Note: You can still try Lamdera out for free with the “Play” tier, which runs for up to 16h a day before having a good nights rest.

Carbon mission

It’s difficult to continue ignoring our planet’s environmental situation.

A goal I’ve had for Lamdera was for apps to not just be neutral, but carbon negative. And not just for production runtime, but also for the personal time/energy developers spend building apps – truly “net zero”.

As a result Lamdera’s pricing is structured with offsets provided by Ecologi, who plant trees & fund the world’s best climate crisis solutions.

Lamdera has planted over 1500 trees and offset over 50 tonnes of Carbon so far. While no environmental offset strategy is perfect, Ecologi have a great FAQs section for some of the common questions.

For more details on how the Lamdera offsets are calculated, check out the Lamdera Environmental page.

Let’s strive to build apps that don’t harm our future!

PS: If you’re interested in becoming more climate positive in your personal life, you might consider starting with a personal Ecologi subscription. There are also Ecologi subscriptions for Businesses. If you use our referral link, we’ll both get an extra 30 trees!

Project Highlights

People continue to build awesome full-stack Elm projects with Lamdera.

Here are a few new ones, which are all open source!

NuAshworld

Source: https://github.com/Janiczek/nu-ashworld

NuAshworld is a source-available multiplayer turn-based browser game set in the universe of Fallout 2, written by Martin Janiczek.

You can play it here, follow on Twitter, checkout the public roadmap on Trello, join the Discord, and checkout the Wiki!

Here’s what Martin has to say about his experience building NuAshworld with Lamdera:

For me, Lamdera definitively lives up to its promise of removing glue from the full-stack development and lowering “barriers to entry.” Not to mention that writing Elm on both FE and BE is a bliss!

At an impressive 27,206 LOC at time of writing, NuAshworld is one of the largest apps built on Lamdera today!

Meetdown

Website: https://meetdown.app/

Source: https://github.com/MartinSStewart/meetdown

Meetdown is a clone of Meetup built by (another/different) Martin.

You can check out his announcement of it here if you haven’t seen it already: https://discourse.elm-lang.org/t/i-made-a-meetup-com-clone/7480

Martin also built a pretty cool full-stack testing framework along the way. He spoke about it recently at the Elm Online Meetup (now hosted on Meetdown!), you can check out the recording here:

Here’s what Martin has to say about his experience building Meetdown with Lamdera:

It feels liberating that the only thing between me and a finished app is just writing the business logic. The many hours spent searching stack overflow, trial and error to set up the backend, writing glue code and deploy scripts, it’s all gone.

Lamdera Realworld

Website: https://realworld.lamdera.app

Source: https://github.com/supermario/lamdera-realworld

Inspired by Ryan’s wonderful work on elm-spa and elm-spa-realworld, I worked on extending his frontend-only Elm implementation to include an Elm backend on Lamdera.

You can take a look at how the conversion progressed in two PRs:

  • #1 Porting all HTTP API calls to Lamdera.sendToBackend and removing all JSON encoders/decoders
  • #2 Implementing the full Realworld backend functionality in Elm

It’s often difficult to concretely talk about glue code. I hoped this exercise would give some better visibility as to what it is, and how much of it we write “normally”.

So what was the outcome of adding a backend implementation?

About negative 350 lines compared to the original frontend-only implementation.

In other words, after migrating to Lamdera, the entire backend implementation comfortably fits in the hole left by removing all the glue code, with room to spare.

While lines of code is not the greatest metric, it does provide some insight: considering the entire project is relatively small (2926 LOC) the -1228 removed lines are proportionally quite significant.

Tests for glue

Some of this code reduction comes from dropping the tests in elm-spa-realworld (about 200 lines).

Interestingly, all of Ryan’s tests are entirely testing glue code (HTTP request decoders) that disappeared in the conversion, and got replaced by compiler type-check guarantees in Lamdera.

Without having spoken to Ryan about it, I’d hazard a guess he wrote these tests for the parts of the app he felt least confident about: the glue code.

How much more glue code would a much larger app be carrying? How many tests are you writing for things that could be compiler checked?

The road ahead

Here are some things that I’m planning to work on in the future:

  • Platform support for elm-pkg-js, “A standard for shipping simple JS with Elm Packages
  • Direct HTTP query support via an RPC style API
  • Automatic UI for type-safe CRUD of the BackendModel in production
  • Real-time debugging of production Msg flows and effects

Got questions about something in Lamdera’s future? You’re welcome to discuss it in one of the community channels!

Supporting further work

I need your help to make my work on Lamdera (and the open source projects that shake out of it) sustainable.

Here are the ways in which you can support further work:

  • Signing up for a Hobby or Professional tier app
  • Supporting me via Github sponsors (also helps support the Elm online meetups!)
  • Building a Lamdera app!
  • Providing feedback; we have a lovely community growing on Discord, as well as #lamdera in Elm-lang slack
  • Getting in touch if you’re a company (or know of a company) using Elm who might be interested in trying it in a wider domain

All your support is greatly appreciated!

Laurie
Laurie the Lamdera Llama.


Phew! This was a long update. Thanks for your interest - I wish you happy and glue-free coding!

67 Likes

Bravo Mario, and congratulations on this major milestone.

5 Likes

Congratulations! I’ve recently played with Lamdera, and I can definitely recommend it!
I do appreciate your attention to being carbon negative, I am happy to see someone moving in the right direction even in dev tools that don’t, on the surface of it, look relevant to environment (but they actually do, thank you for caring).

7 Likes

Congrats on the 1.0.0! It’s a night and day difference between what I can accomplish now compared to when I was trying to write backends in C# and work with AWS. If it weren’t for Lamdera, all my finished projects would be frontend only.

4 Likes

Congratulations on the milestone! :tada::heart:

3 Likes

I am looking forward to nuking one project on Heroku after I create a Lamdera version. Then I can look forward to maintaining and improving it rather than fearing to do so.

3 Likes

It has been fun playing around with Lamdera over the last year and you have always been super helpful!

I’m very much looking forward to where you are going to take the HTTP RPC style API, perhaps then I can convince my job to implement a microservice in Lamdera :smiley:

2 Likes

You should checkout elm-webapp in the meantime! @choonkeat has had some pretty awesome results in production.

1 Like

I’ve been waiting for this release – congrats and great work!

Re: pricing, a bit curious about the storage… given marginal storage is very inexpensive these days, doesn’t 5MB seem a little meager for the Hobby plan (even though the costs other than storage are probably the big drivers)?

Also, how should we think about the amount of storage required by the backend model when it serializes the app’s Elm data structures?

3 Likes

That’s a great question! The short answer is: I’m not sure yet :grinning_face_with_smiling_eyes:

The current limits are based on disk serialization and mostly set around these lines of thinking:

  • Disk serialization will be much more consistently similar across apps than memory residency, easier to report and understand (you have this much data) and easier to address (maybe we should move that data elsewhere)
  • So far almost all apps are nowhere near these limits
  • It’s much easier psychologically to lift the limits in future than lower them

My advice to people worried about data sizing would be to simply come chat about it on Discord!

If people have concrete use cases where they think they’ll bust the hobby app limit but it’s clearly not a commercial app (such as Martins awesome elm-review-bot project), you can just ping me and we’ll make it work :blush:

Does this make sense to people? Would a description or elaboration on this have made it less surprising? Feedback welcome!

5 Likes

Wow, Lamdera sounds really great, especially the Evergreen migrations.

But when reading the terms about having an account closed by Lamdera, i.e.

We can close your account by giving you at least one weeks’ notice. We may close your account or stop you using your applications immediately if we believe you’ve:

  • Broken the terms of this agreement
  • Put us in a position where we might break the law
  • Broken the law or attempted to break the law
  • Given us false information at any time
  • Been abusive to anyone at Lamdera or a member of our community

I cannot with a good conscience recommend to use Lamdera within my company.

Could you clarify whether the items only apply to “We may close your account or stop you using your applications immediately” or to “We can close your account by giving you at least one weeks’ notice.” as well (otherwise you could shut down a productive account within a week at will)?
Even if they apply to both, the last two items are too vague IMHO, to the extent that they could – in theory – be exploited to end an account at will. Mind that I do not expect you to do that but I have first hand experience of a company being very nice for many years and then suddenly turning around and trying to extract a tenfold price increase for their software by totally unfounded claims (brought forth by people that I knew personally and had trusted trust until then) which kept us and some lawyers busy for several years (fortunately they did not have such terms to exploit).

Hey @supermario I am thinking of creating a game with Lambdera for blind people… However as audio would be an important part of it, I wonder if I could do that with Lambdera ? I thought of using the Web Audio API but I am not sure if that would be even possible with it. Anyway, is there a way to play sounds and music with Lambdera ? Thanks

Hey @eimfach, you may want to take a look at elm-pkg-js if you need Javascript interop: https://gist.github.com/supermario/e5db91955b68222f34fc02d9b3ea833e

1 Like

Hey @eimfach, I created an Ellie recently to demonstrate playing audio with Elm without any JS:
https://ellie-app.com/f9sjMVwhtqva1

If you want to play multiple audio clips on demand, you’ll have to keep track of a playback queue of some sort and render multiple of these audio Keyed.nodes.

1 Like

Sorry, I guess this getting off topic now. But a third approach is to use elm-audio 4.0.0 (disclaimer: I made it). I’ve used it before in a Lamdera app so it should work.

1 Like

Actually, bringing it full circles back to Lamdera, how are you able to use elm-audio? It requires JS ports interop, and Lamdera (from my understanding) does not support Ports? (well, I guess there is that WIP elm-pkg-js thing, is that what you used?)

Exactly, it uses elm-pkg-js.

Hey Thorsten, thanks for your feedback!

I’m sorry you had such a poor experience with a company and people that broke your trust. I can understand why you may now carry that same fear and skepticism when evaluating other companies.

Thanks for pointing out the 1 week termination – that was a layover from Alpha. I’ve now updated this to 30 days. I’ve also removed the “Given us false information at any time” clause, as I can see the ambiguity, and can’t think of a relevant scenario where the kind of false information I’m concerned about isn’t covered by the first three points. I however cannot in good faith remove the clause about abuse.

It seems however maybe the root of your concern is commercial sustainability, given you mention price gouging behaviours. I’d be happy to discuss a more specific commercial agreement that meets your companies needs if that’s the case (i.e. yearly % caps on pricing increases are a common mechanism). Feel free to DM me if that’s of interest, or if you have some examples of public company terms you find acceptable :slight_smile:

3 Likes

Hi @MartinS – an audio question for you. Quite some time ago I wrote this fake drum app based on the idea of an African drum language. It uses Tone.js + ports to render sounds. Alas, it only works in Firefox (Press “Play” in the app to see what it does).

Is there a better way of doing this, in Lamdera or otherwise?

(Continued in direct messages to avoid derailing this thread)