Arduino LMIC library naming: Classic LMIC and MCCI LMIC [HowTo]

The two most used Arduino LMIC libraries are:

Official library name: MCCI LoRaWAN LMIC library


Classic LMIC (Use of this library is now deprecated)
Official library name: IBM LMIC framework (formerly LMIC-Arduino)

Classic LMIC was the first LMIC implementation for the Arduino framework. This library has long served as the defacto LMIC library for the Arduino framework but is no longer maintained.
MCCI LMIC is a fork of and successor to Classic LMIC and is currently actively maintained.

Both use the same repository name ‘arduino-lmic’.
The formal name of Classic LMIC originally was “IBM LMIC framework” which was in 2017 changed to “LMIC-Arduino” but has now been reverted to “IBM LMIC framework” because the Arduino IDE could not properly handle it.
MCCI LMIC was forked from Classic LMIC. The repository name was not changed and so both Classic LMIC and MCCI LMIC use the same name “arduino-lmic” for their repository which can be confusing.

In posts people often need to refer to these libraries but do so in different ways (e.g. Arduino LMIC, arduino-limic, matthijskooijman LMIC, matthijs’ Arduino LMIC, MCCI’s LMIC implementation, etc.) which does not make things easier.
And when users only mention Arduino LMIC or arduino-lmic that does not make clear if they mean Classic LMIC or MCCI LMIC because those names are ambiguous.

To keep things simple (for brevity, unambiguity and uniformity) I suggest to from now:

Use the names Classic LMIC and MCCI LMIC when mentioning or referring to these libraries.

(Where needed repository URL’s can be added or linked but don’t use the URL’s instead of the names mentioned above.)

For more information about these libraries see: Overview of LoRaWAN Libraries [HowTo]

IBM’s original LMiC implementation does not support the Arduino framework. It served as basis for development of Matthijs’ Classic LMIC. Similar to above I suggest to use the short name IBM LMIC when referring to IBM’s original LMiC implementation.


Given that this has been formerly deprecated by its maintainer “classic” seems an inadvisable choice of name.

It would be far better to refer to these by the maintainers

And when people ask questions about problems, it would be best if they linked to the actual branch & state they used, too.

I understand the use of Classic, but if it’s MCCI, why not just make it Matt?

And then we have to teach this to the people who are asking questions. But at least the rest of us will have some idea.

Matt what? The one not being glossy?
Matt who? Matt Bianco?
Would be inconsistent to use a (first name) abbreviation here (when compared to MCCI).

I think ‘Matt’ adds more to the confusion than making things clear and simple.

Some considerations:

Library name based

“MCCI LoRaWAN LMIC library” ===> MCCI LMIC

“LMIC-Arduino” (Classic LMIC) ===> NoGo because ambiguous

URL based

mcci-catena\arduino-lmic ===> MCCI-Catena LMIC

matthijskooiman\arduino-lmic ===> MatthijsKooiman LMIC

Too long.

Author/maintainer first name based


Classic LMIC ===> Matthijs LMIC

or it’s both older and current name (but not IBM’s original non-Arduino version):

IBM LMIC framework ===> IBM LMIC

Terry LMIC would be confusing.
These also make it look like LMIC is their last name.
IBM LMIC would be incorrect and misleading because this is not the original IBM LMiC.

Company name based


Matthijs Kooiman (LMIC Classic) ===> NoGo because not a company name

Mixed naming types


Matthijs Kooiman ===> Matthijs LMIC
Matthijs Kooiman ===> Kooiman LMIC

Kooiman LMIC would be confusing.
Matthijs LMIC, again LMIC looks like a last name

Linguistically correct would be Matthijs’ LMIC (and MCCI’s LMIC).
But the goal was brevity and simplicity.

My suggestions

  • Classic LMIC
    The word Classic serves two purposes here:
    1. It refers to style and shows respect to the work Matthijs has done for Arduino LMIC.
    2. Classic also means old (as in the old deprecated library).

These names are short, simple and easy to use and remember.

I have used the full formal library names on the forum before, but almost nobody does.
In fact most people don’t even know that LMIC-Arduino is the formal name of Classic LMIC (well, it was at least for the last two and a half years until it was recently renamed back to the less clear ‘IBM LMIC framework’ because of issues with the Arduino IDE) and neither do most of them know its name ‘IBM LMIC framework’.

