efanXtraRelease Notes


Core parts re-written to allow standard classes and const classes to be used as components (they're no longer just for mixins!). This allows a much more natural style of Fantom programming with efan components. The rendering process has also been significanly simplified for a speedier result.


  • Chg: Optimised the common Template finders.
  • Bug: Pods could not be contributed as EfanLibraries more than once.
  • Bug: Nested components, each with a body fn, could cause a StackOverflowErr.


  • Chg: Renamed the, now unused, render method variable ctx to _ctx_ to prevent clashes with component field names.


  • Chg: efanXtra now references EfanCompiler by ID so other non-efanXtra IoC instances may be created.


  • New: Re-written for efan 2.0.
  • Chg: Updated all pods to latest versions.



  • New: Fandoc Type comments may also be used as templates.
  • Chg: Updated to work with IoC v3. (Breaking Change.)
  • Chg: TemplateConverters now takes contributions of |Str->Str|. (Breaking Change.)
  • Chg: Baseclass names are also used to find templates.
  • Chg: Each component renders into it's own StrBuf. This allows us to render arbitrary, non-nested, components and embed the result in template Strs.


  • Chg: Better handling of threaded services / dependency provided objects injected into components.


  • Chg: Advanced API change to accomodate @Inject'ed threaded services.
  • Bug: efanXtra now honours the @Autobuild facet.


  • Chg: Renamed @EfanLocation -> @TemplateLocation. (Oops!)


  • New: Added a couple of library methods to EfanXtra.
  • Chg: Updated to IoC 2.0.0.
  • Chg: Renamed @EfanTemplate -> @EfanLocation. (Breaking change.)
  • Chg: Internal work to lazily compile EfanLibraries.





  • Chg: Updated to use IoC 1.6.4, added dependency on IoC Env 1.0.6
  • Chg: EfanXtraConfigIds.templateTimeout now defaults to 2min in production environments, and 2sec otherwise.
  • Chg: Removed EfanXtraConfigIds.supressStartupLogging. To suppress the startup log, remove the RegistryStartup contribution afEfanXtra.logLibraries.


  • Chg: Updated to use Concurrent 1.0.4.
  • Chg: (Internal) Created ComponentRenderer.
  • Bug: Could not re-compile components.



  • New: Template files are optional! Small components may just override renderTemplate() instead.
  • Chg: Overhauled and tidied up the public API and documentation. (Breaking change.)
  • Chg: Type checks involving Lists and Maps are more lenient when calling lifecycle methods.



  • Chg: Components may now have threaded services injected into them!


  • New: Added EfanLibraries.callMethod() hook for Pillow.
  • Chg: Components automatically use the pod that the component mixin was defined in.
  • Chg: ComponentCompiler callbacks now take the component type.
  • Chg: FindEfanByFacetValue is public for use by Pillow.
  • Chg: Render methods are searched for on the component instance, not just the mixin. This is so it may still be called if it's added dynamically.


  • New: fandoc files may be used as efan templates!



  • Chg: @InitMethods may now only return Void or Bool. Throw BedSheet's ReProcessErr if you wish to perform a different action.
  • Chg: Multiple components may now share the same template file.


  • Chg: Overhauled API documentation.
  • Chg: Tweaked some method signatures with correct nullable types.


  • New: Introduced component lifecycle methods: @InitRender, @BeforeRender & AfterRender.
  • New: Added @Abstract facet to mark base components.
  • Chg: Template rendering is held in a single mutable StrBuf so it may be manipulated by lifecycle methods.
  • Chg: Components are now defined by extending EfanComponent, not by annotating with a @Component facet.
  • Chg: Renamed to efanXtra (from efanExtra).


  • New: Added EfanTemplateDirectories service which scans external directories for efan templates.
  • New: Compilation err msgs are updated with code hints should a simple component rendering typo be spotted. (ALIEN-AID)


  • New: Fields may be annotated with any facet, not just @Inject. Think @Config!!!
  • Chg: Updated to efan-1.3.2
  • Chg: Better Err msgs if component template not found.


  • New: Component templates can be specified via the @Component.template field.
  • New: Added a contributable EfanTemplateFinders service.
  • New: Ability to suppress startup log messages.
  • New: Added compiler hooks (mainly for Pillow).
  • New: efanXtra.component() returns component instances.
  • Chg: @Component facet is inherited.


  • New: Preview Release