osw-studio / docs /WHATS_NEW.md
otst's picture
upgrade edge and server functions to quickjs wasm sandbox
8d2afb2
# What's New
Welcome to OSW Studio! This page highlights the latest features and updates.
**First time here?** Start with the **[Overview](?doc=overview)** or jump straight to **[Getting Started](?doc=getting-started)** to build your first website in 5 minutes.
---
## v1.22.0 - QuickJS WASM Sandbox
Edge and server functions now run in a QuickJS WebAssembly sandbox for stronger security isolation.
- **WASM Isolation** - Separate JavaScript engine via WebAssembly boundary
- **Memory Limits** - 64MB default, enforced by WASM runtime
- **Fetch Security** - 10 requests max, 10s timeout, 5MB limit, private IPs blocked in production
- **Base64 Support** - Added `atob()` and `btoa()` functions
Your existing functions work unchanged with the same API surface.
---
## v1.21.0 - Dashboard for Browser Mode
The dashboard is now available in browser mode and is the default landing page for both modes.
- **Dashboard for Browser Mode** - Dashboard now available in browser mode (previously server mode only)
- **Dashboard as Landing Page** - Dashboard is the default landing page for both modes
- **Quick Actions Bar** - Create projects, start guided tour, join Discord, and access docs
- **What's New Component** - Shows latest version highlights with link to full changelog
- **Recent Projects** - Quick access to recently updated projects from dashboard
---
## v1.20.0 - Admin Dashboard for server mode
A new dashboard is now the landing page after login, giving you a quick overview of your server:
- **System** - OSWS version, Node.js version, uptime, memory usage
- **Content** - Projects, templates, skills, and total files
- **Hosting** - Published sites, sites with databases, storage used
- **Traffic** - Requests per hour/day, error counts, top sites, recent errors
Traffic is logged server-side with automatic 7-day retention.
---
## v1.19.0 - Server Mode Backend Features
This release adds complete backend functionality for published sites, including edge functions, database management, server functions, secrets, and AI integration.
### Edge Functions
Create serverless JavaScript endpoints for your published sites:
- **REST API endpoints** - GET, POST, PUT, DELETE, or ANY method
- **Database access** - Query your site's SQLite database via `db.query()` and `db.run()`
- **External requests** - Use `fetch()` to call external APIs
- **Sandboxed execution** - Safe VM-based runtime with configurable timeouts (1-30 seconds)
- **Secrets access** - Use `secrets.get()`, `secrets.has()`, `secrets.list()` for API keys
```javascript
// Example: GET /api/sites/{siteId}/functions/get-users
const users = db.query('SELECT * FROM users LIMIT 10');
Response.json({ users });
```
### Server Functions (Helpers)
Create reusable JavaScript helpers callable from edge functions:
- **Code reuse** - Define shared logic once, use across all edge functions via `server.functionName()`
- **Same security model** - Runs in the same sandboxed VM as edge functions
- **Full access** - Helpers have access to `db`, `fetch`, and `console`
```javascript
// Server function "validateAuth"
const [apiKey] = args;
const users = db.query('SELECT * FROM users WHERE api_key = ?', [apiKey]);
return users.length > 0 ? { valid: true, user: users[0] } : { valid: false };
```
### Secrets Management
Encrypted storage for API keys and tokens:
- AES-256-GCM encryption with unique IVs per secret
- Admin-only access, values never logged or exposed
- AI can create secret placeholders, user sets values in admin UI
### Database Tools
- **SQL Editor** - Execute raw SQL queries with Monaco editor and query history
- **Schema Viewer** - Browse database structure with expandable table/column tree
- **Execution Logs** - Monitor function invocations with status, duration, timestamps
### Server Context Integration
The AI can now understand and work with your site's server features! When you select a site:
- **Site Selector** dropdown in workspace header to choose site context
- **`/.server/` hidden folder** with transient files containing server context
- AI receives edge functions, database schema, server functions, and secret names
#### The `/.server/` Folder
A hidden folder appears in the file explorer (right-click → "Show Hidden Files"):
- `db/schema.sql` - Database schema (read-only, use sqlite3 for DDL)
- `edge-functions/*.json` - Edge functions (editable)
- `server-functions/*.json` - Server functions (editable)
- `secrets/*.json` - Secret placeholders (editable - AI creates, user sets values)
### AI Read-Write Access to Server Features
The AI can create, modify, and delete server features:
#### SQL Queries with `sqlite3`
```
sqlite3 "SELECT * FROM products"
sqlite3 -json "SELECT * FROM users WHERE active = 1"
sqlite3 "CREATE TABLE orders (id INTEGER PRIMARY KEY, total REAL)"
```
System tables are protected from modification.
#### Creating Functions
Ask the AI to create endpoints or helpers:
```
Create an edge function called "list-products" that returns all products
```
Functions are stored as JSON files:
```json
{
"name": "list-products",
"method": "GET",
"enabled": true,
"timeoutMs": 5000,
"code": "Response.json(db.query('SELECT * FROM products'));"
}
```
### Edge Function Routing for Published Sites
Published sites can call edge functions using simple paths like `/submit-contact` instead of the full API URL.
A lightweight interceptor script (~1.5KB) is injected into published HTML that:
- Intercepts `fetch()` and `XMLHttpRequest` calls
- Detects paths without file extensions (e.g., `/submit-contact`, not `/styles.css`)
- Routes them to `/api/sites/{siteId}/functions/{path}`
- Handles form submissions automatically
```javascript
// Your frontend code - simple and clean!
const response = await fetch('/submit-contact', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: 'John', email: 'john@example.com' })
});
```
Forms work automatically too:
```html
<form action="/submit-contact" method="POST">
<input name="email" type="email" required>
<button type="submit">Subscribe</button>
</form>
```
Custom events for response handling:
```javascript
document.addEventListener('edge-function-response', (e) => {
console.log('Result:', e.detail.result);
});
document.addEventListener('edge-function-error', (e) => {
console.error('Error:', e.detail.error);
});
```
### Preview Edge Function Support
The live preview now supports edge function routing when a site is selected. Test your edge functions directly in the preview without publishing first.
**[Server Features Guide →](?doc=server-features)** | **[Server Mode Guide →](?doc=server-mode)** | **[Edge Functions Guide →](?doc=edge-functions)**
---
## v1.18.0
### SQLite Migration - Simpler Server Mode
Server Mode now uses SQLite instead of PostgreSQL. This means:
- **Zero database setup** - No need to install or configure PostgreSQL
- **Just run it** - `npm install && npm start` is all you need
- **Portable** - All data stored in local files, easy to backup and move
### Per-Site Databases
Each published site now has its own SQLite database containing its files, settings, and analytics. This keeps sites isolated from each other.
**Storage structure:**
- `data/osws.sqlite` - Your projects, templates, and skills
- `sites/{siteId}/site.sqlite` - Each site's files and analytics
### Breaking Change
PostgreSQL is no longer supported. If you have an existing Server Mode deployment with PostgreSQL, you'll need to migrate your data manually.
**[Server Mode Guide →](?doc=server-mode)**
---
## v1.17.0
### Reasoning Token Support
See what the AI is thinking! Models with reasoning capabilities now display their thought process in a collapsible "reasoning" block in the chat panel.
- **Anthropic extended thinking** - Claude models with thinking enabled
- **DeepSeek reasoning models** - DeepSeek v3.2 and other reasoning-capable models
- **Gemini thinking models** - Gemini Pro 3 with thinking enabled
### Reasoning Toggle
Enable or disable reasoning on a per-model basis directly from the model selector. The toggle appears for models that support it.
### Malformed Tool Call Detection
The AI now auto-detects when a model accidentally writes tool syntax as text instead of properly invoking functions, and automatically prompts it to retry correctly.
### UI Improvements
- Renamed "Thinking..." indicator to "Waiting for response..." for clarity
- Fixed indicator sometimes persisting after the response completed
---
## v1.16.0
### Server Mode
Self-host OSW Studio for a complete web publishing platform. Server Mode adds:
- **Admin authentication** - Password-protected admin area
- **Project sync** - Push projects to the server, pull them back to any browser
- **Static site publishing** - Publish projects directly at `/sites/{siteId}/` with clean URLs
- **Site settings** - Configure scripts, analytics, SEO meta tags, and compliance (cookie consent, GDPR)
- **Built-in analytics** - Privacy-focused tracking, or integrate Google Analytics, Plausible, and more
- **Auto-generated files** - Sitemap.xml and robots.txt created on publish
Server Mode is optional and requires setup. It's still being actively developed - expect improvements to authentication, publishing, and site management in future releases.
**[Server Mode Guide →](?doc=server-mode)**
### In-App Documentation
Browse all documentation without leaving OSW Studio. Access guides from the sidebar under Docs.
### Gemini Thinking Model Support
Full compatibility with Gemini thinking models via OpenRouter.
### Skills System Enhancements
- Split `osw-workflow` into focused skills: `osw-planning` (multi-page sites) and `osw-one-shot` (landing pages)
- Skills now appear in the project structure shown to AI
### Debug Panel Terminal
The Debug panel now includes a terminal for testing VFS shell commands directly.
---
## v1.15.0
- **Skills System** - Create, import, and export AI skills with markdown-based editor
- **Built-in skills** - OSW Workflow, Handlebars Advanced, Accessibility (WCAG 2.1 AA)
- **Skills tab** - New tab alongside Projects and Templates
---
## v1.14.0
- **Event-driven chat** - Real-time event streaming with improved UI responsiveness
- **Debug panel** - Real-time event monitoring with filtering and auto-scroll
- **Handlebars subdirectories** - Organize templates in `/templates/components/`, `/templates/partials/`, etc.
---
## v1.13.0
- **Templates system** - Create, export, and import reusable project templates
- **Template browser** - Grid/list views, search, and sorting
- **Project screenshots** - Automatic preview captures
---
## v1.12.0
- Rebranded from DeepStudio to OSW Studio
- Dual mode system: Chat mode (read-only) and Code mode (full editing)
- Consolidated IndexedDB architecture
---
## v1.0.0
- 8 AI providers (OpenRouter, OpenAI, Anthropic, Google, Groq, Ollama, LM Studio, SambaNova)
- Virtual file system with project management
- Live preview with real-time updates
- Multi-tab Monaco editor
- Export to ZIP for deployment
---
**Ready to go?** Head back to **[Projects](?nav=projects)** or **[browse all docs](?doc=overview)**.