Library / SDK
MCUdude/MicroCore avatar
MCUdude/MicroCore

MicroCore fits an ATtiny13 into the Arduino IDE with 1 KB of flash to spend

A light-weight Arduino hardware package for ATtiny13

613 stars90 forksC++License varies

At a glance

What is it?
MicroCore is a lightweight Arduino hardware package for the ATtiny13, ATtiny13A and ATtiny13V that keeps the IDE workflow while trimming the core down to about a kilobyte of usable flash and adding Urboot as a bootloader option. It suits makers who want a one-cent microcontroller to run a real Arduino sketch, and its limits are the chip's 64 bytes of RAM and the fact that several IDE features are simply not there.
Who is it for?
Makers who have chosen the ATtiny13 because of its price and DIP package, and who want to sketch in the Arduino IDE rather than set up a bare metal toolchain, are the people MicroCore is for, and the combination of a trimmed core, Urboot and the usual Arduino functions is what makes an eight pin part workable.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Activity is slowing. The repository last received commits 6 months ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The pitch is one kilobyte of flash and the same IDE you already use

The reason to look at this package is the combination of two things that normally do not travel together. The chip is tiny, with 1 KB of flash and 64 bytes of RAM, and the Arduino core written for the ATmega328P assumes far more than that. MicroCore is a cut-down core that fits the ATtiny13 and still lets you use the IDE, and the documentation states the payoff directly, that thanks to MicroCore you can fit a lot of high-level code into 1024 bytes. The audience is therefore not professional embedded engineers, who would never choose this chip, but makers with a specific need for a cheap, tiny controller and a preference for the Arduino workflow over a bare metal toolchain. The package supports the ATtiny13, ATtiny13A and ATtiny13V, and the documentation claims it is easy to install and easy to use, with lots of features, including bootloader support and support for most Arduino functions.

Five internal clock speeds, and the external ones have a catch

The clock configuration is where the ATtiny13's constraints show. The chip has several internal oscillators, and the available frequencies are the 9.6 MHz internal oscillator as the default, 4.8 MHz, 1.2 MHz, 600 kHz and the 128 kHz internal watchdog oscillator. If you want other or higher frequencies you can apply an external clock source, and the documented supported external frequencies are 20 MHz, 16 MHz, 12 MHz, 8 MHz and 1 MHz. The catch is stated in the same paragraph and is a real hardware limitation rather than a software preference, since the ATtiny13 requires an external clock signal and is not able to drive a resonator circuit itself. You may use a quartz crystal oscillator or a crystal driver, and the crystal driver is the route the author's own development board uses. To select a frequency you pick the ATtiny13 in the boards menu and then the clock frequency, and you then have to hit Burn bootloader to set the correct fuses with an ISP programmer connected and the right programmer chosen in the Programmers menu.

Urboot is the reason a USB-to-serial upload is safe on this chip

The bootloader choice is the most considered decision in the package. MicroCore supports the ultra-light-weight and efficient Urboot bootloader, written by Stefan Rueger, and the documentation explains why it matters on a chip with 1 KB of flash. The bootloader makes it trivial to upload sketches using a USB-to-serial adapter, just like with a traditional AVR-based Arduino board, but unlike other bootloaders Urboot only occupies 256 bytes of flash and protects its patched reset vector. The consequence is stated as practically impossible to mess up the reset vector and brick the chip, which is a specific contrast with Optiboot named in the same sentence. The reset vector is exactly what a 1 KB part cannot afford to lose, so a bootloader that both fits and guards it is the difference between a usable and an unusable part. The default bootloader UART pins are PB0 as TXD and PB1 as RXD, so PB0 connects to RXD on the USB-to-serial adapter and PB1 to TXD.

The internal oscillator is out of spec, and the fuse options compensate

A detail in the bootloader section is worth knowing before a first upload fails. The internal oscillator on the ATtiny13 is usually slower than it should be according to the spec, and the fix offered is to try burning the slower and faster ones, in the region of minus 1.25 percent and plus 1.25 percent, if the Bootloader Yes option does not work. The documentation notes that this is not applicable when using an external clock, and that selecting something other than Yes results in loading the same bootloader regardless. So there are two variables that interact, the chosen clock and the chosen bootloader option, and the failure mode of one is a symptom that looks like the other. The developer board the author sells addresses this with an on-board crystal driver that lets you use any crystal to drive the microcontroller main clock, which sidesteps the calibration question entirely at the cost of not using the internal oscillator at all.

LTO is on by default, which matters more than it sounds

Link-time optimisation is enabled by default and reduces the code size at compile time, and the documentation treats this as a headline feature rather than a compiler detail. On a 1 KB part, a smaller binary is the difference between a sketch that fits and one that does not, and the package's own claim, that you can fit a lot of high-level code into 1024 bytes, rests on it. The documentation points out that compiler optimisation can certainly make code smaller, but that it is all about writing efficient code, and links an application note from Microchip on writing more efficient C code for AVR microcontrollers, AVR4027. The honest reading is that LTO buys you margin, not a solution, and a sketch written carelessly on this chip will not fit no matter what the compiler does. The same section explains that the flag exists to be turned off if you want to understand it, pointing at the GNU GCC documentation on optimisation options.

The development board is 42 by 42 millimetres and covers the whole family

