Skip to main content

Standalone and Development Modes

Your app should work in three modes:

ModeWhenToken SourceOctostar APIs
ProductionRunning inside Octostar iframeContextAPI.getContext()Fully available
DevelopmentLocal dev with Octostar backendOS_JWT env var + OS_DEV_MODE=trueAvailable via SDK
StandaloneLocal dev without OctostarOS_STANDALONE=trueUnavailable — use fallbacks

Iframe Detection

Disable React StrictMode inside iframes to prevent PostRobot connection issues:

// main.tsx
const isInIframe = (() => {
try { return window.self !== window.top; }
catch { return true; }
})();

const AppWrapper = isInIframe
? App
: () => <StrictMode><App /></StrictMode>;

Conditional Octostar Features

Always check for API availability before using Octostar-specific features:

const { DesktopAPI } = useOctostarContext();

// Octostar environment
if (DesktopAPI) {
const workspaces = await DesktopAPI.getOpenWorkspaces();
}
// Standalone fallback
else {
const workspaces = await api.getWorkspaces();
}

On the backend, wrap SDK imports in try/except:

try:
import octostar.client
OCTOSTAR_SDK_AVAILABLE = True
except ImportError:
OCTOSTAR_SDK_AVAILABLE = False