Skip to main content

Paxy: a modern BASIC-like language that compiles to Python bytecode (.pyc).

Project description

Paxy — code in calm

Beginner's All-purpose Symbolic Instruction Code taught millions their first programs in the 1970s and 1980s.

Paxy revives the spirit of BASIC — not just as nostalgia, but as a deliberate choice: a simpler way to code.
Every line is a single command with arguments.

Where modern programming piles on frameworks, boilerplate, and ceremony, Paxy takes the opposite path.

  • Simplicity first. A few clear commands (LET, IF, PNT, RNG) are enough to get started.
  • Immediate feedback. Programs run top-to-bottom, exactly as written.
  • Calm and predictable. Deterministic and synchronous: the computer follows your steps.
  • Accessible to everyone. If you can type, you can code.
  • Batteries included. Commands cover the most common use cases.

Bring your vibes

Paxy is ideal for AI-assisted coding. Modern AI tools stumble on complex syntax, indentation, or hidden imports.
Paxy avoids all that. One command per line, plain arguments, no boilerplate — the perfect partner for AI.

  • Copy-paste friendly. Each line is self-contained.
  • Hard to break. No braces, decorators, or indentation traps.
  • Composable snippets. Loops, prints, or conditionals can be dropped in like building blocks.
  • Readable by humans and AI. Simple, declarative steps.
  • No ceremony. Forget imports and types — just write commands.

Usage

paxy filename.paxy will compile and run the paxy file.

Install for development

  1. You need Python 3.13 or Python 3.14.

We might go back and support Python 3.12, but we haven't yet. Older Python versions are untested and unlikely to ever be supported.

I use pyenv to use multiple Python versions on my computer: https://github.com/pyenv/pyenv

Then add your desired version of Python:

  • pyenv install 3.13.7
  • pyenv local 3.13.7
  1. Create virtual environment:
  • python -m venv deps
  • source deps/bin/activate
  1. Install dependancies:
  • pip install -e .[dev]
  1. Run tests
  • pytest
  1. To get Debug information, run with PAXY_DEBUG=1 and it will output information to /tmp/paxy_debug.txt

Commands

When writing paxy files, you can use low-level Python bytecode names (as in the dis module). But we provide high level BASIC Commands:

Commands

When writing paxy files, you can use low-level Python bytecode names (as in the dis module).
But we provide high-level BASIC-style commands as a friendlier layer.
These are compiled into Python 3.13 bytecode instructions at build time.

CMP

CMP dst lhs cmp rhs
Evaluate lhs <cmp> rhs (where <cmp> is ==, !=, <, <=, >, >=) and store the boolean result in dst.

DEC

DEC x
Decrement a variable: x = x - 1.

GOS

GOS dst fn [args...]
Call function fn with arguments and store the return value in dst.

IGL

IGL name [elem1 elem2 ...]
Create a frozenset from the given elements. Fast-path: all literals become one constant; otherwise build at runtime.

IF

IF lhs cmp rhs label
Compare lhs <cmp> rhs; if true, jump to label.

IMP

IMP "module"
Import a module by name. Equivalent to __import__("module").

INC

INC x
Increment a variable: x = x + 1.

IN

IN dst needle haystack
Store boolean result of needle in haystack into dst.

INP

INP x
Prompt for input: x = input().

IS

IS dst lhs rhs
Store boolean result of lhs is rhs into dst.

NIS

NIS dst lhs rhs
Store boolean result of lhs is not rhs into dst.

LBL

LBL name
Define a jump target.

LET

LET name value
Assign a value.
LET name lhs op rhs also supports operators: arithmetic, comparison, is, in, etc.

MAP

MAP name "k1" v1 "k2" v2 ...
Create a dict with string keys.

MAD

MAD m k v
Set m[k] = v.

MAL

MAL m k
Delete m[k].

NIN

NIN dst needle haystack
Store boolean result of needle not in haystack into dst.

PAR

PAR dst1 dst2 expr1 expr2
Parallel assignment: dst1, dst2 = expr1, expr2.

PNT

PNT [value]
Print a value (or a blank line).

RNG … RNE

RNG name start end ...body... RNE

Loop from start up to (but not including) end, assigning each value to var.

RET

RET
Return 0.
RET value
Return the given value.

ROW

ROW name [elem1 elem2 ...]
Create a row of data.

SUB ... SBE

SUB name [params...] ... body ... SBE

Define a function. Use RET within it.

VEC

VEC name [elem1 elem2 ...]
Create a list.


These BASIC commands are lowered into the intermediate representation (paxy.ir) and then into Python bytecode. You can always mix them with raw CPython opcode names if you want finer control.

  • VEC — Create list: VEC v 1 2 3v = [1,2,3].

Command Reference (Cheat Sheet)

Command Purpose Example
CMP Compare values and store boolean result CMP r a == b
DEC Decrement a variable DEC xx = x - 1
GOS Call function, store result GOS z add x y
IGL Create frozenset IGL s 1 2 3s = frozenset({1,2,3})
IF Conditional jump IF a < b loop_start
IMP Import a module IMP "math"
INC Increment a variable INC xx = x + 1
IN Membership test IN r x arrr = (x in arr)
INP Read from stdin INP namename = input()
IS Identity test IS r a br = (a is b)
NIS Negated identity test NIS r a br = (a is not b)
LBL Define a jump target LBL loop_start
LET Assign value or expression LET x 10, LET y a + b
MAP Create dictionary with string keys MAP m "a" 1 "b" 2m = {"a":1,"b":2}
MAD Insert into dict MAD m "c" 3m["c"]=3
MAL Delete from dict MAL m "a"del m["a"]
NIN Negated membership test NIN r x arrr = (x not in arr)
PAR Parallel assignment PAR a b x ya, b = x, y
PNT Print a value (or newline) PNT x
RNG Loop over a range of integers RNG i 1 5 … RNE → for i in 1..4
RET Return from SUB (default 0 if no value) RET y
ROW Create tuple ROW t 1 2 3t = (1,2,3)
SUB Define a subroutine SUB add a b ... RET a+b SBE
VEC Create list VEC v 1 2 3v = [1,2,3]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

paxy-0.2.0.tar.gz (49.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

paxy-0.2.0-py3-none-any.whl (42.1 kB view details)

Uploaded Python 3

File details

Details for the file paxy-0.2.0.tar.gz.

File metadata

  • Download URL: paxy-0.2.0.tar.gz
  • Upload date:
  • Size: 49.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for paxy-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f8c7df7021cc2c0ad2d69dd27de539405df7881395cac38e52a6205a1f0c45a5
MD5 89a99e43f5aae0b8f8b0596b94c79691
BLAKE2b-256 9c9bd798fde1841f99797e0559c8f6df87458ad5fe6ec6ed705ca9893a878b39

See more details on using hashes here.

File details

Details for the file paxy-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: paxy-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 42.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for paxy-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d900a25fc6fdc7e174abb4fa0738c0dce906b7b2c392b9901f54230d1ae6f9cb
MD5 63f803d3c4078cc04735942b1bb1a311
BLAKE2b-256 0a35139336a15224298b014ec2e9ac65f97a42e001fccc407f0c4d1e3068a620

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page