Full‑stack, type‑safe batteries‑included platform that lets you server‑side render any modern front‑end—React, Svelte, plain HTML, HTMX (Vue & Angular coming)—with a single Bun‑powered build step.
- Universal SSR. Bring your favourite UI layer; Absolute JS handles bundling, hydration, and HTML streaming.
- One build, one manifest. Call
build()
once—get a manifest mapping every page’s client and server assets, ready to wire into routes. - End‑to‑end type safety. A unified source of truth for your types—from the database, through the server, and all the way to the client—so you can be certain of the data shape at every step.
- Zero‑config philosophy. Point the build at your folders; sane defaults light up everything else.
- Plugin power. Extend with standard Elysia plugins—ship auth, logging, i18n, and more. First‑party:
absolute-auth
,networkingPlugin
.
Tool | Version | Purpose |
---|---|---|
Bun | ≥ 1.2 | Runtime, bundler, and TypeScript transpiler |
Elysia | latest | Web server & middleware platform |
bun add @absolutejs/absolute
// example/server.ts
import { staticPlugin } from '@elysiajs/static';
import { Elysia } from 'elysia';
import { file } from 'bun';
import { build } from 'absolutejs/core/build';
import {
handleHTMLPageRequest,
handleReactPageRequest,
handleSveltePageRequest
} from 'absolutejs/core/pageHandlers';
import { ReactExample } from './react/pages/ReactExample';
import SvelteExample from './svelte/pages/SvelteExample.svelte';
import { networkingPlugin } from 'absolutejs';
const manifest = await build({
assetsDirectory: 'example/assets',
buildDirectory: 'example/build',
htmlDirectory: 'example/html',
htmxDirectory: 'example/htmx',
reactDirectory: 'example/react',
svelteDirectory: 'example/svelte',
options: { preserveIntermediateFiles: true }
});
if (!manifest) throw new Error('Manifest generation failed');
let counter = 0;
export const server = new Elysia()
.use(staticPlugin({ assets: './example/build', prefix: '' }))
// HTML
.get('/', () =>
handleHTMLPageRequest('./example/build/html/pages/HtmlExample.html')
)
// React
.get('/react', () =>
handleReactPageRequest(ReactExample, manifest['ReactExampleIndex'], {
test: 123
})
)
// Svelte
.get('/svelte', () =>
handleSveltePageRequest(SvelteExample, manifest, { test: 456 })
)
// HTMX demo
.get('/htmx', () => file('./example/build/htmx/HtmxHome.html'))
.get('/htmx/increment', () => new Response(String(++counter)))
.use(networkingPlugin)
.on('error', (error) => {
const { request } = error;
console.error(
`Server error on ${request.method} ${request.url}: ${error.message}`
);
});
build()
scans your project, bundles each framework, and returns a manifest that has the server, and client assets required to serve each route.- Route handlers (
handleReactPageRequest
,handleSveltePageRequest
, …) stream HTML and inject scripts/assets based on that manifest. - The static plugin serves all compiled files from
/build
.
Absolute JS piggybacks on the Elysia plugin API. Any Elysia plugin works out of the box; Absolute adds helpers for:
Plugin | Description |
---|---|
absolute-auth |
Full OAuth2 flow configured with 66 providers and allows full customizability with event handlers |
networkingPlugin |
Starts your Elysia server with HOST/PORT defaults and adds a --host flag to toggle listening on localhost or your LAN interface |
Everything funnels through a single build()
call:
await build({
reactDirectory: 'src/react',
svelteDirectory: 'src/svelte',
htmlDirectory: 'src/html',
htmxDirectory: 'src/htmx',
assetsDirectory: 'public/assets',
options: { preserveIntermediateFiles: false }
});
No separate config files or environment variables—just explicit arguments with sensible defaults.
- Vue and Angular handlers
- Hot‑reload development server
- First‑class Docker images & hosting recipes
Pull requests and issues are welcome! Whether it’s a new plugin, framework handler, or docs improvement:
- Fork & branch.
bun install && bun test
.- Submit a PR with a clear description.
Creative Commons CC BY‑NC 4.0 – see LICENSE
for details.