Standard Library

Serv ships with 46 reusable modules in stdlib/. Import what you need:

import { ok, notFound } from "../stdlib/response.pnr"
import { requireAuth } from "../stdlib/auth.pnr"

Quick Reference

Security

ModuleKey Exports
auth.pnrbearerToken, basicAuth, requireAuth
crypto.pnrhashPassword, verifyPassword, randomToken, hmacSign
jwt.pnrjwtEncode, jwtDecode, jwtIsExpired
sanitize.pnrescapeHTML, stripTags, escapeSQL, sanitizeFilename
ratelimit.pnrcreateLimiter, isAllowed, remaining, resetLimiter
mask.pnrmaskEmail, maskPhone, maskCard, maskString, redact
ip.pnrextractIP, isPrivate, isTrustedProxy, anonymizeIP

HTTP

ModuleKey Exports
response.pnrok, created, badRequest, notFound, serverError
pagination.pnroffset, pageResponse, parsePageParams
pagination_cursor.pnrencodeCursor, decodeCursor, cursorResponse
middleware.pnrcorsHeaders, requestId, logRequest
http_client.pnrgetJSON, postJSON, isSuccess, isClientError
url.pnrencodeURI, parseQuery, buildQuery, joinPath
cors.pnrallowOrigin, allowAll, preflightResponse

Utilities

ModuleKey Exports
datetime.pnrnow, timestamp, isExpired, formatDuration
strings_util.pnrslugify, truncate, capitalize, isEmpty
math.pnrmin, max, clamp, abs, percent, sum, average
sort.pnrreverse, minOf, maxOf
collections.pnrunique, flatten, chunk, first, last, countWhere

Data

ModuleKey Exports
csv.pnrparseCSV, parseRow, toCSV
base64.pnrencode, decode, isValid
diff.pnrhasChanged, fieldChanged, changeRecord

Config

ModuleKey Exports
env.pnrrequireEnv, envOrDefault, envInt, envBool
config.pnrgetConfig, requireConfig, configBool, configList
feature_flags.pnrenableFlag, disableFlag, isEnabled, toggleFlag

Resilience

ModuleKey Exports
retry.pnrbackoffDelay, defaultMaxRetries
circuit_breaker.pnrcreateBreaker, isOpen, recordSuccess, recordFailure
timeout.pnrwithDeadline, isTimedOut, remainingTime, elapsed
queue.pnrcreateQueue, enqueue, dequeue, queueSize

Concurrency

ModuleKey Exports
semaphore.pnrcreateSemaphore, tryAcquire, release, available
batch.pnrcreateBatch, addToBatch, isBatchFull, flushBatch

Processing

ModuleKey Exports
job.pnrcreateJob, startJob, completeJob, failJob
scheduler.pnrscheduleAfter, isScheduled, cancelSchedule

Reliability

ModuleKey Exports
idempotency.pnrcheckIdempotency, markProcessed, isProcessed
dlq.pnrcreateDLQ, sendToDLQ, dlqSize, clearDLQ

Integration

ModuleKey Exports
webhook.pnrbuildPayload, sendWebhook, verifySignature
events.pnron, emit, hasHandler

Observability

ModuleKey Exports
metrics.pnrcounter, gauge, recordLatency, trackRequest
tracing.pnrtraceId, startSpan, endSpan, traceContext

Multi-tenancy

ModuleKey Exports
tenant.pnrextractTenant, tenantConfig, isTenantActive, tenantFilter

Compliance

ModuleKey Exports
audit.pnrauditLog, auditAction, auditAccess, auditAuth, auditDenied

Operations

ModuleKey Exports
health.pnrhealthy, unhealthy, degraded, buildHealthResponse
graceful.pnrinitShutdown, isShuttingDown, isDrained
cache_patterns.pnrcacheKey, cacheGet, cacheSet, invalidate, computeIfAbsent

Testing

ModuleKey Exports
testing_helpers.pnrassertEqual, assertNotNil, assertContains, assertTrue

Usage Example

import { requireAuth, bearerToken } from "../stdlib/auth.pnr"
import { ok, badRequest } from "../stdlib/response.pnr"
import { maskEmail } from "../stdlib/mask.pnr"
import { auditLog } from "../stdlib/audit.pnr"

server "8080"

route "GET" "/api/profile" (req) {
    let authErr = requireAuth(req)
    if authErr != nil { return authErr }

    let token = bearerToken(req)
    auditLog(token, "view", "profile", nil)

    return ok({
        "email": maskEmail("alice@example.com"),
        "role": "admin"
    })
}

Full module documentation: see comments at the top of each file in stdlib/.