add life cycle protocols and render protocol