JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 10
  • Score
    100M100P100Q54015F
  • License MIT

Tarkine - A lightweight and high-performance template engine for Node.js, designed for speed and simplicity.

Package Exports

  • tarkine
  • tarkine/src/browser.min.js
  • tarkine/src/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (tarkine) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Tarkine - A lightweight and high-performance template engine for Node.js, designed for speed and simplicity.

npm version Downloads License VSCode

Installation

npm install tarkine

Usage

const Tarkine = require('tarkine');

const output = Tarkine.renderFile("./template.tark", {
    username: "John Doe",
    html: "<span>Some HTML</span>",
    status: true
});

console.log(output);

Usage in expressjs:

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)

Usage in hono:

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"
    })
})

Syntax

  • 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}}

Add Custom Data

  • 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>

Browser support

<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>

VSCode Extension Support