Vanilla JavaScript Quickstart
Use the Pillar SDK in any JavaScript application without React.
What you'll build:
- A slide-out assistant panel with co-pilot chat
- An assistant button or sidebar trigger that opens the panel
- Basic action handling
Note: For the best experience with advanced features like Plans and Custom Cards, we recommend the React integration. This guide covers core functionality for vanilla JavaScript applications.
Prerequisites
- A Pillar account (sign up at trypillar.com)
- Your public API key (found in Settings → API Keys)
Option 1: Script Tag (Fastest)
Add the SDK via a script tag - no build step required:
<script src="https://cdn.trypillar.com/sdk.js"></script><script>Pillar.init({productKey: 'your-product-key',publicKey: 'pk_live_xxx',});</script>
Auto-Initialization
Use data attributes for automatic initialization:
<scriptsrc="https://cdn.trypillar.com/sdk.js"data-product-key="your-product-key"data-public-key="pk_live_xxx"></script>
Option 2: NPM Installation
Install via npm if you're using a bundler:
npm install @pillar-ai/sdk
Then import and initialize:
import { Pillar } from '@pillar-ai/sdk';await Pillar.init({productKey: 'your-product-key',publicKey: 'pk_live_xxx',});
Add an Assistant Button (Optional)
By default, Pillar shows a sidebar tab on the screen edge. If you disable it or want a custom trigger, create a button to open the panel:
<button id="assistant-button">Ask Assistant</button><script>document.getElementById('assistant-button').onclick = function() {Pillar.toggle();};</script>
Configuration
Pass configuration options to init:
Pillar.init({productKey: 'your-product-key',publicKey: 'pk_live_xxx',panel: {position: 'right',mode: 'push',width: 400,},theme: {mode: 'auto',colors: {primary: '#2563eb',},},});
Control the Panel
// Open the panelPillar.open();// Open to a specific articlePillar.open({ article: 'getting-started' });// Open with a search queryPillar.open({ search: 'billing' });// Close the panelPillar.close();// TogglePillar.toggle();
Set Context
Tell Pillar what the user is doing for smarter AI responses:
Pillar.setContext({currentPage: window.location.pathname,userId: 'user_123',userRole: 'admin',});
Handle Actions
Register handlers for actions the AI suggests:
Pillar.onTask('navigate', function(data) {window.location.href = data.path;return { success: true };});Pillar.onTask('open_modal', function(data) {document.getElementById(data.modalId).showModal();return { success: true };});
Register Custom Cards
Create custom confirmation UI for actions:
Pillar.registerCard('invite_members', function(container, data, callbacks) {container.innerHTML = `<div class="invite-card"><h3>Invite Members</h3><div class="emails">${data.emails.join(', ')}</div><button id="cancel">Cancel</button><button id="confirm">Send Invites</button></div>`;container.querySelector('#confirm').onclick = function() {callbacks.onConfirm(data);};container.querySelector('#cancel').onclick = callbacks.onCancel;// Return cleanup functionreturn function() {container.innerHTML = '';};});
Update Theme
// Change modePillar.setTheme({ mode: 'dark' });// Update colorsPillar.setTheme({colors: { primary: '#10b981' }});
Event Listeners
// Panel eventsPillar.on('panel:open', function() {console.log('Panel opened');});Pillar.on('panel:close', function() {console.log('Panel closed');});// Ready eventPillar.on('ready', function() {console.log('SDK initialized');});
Cleanup
Destroy the SDK when done:
Pillar.destroy();
Next Steps
- Add actions that the AI can suggest
- Customize the theme to match your brand
- Configure the panel position and behavior