Hello, Currently, a back-end is a symbol which may point to an entry in `org-export-registered-backends' variable. Therefore a back-end must be registered (with a unique name) before one can call it. Or, to put it differently, it is impossible to use an anonymous and temporary back-end. This is not satisfying for developers, as there are situations when you need to use a one-shot back-end but don't want to clutter registered back-ends list. You can of course let-bind `org-export-registered-backends' to something else, but it leads to clunky code. The process should be abstracted a bit more. The following (long) patches address this by defining back-ends as structures (see `defstruct'), possibly anonymous and by separating creation from registration process. It allows to quickly create and use temporary back-ends. In the example below, we quickly export a string using a temporary back-end: (org-export-string-as "* H1\n** H2\nSome string" (org-export-create-backend :transcoders '((headline . (lambda (h contents i) (let ((m (make-string (org-export-get-relative-level h i) ?=))) (concat m " " (org-element-property :raw-value h) " " m "\n" contents)))) ;; Contents only. (section . (lambda (e c i) c)) (paragraph . (lambda (e c i) c))))) It is also possible to create a temporary derived back-end. The following export will use registered `latex' back-end, excepted for `bold' type objects. (org-export-string-as "Some *bold* /string/" (org-export-create-backend :parent 'latex :transcoders '((italic . (lambda (o c i) (format "\\texit{%s}" c))))) 'body-only) Besides `org-export-create-backend', tools provided are: - `org-export-get-backend' - `org-export-register-backend' - `org-export-get-all-transcoders' (handles inheritance) - `org-export-get-all-options' (handles inheritance) - `org-export-get-all-filters' (handles inheritance) At a higher level, `org-export-define-backend' and `org-export-define-derived-backend' do not change (they are equivalent to create and register in a row). So this change only matters for back-end developers who used advanced features like `org-export-with-translations' (which should now be `org-export-with-backend' coupled with an anonymous back-end). Also, it leads to a cleaner implementation as it removes the confusion between a back-end and its name. The next step after applying this patch will be to make orgtbl-to-BACKEND functions use anonymous functions in order to support :splice property, which is tedious with the new export framework. Feedback welcome. Regards, -- Nicolas Goaziou