{"id":15063820,"url":"https://github.com/operating-function/pallas","last_synced_at":"2025-07-07T13:38:10.463Z","repository":{"id":249711927,"uuid":"831172883","full_name":"operating-function/pallas","owner":"operating-function","description":"An event sourced, purely functional application platform.","archived":false,"fork":false,"pushed_at":"2025-03-05T02:47:24.000Z","size":4143,"stargazers_count":54,"open_issues_count":21,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-10T11:41:02.640Z","etag":null,"topics":["exokernel","functional-programming","haskell","operating-function","operating-system","personal-server","purely-functional","unikernel"],"latest_commit_sha":null,"homepage":"https://docs.opfn.co","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/operating-function.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-19T20:52:55.000Z","updated_at":"2025-03-26T02:35:02.000Z","dependencies_parsed_at":"2024-08-05T20:24:37.664Z","dependency_job_id":"305bced8-3d11-4304-aba5-e36cbfe5573a","html_url":"https://github.com/operating-function/pallas","commit_stats":null,"previous_names":["operating-function/pallas"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/operating-function/pallas","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operating-function%2Fpallas","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operating-function%2Fpallas/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operating-function%2Fpallas/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operating-function%2Fpallas/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/operating-function","download_url":"https://codeload.github.com/operating-function/pallas/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operating-function%2Fpallas/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264086979,"owners_count":23555389,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["exokernel","functional-programming","haskell","operating-function","operating-system","personal-server","purely-functional","unikernel"],"created_at":"2024-09-25T00:07:38.670Z","updated_at":"2025-07-07T13:38:10.411Z","avatar_url":"https://github.com/operating-function.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"```ascii\n\n             +---------------------+\n             |           ┏         |\n             |       ┏┓┏┓╋┏┓       |\n             |       ┗┛┣┛┛╹┗       |\n             +---------------------+\n\n              an Operating Function\n   is a purely functional programming environment\n          virtual machine for constructing\n        resilient, distributed applications.\n\n```\n\nhttps://github.com/user-attachments/assets/9c975b9b-5c17-4d41-8f9b-1015b8b81e28\n\n_(Video) A basic web app demonstration leveraging an in-system HTTP server. All state is automatically persisted and computations can be paused and resumed:_ [demo](https://general-static-assets.nyc3.cdn.digitaloceanspaces.com/docs-images/notepad-demo.mp4)\n\n---\n---\n\n- **Discover what an Operating Function is**: [opfn.co](https://opfn.co)\n- **Understand why we care; and why you might, as well**: [Motivation](https://opfn.co/about)\n- **Learn the system**: [Online Technical Documentation](https://docs.opfn.co) (or `/doc` directory here)\n\n---\n---\n\n1. [Installation](#installation)\n2. [Getting Started](#getting-started)\n3. [Contributing](#contributing)\n4. [Additional Resources](#additional-resources)\n\n\n# Installation\n\nYou have two options: build a dev environment using Nix, or clone the repo and install a binary. The binary is supplied for convenience only and still requires the source code in order to function.\n\n### Install with Binary (Ubuntu/Debian-based and MacOS)\n\n1. Install dependencies:\n   - libgmp (GNU Multiple Precision Arithmetic Library)\n   - liblmdb (Lightning Memory-Mapped Database)\n   - libz (zlib compression library)\n\nOn Ubuntu or Debian-based systems:\n\n```console\nsudo apt-get update \u0026\u0026 sudo apt-get install -y \\\n    libgmp10 \\\n    liblmdb0 \\\n    zlib1g\n```\n\nOn MacOS:\n\n```console\nbrew install gmp lmdb zlib\n```\n\n2. Download a prebuilt binary\n   - [Linux x86_64](https://pallas-binaries.nyc3.cdn.digitaloceanspaces.com/linux_x86_64/pallas) \n   - [Apple arm64/aarch64 (M1/M2 Macs)](https://pallas-binaries.nyc3.cdn.digitaloceanspaces.com/apple_m1_arm64/pallas)\n   - [Apple x86_64 (Intel Macs)](https://pallas-binaries.nyc3.cdn.digitaloceanspaces.com/apple_x86_64/pallas)\n\nYour browser may not prompt to download these files, in which case you can use `cURL`:\n\n`curl -L \u003cURL of your choice here\u003e -o pallas`\n\nMake it executable and move it somewhere on your path.\n\n3. Run it:\n\nIf all went well, you should see this:\n\n```console\n$ pallas\n\nRun a Pallas machine\n\nUsage: pallas COMMAND\n\n  Pallas\n\nAvailable options:\n  -h,--help                Show this help text\n\nAvailable commands:\n  sire                     Run a standalone Sire repl.\n  save                     Load a sire file and save a seed.\n  show                     Print a seed file.\n  repl                     Interact with a seed file.\n  start                    Resume an idle machine.\n  boot                     Boot a machine.\n```\n\n## Install as a Development Environment\n\nUsing Nix is the most straightforward way to install Pallas at this time. \nIf your system doesn't support Nix or if you need further\ninstruction (including instructions for Docker), refer to\n[the documentation](https://docs.opfn.co)\n\n1. Clone this repo. Navigate to the root of it.\n\n```shell\ngit clone git@github.com:operating-function/pallas.git\n```\n```shell\ncd pallas\n```\n\n2. Get into a Nix shell\n\n```shell\nnix develop\n```\n\n3. Build pallas\n\nThis will take some time. Perhaps upwards of 15 minutes, depending on your system.\n\n```shell\nstack build\n```\n\n4. Confirm everything is working:\n\n```console\n$ stack run pallas\n\nRun a Pallas machine\n\nUsage: pallas COMMAND\n\n  Pallas\n\nAvailable options:\n  -h,--help                Show this help text\n\nAvailable commands:\n  sire                     Run a standalone Sire repl.\n  save                     Load a sire file and save a seed.\n  show                     Print a seed file.\n  repl                     Interact with a seed file.\n  start                    Resume an idle machine.\n  boot                     Boot a machine.\n```\n\n# Getting Started\n\nNavigate to the root of this repository and run the commands below to see\na simple demonstration of running a Pallas machine.\n\n(The following demo uses `/tmp` as the location on the host filesystem\nto create a directory named `counter` to hold the event log of the machine.\nFeel free to use a different directory if you'd like.)\n\n```console\npallas boot /tmp/counter sire/demo_count_up.sire\npallas start /tmp/counter\n```\n\nTake note of the final counter value and then `Ctrl-C` to kill the machine.\n\n```console\n++ [%trk {2020-09-21T10:15:00.729241178Z}]\n++ [{counter is at}=7]\n```\n\nNow run `pallas start /tmp/counter` again. The counter picks up where it\nleft off. You'll notice that there is no explicit saving or\nwriting to disk or a database. You get persistence for free by writing\napplication code.\n\n(For more on how Pallas machines work, see [the documentation](https://docs.opfn.co/explanation/vm-and-interpreter)).\n\n# Contributing\n\nAt this stage in Pallas development, these are the types of contributions that\nare most appropriate:\n\n- Bugs in the existing examples\n- New examples\n- Documentation improvements\n- Technical questions or requests for clarification\n\nThat said, we encourage you to dive even deeper and submit PRs beyond these\nsuggestions.\n\n[CONTRIBUTING.md](https://github.com/operating-function/pallas/blob/master/CONTRIBUTING.md)\n\n# Additional Resources\n\n- [Technical Documentation](https://docs.opfn.co)\n- [Operating Function Company](https://opfn.co/)\n- [Telegram Support](https://t.me/vaporwareNetwork)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foperating-function%2Fpallas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foperating-function%2Fpallas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foperating-function%2Fpallas/lists"}