# How do I tell what my firmware currently has installed?

**URL:** <https://community.keyboard.io/t/how-do-i-tell-what-my-firmware-currently-has-installed/1730>\
**Category:** Help and Getting Started\
**Tags:** question, plugin\
**Created:** [July 7, 2018, 2:32am UTC](https://community.keyboard.io/t/how-do-i-tell-what-my-firmware-currently-has-installed/1730 "2018-07-07T02:32:19Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![harrdb12](https://avatars.discourse-cdn.com/v4/letter/h/e68b1a/32.png) [@harrdb12](https://community.keyboard.io/u/harrdb12)\
**Post date:** [July 7, 2018, 2:32am UTC](https://community.keyboard.io/t/how-do-i-tell-what-my-firmware-currently-has-installed/1730/1 "2018-07-07T02:32:19Z")

</div>

I’ve followed the instructions [on the kaleidoscope wiki for windows](https://github.com/keyboardio/Kaleidoscope/wiki/Install-Arduino-support-on-Windows) to update my firmware, and think I know how to remap my keys using the Model 01 firmware file in examples… simple enough.

But as I’m installing/modifying files, how do I know what plugins are currently installed? I’m completely lost here. Can someone please explain the workflow behind changing the keyboard’s firmware and how the Arduino IDE relates to it? Where are all the source files currently being used; are they the “examples” in the IDE? How exactly are plugins installed? Where can I see them? How do I know how much memory they’re using vs. my keyboard’s memory limits?

I know these are a lot of questions, and don’t need/expect them to all get answered, but if someone could shed some light on this process it would really help.

---

<div class="post-metadata">

**Author:** ![algernon](https://yyz1.discourse-cdn.com/flex031/user_avatar/community.keyboard.io/algernon/32/4404_2.png) [@algernon](https://community.keyboard.io/u/algernon)\
**Post date:** [July 7, 2018, 6:46am UTC](https://community.keyboard.io/t/how-do-i-tell-what-my-firmware-currently-has-installed/1730/2 "2018-07-07T06:46:37Z")

</div>

> [@harrdb12](#):
>
> how do I know what plugins are currently installed?

Installed in the firmware, or installed for Arduino, and being available for use?

If you installed through the board manager in the Arduino IDE, then [these](https://github.com/keyboardio/Arduino-Boards/tree/master/libraries) are the plugins available (`Kaleidoscope-*`).

> [@harrdb12](#):
>
> Can someone please explain the workflow behind changing the keyboard’s firmware and how the Arduino IDE relates to it?

Clone the [Model01-Firmware](https://github.com/keyboardio/Model01-Firmware) repository (or download a zip file). This is the factory firmware. Do any modifications you like, either in the Arduino IDE, or with any other editor you are familiar with. Then, open the Arduino IDE, load the sketch (the `.ino` file), compile and upload. That’s about it. The Arduino IDE is used for managing the libraries (somewhat), to compile, and to upload the firmware.

> [@harrdb12](#):
>
> Where are all the source files currently being used

As far as I remember, they will be somewhere in `Documents\Arduino`, and wherever you cloned `Model01-Firmware` (probably the same location).

> [@harrdb12](#):
>
> are they the “examples” in the IDE?

No, the examples are just that, examples for the various plugins. They are included with the plugin sources, mind you.

> [@harrdb12](#):
>
> How exactly are plugins installed?

The default set of plugins come with the board manager. When you install Keyboardio support in the Arduino IDE, you also install the default set of plugins.

> [@harrdb12](#):
>
> How do I know how much memory they’re using vs. my keyboard’s memory limits?

When you compile with the Arduino IDE, it will have small console-like window at the bottom, which will print how much space (flash & ram) the sketch uses, and what percentage of the available space that is.

---

<div class="post-metadata">

**Author:** ![harrdb12](https://avatars.discourse-cdn.com/v4/letter/h/e68b1a/32.png) [@harrdb12](https://community.keyboard.io/u/harrdb12)\
**Post date:** [July 7, 2018, 5:08pm UTC](https://community.keyboard.io/t/how-do-i-tell-what-my-firmware-currently-has-installed/1730/3 "2018-07-07T17:08:14Z")

</div>

Thank you for taking the time to answer my questions. Unfortunately, I’m still a bit lost; maybe an example will show what I mean. For reference, I’m currently on Windows and haven’t found the need to use Git yet, just the IDE.

Let’s say I make all kinds of changes to the firmware files and then flash my keyboard with these changes. So now I have a configuration quite different than the factory default. Then I delete the local copies of all the firmware files I’ve modified, but of course my keyboard’s firmware still has the changes. How can inspect all the changes I’ve made from the factory defaults in my keyboard? I can’t seem to find how to do that in Windows.

---

<div class="post-metadata">

**Author:** ![algernon](https://yyz1.discourse-cdn.com/flex031/user_avatar/community.keyboard.io/algernon/32/4404_2.png) [@algernon](https://community.keyboard.io/u/algernon)\
**Post date:** [July 7, 2018, 6:45pm UTC](https://community.keyboard.io/t/how-do-i-tell-what-my-firmware-currently-has-installed/1730/4 "2018-07-07T18:45:05Z")

</div>

> [@harrdb12](#):
>
> How can inspect all the changes I’ve made from the factory defaults in my keyboard?

If you delete the sources, you can’t. Not easily. The changes you made were compiled from source code to machine code, and flashed onto the keyboard. Think of it like a recipe: from a cookbook, you take a recipe (the factory firmware), you make a few changes to better suit your taste (your modified firmware), then you cook it (compile it), and serve it to friends & family (flash it, kind of).

From the finished dish, most of the time it’s very hard to figure out what you changed, compared to the original. Even if change is obvious (different sauce, for example), the exact details are not obvious from the dish itself. You’ll only know the details if you kept the modified recipe (the modified source code).

Does that help make things clearer?

---

<div class="post-metadata">

**Author:** ![harrdb12](https://avatars.discourse-cdn.com/v4/letter/h/e68b1a/32.png) [@harrdb12](https://community.keyboard.io/u/harrdb12)\
**Post date:** [July 8, 2018, 2:17am UTC](https://community.keyboard.io/t/how-do-i-tell-what-my-firmware-currently-has-installed/1730/5 "2018-07-08T02:17:35Z")

</div>

Yes, that explanation was great. It helped me install my first package, OneShot, more to follow. Sorry for being so dense, it’s actually really simple now that I get it. So here’s my current understanding of things, at least for Windows, which may help others…

Following the wiki instructions will set you up with the IDE which points to [https://raw.githubusercontent.com/keyboardio/boardsmanager/master/package\_keyboardio\_index.json](https://raw.githubusercontent.com/keyboardio/boardsmanager/master/package_keyboardio_index.json) for its KB packages and main firmware file; they aren’t actually on your local machine. You can make simple keymap changes and package installs to the firmware file by loading it from the ‘Examples’ and then flashing it onto your machine (after testing compilation of course). If you then close the IDE your firmware will of course remain modified but unless you saved a local copy of the Model01-Firmware.ino file your changes will be lost, since they only exist on the keyboard as machine code. This workflow works fine for minor changes, but if you actually want to do package development you will want to use Git to clone the package repo down and make your own changes.

All this leaves me with one worry though. Let’s say I get my firmware file configured just the way I want it and then an update comes along. How can I remain up-to-date while keeping my own modifications? I’m assuming merge conflicts are just something people learn to deal with?

---

<div class="post-metadata">

**Author:** ![algernon](https://yyz1.discourse-cdn.com/flex031/user_avatar/community.keyboard.io/algernon/32/4404_2.png) [@algernon](https://community.keyboard.io/u/algernon)\
**Post date:** [July 8, 2018, 5:52am UTC](https://community.keyboard.io/t/how-do-i-tell-what-my-firmware-currently-has-installed/1730/6 "2018-07-08T05:52:38Z")

</div>

> [@harrdb12](#):
>
> Let’s say I get my firmware file configured just the way I want it and then an update comes along. How can I remain up-to-date while keeping my own modifications? I’m assuming merge conflicts are just something people learn to deal with?

You do not _need_ to merge with the factory firmware to get most of the updates, as a lot of them come from the plugins or the core firmware. So you can opt not to merge, but hand-pick the changes you want from the factory firmware, if there are any.
