惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
博客园_首页
J
Java Code Geeks
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
量子位
C
Check Point Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
N
Netflix TechBlog - Medium
Hugging Face - Blog
Hugging Face - Blog
B
Blog
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
宝玉的分享
宝玉的分享
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
I Built a Browser Game Engine Inside WordPress Without Ca...
Scott Adrian · 2026-05-26 · via DEV Community

Over four years ago I started building something that most developers
told me shouldn't work.

A browser game engine with no canvas element, no WebGL, and no
external game libraries. The entire engine runs on the DOM. Every
game lives as a standard web page at its own URL. Players click
a link and the game loads instantly on any device with no
download, no install, no app store.

Most browser game developers assume canvas or WebGL is a
requirement. I wanted to find out what happens if you remove
that assumption entirely.

Why No Canvas

The canvas approach is powerful but it creates a distribution
problem. Canvas games need to be exported, uploaded, and served
from a host that handles the files. The game and the website
are two separate things. Embedding requires an iframe. Sharing
requires a host.

Running on the DOM meant something different was possible. The
page itself becomes the game. No iframe, no embed, no separate
host. The game lives natively inside any website as a standard
page. Build it and it is immediately live at its own URL.

That URL is the thing that changes everything about distribution.
Share it anywhere and anyone can play it instantly. No friction
between a creator and their audience.

How the Engine Works

Game logic is defined through a visual interface rather than
code. Areas, characters, items, enemies, missions, cutscenes,
and dialogue are all configured without writing a single line
of JavaScript.

On the front end the engine reads that configuration and handles:

  • Top down and side scrolling movement
  • Collision detection
  • NPC dialogue and branching conversations
  • Mission and progression systems
  • Inventory and item collection
  • Combat with multiple enemy types
  • Cutscenes and story moments
  • Boss fights

Movement and collision run through DOM positioning rather than
a game loop on canvas. Every game element is a DOM node with
position, size, and behavior defined by data attributes. The
engine checks overlaps, handles interactions, and updates state
through JavaScript that reads and writes to those attributes.

The WordPress Connection

The engine is built as a WordPress plugin. Game assets are
WordPress custom post types. A character is a post. An area
is a post. An item is a post. The meta fields on those posts
define behavior, position, size, collision, interaction type,
mission triggers, dialogue content.

WordPress handles authentication, the database, the REST API,
media management, and multisite hosting. That is months of
infrastructure that came for free. The plugin adds the game
layer on top.

The hosted platform at orbem.studio runs on WordPress multisite.
Each game gets its own subdomain. Sign up and your game
environment is ready in under 60 seconds without touching
WordPress at all.

The Front End Builder

One of the more interesting engineering problems was building
a front end game editor that runs inside the game itself.

The builder lets creators add, edit, place, and delete game
assets without ever leaving the game. Click to place positioning
works by switching the cursor to a crosshair, clicking anywhere
on the map, capturing the coordinates, and submitting the asset
creation form with those coordinates pre-filled.

Asset changes update instantly without a page refresh. The game
state reflects the change immediately so creators see exactly
what players will see in real time.

Orbem Studio Paint

The engine also includes a built in pixel art tool called
Orbem Studio Paint. Creators draw sprites at any dimension,
export as SVG, PNG, or JPG, and save directly to the WordPress
media library. From there assets go straight into the game
without leaving the browser.

Export and Import

Every game can be exported to a single JSON file that includes
all posts, all meta, all game options, and all image URLs.
Importing to another Orbem Studio install downloads each image
from the source site and rewrites all URLs to point to the
new location automatically.

What I Learned Building This

The biggest surprise was how much a DOM based approach enables
that canvas cannot. CSS animations, CSS transitions, standard
HTML elements, browser accessibility features, all of these
work naturally inside a DOM based game and require significant
additional work to replicate on canvas.

The biggest limitation is performance on large maps with many
simultaneous moving elements. DOM layout recalculation is
expensive and canvas handles large numbers of moving sprites
significantly better. For the types of games Orbem Studio
targets, RPGs, narrative experiences, puzzle games, arcade
games, this has not been a practical problem. For a game
with hundreds of simultaneous moving elements it would be.

The no canvas constraint turned out to be generative rather
than limiting. Every architectural decision flowed from it and
the result is something genuinely different from other browser
game engines.

Try It

The free WordPress plugin is on WordPress.org:
wordpress.org/plugins/orbem-studio

The hosted platform where you can build without WordPress:
orbem.studio

A few games built with it:
orbem.studio/games

I would love to hear what other developers think about the
DOM based approach and whether the trade-offs make sense for
the use cases I am targeting. Happy to answer any technical
questions in the comments.