LifeAdmin
A multilingual SaaS platform for organizing life and work: shared workspaces, task management, project tracking and real-time collaboration - all served by ASPPY.
ASPPY is a lightweight Python runtime that executes your existing .asp / VBScript pages on Windows, Linux and macOS. Full object model, broad built-in coverage, zero third-party dependencies - most legacy ASP applications just work.
pip install asppy[all] --upgrade
No build step, no configuration files, no restarts. Install Python, install ASPPY, serve your folder.
Python 3.9 or newer on any OS - Windows, Linux or macOS. ASPPY is a Python application, so Python is required on every machine that runs it, including your production server.
python.org/downloadsOne command from PyPI. The core runtime has zero third-party dependencies - it runs on nothing but the Python standard library, and SQLite works out of the box.
pip install asppy[all] --upgrade
Put your .asp files in a folder - say www - and serve it. Point your browser at http://localhost:8080 and your pages are live.
asppy 0.0.0.0 8080 www
Classic ASP applications represent decades of hard-won business logic. Rewriting them is expensive and risky. ASPPY lets you keep your existing .asp files exactly as they are and serve them through a lightweight Python HTTP server.
Request, Response, Session, Application, Server..asp file, hit refresh, it's live.Real-world throughput on par with Classic ASP under IIS - and on Linux, where Python typically runs 10–30% faster than on Windows, ASPPY pulls ahead. Without the Windows Server license.
While other frameworks pile on tooling, ASPPY strips it away. That's what sets it apart.
No npm install, no bundlers, no transpilers, no setup scripts, no dependency hell. You edit an .asp file, you hit refresh, it's live. Deployment is a file copy.
Not MBs - KB. About 40 plain Python files plus one generated locale table (~195 KB zipped). No black box, no vendor magic: read all of it, it fits in your head.
ASPPY runs on Python, which compiles code to bytecode before execution. Your ASP pages aren't re-scanned as raw text on every hit.
Each page is parsed and compiled once, then served from an in-memory cache. Edit any file - includes too - and ASPPY recompiles automatically. No restart, no cache-busting.
Real-world throughput on par with Classic ASP under IIS - and ahead of it on Linux, without the Windows Server license.
No multi-hundred-MB installers, no self-contained EXE blobs, no Docker images to babysit. Python + a folder of source files - that's the whole deployment story.
512 MB RAM and 1 vCPU is enough to serve production traffic. No JVM warm-up, no node_modules eating your disk - hosting costs measured in single-digit euros per month.
A readable codebase small enough that any modern LLM can understand in minutes. The perfect match for vibe coding - see below.
ASPPY is newer than every model's training cut-off, so no LLM knows anything about it out of the box - and installing a package cannot change that. Knowledge only reaches a model as text in its context window. So the docs travel inside the package, and one command hands them over. Skip this step and the model will invent an API that doesn't exist. It's the single highest-leverage thing you can do.
$ asppy-guide # prints developers.md - conventions, object model, gotchas
$ asppy-guide --list # every bundled document
$ asppy-guide --open prompt-builder # opens a prompt builder in your browser
Claude Code, OpenCode, Codex, Cursor, Copilot: run asppy-guide and give the agent its output before asking for any ASP. Everything is on disk after pip install - nothing to download.
Gemini or ChatGPT in a browser can't read your disk. Pipe the brief into your clipboard with asppy-guide | clip and paste it - or use a prompt builder to generate a complete ready-to-send prompt.
developers.md before any development - it cuts development time and cost by 30–40% and significantly improves code quality, even when using free AI coding agents. Legacy modernization, rapid prototyping, full production apps: what used to take weeks of budget now happens in an afternoon.
ASPPY isn't a proof of concept. It runs production websites in the wild - from SaaS products to healthcare tooling to e-learning - built, deployed and used by real people every day.
A multilingual SaaS platform for organizing life and work: shared workspaces, task management, project tracking and real-time collaboration - all served by ASPPY.
A complete, GDPR-compliant management suite for dental practices: waiting lists, inventory, digital signatures and tasks - trilingual with 8+ modules, running on ASPPY.
A searchable database of 31,000+ Belgian RIZIV/INAMI nomenclature codes with filters, tariffs and cumulation rules - data-heavy pages served fast by ASPPY.
A full e-learning platform - courses, lessons, enrollments and user accounts - built with Classic ASP and SQLite on ASPPY. And it teaches you ASPPY itself.
Running your own site on ASPPY? Open an issue or PR to get it featured here.
Prerequisite: Python 3.9 or higher on any machine that runs ASPPY - including your production hosting server.
# core runtime - zero third-party dependencies
pip install asppy
git clone https://github.com/PieterCooreman/ASPPY.git
cd ASPPY
pip install -e ".[all]"
Some features reach for a third-party library. Each one is imported lazily and only by the feature that needs it, so you install just what your application actually uses. Skip an extra and the matching feature raises a clear error naming the package to install - nothing else breaks.
| Extra | Command | Enables |
|---|---|---|
pdf | pip install "asppy[pdf]" | PDF generation (fpdf2) |
image | pip install "asppy[image]" | Image resize / crop / filter / watermark (pillow) |
crypto | pip install "asppy[crypto]" | bcrypt password hashing (bcrypt) |
odbc | pip install "asppy[odbc]" | ADODB via ODBC: Access, Excel, SQL Server, PostgreSQL, MySQL (pyodbc) |
xml | pip install "asppy[xml]" | MSXML full XPath 1.0, XSLT and CDATA (lxml, certifi) |
all | pip install "asppy[all]" | All of the above |
Everything you need to create, serve, render and health-check an ASPPY application.
| Command | What it does |
|---|---|
asppy-new myapp | Create a new app from the MVC starter template - routing, SQLite, views and layout already wired up. Start here. |
asppy [host] [port] [docroot] | Serve a folder of .asp pages over HTTP. Defaults: 0.0.0.0 8080 web. Pass :: as host for IPv6. |
asppy-render PAGE.asp | Render one page to stdout or a file - no socket, no browser. Great for diffing output and CI. |
asppy-check FOLDER | Recursively render every .asp page in a folder and report the ones that fail, with file and line number. |
asppy-guide | Print the developer/agent brief. --list shows every bundled document; --open opens a prompt builder in your browser. |
$ asppy-new myapp
$ asppy 127.0.0.1 8080 myapp
# render a single page, with a query string and response headers
$ asppy-render www/default.asp --query "id=42" --show-headers
# health-check the whole app - exit code 1 if anything fails (CI friendly)
$ asppy-check www
Handy in .bat files, systemd units and Docker CMD lines:
python -m ASPPY 0.0.0.0 8080 www
python -m ASPPY.server 0.0.0.0 8080 www
python -m ASPPY.cli www/default.asp
python -m ASPPY.check www
Practical app-level compatibility, not byte-for-byte IIS parity. If you're migrating a critical application, run your own regression tests against ASPPY alongside IIS before cutting over.
| Area | Coverage |
|---|---|
| VBScript built-ins (strings, dates, math, arrays) | Near-complete |
| Request / Response / Session / Application / Server | Near-complete |
| Scripting.Dictionary / Scripting.FileSystemObject | Supported |
| ADODB.Connection / Recordset / Command / Stream | Partial |
| Database backends - SQLite, Access, Excel (read-only), ODBC, PostgreSQL | Supported |
| VBScript.RegExp | Supported |
| MSXML HTTP & DOM (security-sandboxed) | Partial |
| CDO.Message (SMTP) · POP3 / IMAP | Partial |
| Global.asa events | Supported |
ASPPY ships extended helpers accessible from VBScript via the global ASPPY object: JSON encode/decode, ZIP, PDF generation, image processing and bcrypt password hashing.
ASPPY implements the Classic ASP locale model - Session.LCID, Response.LCID, <%@ LCID %>, GetLocale/SetLocale. Formatting, parsing and collation are all locale-aware: FormatNumber/FormatCurrency/FormatPercent, FormatDateTime, MonthName/WeekdayName, CDbl/CDate/IsNumeric/IsDate, Weekday and StrComp with vbTextCompare.
CStr(date) stays ISO until a locale is selected, so apps that concatenate dates into SQL keep working.IIS defaults to the host's ANSI codepage (1252, 932…). ASPPY instead defaults to UTF-8 everywhere: Linux and macOS have no meaningful "system ANSI codepage", every modern consumer assumes UTF-8, and VBScript strings are Unicode internally - UTF-8 is the only encoding that round-trips them losslessly. Legacy windows-1252 files need no conversion; ASPPY detects and decodes them automatically.
| Surface | ASPPY | IIS |
|---|---|---|
| Session/Response.CodePage | 65001 (UTF-8) | system ANSI (e.g. 1252) |
| Response.Charset | utf-8 | unset - header omits charset |
| .asp source files | UTF-8, BOM-tolerant, cp1252 fallback | BOM, else @CODEPAGE, else metabase |
| Request.Form / QueryString | decoded as UTF-8 | per Session.CodePage |
| Server.URLEncode | percent-encoded UTF-8 | per current codepage |
Only intervene where a non-browser consumer expects legacy bytes (CSV for Excel, banking/EDI files): set Response.Charset = "windows-1252" on those responses.
From a bare pip install, in under a minute:
$ asppy-new myapp
$ asppy 127.0.0.1 8080 myapp