# New shards proocodile is here!

**URL:** <https://forum.crystal-lang.org/t/new-shards-proocodile-is-here/5199>\
**Category:** News\
**Created:** [December 23, 2022, 2:00pm UTC](https://forum.crystal-lang.org/t/new-shards-proocodile-is-here/5199 "2022-12-23T14:00:09Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![zw963](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/zw963/32/1623_2.png) [@zw963](https://forum.crystal-lang.org/u/zw963)\
**Post date:** [December 23, 2022, 2:00pm UTC](https://forum.crystal-lang.org/t/new-shards-proocodile-is-here/5199/1 "2022-12-23T14:00:09Z")

</div>

# Procodile

* * *

Running & deploying Ruby apps to places like [Viaduct](https://viaduct.io) & Heroku is really easy but running processes on actual servers is less fun. Procodile aims to take some the stress out of running your Ruby/Rails apps and give you some of the useful process management features you get from the takes of the PaaS providers.

Procodile is a bit like [Foreman](https://github.com/ddollar/foreman) but things are designed to run in the background (as well as the foreground if you prefer) and there’s a supervisor which keeps an eye on your processes and will respawn them if they die.

Procodile works out of the box with your existing `Procfile`.

> **[GitHub - crystal-china/procodile: 🐊 Run processes in the background (and foreground)...](https://github.com/crystal-china/procodile)**
>
> 🐊 Run processes in the background (and foreground) on Mac & Linux from a Procfile (for production and/or development environments)

* * *

This is a Crystal fork for Ruby(original) version, with some minor bug fixes.

Although most of the process is just copying/pasting, But, It’s still not an easy process.

Please help to test it.

1. full features work as expected.
2. the MacOS prebuild version is works.

 ![image](https://canada1.discourse-cdn.com/flex036/uploads/crystal_lang/original/2X/b/b3c79e6f4e75629c812eb5fd356d4012f66d5336.png)

 ![image](https://canada1.discourse-cdn.com/flex036/uploads/crystal_lang/original/2X/0/0bafbed0fc2551141ae232fc5f15c6c4fc80f71f.png)

 ![image](https://canada1.discourse-cdn.com/flex036/uploads/crystal_lang/original/2X/8/8a57ec83b550200fcf6d87bc93abf13dc924a69f.png)

![image](https://canada1.discourse-cdn.com/flex036/uploads/crystal_lang/original/2X/c/caa21130003be3afb1a34f478c987c8732fcec35.png)

![image](https://canada1.discourse-cdn.com/flex036/uploads/crystal_lang/original/2X/7/725c812f48d109f186f23e07d1bbb65b5e518fad.png)

Check [release page](https://github.com/crystal-china/procodile_cr/releases) for download precompiled binary.

---

<div class="post-metadata">

**Author:** ![zw963](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/zw963/32/1623_2.png) [@zw963](https://forum.crystal-lang.org/u/zw963)\
**Post date:** [October 27, 2024, 6:35pm UTC](https://forum.crystal-lang.org/t/new-shards-proocodile-is-here/5199/2 "2024-10-27T18:35:56Z")

</div>

Hi, [procodile 1.0.20](https://github.com/crystal-china/procodile_cr/releases/tag/v1.0.20) is there.

Although it’s just a small version upgrade, but usability has been greatly improved.

Before this version, there a issue has been ongoing for a long time, the process log output is not print(yes, i use my this procodile fork in the production for years, but without process log output …)

I ask some questions in the form for help (links may be incomplete)

> [@Need document for how porting IO.select(...) in ruby Crystal](https://forum.crystal-lang.org/t/need-document-for-how-porting-io-select-in-ruby-crystal/5374):
>
> IO.select was removed since 2017 by [this](https://github.com/crystal-lang/crystal/pull/4392) PR. But for users come from ruby, it still not easy to porting exists code into Fiber + Channel, there is still no a detailed document for how to do this, some examples in that PR is only touch the most simple user case. For me, a user use Crystal for half years, still don’t know how to porting following code to Crystal, showing real-life use cases is often not as easy as comments in the PR. Basically, this is a example read non-blocked from several io…

> [@Porting a really Ruby IO.select use case into Crystal](https://forum.crystal-lang.org/t/porting-a-really-ruby-io-select-use-case-into-crystal/5080):
>
> i am current porting a ruby gem like [Foreman](https://github.com/ddollar/foreman) but things are designed to run in both foreground/background into Crystal, I am quite ensure it is doable, although there are many challenges. Following is one about IO.select, i am not a expect of it, in fact, manipulate it directly rarely, I need help. The original ruby version code is [here](https://github.com/zw963/procodile_cr/blob/7fb5112e727f720b7a51c987e286921b6b481ba4/src/procodile/tcp_proxy.cr#L39-L71), following is the copy. def listen loop do # IO.select IOs, timeout 30 seconds io = IO.select([@sp\_reader] + @listeners.keys, nil, nil, 30) if…

> [@What is the equivalent of Ruby Process.detach?](https://forum.crystal-lang.org/t/what-is-the-equivalent-of-ruby-process-detach/5062):
>
> Thanks.

> [@Share data cross fiber the the traditional way?](https://forum.crystal-lang.org/t/share-data-cross-fiber-the-the-traditional-way/5064):
>
> When the Ruby started early, only start one thread thread, we can get it from Thread.main. We can share data in this way: Thread.main["foo"] = "bar" threads = 2.times.map do |i| sleep 0.5 Thread.new(i) do `notify-send \"#{Thread.main["foo"]} #{i}\"` end end threads.each(&:join) We can see “bar1” and “bar2” output in the desktop notification. How to basically same things in Crystal? Thanks.

Some of them answered, some of them not, but all of them give me lots of inspiration from those discussion, but, no process log output issue always is there, no any progress, porting a ruby gem over 2000 LOC is not easy.

Certainly, I know it now, this issue related to many things, Fiber, Channel, Socket, Process, Serialize … etc, I even couldn’t find where is the real issue is when I asked the question.

Anyway, i fixed it, there are many refactor work need to be done in following weeks, but at least, the functionality compare to [orignal ruby version](https://github.com/adamcooke/procodile) is complete.

Welcome try it, and give me feedback, thanks!

* * *

BTW: special thanks to David Yoteau, it mention this tool in his talk for [CrystalConf 2023](https://youtu.be/dL0XLRLTpSs?si=PLVsnSrVYbM6nsH7&t=918), even at that time, there was no process log output, it’s let me know there is someone else using it besides me, this is my source of drive me going on.

---

<div class="post-metadata">

**Author:** ![zw963](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/zw963/32/1623_2.png) [@zw963](https://forum.crystal-lang.org/u/zw963)\
**Post date:** [April 15, 2026, 7:22am UTC](https://forum.crystal-lang.org/t/new-shards-proocodile-is-here/5199/3 "2026-04-15T07:22:47Z")

</div>

# Announcing `procodile` 2.0.0-rc1

I’m happy to announce `procodile` 2.0.0-rc1, a major new release with more than 130 commits since the previous version.

This is a very significant update for several reasons:

1. This is the first `procodile` release to include a full implementation of the original Ruby version.
2. It also fixes many bugs and edge cases that existed in the original Ruby version.

At the same time, the 2.0 release substantially improves on the original Ruby version and introduces several new features that were not available before:

1. **`.env` file support** for loading environment variables, powered by [lucky\_env](https://github.com/luckyframework/lucky_env) by @jwoertink.
2. **Scheduled task support** , a major addition that allows you to manage both long-running processes and scheduled jobs in one place. Thanks to [cron\_parser](https://github.com/kostya/cron_parser) by @kostya, it supports not only the standard five crontab fields, but also second-level cron scheduling..
3. **Runtime Issues** , which provide immediate command-line feedback when problems are detected after a command finishes.

Please refer to the [Wiki](https://github.com/crystal-china/procodile/wiki) for well-organized, comprehensive documentation.

---

<div class="post-metadata">

**Author:** ![zw963](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/zw963/32/1623_2.png) [@zw963](https://forum.crystal-lang.org/u/zw963)\
**Post date:** [April 29, 2026, 6:12am UTC](https://forum.crystal-lang.org/t/new-shards-proocodile-is-here/5199/4 "2026-04-29T06:12:37Z")

</div>

After 7 more RC iterations and over 150 git commits, version 2.0.0 is finally here.

- Added extensive testing coverage.
- Underwent a massive refactor—while the codebase is much cleaner now, the expected behavior remains fundamentally the same.
- Removed a significant amount of dead code.
- Fixed several known issues and introduced more descriptive runtime error messages.
- And, more new feature, e.g. random\_delay options for schedule task.
- Further improved and updated the Wiki documentation.

You can download the binaries for ARM64, X86\_64, and macOS directly from the releases page.

> **[Release v2.0.0 · crystal-china/procodile](https://github.com/crystal-china/procodile/releases/tag/v2.0.0)**
>
> 🐊 Run processes in the background (and foreground) on Mac & Linux from a Procfile (for production and/or development environments) - Release v2.0.0 · crystal-china/procodile

---

<div class="post-metadata">

**Author:** ![zw963](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/zw963/32/1623_2.png) [@zw963](https://forum.crystal-lang.org/u/zw963)\
**Post date:** [April 29, 2026, 6:13am UTC](https://forum.crystal-lang.org/t/new-shards-proocodile-is-here/5199/5 "2026-04-29T06:13:28Z")

</div>

I’m considering releasing this tool as a package for RubyGems and Linux package managers. Given that the original author hasn’t responded in years, I’ve consider to rename it. If you have any good suggestions for a new name, please let me know.

Thanks

---

<div class="post-metadata">

**Author:** ![bcardiff](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/bcardiff/32/3_2.png) [@bcardiff](https://forum.crystal-lang.org/u/bcardiff)\
**Post date:** [April 29, 2026, 12:03pm UTC](https://forum.crystal-lang.org/t/new-shards-proocodile-is-here/5199/6 "2026-04-29T12:03:32Z")

</div>

Proctopus 🐙

---

<div class="post-metadata">

**Author:** ![zw963](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/zw963/32/1623_2.png) [@zw963](https://forum.crystal-lang.org/u/zw963)\
**Post date:** [April 29, 2026, 2:40pm UTC](https://forum.crystal-lang.org/t/new-shards-proocodile-is-here/5199/7 "2026-04-29T14:40:41Z")

</div>

Proc + Top + Us ? 😄
