Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
A VR art gallery template that uses Jekyll to generate a gallery for easy hosting on GitHub Pages.

Portfolio library replicating the GitHub UI, built with Next.js, TypeScript, and Tailwind CSS.
A-Frame Art Gallery is an open-source Jekyll template that generates a virtual reality art gallery website, letting artists publish images in interconnected 3D rooms hosted free on GitHub Pages.
A-Frame Art Gallery is a Jekyll template that turns Markdown files and image assets into a VR gallery built with the A-Frame WebVR framework. You author rooms and artworks as Markdown files in the _rooms and _artworks folders, then push to GitHub; GitHub Pages runs Jekyll to produce a static site of walkable 3D rooms. The project is maintained by AgentO3 and is available on GitHub.
_rooms defines each gallery space, _artworks holds one Markdown file per piece, and assets stores the artwork images.image, title, artist, created, room, and an optional link field, plus a Markdown description below the front matter.You create a room first as a Markdown file in _rooms with a title and an A-Frame environment entity. Then you add artwork files in _artworks that reference a room by name and point to an image in assets/artwork. After you push to GitHub, GitHub Pages builds the Jekyll site and the VR gallery goes live.
Yes. The template is open-source and hosted on GitHub, and the generated gallery runs on GitHub Pages' free hosting tier.
Create a Markdown file in the _artworks folder with front-matter fields for image, title, artist, created, room, and an optional link, then place the image file in assets/artwork and push to GitHub.
Currently the template supports images only, though the project explicitly states that expanding to other element types is planned.
On a laptop, they use the directional arrow keys to walk; colliding with a door transitions them to the next room.
Yes. Each room's Markdown file includes an A-Frame environment entity where you can set a preset from the aframe-environment-component parameter list.
