Internal platform changes that are not visible to capsule developers will be communicated via internal status updates.
Updated: September 10, 2019
To ensure that capsules are more precisely targeted, you are now limited to two store-sections for each capsule.
capsule {
...
store-sections {
section (NewsAndMagazines)
section (BusinessAndFinance)
}
}Learn more about the deprecation stages.
We've introduced a new runtime flag that changes how a single result is rendered within an input-view.
If you specify the use-input-views-for-selection-list-detail runtime flag, you can render the details of a single item in an input view by calling a layout, layout-match, or layout-macro.
Example
// With the `runtime-flag` enabled
input-view {
match-pattern: MyResult (this)
message (...)
render {
if (size(this) == 0) {
// render a form
} else-if (size(this) == 1) {
layout {
select-button-text (select me)
section {
...
}
}
} else {
selection-of (this) {
where-each (result) {
...
}
}
}
}
}If not specified, then an input-view calls out to a corresponding result-view to render the layout for a single result when selecting an item from the selection list.
Learn more about the deprecation stages.
Because there is a loss of precision, we no longer support automatically converting Decimal types to Integer. For example, if you have a macro that takes an Integer parameter, you can't pass in a Decimal.
You must either update the macro parameter to be a Decimal, or change the type being passed.
Learn more about the deprecation stages.
In an effort to further standardize Expression Language, we're deprecating the following EL special operators.
$size: Replace with size(...)$exists: Replace with exists(...)Deprecated
output (Recipe) {
on-empty {
if (servings.$exists) {
drop (servings)
} else-if (course.$exists || meal.$exists || cuisine.$exists) {
ordered-effects {
drop (course)
drop (meal)
drop (cuisine)
}
}
}
}New
output (Recipe) {
on-empty {
if (exists(servings)) {
drop (servings)
} else-if (exists(course) || exists(meal) || exists(cuisine)) {
ordered-effects {
drop (course)
drop (meal)
drop (cuisine)
}
}
}
}Learn more about the deprecation stages.
Your input names for an action now must use only alphanumeric characters (A-Z+a-z+0-9), with no dashes or special characters.
Learn more about the deprecation stages.
You must now explicitly import all Bixby-provided JavaScript libraries, such as console and http. For more information, see JavaScript API reference.
Learn more about the deprecation stages.
We've deprecated the MD5 JavaScript library.
Learn more about the deprecation stages.
We're delaying the end-of-life for three deprecations until the 19U release:
confirmed-by DeprecatedTo allow for vertical separation, we've added a divider child key. This new key creates a dividing line between vbox components in a given hbox row.
hbox {
content {
vbox {
content {
single-line {
text {
value ("From #{value(hotel.lowRate)}")
}
}
}
}
divider
vbox {
content {
single-line {
text {
value ("#{value(hotel.rating)} stars")
}
}
}
}
}
}Here is how the vertical divider looks on mobile:

