How to automatically generate interface for all files


I know how to generate an interface for a single file and output it to stdout. But I haven’t found an easy and automated way to be able to do something like this in my scripts yarn generate:interfaces src or yarn generate:interfaces src/ and have it generate .rei files alongside every one of my .re files inside src. Is there a way to achieve this?


Not sure if this would help, but could you write a shell script that calls bsc as in ?


Here is the small script I’m using


rm -rf lib/bs/rei
mkdir -p lib/bs/rei

  FILENAME=`echo $(basename $1)  | cut -d'-' -f 1`
  echo "lib/bs/rei/$FILENAME.rei"

for i in $(find lib/bs/src -name '*.cmi');do
   bsc -bs-re-out "$(pwd)/$i" > "$(filepath $i)"


Great script! I can stop wasting time now. Question for you. Why didnt you write the script so that it puts your .rei files next to the .re files?


Probably to avoid overwriting any .rei files that may already exist in the src/ directory hierarchy.


I don’t have any cmi file, how is bsc supposed to work? Is the full path required or how? it just outputs all the options every time I try to run bsc ./lib/


You can find the .cmi files in the build folder after a successful build, see


thanks for your answer.
I guess that is only for bucklescript? I’m using esy.
Luckly, I found a template that makes rei files non necessary. Not sure how, I think it is thanks to some dune config


@yawaramin @jdeisenberg this link redirect to rescript where there is no mention of an interface file. Is this feature no longer available? Any new links to share? Thank you, sir.


The feature is still available, but it looks like the documentation was removed. You can file an issue on the ReScript web GitHub repo. Praveen’s commands above should still work.