Skip to content

madhanmaaz/tarkine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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');

Tarkine.cache.enable(true);

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

About

tarkine - template engine for Node.js applications.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published