Kibana Plugin API Changes in 7.5
Expose package info to Kibana Platform plugins
Kibana package
information provided to the plugins in constructor as a part of PluginInitializerContext
class MyPlugin {
constructor(context: PluginInitializerContext){
const isDitribution = context.env.packageInfo.dist;
}
}
via #48101
Reconstruct setup\start data shim APIs
savedObjects.client is not available in setup
in Kibana platform.
The following APIs were updated accordingly as well as their consumers.
filter
service is available only onstart
.indexPatterns.indexPatterns
service is available only onstart
.search.savedQueries
service is available only onstart
.
via #47851
Supports metadata logging in the Kibana platform
Logging service allows attaching meta-data to the logging messages. Meta-data expected to be a valid JSON
object.
log.info('server started', { port: 8088 });
output in json format:
{
message: 'server started'
port: 8088
...
}
via #47456
Get rid of addFiltersAndChangeTimeFilter
Deprecated addFiltersAndChangeTimeFilter
.
If needed, replace with
const { timeRangeFilter, restOfFilters } = extractTimeFilter(indexPattern.timeFieldName, filters);
queryFilter.addFilters(restOfFilters);
if (timeRangeFilter) changeTimeFilter(timefilter, timeRangeFilter);
via #47450
Remove ui/persisted_log - Part 2
Moved persisted_log
from src/legacy/ui/public/persisted_log/persisted_log.ts
→ src/legacy/core_plugins/data/public/query/persisted_log/persisted_log.ts
No changes were made to interface.
via #47236
Advanced ui actions 2 np
advanced_ui_actions
NP-ready plugin has been moved to the Kibana Platform X-Pack plugin.
via #46948
Embeddables 👉 Kibana Platform
Embeddables API has been moved from src/legacy/core_plugins/embeddable_api
to the embeddable
Kibana Platform plugin at src/plugins/embeddable
.
Now you can use Embeddables API in the Kibana Platform by depending on embeddable
plugin and receiving it through the plugin dependencies. In the legacy Kibana platform you can access Embeddables though ui/new_platform
backdoor.
import { npSetup, npStart } from 'ui/new_platform';
npSetup.plugins.embeddable
npStart.plugins.embeddable
via #46771
Create a pre-wired version of SearchBar
In order to use any of our stateful components, you are going to have to wrap your application on the topmost level with a KibanaContextProvider
:
Assuming new platform syntax:
<KibanaContextProvider
services={{
uiSettings: core.uiSettings,
docLinks: core.docLinks,
data: plugins.data,
}}
>
{content}
</KibanaContextProvider>
Then, inside a react component, you may use our stateful component, that requires less input and confuguration:
const {
ui: { SearchBar },
} = plugins.data;
render() {
return <SearchBar
appName="myApp"
...
/>
}
via #46702
FieldFormats Registry API change
byId[id]
has been replaced with .getType(id)
for accessing individual field formatters.
via #46395
Move ui/value_suggestions ⇒ NP data plugin
Move value_suggestions
into NP
and expose data.getSuggestions
on start contract.
In old platform:
import { npStart } from 'ui/new_platform';
const suggestions = await npStart.plugins.data.getSuggestions(indexPattern.title, field, value);
In new platform:
public start(core, plugins) {
...
const suggestions = await plugins.data.getSuggestions(indexPattern.title, field, value);
}
via #45762
Moved KbnError base class ⇒ kibana_utils
- Moved errors base class to kibana_utils, along with:
DuplicateField
SavedObjectNotFound
InvalidJSONProperty
- Moved specific error types to appropriate modules
PersistedStateError
⇒ui/persisted_state
VislibError
and its children ⇒ui/vislib
RequestFailure
⇒ui/courier
- Delete unused errors:
VersionConflict
MappingConflict
FetchFailure
RestrictedMapping
CacheWriteFailure
FieldNotFoundInCache
FetchFailure
via #45532
Rename QueryBar to QueryBarTopRow
- Rename
QueryBar
toQueryBarTopRow
- Stop exporting
QueryBar
on the public contract.
via #45250
Move ExpressionRenderer to setup instead of start
Plugins may now access the expression renderer in their setup phase as well as their start phase.
via #45141
Add x-pack plugin for Kibana platform browser licensing information
Add x-pack plugin for new Kibana platform public licensing information. This will eventually replace the licensing information consumed via xpack_main
. Upon setup, this plugin exposes an observable API for inspecting and making checks against the license information.
license$.subscribe(license => {
console.log(license.uid);
console.log(license.isActive);
console.log(license.type);
const { state } = license.check('my-plugin', LICENSE_TYPE.gold);
if (state !== LICENSE_STATUS.Valid) {
disableSomething();
}
});
via #44922
Move timefilter and timehistory instantiation ⇒ data plugin
Move value_suggestions
into NP
and expose data.getSuggestions
on start contract.
In old platform:
import { npStart } from 'ui/new_platform';
const timefilter: TimefilterContract = npStart.plugins.data.timefilter.timefilter;
const timeHistory: TimeHistoryContract = npStart.plugins.data.timefilter.timeHistory;
In new platform:
public start(core, plugins) {
...
const timefilter: TimefilterContract = plugins.data.timefilter.timefilter;
const timeHistory: TimeHistoryContract = plugins.data.timefilter.timeHistory;
}
Also, in timefilter
the following API changes were made:
- Replaced
timefilter.isAutoRefreshSelectorEnabled
member withtimefilter.isAutoRefreshSelectorEnabled()
- Replaced
timefilter.isTimeRangeSelectorEnabled
withtimefilter.isTimeRangeSelectorEnabled()
timefilter.getForceNow
is now private
via #44783
Move actions to Kibana Platform
The actions API that was previously a part of the Embeddable API is now it's own Kibana platform plugin.
via #44707
GUI enhancement: handle descriptions for visualizations (#20936)
- Allow adding a description in the visualization save form.
- Show the description in the visualizations list
- Shows an "info" icon on the right of the visualization when in a dashboard; hovering the icon shows the description within a toolti.
via #44702
plugins/visualizations => src/legacy/core_plugins/visualizations/public/np_ready/public/
via #44644
Decouple actions from embeddables: step 1
The action interface no longer requires an embeddable and triggerContext
to be passed in. The shape of ActionContext
is now completely up to the specific action implementation.
Previously:
interface Action<
TEmbeddable extends IEmbeddable = IEmbeddable,
TTriggerContext extends {} = {}
> {
execute(context: { embeddable: TEmbeddable, triggerContext: TriggerContext });
}
Now:
interface Action<ActionContext extends {} = {}> {
execute(context: ActionContext);
}
via #44503
Additional data plugin dependency clean up
Ipv4Address
→src/plugins/kibana_utils/public
ObjDefine
→src/legacy/core_plugins/data/public/index_patterns/fields/obj_define.js
via #44080
Add x-pack plugin for Kibana platform server licensing information
Add x-pack plugin for Kibana platform server licensing information. This will eventually replace the licensing information consumed via xpack_main
. Upon setup, this plugin exposes an observable API for inspecting and making checks against the license information.
license$.subscribe(license => {
console.log(license.uid);
console.log(license.isActive);
console.log(license.type);
const { check } = license.check('my-plugin', LICENSE_TYPE.gold);
if (check !== LICENSE_STATUS.Valid) {
disableSomething();
}
});
via #43623
Saved objects React components
<SavedObjectFinder>
and <SavedObjectSaveModal>
React components have been moved to kibana_react
Kibana Platform plugin. Usage of the new components:
import { SavedObjectFinder, SavedObjectSavedModal } from 'src/plugins/kibana_react';
<SavedObjectFinder savedObjects={core.savedObjects} uiSettings={core.uiSettings} />
<SavedObjectSaveModal />
via #43416
exit_full_screen_button -> Kibana Platform
ui/exit_full_screen_button
has been moved to the Kibana Platform. Now you should import it like this
import { ExitFullScreenButton } from 'src/plugins/kibana_react/public';
via #43414
Make request and response properties conditionally available during HTTP interception
Make request and response properties conditionally available during HTTP response interception. Adds request instance property to HTTP Fetch Errors. Prevents HTTP interception halting from settling associated fetch promises.
via #42755
Add KQL functionality in the find function of the saved objects
SavedObjectsClient.find now supports filtering using KQL string with the caveat that if you filter with an attribute from your type saved object. It should look like that savedObjectType.attributes.name: "SayMyName"
. However, If you used a direct attribute of a saved object like updatedAt
, you will have to define your filter like that savedObjectType.updatedAt > 2018-12-22
.
savedObjectsClient.find({
type: 'savedObjectType',
sortField: '@timestamp',
sortOrder: 'desc',
search: '',
searchFields:'',
fields: ['id', 'name', '@created', '@timestamp'],
filter:
'savedObjectType.attributes.name: "SayMyName" and savedObjectType.updatedAt > 2018-12-22'
});
via #41136
Add ApplicationService Mounting
Kibana Platform plugins may now register UI applications to display in the global navigation and be mounted inside Kibana as a single-page application. Example:
class MyPlugin {
public setup(core) {
core.application.register({
id: 'myApp',
async mount(context, params) {
const { renderApp } = await import('./application');
return renderApp(context, params);
}
});
}
}
For more details, see the Application Mounting RFC.
via #41007
Removal of visFactory.createAngularVisualization
Angular visualizations are now created using createBaseVisualization
and setting the visualization
property to AngularVisController
. If your plugin uses createAngularVisualization
, it will need to be updated as follows:
// old
import { VisFactoryProvider } from 'ui/vis/vis_factory';
export function createVis(Private) {
const visFactory = Private(VisFactoryProvider);
return visFactory.createAngularVisualization({
...
});
}
// new
import { visFactory } from 'ui/vis/vis_factory';
import { AngularVisController } from 'ui/vis/vis_types/angular_vis_type';
export function createVis() {
return visFactory.createBaseVisualization({
...,
visualization: AngularVisController
});
}
via #45888