If you remove the operator surface.setResizable(true); , you can see that the canvas is 300x20, but there is no window:

There are many changes to processing 3.0, including refactoring window code that previously relied on the Java AWT package.
Looking through the current source code, you can see:
static public final int MIN_WINDOW_WIDTH = 128; static public final int MIN_WINDOW_HEIGHT = 128;
defined in the string PSurface.java 34 and used through PSurfaceAWT.java to provide these minimum window sizes.
Trying to access the Surface canvas ( println(surface.getNative()); ), I can specify it as processing.awt.PSurfaceAWT$SmoothCanvas , and I see the SmoothCanvas class with getFrame () method that looks promising, but seems to be it is not available (although this is a public method of the open class).
So, by default, at present, I would say that resizing a window would be less than 128x128 in 3.x processing - this is not an option.
If processing 3.x and a smaller window is required, you may be able to customize the source code yourself and recompile the main library, but this may bite you later when you have several processing projects with several versions of the main processing library. I would not recommend scouring main library.
If you can use Processing 2.x for your project, you can make the window size less than 100 pixels:

import java.awt.Dimension; int w = 300; int h = 20; int appBarHeight = 23;//this is on OSX, on Windows/Linux this may be different void setup() { size(w, h); frame.setResizable(true); } void draw() { if (frame.getHeight() != h+appBarHeight){//wait for Processing to finish setting up it window dimensions (including minimum window dimensions) frame.setSize(w,h+appBarHeight);//set your dimensions } background(128); }