
Product
Introducing Supply Chain Attack Campaigns Tracking in the Socket Dashboard
Campaign-level threat intelligence in Socket now shows when active supply chain attacks affect your repositories and packages.
stackpress
Advanced tools
Stackpress is a content management framework.
See Example for use case.
The following attributes can be applied to model types in an idea file.
model User @icon("user") @label("User" "Users") {}
| Attribute | Description | Attributes | Example |
|---|---|---|---|
@icon(string) | An icon representation of a model. Uses font awesome names. | @icon("user") | |
@template(string) | Used to describe each row in a model | @template("User {{name}}") | |
@label(string string) | A friendly name that represents the model | @label("User" "Users") | |
@active | A flag that represents the active field. Active fields are changed when deleting or restoring a row, as an alternative to actually deleting the row in the database. | ||
@default(string|number|boolean) | The default value applied when creating a row if no value was provided. |
@default(1)
@default("user")
@default(true)
@default("now()")
@default("nanoid()")
@default("nanoid(10)")
@default("cuid()")
@default("cuid(10)")
| |
@generated | A flag that represents that the value of this column is generated, bypassing the need to be validated | ||
@id | A flag that represents the models identifier. If multiple ids then the combination will be used to determine each rows uniqueness. | ||
@searchable | A flag deonoting this column is searchable and will be considered in a search field for example. Also used to know which columns need to be optimized in the database. | ||
@sortable | A flag deonoting this column is sortable. Also used to know which columns need to be optimized in the database. | ||
@label(string) | A label that will be shown to represent this column instead of the actual column name. | @label("Name") | |
@min(number) | The minimum number value that will be accepted. This is also a consideration when determining the database type. | @min(10) | |
@max(number) | The maximum number value that will be accepted. This is also a consideration when determining the database type. | @max(100) | |
@step(number) | The incremental amount value that will be used when changing the columns value. This is also a consideration when determining the database type. |
@step(1)
@step(0.01)
| |
@relation(config) | Maps columns in the model that is related to another model. |
local: string
foreign: string name?: string |
@relation({ local "userId" foreign "id" })
@relation({ name "memberships" local "ownerId" foreign "id" })
@relation({ name "connections" local "memberId" foreign "id" })
|
@unique | A flag that ensures no duplicate value can be added to the model | ||
@updated | A flag that will automatically update the timestamp whenever a row is changed. |
The following validation attributes can be applied to model columns in an idea file.
name String @is.required @is.cgt(10)
| Attribute | Description | Example |
|---|---|---|
@is.required | Validates that a value must be given before being inserted. | |
@is.notempty | Validates that a value is something as opposed to an empty string. | |
@is.eq(string|number) | Validates that the value is explicitly equal to the given argument |
@is.eq(10)
@is.eq("foobar")
|
@is.ne(string|number) | Validates that the value is explicitly not equal to the given argument |
@is.neq(10)
@is.neq("foobar")
|
@is.option(string|number[]) | Validates that the value is one of the given options | @is.option([ 1 2 "foo" 3 "bar" ]) |
@is.regex(string) | Validates that the value matches the given regular expression | @is.regex("[a-z]$") |
@is.date | Validates that the value is a date | |
@is.future | Validates that the value is a future date | |
@is.past | Validates that the value is a past date | |
@is.present | Validates that the value is the present date | |
@is.gt(number) | Validate that the value is greater than the given number | @is.gt(10) |
@is.ge(number) | Validate that the value is greater than or equal to the given number | @is.ge(10) |
@is.lt(number) | Validate that the value is less than the given number | @is.lt(10) |
@is.le(number) | Validate that the value is less than or equal to the given number | @is.le(10) |
@is.ceq(number) | Validate that the character count of the value is equal to the given number | @is.ceq(10) |
@is.cgt(number) | Validate that the character count of the value is greater than or equal to the given number | @is.cle(10) |
@is.cge(number) | Validate that the character count of the value is less than the given number | @is.cge(10) |
@is.clt(number) | Validate that the character count of the value is less than or equal to the given number | @is.clt(10) |
@is.cle(number) | Validate that the character count of the value is less than or equal to the given number | @is.cle(10) |
@is.weq(number) | Validate that the word count of the value is equal to the given number | @is.weq(10) |
@is.wgt(number) | Validate that the word count of the value is greater than or equal to the given number | @is.wle(10) |
@is.wge(number) | Validate that the word count of the value is less than the given number | @is.wge(10) |
@is.wlt(number) | Validate that the word count of the value is less than or equal to the given number | @is.wlt(10) |
@is.wle(number) | Validate that the word count of the value is less than or equal to the given number | @is.wle(10) |
@is.cc | Validates that the value is a credit card | |
@is.color | Validates that the value is a color value (color name or hex) | |
@is.email | Validates that the value is an email | |
@is.hex | Validates that the value is a hexidecimal | |
@is.price | Validates that the value is a price number (ie. 2 decimal numbers) | |
@is.url | Validates that the value is a URL | |
@is.boolean | Validates that the value is a boolean | |
@is.number | Validates that the value is a number format | |
@is.float | Validates that the value is a float format | |
@is.integer | Validates that the value is an integer format | |
@is.object | Validates that the value is an object |
The following fields can be applied to model columns in an idea file.
name String @field.text
| Attribute | Description | Attributes | Example |
|---|---|---|---|
@field.color | Use a color field to represent this column in a form | ||
@field.checkbox(attributes?) | Use a checkbox to represent this column in a form |
label: string
check: boolean circle: boolean square: boolean rounded: boolean blue: boolean orange: boolean |
@field.checkbox
@field.checkbox({ label "Enabled" circle true })
|
@field.country(attributes?) | Use a country dropdown to represent this column in a form | placeholder: string |
@field.country
@field.country({ placeholder "Select Country" })
|
@field.currency(attributes?) | Use a currency dropdown to represent this column in a form | placeholder: string |
@field.currency
@field.currency({ placeholder "Select Currency" })
|
@field.date | Use a date field to represent this column in a form | ||
@field.datetime | Use a date time field to represent this column in a form | ||
@field.editor(attributes?) | Use a code editor to represent this column in a form |
lang: html|md|css|js|ts
numbers: boolean |
@field.editor
@field.editor({ lang "html" numbers true })
|
@field.file | Use a file input to represent this column in a form | ||
@field.filelist | Use a file list fieldset to represent this column in a form | ||
@field.input | Use an input field to represent this column in a form | ||
@field.markdown(attributes?) | Use a markdown editor to represent this column in a form | numbers: boolean |
@field.markdown
@field.markdown({ numbers true })
|
@field.mask(attributes) | Use an input mask to represent this column in a form | mask: string |
@field.mask
@field.mask({ mask "999-999-999" })
|
@field.metadata | Use a key value fieldset to represent this column in a form | ||
@field.number(attributes?) | Uses a number field to represent this column in a form |
min: number
max: number step: number separator: string decimal: string absolute: boolean |
@field.number
@field.number({ min 0 max 10 step 0.01 separator "," decimal "." absolute true })
|
@field.password | Uses a password field to represent this column in a form | ||
@field.range(attributes?) | Uses a range field to represent this column in a form |
min: number
max: number step: number width: number |
@field.range
@field.range({ min 0 max 10 step 0.01 width 100 })
|
@field.rating(attributes?) | Uses a rating field to represent this column in a form | max: number |
@field.rating
@field.rating({ max 5 })
|
@field.select(attributes?) | Uses a select dropdown to represent this column in a form | placeholder: string |
@field.select
@field.select({ placeholder "Select Country" })
|
@field.slug | Uses an input field that transforms the value into a slug to represent this column in a form | ||
@field.switch(attributes?) | Uses a switch toggle to represent this column in a form |
rounded: boolean
onoff: boolean yesno: boolean checkex: boolean sunmoon: boolean ridge: boolean smooth: boolean blue: boolean orange: boolean green: boolean |
@field.switch
@field.switch({ label "Enabled" yesno true })
|
@field.textarea(attributes?) | Uses a textarea field to represent this column in a form | rows: number |
@field.textarea
@field.textarea({ rows 10 })
|
@field.taglist | Uses a tag field to represent this column in a form | ||
@field.textlist | Uses a text list fieldset to represent this column in a form | ||
@field.time | Uses a time field to represent this column in a form | ||
@field.wysiwyg(attributes?) | Uses a WYSIWYG to represent this column in a form |
history: boolean
font: boolean size: boolean format: boolean paragraph: boolean blockquote: boolean style: boolean color: boolean highlight: boolean text: boolean remove: boolean indent: boolean align: boolean rule: boolean list: boolean lineheight: boolean table: boolean link: boolean image: boolean video: boolean audio: boolean fullscreen: boolean showblocks: boolean code: boolean dir: boolean |
@field.wysiwyg
@field.wysiwyg({ font true size true format true })
|
The following filter fields can be applied to model columns in an idea file.
name String @field.text
| Attribute | Description | Attributes | Example |
|---|---|---|---|
@filter.color | Use a color field to represent this column in a filter form | ||
@filter.checkbox(attributes?) | Use a checkbox to represent this column in a filter form |
label: string
check: boolean circle: boolean square: boolean rounded: boolean blue: boolean orange: boolean |
@filter.checkbox
@filter.checkbox({ label "Enabled" circle true })
|
@filter.country(attributes?) | Use a country dropdown to represent this column in a filter form | placeholder: string |
@filter.select
@filter.select({ placeholder "Select Country" })
|
@filter.currency(attributes?) | Use a currency dropdown to represent this column in a filter form | placeholder: string |
@filter.currency
@filter.currency({ placeholder "Select Currency" })
|
@filter.date | Use a date field to represent this column in a filter form | ||
@filter.datetime | Use a date time field to represent this column in a filter form | ||
@filter.file | Use a file input to represent this column in a filter form | ||
@filter.input | Use an input field to represent this column in a filter form | ||
@filter.mask(attributes) | Use an input mask to represent this column in a filter form | mask: string |
@filter.mask
@filter.mask({ mask "999-999-999" })
|
@filter.number(attributes?) | Uses a number field to represent this column in a filter form |
min: number
max: number step: number separator: string decimal: string absolute: boolean |
@filter.number
@filter.number({ min 0 max 10 step 0.01 separator "," decimal "." absolute true })
|
@filter.password | Uses a password field to represent this column in a filter form | ||
@filter.range(attributes?) | Uses a range field to represent this column in a filter form |
min: number
max: number step: number width: number |
@filter.range
@filter.range({ min 0 max 10 step 0.01 width 100 })
|
@filter.rating(attributes?) | Uses a rating field to represent this column in a filter form | max: number |
@filter.rating
@filter.rating({ max 5 })
|
@filter.select(attributes?) | Uses a select dropdown to represent this column in a filter form | placeholder: string |
@filter.select
@filter.select({ placeholder "Select Country" })
|
@filter.slug | Uses an input field that transforms the value into a slug to represent this column in a filter form | ||
@filter.switch(attributes?) | Uses a switch toggle to represent this column in a filter form |
rounded: boolean
onoff: boolean yesno: boolean checkex: boolean sunmoon: boolean ridge: boolean smooth: boolean blue: boolean orange: boolean green: boolean |
@filter.switch
@filter.switch({ label "Enabled" yesno true })
|
@filter.time | Uses a time field to represent this column in a filter form |
| Attribute | Description | Attributes | Example |
|---|---|---|---|
@span.date | Use a pair of date fields as a span to represent this column in a filter form | ||
@span.datetime | Use a pair of date time fields as a span to represent this column in a filter form | ||
@span.input | Use a pair of input fields as a span to represent this column in a filter form | ||
@span.number(attributes?) | Use a pair of number fields as a span to represent this column in a filter form |
min: number
max: number step: number separator: string decimal: string absolute: boolean |
@span.number
@span.number({ min 0 max 10 step 0.01 separator "," decimal "." absolute true })
|
@span.range(attributes?) | Use a range field as a span to represent this column in a filter form |
min: number
max: number step: number width: number |
@span.range
@span.range({ min 0 max 10 step 0.01 width 100 })
|
@span.rating(attributes?) | Use a pair of rating fields as a span to represent this column in a filter form | max: number |
@span.rating
@span.rating({ max 5 })
|
@span.select(attributes?) | Use a pair of select dropdowns as a span to represent this column in a filter form | placeholder: string |
@span.select
@span.select({ placeholder "Select Country" })
|
@span.time | Use a pair of time fields as a span to represent this column in a filter form |
The following list format fields can be applied to model columns in an idea file.
created Datetime @list.date({ locale "en" })
| Attribute | Description | Attributes | Example |
|---|---|---|---|
@list.hide | Hides this column in a formatted list of results | ||
@list.code(attributes?) | Uses a code format to represent this column in a formatted list of results |
lang: string
numbers: boolean inline: boolean trim: boolean ltrim: boolean rtrim: boolean |
@list.code
@list.code(lang "en" trim true)
|
@list.color(attributes?) | Uses a code color to represent this column in a formatted list of results | box: boolean text: boolean |
@list.color
@list.color(box true text true)
|
@list.country(attributes?) | Uses a country format to represent this column in a formatted list of results | flag: boolean text: boolean |
@list.country
@list.country(flag true text true)
|
@list.currency(attributes?) | Uses a currency format to represent this column in a formatted list of results |
flag: boolean
text: boolean |
@list.currency
@list.currency(flag true text true)
|
@list.date(attributes?) | Uses a date format to represent this column in a formatted list of results |
locale: string
format: string |
@list.date
@list.date(locale "en" format "MMMM D, YYYY, h:mm:ss a")
|
@list.email | Uses an email format to represent this column in a formatted list of results | ||
@list.formula(attributes) | Outputs the value of the given formula in a formatted list of results |
formula: string
data: object |
@list.formula(formula "{x} + {this} + {y}" data { x 3 y 4 })
|
@list.html(attributes?) | Uses a raw HTML format to represent this column in a formatted list of results |
ordered: boolean
indent: number spacing: number |
@list.html
@list.html({ ordered true indent 10 spacing 10 })
|
@list.image | Uses a image format to represent this column in a formatted list of results | ||
@list.imagelist | Uses an image carousel to represent this column in a formatted list of results. Ideally for an array of strings. | ||
@list.json | Uses a json format to represent this column in a formatted list of results. Ideally for arrays or objects. | ||
@list.link | Uses a clickable link to represent this column in a formatted list of results | ||
@list.list | Uses a list (ordered or unordered) to represent this column in a formatted list of results. Ideally for an array of strings | ||
@list.markdown | Converts the column value from markdown to raw HTML to represent this column in a formatted list of results | ||
@list.metadata(attributes?) | Outputs the keys and values of the columns value in tabular format. Ideally for a key value object. |
padding: number
align: left|right|center format: boolean |
@list.metadata
@list.metadata({ padding 10 align "left" format true })
|
@list.number(attributes?) | Uses a number format to represent this column in a formatted list of results |
separator: string
decimal: string decimals: number absolute: boolean |
@list.number
@list.number({ separator "," decimal "." decimals 4 absolute true })
|
@list.overflow(attributes?) | Uses a format that considers text overflows to represent this column in a formatted list of results |
length: number
words: boolean hellip: boolean |
@list.overflow
@list.overflow({ length 10 words true hellip true})
|
@list.phone(attributes?) | Uses a phone format to represent this column in a formatted list of results | label: string |
@list.phone
@list.phone({ label "Call Me Maybe" })
|
@list.rating(attributes?) | Uses a rating format to represent this column in a formatted list of results |
max: number
remainder: boolean round: round|ceil|floor spacing: number |
@list.rating
@list.rating({ max 5 remainder true round "floor" spacing 10 })
|
@list.separated(attributes?) | Uses a separator format to represent this column in a formatted list of results. Ideally for an array of strings. | separator: string |
@list.separated
@list.separated({ separator ", " })
|
@list.table(attributes?) | Uses a tablular format to represent this column in a formatted list of results. Ideally for an array of objects. |
top: boolean
left: boolean right: boolean padding: number align: left|right|center background: color border: color header: color stripe: color |
@list.table
@list.table({ align "left" top true padding 100 background "blue" header "#CCC" })
|
@list.taglist(attributes?) | Uses a tag list format to represent this column in a formatted list of results. Ideally for an array of strings. |
curved: boolean
rounded: boolean pill: boolean info: boolean warning: boolean success: boolean error: boolean muted: boolean primary: boolean color: color secondary: boolean outline: boolean solid: boolean transparent: boolean |
@list.taglist
@list.taglist({ curved true info true outline true })
|
@list.template(attributes) | Uses a template to generate a text to represent this column in a formatted list of results | template: string | @list.template({ template "{{foo}} and {{bar}}" }) |
@list.text(attributes?) | Uses a text format to represent this column in a formatted list of results |
upper: boolean
lower: boolean capital: boolean |
@list.text
@list.text({ upper true })
|
@list.yesno(attributes?) | Converts a boolean to a string representation to represent this column in a formatted list of results | yes: string no: string |
@list.yesno
@list.yesno({ yes "Yep" no "Nah" })
|
The following view format fields can be applied to model columns in an idea file.
created Datetime @view.date({ locale "en" })
| Attribute | Description | Attributes | Example |
|---|---|---|---|
@view.hide | Hides this column in a view | ||
@view.code(attributes?) | Uses a code format to represent this column in a view |
lang: string
numbers: boolean inline: boolean trim: boolean ltrim: boolean rtrim: boolean |
@view.code
@view.code(lang "en" trim true)
|
@view.color(attributes?) | Uses a code color to represent this column in a view | box: boolean text: boolean |
@view.color
@view.color(box true text true)
|
@view.country(attributes?) | Uses a country format to represent this column in a view | flag: boolean text: boolean |
@view.country
@view.country(flag true text true)
|
@view.currency(attributes?) | Uses a currency format to represent this column in a view | flag: boolean text: boolean |
@view.currency
@view.currency(flag true text true)
|
@view.date(attributes?) | Uses a date format to represent this column in a view | locale: string format: string |
@view.date
@view.date(locale "en" format "MMMM D, YYYY, h:mm:ss a")
|
@view.email | Uses an email format to represent this column in a view | ||
@view.formula(attributes?) | Outputs the value of the given formula in a view | formula: string | @view.formula(formula "{x} + {this} + {y}" data { x 3 y 4 }) |
@view.html(attributes?) | Uses a raw HTML format to represent this column in a view |
ordered: boolean
indent: number spacing: number |
@view.html
@view.html({ ordered true indent 10 spacing 10 })
|
@view.image | Uses a image format to represent this column in a view | ||
@view.imagelist | Uses an image carousel to represent this column in a view. Ideally for an array of strings. | ||
@view.json | Uses a json format to represent this column in a view. Ideally for arrays or objects. | ||
@view.link | Uses a clickable link to represent this column in a view | ||
@view.list | Uses a list (ordered or unordered) to represent this column in a view. Ideally for an array of strings | ||
@view.markdown | Converts the column value from markdown to raw HTML to represent this column in a view | ||
@view.metadata(attributes?) | Outputs the keys and values of the columns value in tabular format. Ideally for a key value object. |
padding: number
align: left|right|center format: boolean |
@view.metadata
@view.metadata({ padding 10 align "left" format true })
|
@view.number(attributes?) | Uses a number format to represent this column in a view |
separator: string
decimal: string decimals: boolean absolute: boolean |
@view.number
@view.number({ separator "," decimal "." decimals 4 absolute true })
|
@view.overflow(attributes?) | Uses a format that considers text overflows to represent this column in a view |
length: number
words: boolean hellip: boolean |
@view.overflow
@view.overflow({ length 10 words true hellip true})
|
@view.phone(attributes?) | Uses a phone format to represent this column in a view | label: string |
@view.phone
@view.phone({ label "Call Me Maybe" })
|
@view.rating(attributes?) | Uses a rating format to represent this column in a view |
max: number
remainder: boolean round: round|ceil|floor spacing: number |
@view.rating
@view.rating({ max 5 remainder true round "floor" spacing 10 })
|
@view.separated(attributes?) | Uses a separator format to represent this column in a view. Ideally for an array of strings. | separator: string |
@view.separated
@view.separated({ separator ", " })
|
@view.table(attributes?) | Uses a tablular format to represent this column in a view. Ideally for an array of objects. |
top: boolean
left: boolean right: boolean padding: number align: left|right|center background: color border: color header: color stripe: color |
@view.table
@view.table({ align "left" top true padding 100 background "blue" header "#CCC" })
|
@view.taglist(attributes?) | Uses a tag list format to represent this column in a view. Ideally for an array of strings. |
curved: boolean
rounded: boolean pill: boolean info: boolean warning: boolean success: boolean error: boolean muted: boolean primary: boolean color: boolean secondary: boolean outline: boolean solid: boolean transparent: boolean |
@view.taglist
@view.taglist({ curved true info true outline true })
|
@view.template(attributes?) | Uses a template to generate a text to represent this column in a view | template: string | @view.template({ template "{{foo}} and {{bar}}" }) |
@view.text(attributes?) | Uses a text format to represent this column in a view |
upper: boolean
lower: boolean capital: boolean |
@view.text
@view.text({ upper true })
|
@view.yesno(attributes?) | Converts a boolean to a string representation to represent this column in a view | yes: string no: string |
@view.yesno
@view.yesno({ yes "Yep" no "Nah" })
|
FAQs
Incept is a content management framework.
The npm package stackpress receives a total of 23 weekly downloads. As such, stackpress popularity was classified as not popular.
We found that stackpress demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Campaign-level threat intelligence in Socket now shows when active supply chain attacks affect your repositories and packages.

Research
Malicious PyPI package sympy-dev targets SymPy users, a Python symbolic math library with 85 million monthly downloads.

Security News
Node.js 25.4.0 makes require(esm) stable, formalizing CommonJS and ESM compatibility across supported Node versions.