Hello everyone,
Can anyone point me to any document and/or blog post regarding best
practices (and HOWTO) in handling project artifacts in a Pharo project?
For example, how do you handle Smalltalk code AND other files, SQL code,
documentation, class diagrams, intilization scripts, user data files,
etc? The Smalltalk code itself, in my case, has to go along with all
other files. Do you handle "everything not Smalltalk" manually with git
or there is another way ? How do you guys do it in your projects?
tia
--
Cyril Ferlicot-Delbecque
https://ferlicot.fr
On Sunday, November 2nd, 2025 at 11:40 AM, Benoit St-Jean via Pharo-users pharo-users@lists.pharo.org wrote:
Hello everyone,
Can anyone point me to any document and/or blog post regarding best
practices (and HOWTO) in handling project artifacts in a Pharo project?
Hi,
I don't have 1 documentation about that or only one way to do it since it depends on the project.
But I've had to manage such cases in the past.
One of my way of doing that is to store things in the same git as my projects and use my GitBridge project to access it from Pharo:
https://github.com/jecisc/GitBridge
For example, I have a documentation to explain how I implemented the tests of one of my project. For this project I need to have some java projects, parse them and import a model of those projects in a software analysis platform.
Here is the documentation:
https://modularmoose.org/blog/2025-10-08-testing-your-algo-on-a-java-project/
And to manage those files I'm using git in my terminal. I do not manage those from the Pharo side personally because I already had the habit of using git before its Pharo integration.
But this is only one example.
For other project I have some javascript and CSS code in some FileLibrary of Seaside and I added scripts to my project to be able to export all the files on disk, then I can edit them. And I have a watcher that recompile the file library when I update those files.
But this is half based on FileLibrary of Saside. And half some scripts I did by hand and never really factorized between my projects (I never got the time).
For another project that was more personal, I had some JS files next to the Pharo code. And in the readme there was two instructions: one to launch a JS scripts installing a websocket and another one to launch the Pharo application that was using this websocket. If I would have gotten more time I could have improved the launch script to do both with the same script.
For another project I deployed an application using nginx and I added a static file server to deliver my js scirpts that were saved on my git. And during dev I use Zinc to serve the files instead of nginx (ZnStaticFileServerDelegate).
So there are multiple solutions. But as time goes, a folder in the git project and the usage of GitBridge is what I'm using the most.
For example, how do you handle Smalltalk code AND other files, SQL code,
documentation, class diagrams, intilization scripts, user data files,
etc? The Smalltalk code itself, in my case, has to go along with all
other files. Do you handle "everything not Smalltalk" manually with git
or there is another way ? How do you guys do it in your projects?
tia
Hi - I've just added my extra resources into a folder(s) as part of my project as peers to the normal src folder (where Pharo code lives). As an example: https://gitlab.com/macta/PharoLambda does this (its quite an old project - but it gives an idea for some JS code resources). From memory, when you deploy you can reference that folder from your image as ./resources for example.
You can just version the extra resources using another tool like VSCode or Intellij (or WebStorm) as you probably want some different tooling to handle those things. You just need to remember to do a pull from your local image when you do this.
Tim
On Sun, 2 Nov 2025, at 10:40 AM, Benoit St-Jean via Pharo-users wrote:
Hello everyone,
Can anyone point me to any document and/or blog post regarding best
practices (and HOWTO) in handling project artifacts in a Pharo project?
For example, how do you handle Smalltalk code AND other files, SQL code,
documentation, class diagrams, intilization scripts, user data files,
etc? The Smalltalk code itself, in my case, has to go along with all
other files. Do you handle "everything not Smalltalk" manually with git
or there is another way ? How do you guys do it in your projects?
tia
While, as Cyril, I don't have specifid documentation, I do have a blog
"report" experience at "Panama Papers: a case for reproducible research,
data activism and frictionless data"[1], where I showcase how to share a
bundled artifact that included a Pharo image, a SQLite database,
documentation and code. While Grafoscopio has moved[2], I think that
still it gives a pretty practical overview on how to package such mixed
artifacts with simple technologies and a concern for reproducibility.
[1] https://mutabit.com/offray/blog/en/entry/panama-papers-1
[2] https://mutabit.com/repos.fossil/grafoscopio/doc/tip/intro.md
Hope it helps,
Offray
On 11/2/25 05:40, Benoit St-Jean via Pharo-users wrote:
Hello everyone,
Can anyone point me to any document and/or blog post regarding best
practices (and HOWTO) in handling project artifacts in a Pharo project?
For example, how do you handle Smalltalk code AND other files, SQL
code, documentation, class diagrams, intilization scripts, user data
files, etc? The Smalltalk code itself, in my case, has to go along
with all other files. Do you handle "everything not Smalltalk"
manually with git or there is another way ? How do you guys do it in
your projects?
tia
I am struggling with the same issue in a web apps context. I use many
external tools to edit HTML, JS and graphics, so they need to be stored on
disk.
My current solution is to keep everything in Git and export Pharo packages
to the FileTree format. This works nicely with Git, but of course it is all
more complicated than keeping the data inside Pharo.
What I'd really find helpful would be if we could mount part of a Pharo
image as a file system, so that external apps could just read and save
files to the image.
Also, it would be nice to be able to use the image itself for (smaller)
production databases more reliably. I think we would need something that
can save deltas externally when state inside the image changes – like a
journaled file system – so that data is kept & restored after an occasional
image crash. I think this already works reasonably with code changes in
Epicea, but there we restore code manually.
cheers
Siemen
Hi Siemen,
I +1 the issue. I experience it with PharoJS and WebST.
Although now with WebST, the HTML is generated along the JS.
Noury
On Thu, Nov 20, 2025 at 1:15 PM Siemen Baader via Pharo-users <
pharo-users@lists.pharo.org> wrote:
I am struggling with the same issue in a web apps context. I use many
external tools to edit HTML, JS and graphics, so they need to be stored on
disk.
My current solution is to keep everything in Git and export Pharo packages
to the FileTree format. This works nicely with Git, but of course it is all
more complicated than keeping the data inside Pharo.
What I'd really find helpful would be if we could mount part of a Pharo
image as a file system, so that external apps could just read and save
files to the image.
Also, it would be nice to be able to use the image itself for (smaller)
production databases more reliably. I think we would need something that
can save deltas externally when state inside the image changes – like a
journaled file system – so that data is kept & restored after an occasional
image crash. I think this already works reasonably with code changes in
Epicea, but there we restore code manually.
cheers
Siemen
--
Noury Bouraqadi