# Val Town Documentation ## Vals - [Cron](https://docs.val.town/vals/cron.md): Schedules let code on Val Town run every day, every hour, or whenever you'd like - [Branches](https://docs.val.town/vals/branches.md): Val Branches are used for feature development, testing, and sharing - [Email](https://docs.val.town/vals/email.md): A kind of val that is able to receive emails sent to it. - [Overview](https://docs.val.town/vals.md): Learn about the basics of Vals - [Pull Requests](https://docs.val.town/vals/pull-requests.md): Pull Requests are used to merge changes from a branch or remix back into the parent - [Val Limitations](https://docs.val.town/vals/limitations.md): Learn about the limitations of vals - [Remixes](https://docs.val.town/vals/remixes.md): Other users can remix your Val, and you can remix other user's Vals. - [Basic examples](https://docs.val.town/vals/http/basic-examples.md): Examples of basic HTTP triggers for common use cases - [Custom domains](https://docs.val.town/vals/http/custom-domains.md): Point your own domains to any HTTP val - [CDNs and Cache Control](https://docs.val.town/vals/http/cdns.md): How to use Content Delivery Networks (CDNs) and cache control headers with HTTP vals - [Custom subdomains](https://docs.val.town/vals/http/custom-subdomains.md): Choose custom subdomains of val.run for HTTP vals in projects - [Early Return](https://docs.val.town/vals/http/early-return.md): How to return a response early from an HTTP trigger - [HTTP](https://docs.val.town/vals/http.md): A kind of val that can serve a website or an API using web-standard Request & Response objects. - [HTML & JSX](https://docs.val.town/vals/http/jsx.md): You can use JSX syntax in Val Town to render HTML using React, Preact, Vue, Solid, etc. - [Routing](https://docs.val.town/vals/http/routing.md): How to implement routing within HTTP triggers to handle different paths and methods ## Guides - [Store data in Airtable](https://docs.val.town/guides/airtable.md): You can use Airtable with Val Town to store data or load edited data from other sources - [Auth](https://docs.val.town/guides/auth.md): Add authentication and users to your Val Town app - [Creating a webhook](https://docs.val.town/guides/creating-a-webhook.md): Use Val Town to receive HTTP webhooks from services like Discord or Stripe - [Embedding Vals in other sites](https://docs.val.town/guides/embed.md): Any val can be embedded as an iframe on other sites - [Your first scheduled cron](https://docs.val.town/guides/first-cron.md): Make your first cron job - a weather notifier - [Your first website](https://docs.val.town/guides/first-website.md): Make your personal website - [Generate PDFs](https://docs.val.town/guides/generate-pdfs.md): Using jsPDF, you can generate PDFs from scratch and download them from Val Town. - [Send & receive Gmail](https://docs.val.town/guides/gmail.md): How to use Gmail with Val Town - [In, Val, Out](https://docs.val.town/guides/in-val-out.md): Manage input (like user signups) and automate output (e.g., Slack messages) - [Store data in a Google Sheet](https://docs.val.town/guides/google-sheets.md): Using the Google Sheets API, you can add rows to a spreadsheet with Val Town. - [QR Code](https://docs.val.town/guides/qr-code.md): Val Town can be used as a way to generate QR Codes. - [Push notifications](https://docs.val.town/guides/push-notifications.md): Using the third-party service ntfy.sh, you can send push notifications to phones and computer with Val Town. - [Store data in AWS S3](https://docs.val.town/guides/s3.md): S3 is Amazon's very popular object storage system. You can upload & download objects on S3 using Val Town. - [RSS](https://docs.val.town/guides/rss.md): Val Town can both parse and generate RSS feeds for blogs and other updated sources - [Save HTML form data](https://docs.val.town/guides/save-html-form-data.md): Save HTML form data on Val Town - [Saving data from a web page](https://docs.val.town/guides/saving-data-from-a-web-page.md): Save data from a web page on Val Town - [SQLite wasm](https://docs.val.town/guides/sqlite-wasm.md): Using Deno's ability to load WASM modules, you can actually run SQLite right in Val Town. - [Supabase webhooks](https://docs.val.town/guides/supabase.md): Handle Supabase webhooks in Val Town - [Stripe webhooks](https://docs.val.town/guides/stripe.md): Accept payments in Val Town using Stripe - [Telegram bot](https://docs.val.town/guides/telegram.md): Create a Telegram bot that can receive and respond to messages on Val Town - [Weather](https://docs.val.town/guides/weather.md): Build weather related apps with Val Town - [Website Uptime Tracker](https://docs.val.town/guides/website-uptime-tracker.md) - [Web scraping](https://docs.val.town/guides/web-scraping.md): Use Val Town to write a web scraper to extract content from websites - [Browserbase](https://docs.val.town/guides/browser-automation/browserbase.md): How to use Browserbase & Puppeteer to with Val Town - [Browserless](https://docs.val.town/guides/browser-automation/browserless.md): How to use Browserless to scrape websites with Val Town - [Kernel](https://docs.val.town/guides/browser-automation/kernel.md): How to use Kernel with Val Town - [Steel](https://docs.val.town/guides/browser-automation/steel.md): How to use Steel & Puppeteer to with Val Town - [Neon Postgres](https://docs.val.town/guides/databases/neon-postgres.md): How to integrate with Neon, a hosted Postgres platform that does horizontal scaling and includes an SQL-over-HTTP API. - [PlanetScale](https://docs.val.town/guides/databases/planetscale.md): How to store data in PlanetScale, a hosted MySQL platform with the ability to scale beyond a single instance and evolve schemas. - [Prisma Postgres](https://docs.val.town/guides/databases/prisma-postgres.md): How to connect Val Town to Prisma Postgres, a serverless Postgres database with instant provisioning and zero setup. - [Supabase](https://docs.val.town/guides/databases/supabase.md): How to connect Val Town to Supabase, a hosted Postgres-as-a-platform that lets you make queries via HTTP. - [Upstash](https://docs.val.town/guides/databases/upstash.md): Using Upstash, a hosting provider that provides free 1MB Redis instances. - [Get a Github user](https://docs.val.town/guides/github/get-a-github-user.md): Get a user without passing an authentication token on Val Town. - [Github user's stars (pagination)](https://docs.val.town/guides/github/github-users-stars-pagination.md): Get a user's stars across all their repositories on GitHub - [Receiving a GitHub Webhook](https://docs.val.town/guides/github/receiving-a-github-webhook.md): Send yourself an email / Slack / Discord notification when someone stars your GitHub repository - [Discord welcome bot](https://docs.val.town/guides/discord/bot.md): Create a Discord bot that sends a DM to new users. - [Discord bot](https://docs.val.town/guides/discord/how-to-make-a-discord-bot-hosted-24-7-for-free-in-.md): How to make a Discord bot hosted 24/7 for free in 6 steps - [Send Discord message via webhook](https://docs.val.town/guides/discord/send-message.md): Shows you how to receive webhooks from Discord on Val Town. - [Build a Slack bot](https://docs.val.town/guides/slack/bot.md): Create interactive Slack bots that respond to mentions, slash commands, and user interactions - [Sending Slack messages](https://docs.val.town/guides/slack/send-messages-to-slack.md): Send notifications and alerts to Slack channels from Val Town - [ChatGPT Web/Desktop](https://docs.val.town/guides/prompting/chatgpt.md): Bring Val Town to ChatGPT - [Claude Web/Desktop](https://docs.val.town/guides/prompting/claude.md): Bring Val Town to Claude - [Claude Code](https://docs.val.town/guides/prompting/claude-code.md): Bring Val Town to Claude Code with the vt CLI or MCP - [CLI](https://docs.val.town/guides/prompting/cli.md): A guide to using the Val Town CLI with your favorite AI tool - [Cursor](https://docs.val.town/guides/prompting/cursor.md): Bring Val Town to Cursor with the vt CLI - [GitHub Copilot](https://docs.val.town/guides/prompting/github-copilot.md): Bring Val Town to GitHub Copilot with the vt CLI - [Overview](https://docs.val.town/guides/prompting.md): A guide to using AI inside and outside Val Town - [MCP](https://docs.val.town/guides/prompting/mcp.md): A guide to using the Val Town MCP server - [OpenAI Codex](https://docs.val.town/guides/prompting/openai-codex.md): Bring Val Town to OpenAI Codex with the vt CLI or MCP - [Townie](https://docs.val.town/guides/prompting/townie.md): Townie, the Val Town coding agent - [Warp](https://docs.val.town/guides/prompting/warp.md): Bring Val Town to Warp with the vt CLI - [Windsurf](https://docs.val.town/guides/prompting/windsurf.md): Bring Val Town to Windsurf with the vt CLI - [Interop with Node, Deno, and Browsers](https://docs.val.town/guides/interop.md): Learn how to run your vals in different runtimes - [Zed](https://docs.val.town/guides/prompting/zed.md): Bring Val Town to Zed with the vt CLI ## Reference - [File I/O](https://docs.val.town/reference/file-io.md): How to read and write files in Val Town - [Environment groups](https://docs.val.town/reference/environment-groups.md): Share environment variables in organizations - [Deno LSP](https://docs.val.town/reference/deno-lsp.md): Understanding the Val Town language server - [Environment variables](https://docs.val.town/reference/environment-variables.md): Using environment variables to store secrets that vals can securely access - [esm.town](https://docs.val.town/reference/esm-town.md): Endpoint for getting val source code - [Using images in vals](https://docs.val.town/reference/images.md): Hosting images in Val Town and elsewhere - [Importing](https://docs.val.town/reference/import.md): Import code from vals, NPM, JSR, and URLs - [Permissions](https://docs.val.town/reference/permissions.md): Vals can be private, unlisted, or public - [Runtime](https://docs.val.town/reference/runtime.md): Val Town uses the Deno runtime to run your code - [Keyboard shortcuts](https://docs.val.town/reference/shortcuts.md): Keyboard shortcuts for Val Town - [Version Control](https://docs.val.town/reference/version-control.md): Every time you save a val it creates a new immutable version in the version history. - [Authentication](https://docs.val.town/reference/api/authentication.md): How to authenticate to Val Town using API Tokens - [Overview](https://docs.val.town/reference/api.md): Val Town's REST API allows you to programmatically manage your account and its resources - vals, blob storage, sqlite databases, likes, comments, and more. - [Blob Storage](https://docs.val.town/reference/std/blob.md): Store and retrieve binary data with Val Town's blob storage system - [Email](https://docs.val.town/reference/std/email.md): Send emails programmatically from your vals using Val Town's email API - [Proxied fetch](https://docs.val.town/reference/std/fetch.md): Make HTTP requests to external services using Val Town's proxied fetch - [JavaScript SDK](https://docs.val.town/reference/api/sdk.md): Interact with Val Town via the TypeScript SDK to programmatically create and update vals, get user information, and much more. - [OpenAI](https://docs.val.town/reference/std/openai.md): Integrate with OpenAI's APIs to add AI capabilities to your vals - [Admin](https://docs.val.town/reference/std/sqlite/admin.md): Administration panels for the SQLite databases - [Migrations](https://docs.val.town/reference/std/sqlite/migrations.md): How to manage database schema changes with migrations in Val Town SQLite - [ORMs](https://docs.val.town/reference/std/sqlite/orms.md): Using Object-Relational Mapping libraries with Val Town SQLite - [SQLite](https://docs.val.town/reference/std/sqlite.md): Val Town SQLite is a lightweight, standard database. Every Val comes with its own private SQLite database that is accessible from any of your vals. - [Usage](https://docs.val.town/reference/std/sqlite/usage.md): How to use Val Town SQLite, with examples. ## Troubleshooting - [Blocked bots](https://docs.val.town/troubleshooting/bot-rate-limiting.md): Some bots are blocked across all Vals - [CORS](https://docs.val.town/troubleshooting/cors.md): Understanding Cross-Origin Resource Sharing (CORS) in Val Town - [Serialization](https://docs.val.town/troubleshooting/serialization.md): Val Town tries to serialize and deserialize as many types as it can, but doing that for all JavaScript is unfortunately very hard - [Migrating Deprecated HTTP Vals](https://docs.val.town/troubleshooting/migrating-deprecated-http-vals.md): Learn how to migrate your HTTP vals to the new runtime - [Exports](https://docs.val.town/troubleshooting/exports.md): Vals with triggers (HTTP, Cron, Email) require at least one export. - [Upgrade Guide: Safer Val Scopes](https://docs.val.town/troubleshooting/std-set-permission-error.md): How to upgrade your vals for the safer default scopes rolled out to everyone on Feb 11, 2025 - [Permission errors](https://docs.val.town/troubleshooting/permission-errors.md): Vals run in a sandbox that doesn’t permit access to the filesystem, or to execute arbitrary scripts. - [Express to HTTP migration](https://docs.val.town/troubleshooting/express-to-http-migration.md): How to migrate existing vals from the deprecated express type to the HTTP type ## Optional - [Discord](https://discord.gg/dHv45uN5RY) - [Email](mailto:docs-help@val.town) - [Blog](https://blog.val.town/)