WS2812B vs SK6812 vs APA102: which addressable LED should you use?
Three chips cover almost every project. Here is what actually differs between them, in numbers from the datasheets, and a short rule for choosing.
Almost every addressable LED you will buy is one of three designs. Two of them are the same idea built by different companies, and the third is a different idea altogether. This guide compares them on the things that decide a project, using the figures recorded in this catalogue, and ends with a rule of thumb.
If you only want the rule: on one wire, the current WS2812B and the SK6812 are close on paper, so choose the SK6812 when you want an RGBW version and the WS2812B when you want the part every library and tutorial assumes; use an APA102 if a microcontroller is busy or a camera is watching; and match what is already there when you are extending something that exists. An earlier version of this guide leaned towards the SK6812 on PWM frequency. That advantage holds only against the original 400 Hz WS2812B silicon, which is no longer what is sold, and the figures below now say so.
What you are choosing between#
The WS2812B is what most people mean by "NeoPixel". Adafruit coined that name in December 2012 as a brand, and it stuck to a whole category. The WS2812B is made by WorldSemi, has four pins, and takes one data wire.
The SK6812 is OPSCO's counterpart to it. The 5050 package has the same four pads in the same places (the datasheet generations number them differently), and WS2812B code usually drives it. It also comes in an RGBW version, which the WS2812B has no equivalent for.
The APA102 (sold by Adafruit as "DotStar") is a different kind of part. It has a separate clock line, so it needs two signal wires instead of one, and six pins on the package instead of four.
The numbers side by side#
| WS2812B | SK6812 | APA102 | |
|---|---|---|---|
| Signal wires | 1 (data) | 1 (data) | 2 (data and clock) |
| Pins on a 5050 | 4 | 4 | 6 |
| Colour | RGB | RGB, or RGBW | RGB |
| Supply | 3.5–5.3 V (old sheet) 3.7–5.3 V (V5) | 3.5–5.5 V (2015 sheet) 3.7–5.5 V (2025 sheet) | 5 V (the sheet gives no range) |
| Drive per channel | 12 mA (V5, V6) 16 mA (V7) | 13 mA test (2015) 12 mA typical (2025) | 20 mA constant current |
| PWM frequency | ≥400 Hz (old sheet) 2 kHz (V5 and later) | 1.2 kHz (2015) 1.0 kHz (2025) | about 20 kHz (teardown, not the sheet) |
| Bit period | 1250 ns | 1200 ns (2015 sheet) | none: you set the clock |
| Reset (datasheet) | >50 µs (old sheet) >280 µs (V5 and later) | 80 µs (2015) >200 µs (2025) | none |
| FastLED | native | native | native |
| WLED | generic | generic | native |
Where two datasheet generations disagree, both are shown rather than one picked. The WS2812B's two rows are the original silicon and the WS2812B-V5 and later, which change the supply, reset and PWM figures; every WS2812B 5050 listing the catalogue found on LCSC carries a V5 or later sheet, so the second figure is the one you are likely to get. We cover that in its own post. The SK6812 has a 2015 sheet and a 2025 sheet that disagree on reset, PWM and drive, and the catalogue does not know whether the silicon changed or only the documentation. The APA102 figures come from the Shiji APA102C sheet, which lists a "refresh rate" of "400 cycle" and a 5 V supply; the 20 kHz comes from cpldcpu's teardown. The 20 mA / 60 mA per pixel figure often quoted for WS2812B and SK6812 is a design rule of thumb, not something these sheets state; the catalogue now shows the sheets' 12 mA and flags the difference on the part pages.
One wire against two#
The WS2812B and SK6812 carry a bit as a pulse width on a single wire. The line goes high at the start of every bit and falls again after a short time for a zero or a longer time for a one. Nothing else tells the chip where a bit begins, so the sender has to hit the timing itself.
Both parts use a bit period of about 1.2 µs. A zero and a one take the same time on the wire; only the length of the high pulse differs. The bars above use the older datasheet figures (the Adafruit-mirrored WS2812B sheet and the 2015 SK6812 sheet), in nanoseconds. Neither datasheet agrees exactly with the values libraries use, and the catalogue records both sets. What matters in practice is how little slack there is: each of those sheets allows ±150 ns. The current sheets give wider windows instead of nominals (the V5 sheet, for instance, allows 580 ns to 1 µs for three of its four intervals), which says more about how the documentation changed than about how much slack a given part has.
That slack is small enough that anything that interrupts the sending loop can corrupt a frame, which is the main practical weakness of one-wire parts. The APA102 sidesteps this. It has a clock, so the sender can pause for as long as it likes between bits and nothing breaks. On a processor that is also handling WiFi, USB or audio, that is a real advantage.
The price is a second signal wire, two more pins on every LED, and the cost of getting a clock line to every pixel cleanly on a long run.
How long does a frame take?#
Every pixel on a one-wire part costs 24 bits (32 for RGBW), and that time adds up. At 300 pixels, using the timings FastLED uses:
That is about 9.3 ms for a 300-pixel WS2812B run, so about 107 frames per second at best, and each RGBW pixel adds a third to the time. An APA102 sends 32 bits a pixel too, but you choose the clock speed (the catalogue records 1 to 20 MHz as common), so at 4 MHz the same 300 pixels take about 2.4 ms before the start and end frames.
For most projects a 100 fps ceiling is plenty. It starts to matter on long runs and on anything that scans a display.
Flicker, and which kind you mean#
People use "flicker" for two unrelated problems, and the three chips handle them differently.
Data glitches are wrong colours, a random pixel flashing, or colours sliding down the strip. They come from timing, which is a one-wire problem. The APA102 does not have it.
PWM flicker is the banding you see when you film the LEDs or pan your eyes across them. Each LED dims itself by switching on and off quickly, and the switching rate decides whether a camera can see it.
- The original WS2812B sheet gives a scan frequency of at least 400 Hz, which the catalogue describes as low enough to show on camera. The V5 and later sheets state 2 kHz.
- The SK6812 sheets give 1.2 kHz (2015) and 1.0 kHz (2025): three times the original WS2812B, but below the V5's 2 kHz.
- The APA102 runs at about 20 kHz (cpldcpu's measurement; the datasheet we hold states no PWM frequency), which is why the catalogue calls it the usual choice for film work and persistence-of-vision displays.
There is a catch with the APA102. Its brightness field is applied on top of that fast PWM as a slower PWM, so turning down the global brightness brings lower-frequency flicker back. If you dim in software through that field, the SK9822 is worth a look: cpldcpu's teardown found that it sets brightness with a real current source, so it does not flicker when dimmed. Its PWM frequency is disputed. That teardown measured 4.7 kHz, lower than the APA102, but OPSCO's own SK9822-001 and SK9822-A-000 sheets state 27 kHz and the SK9822-EC20 sheet 1.2 kHz. Different silicon generations or errors; only a scope settles it, so check which part you actually have before relying on either number.
Colour: the case for RGBW#
The only mainstream addressable LED with a dedicated white die is the SK6812 RGBW. Mixing white from red, green and blue gives a greenish, inefficient white; a real white die is cleaner and brighter per watt. The white is sold in fixed temperatures (the SK6812RGBW sheet defines warm 2700–3000 K, natural 4000–4500 K and blue-white 6000–7000 K ranks, which the catalogue rounds to about 3000, 4500 and 6000 K), and you pick one when you buy because it is a property of the die.
The code is slightly different. Each pixel is 32 bits instead of 24, so driving an RGBW strip with an RGB setting shifts colours down the line.
Supply voltage and long runs#
All three of these are 5 V parts. The supply ranges in the datasheets are close: 3.5–5.3 V for the old WS2812B sheet (3.7–5.3 V in V5, 3.3–5.3 V in V6 and V7) and 3.7–5.5 V for the current SK6812 sheet (3.5–5.5 V in 2015). The SK6812's upper limit is 0.2 V higher; it is not meaningfully wider. The APA102C sheet gives only "5 VDC". On a long run, voltage drops along the strip and the far end sees less than the near end.
If that is your problem, look at the 12 V parts instead. The WS2815 runs at 12 V, which means far less voltage drop over a long run, and it adds a backup data line so that one failed LED does not blank everything after it (the 4-pin WS2815 variants drop the backup input). The WS2813 has the same backup line at 5 V.
Which one should you use?#
Pick by the problem in front of you.
- A normal project, new design, one wire: the WS2812B or the SK6812 in 5050. They share a footprint and mostly share code, and on the current datasheets neither wins clearly: the WS2812B-V5 states 2 kHz PWM and a reset above 280 µs, the SK6812 states 1.0–1.2 kHz and a reset of 80 µs to above 200 µs. Whichever you pick, leave a frame gap of at least 300 µs.
- You need white light, or a decent neutral white: the SK6812 RGBW. It is the only part in this comparison with a dedicated white die.
- A busy microcontroller, a camera in the shot, or you cannot guarantee timing: the APA102. Pay for the second wire.
- You are repairing or extending something that exists: match what it has, and if it is a WS2812B, check whether it is a V5 or later.
- A long permanent installation: the 12 V WS2815.
One warning applies to all of them. Cheap strip sold as "WS2812B" is not always a WS2812B: the catalogue notes that the APA104 turns up in strip sold under that name. The two are close, but their reset requirements are said to differ (the catalogue has no APA104 datasheet, so this is unverified), so a marginal driver that works on one may not work on the other.
Where these numbers come from#
Every figure above is on the linked protocol and part pages, with its source. Where datasheet generations disagree, or the datasheet and FastLED disagree, both are recorded rather than one being picked. If you find a figure that is wrong, tell us and we will fix it.