A collection of awesome apps, mods, and resources for WebScreen! Share your creative applications and discover what the community has built for the WebScreen IoT display device.
-
Clone this repository
git clone https://github.com/HW-Lab-Hardware-Design-Agency/WebScreen-Awesome.git cd WebScreen-Awesome -
Create your app configuration (
app.json){ "name": "My App", "description": "A cool WebScreen app", "version": "1.0.0", "settings": { "wifi": { "ssid": "your_network", "pass": "your_password" }, "mqtt": { "enabled": false } }, "screen": { "background": "#000000", "foreground": "#FFFFFF" }, "display": { "brightness": 200 }, "script": "script.js" } -
Write your JavaScript app (
script.js)"use strict"; print("Hello WebScreen!"); // Create and display a label let style = create_style(); style_set_text_font(style, 32); style_set_text_color(style, 0xFFFFFF); let label = create_label(210, 100); obj_add_style(label, style, 0); label_set_text(label, "Hello World!");
-
Copy files to SD card and insert into WebScreen device
WebScreen-Awesome/
├── examples/ # Community WebScreen applications
│ ├── auctions/ # Auction bid tracker
│ ├── blink/ # Simple GIF animation display
│ ├── calculator/ # Basic calculator
│ ├── clock/ # Digital clock with themes
│ ├── dual_clock/ # Dual timezone display
│ ├── iot/ # IoT device monitor
│ ├── monitor/ # System performance monitor
│ ├── music/ # Music player interface
│ ├── notifications/ # Notification hub
│ ├── pomodoro/ # Pomodoro focus timer
│ ├── reminders/ # Personal reminder system
│ ├── rss/ # RSS feed reader
│ ├── sd_reader/ # SD card file browser
│ ├── snake/ # Snake game with AI
│ ├── social/ # Social media dashboard
│ ├── steam/ # Steam profile display
│ ├── stocks/ # Stock ticker
│ ├── teleprompter/ # Scrolling text display
│ ├── timeapi/ # Internet clock with animation
│ ├── timer/ # Countdown timer & stopwatch
│ └── weather/ # Weather display
├── CLAUDE.md # AI assistant documentation
├── LICENSE # MIT License
└── README.md # This file
| App | Description |
|---|---|
| Pomodoro | Focus timer with work and break intervals for productivity |
| Timer | Countdown timer and stopwatch for productivity |
| Reminders | Personal reminder system with notifications and alerts |
| Calculator | Simple calculator with basic math operations |
| Teleprompter | Scrolling text display for presentations and speeches |
| App | Description |
|---|---|
| Clock | Beautiful digital clock with customizable themes and timezone support |
| Dual Clock | Display two time zones simultaneously with automatic sync from timeapi.io |
| TimeAPI | Internet clock that fetches time from an API with cute animation |
| Weather | Display current weather conditions and forecast for your location |
| App | Description |
|---|---|
| RSS Reader | Display latest news and updates from RSS feeds |
| Stocks | Real-time stock prices and market information |
| Notifications | Centralized notification hub for displaying alerts and messages |
| App | Description |
|---|---|
| Steam | Display Steam profile, friends online, and game activity |
| Social | Display your social media feeds and updates |
| Snake | Classic snake game with AI auto-play demonstration |
| Auctions | Track auction bids and marketplace listings |
| App | Description |
|---|---|
| IoT Monitor | Monitor and control IoT devices and sensors |
| Monitor | Monitor system performance and resource usage |
| Music | Music player interface display |
| App | Description |
|---|---|
| Blink | Simple GIF animation display |
| SD Reader | SD card file browser with network status |
// System
print(message) // Console output
delay(milliseconds) // Blocking delay
toNumber(string) // Convert string to number
numberToString(number) // Convert number to string
mem_stats() // Print memory stats, returns free heap bytes
// Display
set_brightness(value) // Set display brightness (0-255)
get_brightness() // Get current display brightness
// WiFi
wifi_status() // Check connection status (returns 1 or 0)
wifi_get_ip() // Get assigned IP address
// HTTP (supports custom ports)
http_get(url) // GET request (http://host:port/path)
http_post(url, data) // POST request with JSON data
http_delete(url) // DELETE request
http_set_ca_cert_from_sd(path) // Load SSL certificate
// JSON
parse_json_value(json, key) // Extract value from JSON
// SD Card
sd_list_dir(path) // List directory contents
show_gif_from_sd(filepath, x, y) // Display animated GIF from SD card at position
// UI - Labels
create_label(x, y) // Create text label at position
label_set_text(label, text) // Update label text
obj_add_style(obj, style, selector) // Apply style
move_obj(obj, x, y) // Move object to position
// UI - Drawing
draw_rect(x, y, w, h) // Draw rectangle, returns handle
draw_rect(x, y, w, h, color) // Draw colored rectangle (0xRRGGBB)
// UI - Styling
create_style() // Create new style object
style_set_text_font(style, size) // Set font size (number)
style_set_text_color(style, color) // Set text color (0xRRGGBB)
style_set_text_align(style, align) // Set alignment (0=left, 1=center, 2=right)
style_set_bg_color(style, color) // Set background color
style_set_bg_opa(style, opacity) // Set background opacity (0-255)
style_set_pad_all(style, pixels) // Set padding
style_set_radius(style, pixels) // Set corner radius
style_set_width(style, pixels) // Set width
style_set_height(style, pixels) // Set height
// Timers
create_timer(function_name, interval_ms) // Create periodic timerOnly these Montserrat font sizes are enabled:
| Size | Usage |
|---|---|
14 |
Default, small text |
20 |
Body text |
28 |
Subheadings |
34 |
Medium headings |
40 |
Large headings |
44 |
Extra large |
48 |
Display text |
style_set_text_font(style, 48); // Largest available
style_set_text_font(style, 14); // Smallest availableNote: Sizes like 16, 24, 32 are NOT available.
| Widget | Available | Notes |
|---|---|---|
| Label | ✅ | Text display |
| Image | ✅ | PNG, GIF, SJPG |
| Arc | ✅ | Circular gauges |
| Line | ✅ | Line drawing |
| Button | ✅ | Clickable |
| Chart | ✅ | Data visualization |
| Meter | ✅ | Speedometer/gauge |
| Span | ✅ | Rich text |
- PNG: ✅ Recommended for icons
- GIF: ✅ Animated (keep under 50KB)
- SJPG: ✅ Split JPG for large images
- BMP: ❌ Not supported
// Use "use strict" at the top
"use strict";
// Colors are hex integers, NOT strings
style_set_text_color(style, 0xFF0000); // Correct
style_set_text_color(style, "#FF0000"); // Wrong!
// Fonts are numbers, NOT strings
style_set_text_font(style, 24); // Correct
style_set_text_font(style, "24"); // Wrong!
// Function expressions, NOT declarations
let myFunc = function() { }; // Correct
function myFunc() { } // Wrong!
// Timer callbacks use function name as string
let update = function() { /* ... */ };
create_timer("update", 1000); // Pass name as string
// Use 1/0 for boolean values
let isRunning = 1; // true
let isPaused = 0; // false
// No object literals - use separate variables
let x = 10; // Correct
let y = 20;
let pos = { x: 10, y: 20 }; // Wrong!{
"name": "App Name",
"description": "What the app does",
"version": "1.0.0",
"author": "Your Name",
"settings": {
"wifi": {
"ssid": "network_name",
"pass": "password"
},
"mqtt": {
"enabled": false
}
},
"screen": {
"background": "#000000",
"foreground": "#FFFFFF"
},
"display": {
"brightness": 200
},
"script": "script.js"
}Use our web-based IDE for rapid development without SD card swapping:
- Access: serial.webscreen.cc
- Features:
- Live serial console with command history
- JavaScript editor with syntax highlighting and WebScreen API autocomplete
- File manager for uploading/downloading files
- Direct code execution on device (F5 or Run button)
- Dual theme support (Retro amber phosphor or VS Code-like Focus theme)
- Browser Support: Chrome, Edge, or Opera (requires Web Serial API)
-
Always use strict mode
"use strict";
-
Use timers instead of while loops for updates
let tick = function() { // Update logic here }; create_timer("tick", 1000);
-
File paths use forward slashes
show_gif_from_sd("/animation.gif", 0, 0);
-
Wait for WiFi before network operations
// In init timer if (wifi_status()) { // Safe to make HTTP requests }
-
HTTP with custom ports
// Standard ports (80 for HTTP, 443 for HTTPS) http_get("http://api.example.com/data"); http_get("https://api.example.com/data"); // Custom ports http_get("http://192.168.1.20:2000/api"); http_post("http://localhost:3000/api", '{"key":"value"}');
- WebScreen Software: GitHub Repository
- Documentation: WebScreen.cc
- Hardware: CrowdSupply
- Web Flasher: flash.webscreen.cc
Share your awesome WebScreen apps with the community!
We welcome contributions of:
- 🎮 Your Apps: Share your creative WebScreen applications
- 🛠️ Mods & Hacks: Hardware modifications, custom cases, integrations
- 📚 Tutorials: How-to guides and learning resources
- 🎨 Themes & Assets: Custom graphics, animations, and UI themes
- 🔧 Tools & Utilities: Development tools and helper scripts
- 📖 Documentation: API improvements and examples
- Fork this repository
- Create a folder in
examples/with your app name - Include the standard files:
app.json- App configurationscript.js- Main application codeREADME.md- Description, screenshots, setup instructions
- Submit a pull request with your awesome creation!
- Include all necessary files (
script.js,app.json, assets) - Add clear documentation and comments
- Test your app on actual WebScreen hardware
- Include attribution/credits where appropriate
This project is licensed under the MIT License - see the LICENSE file for details.
- Discord Community: Join our Discord - Get help with your apps and connect with other developers
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Website: WebScreen.cc