{"id":13509795,"url":"https://github.com/tonini/alchemist-server","last_synced_at":"2025-09-28T19:30:46.073Z","repository":{"id":36645924,"uuid":"40952209","full_name":"tonini/alchemist-server","owner":"tonini","description":"Editor/IDE independent background server to inform about Elixir mix projects","archived":false,"fork":false,"pushed_at":"2017-11-02T07:05:57.000Z","size":67,"stargazers_count":192,"open_issues_count":7,"forks_count":12,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-04T12:51:24.726Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tonini.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-08-18T05:16:33.000Z","updated_at":"2024-12-12T08:19:53.000Z","dependencies_parsed_at":"2022-09-08T22:51:22.660Z","dependency_job_id":null,"html_url":"https://github.com/tonini/alchemist-server","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tonini/alchemist-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonini%2Falchemist-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonini%2Falchemist-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonini%2Falchemist-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonini%2Falchemist-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tonini","download_url":"https://codeload.github.com/tonini/alchemist-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonini%2Falchemist-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277421896,"owners_count":25815334,"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","status":"online","status_checked_at":"2025-09-28T02:00:08.834Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-08-01T02:01:13.343Z","updated_at":"2025-09-28T19:30:45.793Z","avatar_url":"https://github.com/tonini.png","language":"Elixir","readme":"[![License GPL 3](https://img.shields.io/badge/license-GPL_3-green.svg)](http://www.gnu.org/licenses/gpl-3.0.txt)\n[![Build Status](https://img.shields.io/travis/tonini/alchemist-server.svg)](https://travis-ci.org/tonini/alchemist-server)\n\n**INFO:** The Alchemist-Server is in Beta status and the API will most likey change until the first release. Feedback and critic are highly appreciated though.\n\n# Alchemist Server\n\nThe Alchemist-Server operates as an informant for a specific desired\nElixir Mix project and serves with informations as the following:\n\n* Completion for Modules and functions.\n* Documentation lookup for Modules and functions.\n* Code evaluation and quoted representation of code.\n* Definition lookup of code.\n* Listing of all available Mix tasks.\n* Listing of all available Modules with documentation.\n\n# Usage\n\nThe server needs to be started inside an Elixir mix project, it can be started in two ways:\n\n## Read/Write through `STDIN/STDOUT`\n```\n$ cd elixir_project\n$ elixir path/to/alchemist-server/run.exs --env=dev\n```\nIn this mode, when input sent to a running server process it\nresponds by sending information back to the `STDOUT`.\n\nA request consisting of two parts, the request type and the request arguments.\n\nExample for a completion request:\n\n```\n[type]   [arguments]\n\nCOMP { \"def\", [ context: Elixir, imports: [Enum], aliases: [{MyList, List}] ] }\n```\n\n## Read/Write through unix domain socket\n```\n$ cd elixir_project\n$ elixir path/to/alchemist-server/run.exs --env=dev --listen\nok|localhost:/tmp/alchemist-server-1500797742260403000.sock\n```\nIn this mode, when a client connects to the port, it\nresponds by sending information back to the opened connection\n\nExample for a completion request:\n\n```\n$ nc -U /tmp/alchemist-server-1500797742260403000.sock\nCOMP { \"def\", [ context: Elixir, imports: [Enum], aliases: [{MyList, List}] ] }\n```\n\nUnix domain socket is introduced since OTP 19.\n\n# API\n\n## Completion\n\nReturn a completion list of all the available candidates.\n\n```\nCOMP\nCOMP { \"def\", [ context: Elixir, imports: [], aliases: [] ] }\nCOMP { \"List.fla\", [ context: Elixir, imports: [], aliases: [] ] }\n```\n\n## Documentation lookup\n\nReturn the documentation.\n\n```\nDOCL { \"defmodule\", [ context: Elixir, imports: [], aliases: [] ] }\nDOCL { \"List.flatten/1\", [ context: Elixir, imports: [], aliases: [] ] }\n```\n\n## Evaluation, Quoted \u0026 Macro expand\n\n### Evaluation\n\nReturn the evaluation result of the code from the file.\n\n```\nEVAL { :eval, 'path/to/file/which/holds/content/to/eval.tmp' }\n```\n\n### Quoted\n\nReturn the code from the file quoted.\n\n```\nEVAL { :quote, 'path/to/file/which/holds/content/to/quote.tmp' }\n```\n\n### Macro expand\n\nReturn the code from the file expanded.\n\n```\nEVAL { :expand, 'path/to/file/which/holds/content/to/expand.tmp' }\n```\n\nReturn the code from the file expanded once.\n\n```\nEVAL { :expand_once, 'path/to/file/which/holds/content/to/expand_once.tmp' }\n```\n\n## Definition lookup\n\nReturn the path to the source file which holds the definition.\n\n```\nDEFL  { \"List,flatten\", [ context: Elixir, imports: [], aliases: [] ] }\nDEFL  { \"nil,defmacro\", [ context: Elixir, imports: [], aliases: [] ] }\nDEFL  { \"nil,create_file\", [ context: Elixir, imports: [Mix.Generator], aliases: [] ] }\nDEFL  { \"MyList,nil\", [ context: Elixir, imports: [], aliases: [{MyList, List}] ] }\n```\n\n## Informations\n\n### Mix tasks\n\nReturn a list of all available mix tasks.\n\n```\nINFO { :type, :mixtasks }\n```\n\n### Modules\n\nReturn a list of all available modules which has documentation.\n\n```\nINFO { :type, :modules }\n```\n\n### Datatype Information\n\nReturn information about any datatype.\n\n```\nINFO { :type, :info, List }\n```\n\n### Module Or Function/Arity Types Information\n\nReturn types for a module or function/arity pair.\n\n```\nINFO { :type, :types, 'List' }\nINFO { :type, :types, 'Enum.t' }\nINFO { :type, :types, 'Agent.on_start/0' }\n```\n\n## Debugging\n\nReturn PONG as response, it can be used for purpose of debugging and checking server's availability.\n\n```\nPING\n```\n\n## End Markers\n\nEach request type ends with a specific end marker tag to notify that the request is done.\n\nAn end tag looks like the following:\n\n```\nEND-OF-\u003cREQUEST TYPE\u003e\n```\n\nFor example, after the following request an end tag would look like this:\n\n```\nINFO { :type, :modules }\nList\nString\nEnum\n.\n...\n....\nEND-OF-INFO\n```\n","funding_links":[],"categories":["Editors"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftonini%2Falchemist-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftonini%2Falchemist-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftonini%2Falchemist-server/lists"}