Acos - Advanced Content Server

Acos server and related sub-projects are a method of distributing browser-based smart learning content in a reusable and interoperable way. Activities created using the Acos server can be embedded both in A+ and MyCourses.

The project homepage can be found at

The source code is available in GibHub:

Example activities

The following Acos activity types were illustrated in an A+ workshop on May 30, 2018.


Example exercise for constructing Python code by dragging code elements.

draganddrop (content type)

This page contains instructions and notation for using this content type.

draganddrop-example (content package)

Basic example exercises illustrating various features of the drag-and-drop content type.

draganddrop-english (content package)

A more advanced example illustrating how drag-and-drop activity type can be used in teaching writing.

pointandclick (content type)

This page contains instructions and notation for using this content type.

pointandclick-example (content package)

Basic example exercises illustrating various features of the point-and-click content type.

Embedding Acos activities into A+

You can add Acos exercises to A+ with the submit RST directive. Specify the URL of the exercise in the Acos server using the url option. The ajax option is used to update the exercise points bar in the A+ page since the submission is uploaded directly to the Acos server instead of via A+. There is an alternative to using the submit directive since specifying the full URL of the exercise becomes awkward when one needs to test exercises locally before deploying them to the production server.

.. submit:: 1 150
  :title: Reveal demo

Alternatively, a custom submit directive may be used in order to avoid specifying the domain in the URL of the Acos exercise. As a result, it is easy to change the location of the Acos server without modifying all submit directives of the Acos exercises in the course. This is useful when Acos exercises are first tested locally with localhost URLs and then deployed to a production server. The custom acos-submit directive has been installed in this course. It enables the ajax option automatically so it need not be given.

The acos-submit directive uses the setting acos_submit_base_url (in the project's file) to define the base URL of Acos server, for example, "" or "". The url option in the directive only defines the URL path of the exercise without the domain.

.. acos-submit:: 1 150
  :title: Reveal demo
  :url: /aplus/draganddrop/draganddrop-example/revealdemo

Docker and Mac or Windows computers

When running this manual course with Docker in Mac or Windows computers, the URLs pointing to the Acos server in the Acos exercises may not function correctly. On Mac and Windows, Docker runs containers inside an additional Linux virtual machine. Due to the virtual machine between the Mac/Windows host machine and the containers, the host machine can not reach the containers with their internal IP addresses. However, the Acos exercises in A+ require that the user's web browser can connect directly to the Acos server. A simple fix to this is to use the internal domain names of the containers in order to connect to them from the host. This requires some configuration in the host system so that it recognizes those domain names and associates them with the localhost loopback address (the system itself). Since docker-compose.yml sets port forwarding to the containers, the host can connect to the containers using the localhost address with the correct port number.

The localhost address can not be used directly in the exercise URLs since the loopback address always refers to the container itself initiating a connection, but the containers need to be able to connect to each other. Therefore, the containers must use the internal domain names in the exercise URLs, and the host (web browser) may connect to the containers using the localhost address with port forwarding.

Mac computers

The following has been tested in the macOS High Sierra operating system. You need to modify your hosts file settings at /private/etc/hosts by adding these lines at the end of the file:  acos  plus  grader

To ensure that the new settings work properly, you may also need to flush the DNS cache by executing sudo killall -HUP mDNSResponder.

In addition, the needs to modified as follows:

# comment out the existing line that sets acos_submit_base_url and add the following:
# local testing in containers
acos_submit_base_url = 'http://acos:3000'

After modifying the settings, execute ./ More detailed information about modifying the hosts file can be found at and

Linux computers

In Linux computers, it is possible to use the internal IP addresses of the containers in order to connect to them from the host machine. However, if you want to use the domain names of the containers instead of the IP addresses, you may apply the instructions of the Mac section above with slight modifications. The hosts file is usually /etc/hosts in Linux and there is no need to flush any DNS cache after modifying it.

Windows computers

The A+ containers have not yet been properly working in Windows. If they work correctly otherwise, but the Acos exercise URLs do not, then you could modify the hosts configuration so that the internal domain names of the containers are mapped to the localhost address. The file is modified like in the Mac section above.

These linked instructions have not been tested and you may search the web for more instructions.

Installing Acos locally

If you use Docker, you do not need to install Acos server locally in your computer.

If you still want to install the Acos server locally in your computer, you need to install Node.js (version 8 LTS) and NPM first. Then you clone the acos-server git repository:

git clone

You can install dependencies of the Acos server and other content types and content packages with NPM (in the acos-server directory):

npm install
# install other packages according to your needs
npm install acos-pointandclick
npm install acos-pointandclick-example

Run the Acos server with:

node bin/www

Enter the address http://localhost:3000 in your web browser.

Posting submission...