Bixby Developer Center


20F Capsule SDK Release Notes

Updated: May 15, 2020

New Watch Target Available for Marketplace

In addition to bixby-mobile, you can now submit your capsule with the new bixby-watch target.

New Approach to User Permissions

We have been working on several enhancements related to user data permissions.

We're breaking up the permissions that were originally given by user-profile-access into separate permission-specific keys: device-location-access for users' location, for users' contacts, and viv.self for users' profile information.

Accordingly, user-profile-access will be deprecated in our 20G release.

We've also added restrictions to these permissions, so that you can change the scope of how much these permissions affect users.

These changes will provide capsule developers the ability to define what specific type of user data (such as location and contacts) that the capsule requests from the user. This update also allows users to control what data they want to share with a capsule or service at a more granular level.

As before, all user data permissions in Bixby are optional. Users can decide whether they want to share data with a capsule and can choose to enable and use the capsule without having to share data with a capsule. Users can also change this anytime from the privacy section in Bixby Settings.

Deprecation Stages (learn more)

  • Stage 1: R20G
  • Stage 2: R20J
  • End of Life: None

Bixby View Updates for Cards

As part of our effort to streamline the behavior of card components and make implementation simpler, the Bixby platform will now render a card as a “card” when it is clickable, and as an “area” when it is not clickable. For example, for capsules that are in the Marketplace, Bixby will automatically render cell-card to look like a cell-area when it is not clickable. No code change is required.

Here are some additional changes to be aware of:

  • You will need to use a card component with a valid on-click when rendering list-of components. With the selection-of component, if you don't have an on-click, Bixby creates an intent for you. We've deprecated the use of has-details for both list-of and selection-of list components.

  • We've introduced a runtime flag, auto-on-click-for-list-of, which is part of runtime-version 7 and, if enabled, preserves the old auto-selection behavior for list-of. For versions before 7, it defaults to true, In runtime 7, it defaults to false, and the absence of the runtime flag enables the always-respect-on-click behavior, which is the new default on-click behavior. You should only add the runtime flag to runtime version 7 if you want to preserve the previous on-click behavior.

  • You can now add a badge, external-link-badge, to a parent component, indicating to users that tapping on the component takes them out of Bixby to an external application. You should add this component to your on-click definition if tapping on this component will navigate the user away from Bixby.

  • With on-click, you can now add a url, which takes the users to the specified URL when they tap on a component.


Make sure that you are following the App Punch-Out policies if your on-click makes users exit Bixby.

Deprecation Stages (learn more)

  • Stage 1: R20F
  • Stage 2: R20I
  • End of Life: None

Input Macros Must Be Qualified

Macros from imported libraries now must be qualified. For example, consider if viv.libraryCapsule has the template macro template-macro-def (Select). If you were to import viv.libraryCapsule and use the Select macro (as in macro (Select) ), this now results in a deprecation warning. As a workaround, you should fully qualify the macro:

macro (viv.libraryCapsule:Select)

You can also use aliases when fully qualifying the macro. If, for example, you import viv.libraryCapsule as libCapsule, then you can instead use the alias as follows:


Deprecation Stages (learn more)

  • Stage 1: R20F
  • Stage 2: R20I
  • End of Life: None

New EL Function for Length

We've add a new length Expression Language (EL) function that returns the length of the supplied string:

action (IsStringGreaterThanN) {
type (Constructor)
collect {
input (N) {
type (viv.core.Integer)
min (Required) max (One)
input (string) {
type (viv.core.Text)
min (Required) max (One)
output (viv.core.Boolean) {
evaluate {
$expr(length(string) > N)