{"id":17955885,"url":"https://github.com/rogeralsing/projectexodus","last_synced_at":"2025-10-12T10:32:58.927Z","repository":{"id":142036561,"uuid":"96558763","full_name":"rogeralsing/ProjectExodus","owner":"rogeralsing","description":"Transpiler from C# to Kotlin.","archived":false,"fork":false,"pushed_at":"2025-08-20T15:39:22.000Z","size":283,"stargazers_count":76,"open_issues_count":2,"forks_count":16,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-09-29T01:41:48.904Z","etag":null,"topics":["csharp","kotlin","roslyn","roslyn-workspace","transpiler"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rogeralsing.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}},"created_at":"2017-07-07T16:58:04.000Z","updated_at":"2025-08-20T15:39:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"1b4a8bf1-7e4f-49df-a775-fd5b73b33703","html_url":"https://github.com/rogeralsing/ProjectExodus","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rogeralsing/ProjectExodus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rogeralsing%2FProjectExodus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rogeralsing%2FProjectExodus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rogeralsing%2FProjectExodus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rogeralsing%2FProjectExodus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rogeralsing","download_url":"https://codeload.github.com/rogeralsing/ProjectExodus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rogeralsing%2FProjectExodus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279011061,"owners_count":26084865,"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-10-12T02:00:06.719Z","response_time":53,"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":["csharp","kotlin","roslyn","roslyn-workspace","transpiler"],"created_at":"2024-10-29T10:33:19.007Z","updated_at":"2025-10-12T10:32:58.921Z","avatar_url":"https://github.com/rogeralsing.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ProjectExodus\n\nTranspiler from C# to Kotlin.\n\n\u003e Requires the .NET 9 SDK.\n\nVery early pre alpha\n\n## Usage\n\nThe transpiler expects the path to a C# solution and an output directory for the generated Kotlin files.\n\n```bash\ndotnet run --project src/CsToKotlinTranspiler -- \u003csolution.sln\u003e \u003coutput-directory\u003e\n```\n\nYou may also provide the paths via environment variables:\n\n```bash\nexport CS2KOTLIN_SRC=/path/to/solution.sln\nexport CS2KOTLIN_OUT=./kotlinOutput\ndotnet run --project src/CsToKotlinTranspiler\n```\n\nIf neither arguments nor environment variables are supplied, the tool uses default paths.\n\n### Single-file mode\n\nTo transpile a single C# file and print the syntax-highlighted Kotlin directly to the console, use the companion CLI:\n\n```bash\ndotnet run --project src/CsToKotlinCli -- \u003cpath-to-file.cs\u003e\n```\n\nRun the command with `-h` to show its built-in help text. The CLI uses [Spectre.Console](https://spectreconsole.net/) for colorful output.\n\nDemo:\n\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace ConsoleApplication3\n{\n    class Example\n    {\n        public void Main()\n        {\n            var i = 1.ToString();\n            var res = Console.ReadLine();\n            Console.WriteLine(\"You wrote \" + res);\n        }\n\n        public void Conditionals()\n        {\n            var x = 1 \u003e 2 ? \"a\" : \"b\";\n        }\n        public string Arrays(string[] strings)\n        {\n            if (strings == null)\n            {\n                return \"null\";\n            }\n            var x = \"\";\n            foreach (var s in strings)\n            {\n                x += \",\" + s;\n            }\n            return x;\n        }\n\n        public void Linq()\n        {\n            int[] ints = {1, 2, 3, 4, 5, 6, 7, 8};\n            var big = ints.Where(i =\u003e i \u003e 4).Select(i =\u003e i*2).ToList();\n        }\n\n        public void Delegates()\n        {\n            Action\u003cint, string\u003e del = (a, b) =\u003e\n            {\n                Console.WriteLine(\"{0} {1}\", a, b);\n            };\n            Func\u003cint, string\u003e del2 = a =\u003e \"hello\" + a;\n            InvokeIt(del);\n        }\n\n        private void InvokeIt(Action\u003cint, string\u003e del)\n        {\n            del(1, \"hello\");\n        }\n    }\n}\n```\n\nGets transpiled into\n\n```kotlin\npackage consoleapplication3\n\nclass Example {\n    fun main () : Unit {\n        var i : String = 1.toString()\n        var res : String = readLine()\n        println(\"You wrote \" + res)\n    }\n    fun conditionals () : Unit {\n        var x : String = if (1 \u003e 2) \"a\" else \"b\"\n    }\n    fun arrays (strings : Array\u003cString\u003e) : String {\n        if (strings == null) {\n            return \"null\"\n        }\n        var x : String = \"\"\n        for(s in strings) {\n            x += \",\" + s\n        }\n        return x\n    }\n    fun linq () : Unit {\n        var ints : Array\u003cInt\u003e = arrayOf(1, 2, 3, 4, 5, 6, 7, 8)\n        var big : List\u003cInt\u003e = ints.filter{it \u003e 4}.map{it * 2}.toList()\n    }\n    fun delegates () : Unit {\n        var del : (Int, String) -\u003e Unit = {a, b -\u003e\n            println(\"{0} {1}\", a, b)\n        }\n\n        var del2 : (Int) -\u003e String = {a -\u003e \"hello\" + a}\n        invokeIt(del)\n    }\n    fun invokeIt (del : (Int, String) -\u003e Unit) : Unit {\n        del(1, \"hello\")\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frogeralsing%2Fprojectexodus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frogeralsing%2Fprojectexodus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frogeralsing%2Fprojectexodus/lists"}