@vode-app/create-hono-server (0.1.0-pre.33)

Published 2026-05-28 14:19:53 +02:00 by temir in vode-app/create-hono-server

Installation

@vode-app:registry=
npm install @vode-app/create-hono-server@0.1.0-pre.33
"@vode-app/create-hono-server": "0.1.0-pre.33"

About this package

Introduction

<INTRO TEXT>

Table of Contents

  1. Quick Start
  2. Documentation
    1. createAppHost()
    2. createSpaHost()
  3. DevOps
    1. Change Management
    2. Publish

Quick Start

# placeholder:
    # <NEW_PACKAGE: <NEW_PACKAGE>
    # <TEMPLATE_PACKAGE_NAME: @vode-app/create-hono-server
    # <TEMPLATE_NAME: @vode-app/hono-server

mkdir -p <NEW_PACKAGE>
cd <NEW_PACKAGE>

# print the latest version
bun info "@vode-app/create-hono-server" version

# create/update a package from the template in the current directory
bun create --no-install --no-git "@vode-app/hono-server@latest" .

# set metadata in package.json

bun install

Documentation

The following sections explain the configurations and conventions baked into the generated package. Useful when adapting it to fit specific needs.

<DOCUMENTATION>

In the src/main.ts file, an App Host is first created, then an App Host Server is started with the created App Host.

An App Host is just a Hono<E> instance. Do with it what you will.

createAppHost()

A convenience function for creating an App Host is provided by the @vode-app/common-server-side/hono package. It abstracts away some of the common setup and configuration, while still allowing for flexibility and customization.

Example usage:

import {
    // ...
    createAppHost,
    type CreateAppHostOptions,
    // ...
    createLoggingMiddleware,
    createRequestLoggerMiddleware,
    // ...
} from '@vode-app/common-server-side/hono';

import { requestId } from 'hono/request-id';
import { compress } from 'hono/compress';
import { secureHeaders } from 'hono/secure-headers';

// ...
    // ...
    const createAppHostOptions: CreateAppHostOptions<AppHostEnv> = {
        middleware: [

            createLoggingMiddleware({
                logLevel: env.LOG_LEVEL,
                logLevelPerScope: logLevelPerScope
                    ? logLevelPerScope
                    : undefined
                ,
            }),

            // DEVEL: Add dependency injection middleware here

            requestId(),
            createRequestLoggerMiddleware<AppHostEnv>(),
            compress(),
            secureHeaders(),

            // DEVEL: Add middleware here

        ],
        endpointGroups: [

            createGetHealthEndpoint({
                path: '/health',
                description: 'App host health check endpoint.',
            }),
            createGetBuildinfoEndpoint({
                path: '/buildinfo',
                description: 'App host buildinfo endpoint.',
                buildinfoUrl: serverBuildinfoUrl,
            }),

            // DEVEL: Add endpoint groups here

        ],
        exposeOpenApi: env.EXPOSE_OPENAPI,
    };
    if (basePathTrimmed) createAppHostOptions.basePath = basePathTrimmed;
    if (createAppHostOptions.exposeOpenApi) {
        createAppHostOptions.openApi = {
            title: 'Web API',
            version: '1.0.0',
            description: 'API documentation for the server.',
            path: 'openapi',
            uiPath: 'scalar',
        };
    }

    appHost = createAppHost<AppHostEnv>(createAppHostOptions);
    // ...
// ... 

createSpaHost()

A convenience function for creating an SPA Host is provided by the @vode-app/common-server-side/hono package. It abstracts away some of the common setup and configuration for hosting a Single Page Application (SPA), while still allowing for flexibility and customization. Under the hood, it creates an App Host and configures it to serve the SPA.

Example usage:

import {
    // ...
    createSpaHost,
    type CreateSpaHostOptions,
    type CreateSpaOptions,
    // ...
} from '@vode-app/common-server-side/hono';

import {
    buildinfoUrl as clientBuildinfoUrl,
    indexHtmlUrl as clientIndexHtmlUrl,
    assetsUrl as clientAssetsUrl,
    distUrl as clientDistUrl
} from 'example-vode-app-client/constants';