Updated: August 19, 2019
The 19N release of Bixby Capsule SDK has been combined with 19O.
We now require that your hints must use named dispatch. You can also add a preferred-hint to a hint, which can be used in situations where named dispatch is not required.
Example
hints {
for-category (Translators) {
hint ("Ask My Japanese Dictionary what is artificial intelligence in Japanese?") {
preferred-hint ("What is artificial intelligence in Japanese?")
}
hint ("Ask My Japanese Dictionary what is alligator?") {
preferred-hint ("What is alligator in Japanese?")
}
hint ("Ask My Japanese Dictionary what is crab?") {
preferred-hint ("What is crab in Japanese?")
}
hint ("Ask My Japanese Dictionary what is the character for fire?") {
preferred-hint ("What is the character for fire in Japanese?")
}
}
}Learn more about the deprecation stages.
You can now add an intent key to the attribution-link. This allows you to add functionality such as triggering an additional result-view with an app-launch.
Example
...
attribution-link {
label ("a label")
url ("a url")
if (false) {
url ("another url")
} else {
intent {
goal: DoSomething
}
}
}We've introduced a new runtime flag that changes how a single result is rendered within an input-view.
If you specify the use-input-views-for-selection-list-detail runtime flag, you can render the details of a single item in an input view by calling a layout, layout-match, or layout-macro.
Example
// With the `runtime-flag` enabled
input-view {
match-pattern: MyResult (this)
message (...)
render {
if (size(this) == 0) {
// render a form
} else-if (size(this) == 1) {
layout {
select-button-text (select me)
section {
...
}
}
} else {
selection-of (this) {
where-each (result) {
...
}
}
}
}
}If not specified, then an input-view calls out to a corresponding result-view to render the layout for a single result when selecting an item from the selection list.
Learn more about the deprecation stages.
We've added a new runtime flag, no-filtering-with-validation, which changes how Bixby applies validation conditions in order to reduce the number of ambiguous values.
By default, when a cardinality constraint violation occurs because an input has too many available candidates, Bixby attempts to pre-filter the available candidates using the existing input validations. This runtime flag disables that.
For more information, see Runtime Flags.
Example
capsule {
...
runtime-flags {
concepts-inherit-super-type-features
modern-prompt-rejection
support-halt-effect-in-computed-inputs
no-filtering-with-validation
}
}Learn more about the deprecation stages.
You now have the option to name your hints and endpoints files without a prefix.
Allowed:
my.hints.bxbmy.endpoints.bxbhints.bxbendpoints.bxbNot Allowed:
shints.bxbmyendpoints.bxb.hints.bxb.endpoints.bxbWe've added a new runtime flag, no-filtering-with-validation, which changes how Bixby applies validation conditions in order to reduce the number of ambiguous values.
By default, when a cardinality constraint violation occurs because an input has too many available candidates, Bixby attempts to pre-filter the available candidates using the existing input validations. This runtime flag disables that.
For more information, see Runtime Flags.
Example
capsule {
...
runtime-flags {
concepts-inherit-super-type-features
modern-prompt-rejection
support-halt-effect-in-computed-inputs
no-filtering-with-validation
}
}Learn more about the deprecation stages.
Because most capsules currently use the default mode of replace, we've deprecated the mode key within prompt.
Old:
...
error (MultipleItemsMatched) {
property (candidates) {
type (FoodName)
min (Required)
max (Many)
}
on-catch {
prompt (menuItemName) {
min (1)
max (1)
mode (Replace)
candidates (candidates)
}
}
}
...Learn more about the deprecation stages.
Updated: July 26, 2019
We've added a new runtime flag, no-filtering-with-validation, which changes how Bixby applies validation conditions in order to reduce the number of ambiguous values.
By default, when a cardinality constraint violation occurs because an input has too many available candidates, Bixby attempts to pre-filter the available candidates using the existing input validations. This runtime flag disables that.
For more information, see Runtime Flags.
Example
capsule {
...
runtime-flags {
concepts-inherit-super-type-features
modern-prompt-rejection
support-halt-effect-in-computed-inputs
no-filtering-with-validation
}
}Learn more about the deprecation stages.
We've introduced a new runtime flag, modern-default-view-behavior, which changes behavior when a result view or input view is not defined.
If modern-default-view-behavior is not set, Bixby will fall back to a default collection. This behavior is deprecated, and will be removed in a future release.
Example
capsule {
...
runtime-flags {
concepts-inherit-super-type-features
modern-default-view-behavior
support-halt-effect-in-computed-inputs
}
}We've added a number of reserved utterances. Read Reserved Utterances for the full list.
If you include the new modern-default-view-behavior runtime flag, any Bixby Views you create now have default views if you do not specify a result-view or an input-view that matches the current moment. Bixby uses a default view that can provide a reasonable display of results or selectable options to the user. Your capsule should provide its own views for the best possible conversations with users.
There is no default confirmation-view, although Bixby falls back to default confirmation dialog and displays if views are not defined for confirmation moments.
For more information, see Runtime Flags.
Learn more about the deprecation stages.
We've introduced a new read-manual key within navigation-mode, which provides you with a manual way to handle page navigation. Results still have paging, but you have more control over how this is done. This key helps you with APIs that handle result paging themselves. For example, you might use this with a web API that provides a "cursor" to obtain more results, rather than returning all results.
Example
result-view {
match-pattern: MyResultList (list)
render {
list-of (list.results) {
navigation-mode {
read-manual {
page-selection-question (Do you like one of these?)
item-selection-question (Which one would you like?)
previous-page {
intent {
goal: MyResultList
value: MyPageNumber$expr(list.curPage - 1)
}
}
next-page {
intent {
goal: MyResultList
value: MyPageNumber$expr(list.curPage + 1)
}
}
// optional
with-previous-page-conversation-driver (!list.isFirstPage)
with-next-page-conversation-driver (!list.isLastPage)
}
}
}
}We've added a new progress-bar component to let users know the progress of an event or action.
Example
section {
content {
progress-bar (70.2)
}
...
}We've added a new column-size key, which determines how many image cards are displayed within a larger list. You can specify 1, 2, or 3 cards per column.
Example
list-of (this) {
where-each (car) {
compound-card {
content {
image-card {
aspect-ratio (9:16)
column-size (2)
image-url ("#{raw(car.imageUrl)}")
title-area {
slot1 {
text {
value ("#{raw(car.name)}")
style (Title_M)
}
}
}
}
}
}
}
}You now have the option to specify amber, blue, green, or red text color within text. If not specified, the default color is white.
Updated: July 8, 2019
You can now add a layout within layout-macro.
You can't use a layout-macro with list-of and selection-of components if the macro can return a layout.
The NamedPoint concept within the viv.geo library capsule now supports rectangular bounding boxes.
We're making Bixby Views more consistent by ensuring each card has only one tappable area. As a result, we're deprecating support for the chin key for compound-card.
For more information, see cards in Bixby Views.
Learn more about the deprecation stages.
We've added the ability to add an attribution-link within sections.
Example
// Within a larger view or layout file
section {
content {
... //other components
attribution-link {
label {
template ("More on BixbyDevelopers.com")
}
url ("https://bixbydevelopers.com")
}
}
}
We've added the option to add spacer in content within a section.
// within a larger Views file
...
section {
content {
title-area { ... }
spacer // 24px
paragraph { ... }
// no spacer, 12px space between these two components
single-line { ... }
}
}
...In addition to a single date, you can now use viv.time.DateInterval as the initial-value for a calendar picker.
We've introduced a new flattenAs formatting expression function, which flattens specified nodes into a single list, formats them in the specified format, then joins those formatted strings as a conjunctive list ("value1, value2, and value3").
We've updated our SDK deprecation lifecycle, which includes three stages. Learn about these deprecations in our Developers' Guide.
We've deprecated the confirmed-by key. You should instead use the confirm key.
Example
confirm {
if (myInput > 65) {
by (MyConfirmation)
}
}Learn more about the deprecation stages.