{"id":35582800,"url":"https://github.com/flintwinters/jisp","last_synced_at":"2026-01-13T23:42:29.121Z","repository":{"id":328387935,"uuid":"1114810595","full_name":"flintwinters/jisp","owner":"flintwinters","description":"Represent any program state with JSON","archived":false,"fork":false,"pushed_at":"2026-01-12T17:24:36.000Z","size":556,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-12T22:59:00.420Z","etag":null,"topics":["esolang","esolangs","json","json-schema","jsonschema","programming-language","programming-languages","toml","toon","yaml"],"latest_commit_sha":null,"homepage":"https://qforj.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flintwinters.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-11T23:20:35.000Z","updated_at":"2026-01-12T17:24:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/flintwinters/jisp","commit_stats":null,"previous_names":["flintwinters/jisp"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/flintwinters/jisp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flintwinters%2Fjisp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flintwinters%2Fjisp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flintwinters%2Fjisp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flintwinters%2Fjisp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flintwinters","download_url":"https://codeload.github.com/flintwinters/jisp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flintwinters%2Fjisp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28399587,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esolang","esolangs","json","json-schema","jsonschema","programming-language","programming-languages","toml","toon","yaml"],"created_at":"2026-01-04T21:10:00.519Z","updated_at":"2026-01-13T23:42:29.115Z","avatar_url":"https://github.com/flintwinters.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"https://qforj.com/jisp.png\" height=\"64px\"\u003e\n\n# JISP\n\n[https://jisp.world](https://jisp.world)\n\n![Discord](https://img.shields.io/discord/1392579835012055131?logo=discord\u0026logoColor=white\u0026color=7289DA)\n![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)\n![GitHub Repo stars](https://img.shields.io/github/stars/flintwinters/jisp)\n\n\u003c/div\u003e\n\nJisp is a programming _system_ which uses the **JSON data model** as its \"atomic fabric\".  You can write Jisp code in any JSON-compatible data format - [ION](https://amazon-ion.github.io/ion-docs/), TOML, YAML, TOON, JSON, etc.\n\nThe core philosophy is to maintain all program state (including code, variables, and execution flow) in a single self-contained JSON object. This design ensures that every aspect of a **running** Jisp program can be effortlessly exported, imported, saved, loaded, diffed, restored, etc. at ***any point*** during execution.\n\nThis approach makes it easier to debug, integrate with other tools, and the strict, simple, universally understandable grammar is perfect for LLM outputs.\n\n### Why JSON?\n\n\n#### 1. Advanced Debugging\n\nJisp offers powerful debugging features thanks to its use of JSON for the entire program state—code, heap, stack, and environment. It is imperative that all program state be captured by JSON to maintain this behavior. By encapsulating everything as a single JSON object, you can:\n\n* **Step Forward and Backward**: Log the program state at different points and jump between them.\n\n* **Time Travel with Diffs**: Track program changes using simple diffs, allowing you to revert to previous execution states or apply inverse diffs.\n\n* **Full Inspection**: Inspect and manipulate any part of the program (variables, functions, memory) at any time, all through the transparent structure of JSON.\n\n* ***Automated* Debugging**: Scripts and LLMs can programmatically inspect program states, enabling automated use of the debugger.\n\n#### 2. Easy Integration:\nJisp’s use of JSON makes it easy to work with other systems and tools, such as APIs or language models. JSON is a universal format for data exchange, so connecting Jisp with external tools is seamless.\n\n#### 3. Simple, Readable Code:\nJisp programs are written in JSON, a format most developers are already familiar with. This makes the code easy to read and understand without dealing with new syntax.\n\n### Conclusion\n\nJisp takes advantage of JSON's simplicity and universality to create a programming system that’s easy to understand, easy to debug, and easy to integrate.\n\n### Installation\n\nYou can download the pre-compiled Go binary from the [releases page](https://github.com/flintwinters/jisp/releases/tag/release).\n\n### Build\n\nTo build Jisp from source, clone the repository and run the `build.py` script:\n\n```bash\ngit clone https://github.com/flintwinters/jisp.git\ncd jisp\npython3 build.py\n```\n\n### Test\n\nRun all checks:\n\n`python3 build.py`\n\n### Usage\n\nTo run a Jisp program, simply execute the `jisp` binary with your JSON-formatted Jisp code:\n\n```bash\njisp example.json\n```\n\n### Examples\n\nThese are directly taken from the demos at [https://jisp.world](https://jisp.world)\n\n#### Json Schema Validation\n\nDemonstrates schema validation using the 'valid' operation. It defines a schema for a user object in the 'variables' section and then tests both a valid and an invalid object against it. The boolean results of the validation are stored in variables.\n\nYou can of course use this to validate Jisp code structure itself.\n\n```json\n{\n    \"variables\": {\n        \"user_schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"username\": {\"type\": \"string\", \"minLength\": 3},\n                \"email\": {\"type\": \"string\", \"format\": \"email\"},\n                \"age\": {\"type\": \"number\", \"minimum\": 18}\n            },\n            \"required\": [\"username\", \"email\", \"age\"]\n        }\n    },\n    \"code\": [\n    [\"get\", \"user_schema\"],\n    [\"push\", {\"username\": \"jdoe\", \"email\": \"jdoe@example.com\", \"age\": 30}],\n    [\"valid\"],\n    [\"pop\", \"valid_user_check\"],\n    \n    [\"get\", \"user_schema\"],\n    [\"push\", {\"username\": \"jsmith\", \"email\": \"not-an-email\", \"age\": 17}],\n    [\"valid\"],\n    [\"pop\", \"invalid_user_check\"]\n    ]\n}\n```\n\n#### Reversible debugging:\n\nDemonstrates procedural and reversible debugging. A sub-program is executed with a breakpoint, which causes an instruction to be skipped. The program is then advanced with 'step' and reverted with 'undo' to showcase time-travel debugging. The final state is captured for inspection.\n\n```json\n{\n    \"code\": [\n    [\"push\", {\n        \"save_history\": true,\n        \"debug\": true,\n        \"breakpoints\": [[\"code\", 1]],\n        \"code\": [\n            [\"push\", 5.0],\n            [\"pop\", \"a\"],\n            [\"push\", 10.0],\n            [\"pop\", \"b\"]\n        ]\n    }],\n    [\"run\"],\n    [\"step\"],\n    [\"step\"],\n    [\"undo\"],\n    [\"pop\", \"final_debug_state\"]\n    ]\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflintwinters%2Fjisp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflintwinters%2Fjisp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflintwinters%2Fjisp/lists"}