Well then adding two more methods options(map) and attributes(map) which they receive a map as a base set of options, it is not a problem (I think it is a good idea) and won't break compatibility with previous versions. About static constructors, I think it is not a problem, I mean, render method receives a Map, so users can create a Map and setting it without any problem, but they can use that Builder (DSL) which uses a static method to be more readable from the point of view of reader. I mean that when someone reads options().compact(true), it is quite intuitive that you are creating an option with compact to true. Moreover it should be called options and not create because if more than one builder must be used (like this case) then you must use the fully qualified name to refer it, you cannot use static import. With this approach you can use of them without any problem.