# Deploying to the Cloud for Public Access

Note: Fixed sometime around the 18th of August 2014. Bug present from the release of 10.0.0. until then.

I wanted to test how a simple deployed program would appear to a non-mathematica user. I did the following, from within a Mathematica notebook:

obj = CloudDeploy[FormFunction[{"country" -> "Country"}, Show[#country["Flag"], ImageSize -> 600] &, "SVG"], Permissions -> "Public"]


As expected:

Options[obj, Permissions]

{"Owner" -> {"Read", "Write", "Execute"}, "All" -> {"Execute"}}


But when I try to access the link (from another machine), it prompts me for a userid and password for the Cloud platform. I tested this several times on different machines, and the result was always the same.

Is this the intended behavior? I thought the idea was that anyone could access a deployed object, without having to sign up for an account (even a free one).

• Adding fuel to the fire; if I create the CloudObject and attempt to access it with a different Wolfram Cloud account, I cannot access the form and instead get the input cell in the Programming Cloud interface. (Not sure how much further I can debug, given that four clicks of Shift-Enter have used up 10% of my monthly allowance of cloud credits... – bobthechemist Jul 27 '14 at 0:21

Read was only necessary because of a bug. It has now been fixed according to Joel Klein's answer.

"Execute" doesn't seem to be enough. You also need to give users permission to read:

obj = CloudDeploy[
FormFunction[{"country" -> "Country"},
Show[#country["Flag"], ImageSize -> 600] &, "SVG"],
Permissions -> "rx"]


Follow up: I asked WRI's support this and they said not giving the Read capability in this case was intended, and in accordance with the documentation:

The setting "Public" allows execution of APIFunction, FormFunction, and related constructs. It allows reading and interaction for notebook and CDF objects. For other objects, it allows reading only.

So there are two different kinds of "public": Some object that are "public" can be accessed by anyone, while some other objects that are public can only be accessed by authorized users. I pointed out that this was confusing and that the docs could do a better job explaining this, and they said they'd pass this feedback on to the developers.

• That did the trick. Thank you! – Analyst Jul 27 '14 at 9:16
• Interesting that "Public" doesn't provide read access. Perhaps another bug? – bobthechemist Jul 27 '14 at 13:41
• @bobthechemist I think it might be unintended, because as the documentation for Permissions shows Public usually sets the Read permission, but on this particular object it sets the Execute permission for some reason. I will report it as a bug and if it gets confirmed I will add the tag. – C. E. Jul 27 '14 at 17:22
• The intention is that Permissions->"Public" for CloudDeploy of APIFunction, FormFunction, or Delayed means to set Execute only. Execute lets you run the code, read would let you peek at the source. Setting Permissions->"Public" for other kinds of objects typically means "read". – Joel Klein Aug 12 '14 at 22:06
• It was a bug that "read" and/or login was required. All -> "Execute" should allow anyone to access the form without requiring a login. – Joel Klein Aug 18 '14 at 21:17

Permissions->"Public" is exactly the right thing to do, you should only need a permission of All -> "Execute" for users to access and use a form.

What you saw was a bug that has been fixed.

For APIs, forms, and web computations, the "Execute" permission is the one needed to use it (that is to run, or execute), whereas the "Read" permission allows you to view the contents, e.g. through CloudGet.