---
title: Plugins API
permalink: /plugins-api/
---
This is a set of utilities that we expose to create or add functionality to the Plugins. Feel free to check all the utilities here at `talk/plugin-api`.
## Actions
### Import
```
import {notify} 'plugin-api/beta/actions';
```
#### Admin
* `viewUserDetail`
#### Auth
* `setAuthToken`
* `handleSuccessfulLogin`
* `logout`
#### Notification
* `notify`
#### Stream
* `setSort`
* `showSignInDialog``
## Components
### Import
```
import {Slot} 'plugin-api/beta/components';
```
* `Slot`
You probably won’t need to use the `` component in your plugin. But there’s a chance you might want to add a Slot so another plugin gets injected in your plugin.
```js
const slotPassthrough = {
clearHeightCache,
root,
asset,
comment,
};
```
* `IfSlotIsEmpty`
```js
```
* `IfSlotIsNotEmpty`
* `ClickOutside`
* `CommentAuthorName`
* `CommentTimestamp`
* `CommentDetail`
* `CommentContent`
* `ConfigureCard`
* `StreamConfiguration`
* `Recaptcha`
## HOCS - Higher Order Components
### Import
```
import {withReaction} 'plugin-api/beta/hoc';
```
### Hocs
*`withGraphQLExtension`*
This HOC allows components to register GraphQLExtensions for the framework. IMPORTANT: The extensions are only picked up when the component is used in a slot.
```js
import {withGraphQLExtension} 'plugin-api/beta/hoc';
// MyComponent.js
withGraphQLExtension({
mutations: {
UpdateNotificationSettings: () => ({
update: proxy => {...}
})
},
fragments: {...},
query: {...},
})(MyComponent);
```
And then update your `my-plugin/client/index.js`
```js
export default {
mySlot: [MyComponent],
}
```
* `withReaction`
Provides you utilities to create components that interact with Reactions.
* `withTags`
Provides you utilities to create components that interact with Tags.
* `withSortOption`
* `withEmit`
* `excludeIf`
* `withFragments`
* `withMutation`
* `withForgotPassword`
* `withSignIn`
* `withSignUp`
* `withResendEmailConfirmation`
* `withSetUsername`
* `withEnumValues`
* `withVariables`
* `withFetchMore`
* `withSubscribeToMore`
* `withRefetch`
* `withIgnoreUser`
* `withBanUser`
* `withUnbanUser`
* `withStopIgnoringUser`
* `withSetCommentStatus`
* `compose`
## Coral UI
### Import
```
import {Button} 'plugin-api/beta/components/ui';
```
### Components
* `Alert`
* `Dialog`
* `CoralLogo`
* `FabButton`
* `TabBar`
* `Tab`
* `TabCount`
* `TabContent`
* `TabPane`
* `Button`
* `Spinner`
* `Tooltip`
* `PopupMenu`
* `Checkbox`
* `Icon`
* `List`
* `Item`
* `Card`
* `TextField`
* `Success`
* `Paginate`
* `Wizard`
* `WizardNav`
* `SnackBar`
* `TextArea`
* `Drawer`
* `Label`
* `FlagLabel`
* `Dropdown`
* `Option`
* `BareButton`
## Services
### Import
```
import {t, timeago, can} 'plugin-api/beta/services';
```
* `t`
To manage translations.
* `timeago`
Handle time with [timeago](https://github.com/hustcc/timeago.js)
* `can`
A permissions utility.