Tarkine - A lightweight and high-performance template engine for Node.js, designed for speed and simplicity.
npm install tarkineconst Tarkine = require('tarkine');
Tarkine.cache.enable(true);
const output = Tarkine.renderFile("./template.tark", {
username: "John Doe",
html: "<span>Some HTML</span>",
status: true
});
console.log(output);const Tarkine = require("tarkine") // import
const express = require("express")
const app = express()
app.set("view engine", Tarkine.ext) // .tark files
app.engine(Tarkine.ext, Tarkine.renderFile)
app.get("/", (req, res) => {
res.render("index", {
username: "tarkine"
})
})
app.listen(3000)import { Hono } from "hono"
import { honoRenderer } from "tarkine"
const app = new Hono()
app.use(honoRenderer({
views: "./views"
}))
app.get("/", (c) => {
c.render("index", {
username: "tarkine"
})
})- Comments
{{# This is a comment }}- Expression
{{ variable }} // Escaped output
{{- variable }} // Unescaped output- Conditionals
<!-- condition -->
{{:if status }}
// content
{{:else if status == 0 }}
// content
{{:else}}
// content
{{/if}}- Loops
<!-- loops -->
{{:for value, index in array }}
// content
{{/for}}
{{:for value, key in object }}
// content
{{/for}}- Includes
{{- include("./header", { links: ["home", "code", "about"] }) }}- Code Execution
{{~
// JavaScript code here
}}- Conditionals Void Attributes
<div>
<button disabled="isLoggedIn">Login</button>
<button disabled="isLoggedIn === true">Login</button>
</div>- Macros
{{:macro button(text, ...classes) }}
<button class="{{ classes.join(' ') }}">{{ text }}</button>
{{/macro}}
{{- button("Login", "btn", "is-primary") }}-
Layouts (Extend & Slot)
- Define layout:
<!-- layout.tark --> <!DOCTYPE html> <html> <head>{{- head }}</head> <body>{{- body }}</body> </html>
- Use layout:
{{:extends "./layout"}} {{:slot "head"}} <title>Page Title</title> {{/slot}} {{:slot "body"}} <main><h1>Hello Layout</h1></main> {{/slot}} {{/extends}}
- Global data can be registered and used across all templates:
const Tarkine = require('tarkine')
Tarkine.store.set("default", {
siteName: 'My Website',
description: "...."
})- Access in template:
<title>{{ $.default.siteName }}</title><script src="https://cdn.jsdelivr.net/npm/tarkine@latest/src/browser.min.js"></script>
<script>
const output = Tarkine.render("<h1>{{ name }}</h1>", { name: "Tarkine" })
console.log(output)
</script>