05 Jun 2023

After doing 3D printing for about 6 years using 3 different printers, 2 different printer firmware types, 6 different slicers, 2 different filament types, and a half dozen types of print bed surfaces you’d think I’d know a bit about how to get a good first layer. Well, I’ve held off making this blog page until I was quite sure I figured out how to do it. And like most things, it’s more complicated than it seems.

To make this page as short as possible I’ll only include data on what works for me. At the end I’ll add a complete list of all the things I’ve tried. To make it clear what I mean by “a good first layer” here’s a photo of a test I use to check first layer goodness. Note that I aborted the test after printing only about 1 1/2 layers. I’ve learned that a good first layer, in addition to looking good, has to allow for a good second layer too.

This print is a circular disk that is one of my standard test print files. You can get all of them here: https://cults3d.com/en/3d-model/tool/test-prints

For the photo I positioned the light at 45 degrees to the lines of print to show as much detail as possible, and I upped the image’s saturation and detail settings. In real life the print looks a lot better than this photo suggests.

In what I think is a logical order, here are the factors that contribute to first layer goodness:

Calibrate Printer

Before attempting to do anything you have to ensure your printer’s firmware knows what the geometry of your printer is. Fortunately this is fairly easy to do for both Marlin and Klipper: they each have a Calibration command that causes the printer to determine and store it’s geometry information.

Set Bed Level/Bed Mesh

Once your printer is calibrated you have to set the bed mesh to account for any unevenness in your print bed. Again, both Marlin and Klipper have built in commands that do this quite well.

Set Z=0

The first key to printing a good first layer is ensuring that the tip of the nozzle is the proper distance above the printbed surface. The general method is to store in the printer’s firmware the Z value at which the tip of the nozzle just lightly rubs the top surface of a piece of paper placed on the print bed. (This is the so-called “paper test.”) This is supposed to be a simple, easy procedure, but for me it never has been. Both Marlin and Klipper have built-in commands designed to make it easy to set Z=0, but I’ve never been able to get them to work reliably.

Instead, this is the method I use:

  1. Home printer.
  2. Enter command G1 Z10 F2500 <== moves printhead to height Z = 10
  3. Manually jog the printhead down 1 mm at a time until it is within about 1 mm of the print bed. Note: when doing this you may get an error message about “Unable to move past ZMin”, or something like that. This is the result of a default minimum Z value set in your printer firmware. To complete this process you have to change that value in your printer’s firmware to a much lower one, and then reboot your printer to load the updated firmware. Once this is done start over at Step 1.
  4. Use the Fine Tuning/Baby Step function to move the printhead to a good Z=0 position
  5. Use the Save Configuration command to save this value into the printer’s firmware and reboot the printer.

Filament type

Needless to say, each different filament type requires it’s own set of settings. Everything I mention below is for PLA filament only. I never found any significant difference between PLA filament manufacturers, and I’ve used maybe half a dozen different ones. One time a friend asked me to print some small parts using PetG. Because PetG is far different from PLA I found it to be particularly troublesome, and it took me about a week to find a good set of settings for it. So expect to do some testing if you use different filament types.


Different slicers simply behave differently. Consequently I found that you can transfer slicer settings from one slicer to another, but you can’t expect the other one to produce comparable results without some amount of tweaking. I’ve settled on PrusaSlicer for some time now, so the settings below are for that one. I’ve been experimenting with Orca slicer, but have yet to find settings for it that work as well as PrusaSlicer. Which is odd because Orca is a fork of PrusaSlicer, and this leads me to believe there’s a lot of new and/or changed code in Orca.

Slicer Settings

Assuming your printer is properly calibrated it is probably true that your slicer settings are the most important factor that determine first layer goodness. Many of these settings are inter-dependent, so you will probably have to do some trial-and-error testing to see what combinations of settings is best for your overall configuration. These are the settings I use:

These are settings for Prusaslicer Ver. 2.6.0 Beta 4, which is the most current one at the time I’m writing this page. Note that I don’t print things with rafts or supports, so there is nothing useful about these features in my settings file. I expect the settings for future versions of Prusaslicer will not change from these very much, if at all.

Here are a few notes about these settings:

  1. My printer is equipped with a CHC-Pro hotend and an LGX-Lite direct drive extruder, so some of the settings reflect this hardware. Be sure to run some test prints and make adjustments as needed for your printer’s configuration.
  2. You’ll note that these settings turn the part cooling fans off for the first 5 layers. There’s a good reason for this, which I’ll explain in a future blog page – it basically has to do with what’s called Tg, otherwise known as the glass transition temperature.
  3. The GCode type is set to Klipper, because that’s what drives my printer. If you are running Marlin be sure to change this.


The first layer temperature can be set independently of all the other layers. This is because the first layer temperature has a lot to do with how well it adheres to the print bed (whatever it is.) For the smooth PEI surface I use I specify a of 215C for all layers. Note that these values are for PLA; other filament types will require their own temperature settings.

Print Bed Material

A rigid print bed, like the one most printers come with, can be a real problem if the first layer sticks to it too much. When this happens the print is easily damaged by pulling, prying, or scraping. On the other hand, a first layer that doesn’t stick well enough will result in the infamous pile of spaghetti when the print comes loose from the print bed.

As you’ll see below I’ve tried printing on just about every possible print surface there is. Hairspray is the only one I haven’t tried. I quickly discovered the 2 common problems with print bed material – it can either hold too tightly, or not tightly enough.

The solution that works best for me is one of the spring steel sheets coated with PEI (whatever that is.) These sheets typically have a PEI coating on both sides, with one side being smooth and the other having a slight texture. I use the smooth side because it seems to result in a slightly smoother first layer.

When the print is finished it’s easy to remove the print from the PEI plate by simply removing the print and the plate from the printer and slightly bending the plate. Giving it just a small amount of curvature causes the print to literally pop off the plate.

Most all PEI plates come with 2 parts: the PEI plate itself, and a flexible magnetic mat that has sticky stuff on one side. Use this to stick the mat to your printer’s print bed, and then let the mat’s magnetic force hold the PEI plate to the mat. You’ll be surprised at how well that mat holds the PEI plate in place.

Note that if you use one of the 2-sided PEI plates, be sure to have the smooth side on top for doing the bed mesh and Z=0 calibrations. You can flip it over to print on the textured side after those functions are done.

Happy printing!

Things I’ve printed with

  • Atom2 printer
  • FLSun QQS-Pro printer
  • FLSun SuperRacer printer <== currently using
  • Marlin firmware
  • Klipper firmware <== currently using
  • Craftware slicer
  • KISS slicer
  • Simplify3d slicer
  • Orca slicer
  • SuperSlicer
  • PrusaSlicer <== currently using
  • PLA filament <== currently using
  • PetG filament
  • Glass print bed
  • Blue tape on glass print bed
  • Gluestick on glass print bed
  • Slightly flexible plastic print bed
  • Not so flexible Formica-type printbed
  • Smooth uncoated metal print bed
  • Smooth metal surface PEI print bed<== currently using
  • Textured metal surface PEI print bed

All 3 printers are delta-style printers. I’ve never used a Cartesian printer. I switched from Marlin to Klipper firmware when FLSun came out with their Speeder pad. Although I spent many hours learning how to deal with and modify Marlin I was happy to leave it. I find Klipper far easier to deal with, and it produces results at least as good as Marlin, and probably better.