Using a mix of inconsistent or ambiguous names (and people’s custom interpretations thereof) and URL’s is confusing and often unclear. Standardizing on simple and consistent naming is therefore useful.

How about

Deprecated LMIC


MostlyWorks LMIC


Overall, I’m cool!

1 Like

See my explanation for Classic above. It’s not clear why that would be inadvisable.

That would be the following then:
Terry Moore LMIC
Matthijs Kooiman LMIC

Most people won’t recognize the first as MCCI LMIC and Matthijs Kooiman LMIC is just too long.

Yes. Where needed repository (branch) URL’s can be added or linked but don’t use the URL’s instead of the names mentioned above. I’m almost sure that most users here will use the default branch.
(If not default they are probably smart enough to specify their branch.)

[quote=“bluejedi, post:6, topic:40592”]
See my explanation for Classic above. It’s not clear why that would be inadvisable.[/quote]

Because people shouldn’t be using it in new projects, as it’s an unmaintained dead end with known, unfixed issues that never will be fixed.

That would be the following then:
Terry Moore LMIC
Matthijs Kooiman LMIC

Most people won’t recognize the first as MCCI LMIC

That’s not just disingenuous but not even accurate - as it’s actually MCCI which maintains it, put their corporate name on it, and owns the github repo where it lives. Terry is the lead (but not only) MCCI person in that effort.

That’s simply a question of a suitable short form - but one that is clearly that and not “what’s classic?” or “If it’s classic why shouldn’t I be using it?”

I’m almost sure that most users here will use the default branch.
(If not default they are probably smart enough to specify their branch.)

My actual concern is with the state of that branch, eg if they checked it out the first time they looked at this stuff last year… ideally people would give the git hash.

I prefer constructive and practical examples/solutions.

That’s not a solution.

You’re welcome for suggesting any good solutions.

I don’t agree with that. Using the library"s version number (which is a standard property) should be sufficient for identifying the library. The version number is exactly meant for that and can also be checked in software (i.e. firmware).
(And in case version numbers are not properly mainted, then latter is what needs to be fixed)

Well, MCCI LMiC is pretty obviously that project’s own chosen name.

There’s already one nomination for a short name for the other which identifies it specifically by being a shortening of the respository name, or one could simply ask the person in question what they’d prefer.

Be my guest.

@bluejedi asked me to chip in, so here I am :slight_smile:

I’m not so sure “Classic” really has the right association for my version, because it is not really maintained anymore. How about “Original”? That conveys some time-related info (the original version was the first, other versions followed) and just seems clearer to me (but I’m not sure).

The formal name of Classic LMIC originally was Arduino-LMIC which was later changed to LMIC-Arduino

Note that I reverted the name change in, because the Arduino library manager didn’t handle the rename well. But also note that the original (en thus also current) name is “IBM LMIC framework”, not “Arduino-LMIC” as mentioned above (unless that refers to another name)?

I think the naming idea is generally good, but we will still be required to elicit which version someone is using and, as evidenced in recent threads, they are usually so confused they’ll happily swap libraries without even realising, let alone telling us, I think this is just a bit academic.

Otherwise, as I’m on day 25 of an Arduino + Radio thread, and ended up revalidating my use of the your 1.5.0-release3 for ABP & OTAA uplink & downlink over the last 12 hours, I’ll go with:


Simply the best.

1 Like

I’m currently on the go, so this is only a brief response:

Original LMIC would be confusing actually because the Original LMIC is IBM’s original LMiC.

Original Arduino LMIC would be correct but that’s just too long.

Tina LMIC?
What have you been smoking? :smile:

You’ve been on the current Arduino + LMIC thread. If we ever find out what the problem is for our Paris friend, it will be something really simple & silly.

But just to be sure, rechecked my breadboard version against two gateways rather late in to the night.

It works just fine and from my perspective, if you add in that it is the original Arduino LMIC library, so must be simply the best:

Yeah, that is indeed a downside.

Honestly guys, @bluejedi’s idea was a good one, but as I’ve answered most of the Q’s over the last few months for Arduino LMIC, this is a non-conversation as it’s only going to be a few of us that know the unofficial TTN forum official name.


So let’s use the names suggested in the topic start then.