// ...
    // ...
    const createSpaOptions: CreateSpaOptions = {
        path: 'example/',
        buildinfoUrl: clientBuildinfoUrl,
        indexHtmlUrl: clientIndexHtmlUrl,
        assets: {
            'index.bundle.js': new URL('index.bundle.js', clientDistUrl),
            'index.bundle.css': new URL('index.bundle.css', clientDistUrl),
            'favicon.svg': new URL('favicon.svg', clientAssetsUrl),
            'pwa/manifest.webmanifest': new URL('pwa/manifest.webmanifest', clientAssetsUrl),
            'pwa/images/wide-screenshot.png': new URL('pwa/images/wide-screenshot.png', clientAssetsUrl),
            'pwa/images/mobile-screenshot.png': new URL('pwa/images/mobile-screenshot.png', clientAssetsUrl),
        },
    };
    if (basePathTrimmed) createSpaOptions.basePath = `/${basePathTrimmed}/`;

    const createSpaHostOptions: CreateSpaHostOptions<AppHostEnv> = {
        logLevel: {
            default: env.LOG_LEVEL,
            perScope: logLevelPerScope,
        },
        dependencyInjectionMiddleware: [

            // DEVEL: add dependency injection middleware here

        ],
        middleware: [

            // DEVEL: add middleware here

        ],
        serverBuildinfoUrl: serverBuildinfoUrl,
        spa: createSpaOptions,
        endpointGroups: [

            // DEVEL: add endpoint groups here

        ],
        exposeOpenApi: env.EXPOSE_OPENAPI,
    };
    if (basePathTrimmed) createSpaHostOptions.basePath = basePathTrimmed;
    if (createSpaHostOptions.exposeOpenApi) {
        createSpaHostOptions.openApi = {
            title: 'Web API',
            version: '1.0.0',
            description: 'API documentation for the server.',
            path: 'openapi',
            uiPath: 'scalar',
        };
    }

    appHost = createSpaHost<AppHostEnv>(createSpaHostOptions);
    // ...
// ...

DevOps

bun update
bun install

bun run clean
bun run build
bun run tests

bun run dist/cli.bundle.js -- example/

# see publish section for publish instructions

Change Management

  1. Create a new branch for the change.
  2. Make the changes and commit.
  3. Bump the version in package.json.
  4. Add an entry for the new version in CHANGELOG.md.
  5. Pull request the branch.
  6. Ensure package artifacts are current.
  7. Publish.

Publish

Publish to a custom registry.

# placeholder:
  # <SCOPE_WITHOUT_AT: vode-app
  # <REGISTRY_URL: https://git.chimps.quest/api/packages/vode-app/npm/
  # <BUN_PUBLISH_AUTH_TOKEN: <BUN_PUBLISH_AUTH_TOKEN>

~/.bunfig.toml or bunfig.toml:

[install.scopes]
"vode-app" = { url = "https://git.chimps.quest/api/packages/vode-app/npm/", token = "$BUN_PUBLISH_AUTH_TOKEN" }
# authenticate
$env:BUN_PUBLISH_AUTH_TOKEN = "<BUN_PUBLISH_AUTH_TOKEN>"
# publish
bun publish

TLS

# placeholder:
    # <TLS_HOST_NAME: <TLS_HOST_NAME>

openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 -keyout key.pem -out cert.pem -days 7 -subj "/CN=<TLS_HOST_NAME>"

Dependencies

Development dependencies

ID Version
@types/node latest
esbuild latest
typescript ^6.0.3

Keywords

typescript template server hono
Details
npm
2026-05-28 14:19:53 +02:00
7
temir.ra
MIT
10 KiB
Assets (1)
Versions (42) View all
0.1.0-pre.59 2026-07-05
0.1.0-pre.58 2026-07-05
0.1.0-pre.57 2026-07-05
0.1.0-pre.56 2026-07-05
0.1.0-pre.55 2026-07-05