• Townie
    AI
  • Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
zcpbx

zcpbx

MolstarViewer

Public
Like
MolstarViewer
Home
Code
7
backend
2
frontend
7
.vtignore
AGENTS.md
FIXES.md
README.md
deno.json
Branches
1
Pull requests
Remixes
History
Environment variables
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
FIXES.md
Code
/
FIXES.md
Search
…
Viewing readonly version of main branch: v636
View latest version
FIXES.md

Fixes Applied to MolstarViewer

Critical Issues Fixed

1. ❌ Missing Server Entry Point (FIXED)

Problem: The Val had no HTTP handler entry point. Val Town couldn't serve the application because there was no HTTP handler file at the root.

Solution: Created MolstarViewer/backend/index.http.ts with a Hono server that:

  • Serves static files from /frontend/*
  • Returns /frontend/index.html for all routes (SPA pattern)
  • Includes error handling to show full stack traces

File Created:

import { Hono } from "jsr:@hono/hono@4"; import { serveFile } from "https://esm.town/v/std/utils@85-main/index.ts"; const app = new Hono(); // Unwrap Hono errors to see original error details app.onError((err, c) => { throw err; }); // Serve all frontend files app.get("/frontend/*", (c) => serveFile(c.req.path, import.meta.url)); // Serve the root HTML file for all routes (SPA) app.get("*", (c) => serveFile("/frontend/index.html", import.meta.url)); export default app.fetch; // This is the entry point for HTTP vals

2. ⚠️ Asset Import Missing (FIXED)

Problem: MolstarViewer/frontend/viewer/app.ts was using Asset.Url() and Asset.File() but the Asset import was commented out, causing runtime errors.

Solution: Uncommented the Asset import from the molstar package:

// Before: // Asset, // After: Asset,

3. ⚠️ Version Mismatch (FIXED)

Problem: frontend/viewer/app.ts was importing from jsr:@zachcp/molstar@5.3.18 while frontend/components/MolstarViewer.tsx was using @5.3.17.

Solution: Standardized all imports to use jsr:@zachcp/molstar@5.3.17 for consistency.

Remaining Issues (Non-Critical)

TypeScript Type Declaration Errors

These errors are not critical for Val Town runtime. They only affect TypeScript language server/IDE experience:

  1. Cannot find module 'https://esm.sh/react@18.2.0' - Type declarations missing
  2. Cannot find module 'jsr:@hono/hono@4' - Type declarations missing
  3. Cannot find module 'jsr:@zachcp/molstar@5.3.17' - Type declarations missing

These errors DO NOT affect the application at runtime in Val Town because:

  • Val Town runs code in Deno runtime, not TypeScript compiler
  • The actual modules exist and load correctly
  • Only IDE/editor features are affected (autocomplete, type checking)

Project Structure (Now Correct)

MolstarViewer/
β”œβ”€β”€ backend/                     βœ… (Server-side code)
β”‚   β”œβ”€β”€ index.http.ts           βœ… NOW EXISTS (HTTP handler entry point)
β”‚   └── README.md               βœ… (Backend documentation)
└── frontend/                    βœ… (Client-side code)
    β”œβ”€β”€ index.html              βœ… (HTML template)
    β”œβ”€β”€ index.tsx               βœ… (Client entry - mounts React)
    β”œβ”€β”€ components/             βœ… (React components)
    β”‚   β”œβ”€β”€ App.tsx            βœ… (Main app with routing)
    β”‚   β”œβ”€β”€ ErrorBoundary.tsx  βœ… (Error handling)
    β”‚   └── MolstarViewer.tsx  βœ… (Molstar wrapper)
    β”œβ”€β”€ viewer/                 βœ… (Advanced viewer app)
    β”œβ”€β”€ docking-viewer/         βœ… (Docking viewer)
    β”œβ”€β”€ mesoscale-explorer/     βœ… (Mesoscale explorer)
    └── styles/                 βœ… (CSS files)

How the Application Works Now

  1. HTTP Request β†’ Val Town calls backend/index.http.ts (the Hono server)
  2. Server β†’ Returns /frontend/index.html for any route
  3. Browser β†’ Loads index.html, executes <script src="/frontend/index.tsx">
  4. Client Entry β†’ frontend/index.tsx mounts React app with ErrorBoundary
  5. React App β†’ frontend/components/App.tsx handles client-side routing
  6. Viewer Components β†’ Dynamically import and initialize Molstar

Important: File Naming Convention

Val Town requires HTTP handlers to follow a specific naming convention:

  • βœ… Correct: backend/index.http.ts - Val Town recognizes this as an HTTP handler
  • ❌ Wrong: index.tsx - Val Town won't automatically start this
  • βœ… Also Correct: Using .http.ts for pure TypeScript (no JSX) server files

This is why your Val wasn't starting automatically - the file needed the .http.ts extension!

Additionally, the project now follows the recommended structure with:

  • backend/ folder for server-side code
  • frontend/ folder for all client-side code (including index.html)

Next Steps (Optional Improvements)

  1. Add URL Parameters: Enable loading specific structures via URL (e.g., /viewer?pdb=1ABC)
  2. Loading States: Improve loading indicators for better UX
  3. Error Messages: Add more descriptive error messages for common issues
  4. Type Definitions: Add a deno.json with proper import maps for better IDE support
  5. Code Splitting: Optimize bundle size by lazy-loading viewer modules

Testing the Val

After these fixes, your Val should:

  • βœ… Serve the home page at /
  • βœ… Navigate to /viewer and load the Molstar viewer
  • βœ… Navigate to /docking-viewer, /mesoscale-explorer, /mvs-stories
  • βœ… Handle browser back/forward buttons correctly
  • βœ… Show proper error messages if something fails

Summary

Status: 🟒 Val is now functional!

The critical missing server entry point has been created. The application should now work correctly in Val Town. The remaining TypeScript errors are IDE-only and don't affect runtime behavior.

FeaturesVersion controlCode intelligenceCLI
Use cases
TeamsAI agentsSlackGTM
DocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
PricingNewsletterBlogAboutCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Open Source Pledge
Terms of usePrivacy policyAbuse contact
Β© 2025 Val Town, Inc.