Use when generating URL slugs in Stacks — creating unique slugs with database collision detection, the uniqueSlug function with table/column configuration, or basic slugification. Covers @stacksjs/slug.
URL-friendly slug generation with database uniqueness checking.
storage/framework/core/slug/src/import { uniqueSlug } from '@stacksjs/slug'
// Basic usage — checks 'slug' column in inferred table
const slug = await uniqueSlug('My Blog Post Title')
// → 'my-blog-post-title'
// If 'my-blog-post-title' exists in DB:
// → 'my-blog-post-title-2'
// With options
const slug = await uniqueSlug('Product Name', {
table: 'products', // database table to check
column: 'slug' // column name (default: 'slug')
})
-2, -3, etc.import { slugify } from '@stacksjs/slug'
slugify('Hello World!') // 'hello-world'
slugify('Ünïcödé Têxt') // 'unicode-text'
slugify(' Extra Spaces ') // 'extra-spaces'
Re-exported from ts-slug — handles Unicode transliteration.
Models typically use slugs via the slug attribute:
defineModel({
name: 'Post',
attributes: {
title: { validation: { rule: schema.string() } },
slug: {
unique: true,
validation: { rule: schema.string() },
// Auto-generated from title via uniqueSlug()
}
}
})
interface SlugifyOptions {
table?: string // database table for uniqueness check
column?: string // column name (default: 'slug')
}
uniqueSlug() is async — it queries the databaseslugify() is sync — no database interaction-2, -3, etc. (not random suffixes)slug() from @stacksjs/strings instead