The definitive source of the best
JavaScript libraries, frameworks, and plugins.

  • ×

    Embedded JS template engine for Node, Deno, and the browser. Lighweight, fast, and pluggable. Written in TypeScript
    Filed under 

    • 🔾51%Overall
    • 1,290
    • 6 days
    • 🕩60
    • 👥17

    eta (Ξ·)

    Documentation - Chat - RunKit Demo - Playground

    GitHub package.json version (main) GitHub Actions Status All Contributors Coveralls Donate

    You're viewing the source for Eta v3, which we just released! For v2, visit the old branch.


    Eta is a lightweight and blazing fast embedded JS templating engine that works inside Node, Deno, and the browser. It's written in TypeScript and emphasizes great performance, configurability, and small bundle size.

    🌟 Features

    • πŸ“¦ 0 dependencies
    • πŸ’‘ Only ~3.5 KB minzipped
    • ⚑️ Written in TypeScript
    • ✨ Deno support (+ Node and browser)
    • πŸš€ Super Fast
    • πŸ”§ Configurable
      • Plugins, custom delimiters, caching
    • πŸ”¨ Powerful
      • Precompilation, partials, async
      • Layout support!
    • πŸ”₯ Reliable
      • Better quotes/comments support
        • ex. <%= someval + "string %>" %> compiles correctly, while it fails with doT or EJS
      • Great error reporting
    • ⚑️ Exports ES Modules as well as UMD
    • πŸ“ Easy template syntax

    Get Started

    For more thorough documentation, visit

    Install Eta

    npm install eta

    In the root of your project, create templates/simple.eta

    Hi <%= %>!

    Then, in your JS file:

    import { Eta } from "eta";
    // import { Eta } from "";
    const eta = new Eta({ views: path.join(__dirname, "templates") });
    // Render a template
    const res = eta.render("./simple", { name: "Ben" });
    console.log(res); // Hi Ben!


    Where did Eta's name come from? "Eta" means tiny in Esperanto. Plus, it can be used as an acronym for all sorts of cool phrases: "ECMAScript Template Awesomeness", "Embedded Templating Alternative", etc.... Additionally, Eta is a letter of the Greek alphabet (it stands for all sorts of cool things in various mathematical fields, including efficiency) and is three letters long (perfect for a file extension).


    Visual Studio Code @shadowtime2000 created eta-vscode.
    ESLint eslint-plugin-eta was created to provide an ESLint processor so you can lint your Eta templates.
    Webpack Currently there is no official Webpack integration but @clshortfuse shared the loader he uses: javascript { loader: 'html-loader', options: { preprocessor(content, loaderContext) { return eta.render(content, {}, { filename: loaderContext.resourcePath }); }, }, }
    Node-RED To operate with Eta templates in Node-RED: @ralphwetzel/node-red-contrib-eta image

    Projects using eta

    • Docusaurus v2: open-source documentation framework that uses Eta to generate a SSR build
    • swagger-typescript-api: Open source typescript api codegenerator from Swagger. Uses Eta as codegenerator by templates
    • html-bundler-webpack-plugin: Webpack plugin make easily to bundle HTML pages from templates, source styles and scripts
    • SmartDeno: SmartDeno is an easy to setup web template using Deno & Oak
    • stc: OpenAPI (Swagger) and Apifox documentation converted to api. Use eta templates to generate code.
    • Add yours!


    Made with ❀ by @nebrelbug and all these wonderful contributors (emoji key):

    Ben Gubler
    Ben Gubler

    πŸ’» πŸ’¬ πŸ“– ⚠️
    Clite Tailor
    Clite Tailor

    πŸ€” πŸ’»
    Ioan CHIRIAC
    Ioan CHIRIAC

    πŸ’» πŸ€”
    Craig Morten
    Craig Morten

    Rajan Tiwari
    Rajan Tiwari


    πŸ’» πŸ€” ⚠️
    Hamza Hamidi
    Hamza Hamidi

    Calum Knott
    Calum Knott




    This project follows the all-contributors specification. Contributions of any kind are welcome!


    • Async support, file handling, and error formatting were based on code from EJS, which is licensed under the Apache-2.0 license. Code was modified and refactored to some extent.
    • Syntax and some parts of compilation are heavily based off EJS, Nunjucks, and doT.
    Show All