Igor, i'm curious on how you plan to implement the actual real usage of a Cairo Canvas, besides the toy examples that Javier implemented (writing to png , and then to a form, then to image morph). I recently been playing with Cairo, and found out the following options: 1) Rendering to a bitmapped quartz context, then getting the data and blitting to the display. 2) Rendering to a windowed quartz context, see the example below, hooking up cairo on the drawRect: of a NSView of Cocoa window. - (void) drawRect: (NSRect) rect{ CGContextRef cgContext = [[NSGraphicsContext currentContext] graphicsPort]; cairo_surface_t * surface= cairo_quartz_surface_create_for_cg_context( cgContext, (int) self.bounds.size.width, (int) self.bounds.size.height); cairo_t *cr = cairo_create(surface); "do some cairo rendering here" cairo_destroy(cr); cairo_surface_destroy(surface); } Would it be possible to reach the [[NSGraphicsContext currentContext] graphicsPort], using Native Boost? So we could render to that OS window, using Athens within Pharo? (Assuming the NSWindow holding the above NSView on the example is the main window). Fernando pd:...3) Surface plugin, and still be using Forms again?