Settings
CARE supports flexible, dynamic application behavior through a centralized system of configurable settings. These settings allow developers and administrators to customize the frontend and backend behavior without hardcoding values or redeploying the application. Settings are stored in the database, can be grouped by key namespaces, and support multiple data types. This section shows how to define a new setting, what types are supported, and how to use the setting in your Vue components.
Example: Adding a New Setting
1. Add a migration
At first you need to add a new migration - please check out the Database for the details. To add a new setting, define it similar to this example:
'use strict';
const settings = [{
key: "editor.document.enableComments",
value: "true",
type: "boolean",
description: "Enable or disable comment functionality in the document editor"
}];
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.bulkInsert('setting', settings.map(t => {
t['createdAt'] = new Date();
t['updatedAt'] = new Date();
return t;
}), { returning: true });
},
async down(queryInterface, Sequelize) {
await queryInterface.bulkDelete("setting", {
key: settings.map(t => t.key)
}, {});
}
};
Note
After running the migration, make sure to execute make init before restarting the server.
This ensures the new settings are correctly applied and available in the frontend.
Supported Setting Types
The type field of a setting defines how the setting is interpreted and rendered in the frontend. The following types are currently supported:
boolean: Enables a checkbox or toggle in the UI.{ key: "editor.document.enableComments", value: "true", type: "boolean", description: "Enable or disable comment functionality in the document editor" }
numberorinteger: Enables a numeric input field (as string or integer).{ key: "editor.edits.debounceTime", value: "150", type: "number", description: "Delay time in milliseconds before processing edits" }
string(default): Basic text field input. Iftypeis omitted, it is treated as string by default.{ key: "dashboard.navigation.component.default", value: "Home", description: "The default component to display in the dashboard" }
html: Allows multi-line rich-text (HTML) input in the frontend, shown with a textarea.{ key: "app.register.terms", type: "html", value: "<p>Please agree to the terms and conditions.</p>", description: "Terms and conditions text shown during registration" }
Note
You can mix and match these types depending on your use case. The value must always be provided as a string, regardless of type.
2. Use your Settings in the Frontend
You can access the setting value inside any component using Vuex:
this.$store.getters["settings/getValue"]("editor.document.enableComments")
Settings are always returned as strings, so their usage in components depends on the expected type.
You must manually parse them as needed based on the setting’s type.
Type: Boolean
<BasicButton
v-if="commentsEnabled"
text="Add Comment"
@click="addComment"
/>
export default {
computed: {
commentsEnabled() {
return this.$store.getters["settings/getValue"]("editor.document.enableComments") === "true";
}
},
methods: {
addComment() {
console.log("Add comment clicked");
}
}
};
Type: Integer
export default {
computed: {
debounceTimeForEdits() {
return parseInt(this.$store.getters["settings/getValue"]("editor.edits.debounceTime"), 10);
}
}
};
Warning
Changes made to settings in the frontend are not automatically saved to the database.
After modifying any setting through the UI, you must click the Save Settings button.
Otherwise, your changes will be lost and not persisted.
Wizard and Settings UI Metadata
Settings can expose additional metadata so they render with user-friendly labels and grouping in both setup and dashboard settings views.
Relevant fields on setting rows:
displayName: human-readable field labeldisplayGroup: top-level settings groupdisplaySubsection: subsection title inside the groupshowInWizard: include in setup wizardwizardStep: wizard step assignment (e.g.general,mail,registration)wizardOrder: field order within the steprequiredInWizard: required flag for setup validation
When adding new settings, populate these fields during migration so the setup wizard and the dashboard settings page stay aligned.
Mail Settings Runtime Behavior
Mail configuration changes made from the dashboard settings page are applied on
Save Settings and do not require a backend restart.
This includes toggles and provider-specific values under system.mailService.*.