The author's own board is worth describing because it is a worked example of the constraints the package addresses. It comes with an on-board USB to serial adapter with status lights and is preloaded with the Urboot bootloader, and it has the on-board crystal driver for the main clock, selectable 5V and 3.3V target power, and support for 6 to 12V on the VIN pin. A trim pot provides a simple way to obtain an analog reference voltage, for instance for LCD contrast. Male and female headers and two grounded mounting holes are there to make it convenient with breadboard wires or oscilloscope probes, and the board measures only 42 by 42 millimetres. It supports the ATtiny13, ATtiny15, ATtiny25, ATtiny45 and ATtiny85, which is the wider ATtiny line rather than the 13 alone. The same board doubles as the minimal setup referenced elsewhere in the documentation for the clock options and the bootloader pins.

Installing means adding the package to the Boards Manager

The documentation is organised around four install routes, and it points to them rather than spelling out the commands. The table of contents lists Boards Manager Installation, Manual Installation, Arduino CLI Installation and PlatformIO, and the corresponding sections in the readme cover each. The Boards Manager route is the one that matches the promise of being easy to install, since the package is registered as a third-party board definition and appears in the boards menu, where the ATtiny13 and the clock frequency are then selectable. The Arduino CLI route exists for headless and CI use, and the PlatformIO route is documented in a separate PlatformIO.md file at the repository root. The repository layout is small, with an avr directory holding the core and the example files, a .travis.yml file for continuous integration, and the PlatformIO.md and README.md files, so the package itself is compact and the documentation carries the weight.

Where MicroCore is the wrong choice

The first wrong case is any sketch that needs more than about a kilobyte of flash. The ATtiny13 has 64 bytes of RAM, which is a hard wall that no amount of trimming in the core will move, and the ecosystem of standard Arduino libraries assumes a different order of magnitude of memory. A project that pulls in a display library, a networking library or anything resembling a state machine will not fit, and the honest test is to compile it and read the size report rather than to reason about it. The second wrong case is a developer who wants the full Arduino library set, because most libraries in the ecosystem target the ATmega and assume its RAM, so the working set on this chip is a curated subset rather than the whole catalogue. The third is a team that cannot accept a bootloader occupying 256 bytes and a reset vector the compiler does not fully own, even though Urboot protects it. The fourth is a project that needs to run at a clock speed not on the list without adding a crystal, since the internal oscillators stop at 9.6 MHz and anything faster means external hardware.

Editorial conclusion

Makers who have chosen the ATtiny13 because of its price and DIP package, and who want to sketch in the Arduino IDE rather than set up a bare metal toolchain, are the people MicroCore is for, and the combination of a trimmed core, Urboot and the usual Arduino functions is what makes an eight pin part workable. It is the wrong tool for anything that needs more than a kilobyte of flash or a few dozen bytes of RAM, and it is the wrong tool for a team that wants the full Arduino library ecosystem, since the standard libraries assume more memory than the chip has. Check three things before you commit: that your sketch really fits in 1024 bytes of flash once compiled, that the clock frequency you need is either one of the internal oscillators or an external source you can wire, since the ATtiny13 requires an external clock signal and cannot drive a resonator itself, and that you read the supported functions and library list in the documentation, because the set that works on the ATtiny13 is smaller than the set that works on an ATmega328P. The licence is not stated on the repository, the newest release is v2.5.2 from 2026-02-10, and the last push was on 2026-04-22.

Frequently asked questions

What is MicroCore and which chips does it support?

MicroCore is a lightweight Arduino hardware package for the ATtiny13, ATtiny13A and ATtiny13V, and it also supports the ATtiny15, ATtiny25, ATtiny45 and ATtiny85. The documentation says it keeps most Arduino functions working on a chip with 1 KB of flash.

How much flash can I actually use on an ATtiny13 with MicroCore?

The documentation claims you can fit a lot of high-level code into 1024 bytes. Link-time optimisation is enabled by default to reduce code size at compile time, but the documentation also stresses that it is about writing efficient code, and Microchip's application note AVR4027 is linked for that.

Which clock frequencies can the ATtiny13 use with MicroCore?

The internal oscillators are 9.6 MHz as the default, 4.8 MHz, 1.2 MHz, 600 kHz and the 128 kHz watchdog oscillator. Supported external frequencies are 20, 16, 12, 8 and 1 MHz, and the chip requires an external clock signal because it cannot drive a resonator itself.

Why does MicroCore use the Urboot bootloader?

Urboot, written by Stefan Rueger, occupies only 256 bytes of flash and protects its patched reset vector, which the documentation says makes it practically impossible to brick the chip. Its default UART pins are PB0 as TXD and PB1 as RXD, so it works with a plain USB-to-serial adapter.

How do I install MicroCore for the Arduino IDE?

The documentation lists four routes, Boards Manager Installation, Manual Installation, Arduino CLI Installation and PlatformIO, with the PlatformIO route documented in a separate PlatformIO.md file. The Boards Manager route is the one the package describes as easy to install, after which the ATtiny13 and its clock frequency appear in the boards menu.

Official sources

  1. Issues
  2. MCUdude/MicroCore on GitHub
  3. README
  4. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/mcudude-microcore.svg)](https://hysenlabs.com/projects/mcudude-microcore)

Was this useful?