Skip to main content

sdk-methods

Use SDK methods to interact with playgrounds: run, getCode, setConfig, getConfig, watch, runTests, format, getShareUrl, show, destroy. Load this skill when programmatically controlling embedded playgrounds, reacting to code changes, or retrieving compiled output.

Source facts

Repository
live-codes/livecodes
Last source activity
September 14, 2026 at 12:04
Detected SKILL.md language
English
Stars
1,517
Forks
271

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
sdk-methods
description
Use SDK methods to interact with playgrounds: run, getCode, setConfig, getConfig, watch, runTests, format, getShareUrl, show, destroy. Load this skill when programmatically controlling embedded playgrounds, reacting to code changes, or retrieving compiled output.
metadata
{"type":"core","library":"livecodes","library_version":"0.13.0"}
requires
["sdk-embedding"]
sources
["live-codes/livecodes:docs/docs/sdk/js-ts.mdx","live-codes/livecodes:src/sdk/index.ts"]
This skill builds on sdk-embedding. Read it first for foundational concepts. # LiveCodes — Use SDK Methods The Playground object returned by `createPlayground` exposes methods to programmatically control the playground. ## Setup ```javascript import { createPlayground } from 'livecodes'; const playground = await createPlayground('#container', { template: 'react', }); // All SDK methods return Promises await playground.run(); const code = await playground.getCode(); await playground.setConfig({ /* new config */ }); ``` ## Core Patterns ### Run the playground ```javascript // Run the result page (after any needed compilation) await playground.run(); ``` ### Get current code and config ```javascript // Get code from all editors const code = await playground.getCode(); console.log(code.markup.content); // Source markup console.log(code.markup.language); // Language name console.log(code.markup.compiled); // Compiled output (if applicable) console.log(code.result); // Result page HTML // Get configuration object const config = await playground.getConfig(); console.log(config.title); console.log(config.markup.language); // Get content-only config (without user preferences) const contentConfig = await playground.getConfig(true); ``` ### Update playground configuration ```javascript // Load new project in place (no full reload) await playground.setConfig({ markup: { language: 'markdown', content: '# New Content' }, }); // Get the resulting config const newConfig = await playground.setConfig({ script: { language: 'typescript', content: 'const x: number = 1;' }, }); ``` ### Watch for changes ```javascript // Watch for code changes const codeWatcher = playground.watch('code', ({ code, config }) => { console.log('Code changed:', code.script.content); }); // Watch for code execution const runWatcher = playground.watch('run', ({ code, config }) => { console.log('Playground ran. Result HTML:', code.result); }); // Watch for console output const consoleWatcher = playground.watch('console', ({ method, args }) => { console[method](...args); }); // Watch for test results const testsWatcher = playground.watch('tests', ({ results, error }) => { results.forEach((r) => console.log(r.status, r.testPath)); }); // Remove watchers when done codeWatcher.remove(); runWatcher.remove(); consoleWatcher.remove(); testsWatcher.remove(); ``` ### Run tests programmatically ```javascript const { results } = await playground.runTests(); results.forEach((result) => { console.log(result.status); // 'pass', 'fail', or 'skip' console.log(result.errors); // Array of error strings console.log(result.testPath); // ['describe', 'it'] }); ``` ### Show specific panel ```javascript // Show editors await playground.show('editor'); // Active editor await playground.show('markup'); // Markup editor await playground.show('style'); // Style editor await playground.show('script'); // Script editor // Show tools await playground.show('console'); // Console panel await playground.show('compiled'); // Compiled code viewer await playground.show('tests'); // Tests panel // Show result await playground.show('result'); // Result page await playground.show('toggle-result'); // Toggle result visibility // With options await playground.show('result', { full: true }); // Full screen await playground.show('result', { zoom: 0.5 }); // 50% zoom await playground.show('script', { line: 10, column: 5 }); // Scroll to line ``` ### Format code ```javascript // Format all editors await playground.format(); // Format only active editor await playground.format(false); ``` ### Get share URL ```javascript // Long URL with compressed config const longUrl = await playground.getShareUrl(); // Short URL (requires share service) const shortUrl = await playground.getShareUrl(true); ``` ### Execute custom commands ```javascript // Set broadcast token await playground.exec('setBroadcastToken', 'my-token'); // Show version info await playground.exec('showVersion'); ``` ### Destroy playground ```javascript await playground.destroy(); // Playground removed from DOM, all event listeners cleaned up ``` ## Common Mistakes ### HIGH Not awaiting async SDK methods Wrong: ```javascript const playground = await createPlayground('#container', {}); const code = playground.getCode(); // Returns Promise, not code console.log(code); // Promise { <pending> } ``` Correct: ```javascript const playground = await createPlayground('#container', {}); const code = await playground.getCode(); // Await the Promise console.log(code.markup.content); ``` All SDK methods return Promises. Use `await` or `.then()` to get the result. Source: docs/docs/sdk/js-ts.mdx — SDK methods section ### MEDIUM watch callback receives wrong data structure Wrong: ```javascript playground.watch('code', (data) => { console.log(data.content); // Undefined }); ``` Correct: ```javascript // 'code' event provides { code, config } playground.watch('code', ({ code, config }) => { console.log(code.markup.content); console.log(code.style.content); console.log(code.script.content); console.log(code.result); // Result page HTML }); // 'run' event provides { code, config } playground.watch('run', ({ code, config }) => { console.log(code.result); // Result page HTML }); // 'console' event provides { method, args } playground.watch('console', ({ method, args }) => { console[method](...args); }); // 'tests' event provides { results, error? } playground.watch('tests', ({ results, error }) => { if (error) console.error(error); results.forEach((r) => console.log(r.status)); }); ``` Source: docs/docs/sdk/js-ts.mdx — watch method section ### LOW Using deprecated onChange instead of watch Wrong: ```javascript // Deprecated method const watcher = playground.onChange(({ code, config }) => { console.log('changed'); }); ``` Correct: ```javascript // Use watch instead const watcher = playground.watch('code', ({ code, config }) => { console.log('changed'); }); watcher.remove(); // When done watching ``` `onChange` is deprecated. Use `watch('code', callback)` instead. Source: src/sdk/index.ts — `onChange` marked as deprecated ## SDK Method Reference | Method | Returns | Description | | ------------------------- | -------------------- | ---------------------------------------- | | `load()` | `Promise<void>` | Load playground (for click-to-load mode) | | `run()` | `Promise<void>` | Run the result page | | `format(allEditors?)` | `Promise<void>` | Format code | | `getShareUrl(shortUrl?)` | `Promise<string>` | Get shareable URL | | `getConfig(contentOnly?)` | `Promise<Config>` | Get configuration | | `setConfig(config)` | `Promise<Config>` | Update configuration | | `getCode()` | `Promise<Code>` | Get code from all editors | | `show(panel, options?)` | `Promise<void>` | Show specific panel | | `runTests()` | `Promise<{results}>` | Run tests | | `watch(event, fn)` | `{remove()}` | Subscribe to events | | `exec(command, ...args)` | `Promise<any>` | Execute custom command | | `destroy()` | `Promise<void>` | Clean up and remove |
View on GitHub