What This Table Is
The sys_properties table stores platform configuration as key-value pairs that control ServiceNow behavior at the system level. Every timeout, feature flag, URL endpoint, and configurable constant lives here. Unlike user preferences or module-specific settings, these properties affect the entire platform and all users unless specifically scoped.
Owned by the Platform module, this table supports every ServiceNow process by providing runtime configuration. Properties range from database connection timeouts (glide.db.query.timeout) to UI behavior toggles (glide.ui.security.ignore_csrf) to integration endpoints. The platform reads these constantly—every API call, UI render, and background job checks relevant properties.
This table extends sys_metadata, making properties part of the update set framework. Properties can be scoped to applications and moved between instances. No tables extend sys_properties—it's a leaf table focused purely on storing configuration data.
Enterprise instances typically contain 2,000-5,000 properties, with out-of-box properties making up the majority. Performance is excellent—properties are heavily cached in memory and rarely cause query bottlenecks. The platform preloads critical properties at startup, making gs.getProperty() calls extremely fast.
When You'll Script Against This Table
You'll read properties constantly via gs.getProperty() in Business Rules, Script Includes, UI Scripts, and Background Scripts. Writing properties requires either the System Properties module (Sanity) or gs.setProperty() calls. Direct GlideRecord manipulation works but bypasses caching and should be avoided.
Property access requires admin role to modify, but reading via gs.getProperty() works for all users. Some security-sensitive properties are hidden from non-admin users even in scripts. Scoped applications can only modify their own scoped properties unless elevated.
Common scripting patterns:
- Feature flagging:
if (gs.getProperty('custom.feature.enabled') == 'true') - Environment detection:
gs.getProperty('glide.servlet.uri')to check instance URL - Timeout configuration: Reading database or API timeout values before long operations
- Integration endpoints:
gs.getProperty('custom.api.endpoint')for external system URLs - Deployment automation: Setting properties during clone scripts or deployment
- Debug switches:
gs.getProperty('custom.debug.logging')to control verbose logging - Application configuration: Storing app-specific settings that admins can modify without code changes
Table Gotchas
Properties are cached aggressively. Changes via direct GlideRecord won't be visible until cache refresh or instance restart. Always use gs.setProperty() or the UI.
All property values are strings. gs.getProperty('my.number.prop') returns '123', not 123. Convert explicitly: parseInt(gs.getProperty('my.number.prop')).
- The
valuefield is limited to 4,000 characters. Longer values get truncated silently. - Property names starting with
glide.are reserved for ServiceNow. Use your company prefix:acme.integration.timeout
Security-sensitive properties (passwords, tokens) in name or value are partially masked in the UI but fully readable via gs.getProperty() if you have the role.
- Boolean properties should use 'true'/'false' strings, not 'yes'/'no'. Check with:
gs.getProperty('prop') == 'true' - Default values in
gs.getProperty('name', 'default')only apply when the property doesn't exist, not when it's empty string.
Enjoying this? Get one deep-dive per week.
Join 1,000+ ServiceNow pros — scripts, GlideRecord patterns, Flow Designer techniques, and career moves. Free.
Related Tables
The sys_properties table extends sys_metadata, inheriting update set tracking and application scoping behavior. This relationship makes properties manageable through the development lifecycle—you can capture property changes in update sets and promote them between instances.
The sys_user_preference table serves a similar key-value role but for user-specific settings rather than system-wide configuration. The sys_app_application table connects to scoped properties through the sys_scope field. Security configurations in sys_security_acl and audit logging in sys_audit frequently reference properties that control their behavior.