I have been a Xojo developer for many years and I make a decent living at it. That doesn’t mean, however, that I don’t look around at other development environments every now and then. I do this because it makes good business sense to keep my options open. This week I looked at LiveCode after a reader asked me to.
LiveCode (formerly called “Revolution”) is a unique development environment that has been around since 2001. It was inspired by HyperCard and due to its lineage it uses a Card and Stack metaphor to represent windows, objects, and applications. To put it more in Xojo terms you can think of a window as being a Card and the entire application as a Stack (of cards). Dialogs and other objects can then be sub-stacks. LiveCode can make Mac OS X, Windows, and Linux desktop applications, cgi-like web apps, and mobile apps for iOS and Android.
Its scripting is a natural English-like programming language that presumably makes it easy for casual programmers to get started. Another interesting feature is that there is very little difference between ‘development mode’ and ‘debugging mode’ and switching between the two is literally just a button. This means that you can run LiveCode commands practically at any time without the need to compile the application first.
The IDE has a variety of windows. The Application Browser shows you all of the objects in the stack and lets you open each card into an editor. The editors let you put controls on the Card (layout) and each card and UI object has a number of Messages that are similar to Xojo events. LiveCode does not have an all-in-one window like most other IDE’s. At first, I found the individual windows to be refreshing but after I while I found that I was fighting with background application windows. I’m sure this is something that becomes more natural with usage but I had issues with it. I’ve always wondered if Xojo’s all-in-one window IDE approach was really the ‘best’ approach to a development environment and now I see that I prefer it as it eliminates the distractions of other windows. Also, Eclipse, Visual Studio, Xcode and Xojo all have all-in-one IDE’s so I this it safe to assume that most developers are comfortable with this style. You may find LiveCode strange if coming from an all-in-one IDE.
The LiveCode scripting language definitely takes some time to get used to. The natural English syntax seems inviting but after 30+ years of coding in various languages I found it frustrating. It’s wordy and not exceptionally compact in its meaning. If you don’t already have any programming experience this might be good for you. If you’re coming from a different language you might be as frustrated as I was.
Xojo events are relatively easy to find and implement. You simply right-click on an object either in the Navigator or in the Layout Editor and add Events to the object and it’s added into the code waiting for you to add your own code to it. The object messages in LiveCode are not so easy to figure out, in my opinion. To figure out the events I had to go into the documentation (which was decent, in my opinion), and had to look them up and then type them into the Script Editor. I’m sure with a little time and practice I would pick up the messages that I use most often, but it is a hindrance to picking up the language.
The Xojo Code Editor has a pretty good auto complete. Auto complete means that when you start typing, say “SQLite”, and if there are either language keyword matches or variable matches the eclipses (…) is shown and if you hit the tab key a list of available properties and methods are shown to you in their proper context. This makes discoverability much easier. LiveCode has no auto complete in their Script Editor which means you have to look up the commands before you start typing and you won’t know if they’re correct until you run the project.
LiveCode has objects but they don’t have the same Object Oriented nature as Xojo. In Xojo you create an instance of the object and then get/set a property or call a method using the dot notation. Thus opening a database in Xojo means creating a new instance of the Database, setting a FolderItem property on that object. Then calling the CreateDatabaseFile method on that same object and it returns a true or false to indicate success or failure. All of that revolving around the same object (database). The same thing in LiveCode requires less coding steps but there is no dot notation and it’s definitely more procedure driven. Each method is its own call – not part of an object – and means that you’ll spend more time looking at documentation to discover them. I feel that Xojo’s discoverability is superior to LiveCode.
LiveCode is not a strictly typecast language meaning you can use a variable anywhere at any time. This means that writing scripts can be very quick but it also means that introducing errors is easy and with larger projects it might be hard to find errors. Xojo, on the other hand, is strictly typecast and the compiler will tell you if a variable is not defined or if you try to put the wrong type of data into a variable. There are plenty of other languages out there that don’t require variable type declarations but I never have spent much time with them. If you’re used to them it’s probably no big deal but I tend to like the compiler to warn me early and often of any potential issues. Another little thing about the language is that to assign a value to a variable using the Put command rather than an equal (=) sign. In LiveCode you would say:
put “ABC” into myStringVariable
In Xojo this same thing would be
dim myStringVariable as String = “ABC”
One of the major drawbacks that I discovered early on was that LiveCode does not make native looking applications. The good news is that PushButtons look the same on each platform (no mean feat) but it also means that those Pushbuttons don’t look native on any platform. There are commercial plugins available to make LiveCode applications look native on each platform. I don’t believe that the plugins are using native controls either so this means that an OS update might ‘break’ the look of an application until those plugins are updated.
Xojo is not perfect in this regard as not all of its controls are native on each platform either. It does, however, use them whenever possible. Another drawback to Xojo is that control features are often times the lowest common denominator between Mac, Windows, and Linux for desktop platforms. This is more for feature parity than any malfeasance on their part. Xojo web apps and iOS apps use native controls.
LiveCode, like Xojo, lets you create external libraries using C++. LiveCode calls these Externals while Xojo calls them plugins. It appears that there is an active community of developers and an active 3rd party development community for LiveCode.
Unlike Xojo, LiveCode comes in two different varieties: Community Edition and Commercial. The Community Edition is open sourced and free but limits you to open source and GPL applications. If you are interested in LiveCode this is where I’d recommend that you start.
There are four different types of commercial LiveCode licenses. The Indy Commercial license costs $299/year per seat and lets you do closed source and royalty free commercial apps with a $500k revenue limit (how this is enforced I have no idea). The Business license costs $999/year/seat and eliminates the revenue limit. The Pro license $1,999/year/seat and gives you more personalized service and a Premium license is $10,000/year for 3 seats and gives you priority support, use of their test suite, extensions, priority features (whatever that means) and a LiveCode conference ticket.
LiveCode also has a membership program that costs $99/year ($25/year for students) and gives you exclusive membership benefits and helps supports the continued development of the platform. You also get access to over 100 training videos and access to the LiveCode Conference simulcast.
What I Liked About LiveCode
I found the LiveCode Start Center to be clean and uncluttered and useful. It has four main areas, Projects that shows your recent projects, Getting Started that has handy links to the some beginners videos and guides, Resources that takes you to tutorials, sample stacks, the community forum and their API dictionary, and finally they have a Sample Projects list that has a sample projects in it.
The LiveCode website also does an excellent job of pointing out 3rd party commercial and non-commercial extensions and what they can do for the developer. They also allow user reviews of the extensions so it makes it easier to make a purchase decision. I have no idea what it takes to get listed on their website or if LiveCode takes a cut of the revenue but it’s something I wish Xojo would do a better job of helping their 3rd party developers market.
I also found it refreshing that their API documentation allowed user comments. I really wish Xojo would do something similar because I feel that we, the user community, could add some really useful comments to the documentation. While I like the Xojo documentation I feel it might be better served by opening it up a bit (with moderation).
LiveCode does deploy for Android which might be a huge bonus for some. Assuming I could get a UI that looks native it might be the one thing that would make me look at LiveCode with any seriousness if a client asks for Android deployment.
Finally, the fact that part of LiveCode is open sourced is interesting. They successfully ran a KickStarter campaign to open source the product in 2013 and successfully did a campaign on their own website to fund HTML5 web deployment in 2014. I don’t know about anyone else but I would help fund certain items for Xojo development even if wasn’t open sourced (perhaps a better grid control?).
What I Disliked About LiveCode
If you’re coming from C++, Java, or any object oriented language I think you’ll find the lack of ‘objects’ to be disheartening. Add to it that there is no auto complete for the Script Editor and I think it’s a deal killer for me. Those two features make discovering events, properties, and methods so much easier without having to constantly check the documentation and I think it’s a huge adverting for Xojo.
The lack of strong datatypes, while not a deal killer, scares me a little. I want to be warned early, often, and loudly when things go wrong and strong datatypes are something that I really find attractive in a programming language. If there’s a data conversion going on it’s because I want it to happen (don’t get me going on Xojo variants – they’re evil – get over it). The natural English scripting language also puts me off simply because it’s unnecessarily wordy. Again, if you’ve never programmed before this might be an advantage.
The lack of native looking controls is also huge drawback for me. Xojo apps will try their best to look native (though Linux apps require more of a nudge than Mac/Win apps) and while not perfect, out of the box, Xojo apps are generally native.
Is LiveCode worth a look? Sure. Like any development environment, if it speaks to you and you can get your projects done in it then it’s the right one for you. For me, Xojo is a better language, with a better IDE, and has more features that I want. Xojo is only lacking Android support and I’d probably look more at Xamarin than LiveCode for a variety of reasons.
If LiveCode works for you that’s great. This review isn’t meant to be overly critical of the tool but as an existing Xojo developer I don’t see enough reasons to switch from Xojo development to LiveCode. Feel free to leave comments below on anything you feel I missed or got wrong.