Published using Google Docs
TallyJ - Local Installation
Updated automatically every 5 minutes


TallyJ 3 Offline Installation

Version 3 of TallyJ is now in beta. It is the most recent version 2 with the addition of online voting. Read all about it here. The link to the site is in that document.

Ways to Obtain the Website

  1. People with a software development background might feel comfortable with cloning the github repository at  This contains the complete web site and all the database scripts needed to describe the database. This will always have the most current code.
  1. You will need Visual Studio to build it. (The Community Edition of Visual Studio 2019 is free and works great!) The source for the website and the database structure are in this github repository (
  1. Alternatively, Glen usually generates a “packaged” website that can be copied directly to a folder being served by an IIS server.
  1. You can download the file from this Google Drive (please request access from Glen if you need it).  Look for
  2. Follow the guidance on the following page for version 2 to set up the site.
  3. Then continue here to configure the site.


  1. A DACPAC file is available in the same Google Drive folder. Look for TallyJ.3.___.dacpac

Configuring the Website

  1. You need to tell the website where the database is.
  1. As with version 2, you can update the “web.config” file and update the connection string found with the name “MainConnection3”.
  1. You need to configure the website to be able to send emails and use Google or Facebook for logins.
  1. This is done in a file called “AppSettings.config” that can reside in a folder called “App_Data”. This is the expected location as defined in the web.config file.  A sample file can be found in a folder called “AppDataSample”.
  2. 2020 March 28 - The following is being changed...
  3. To enable logins, must create and configure an Auth0 account.
  1. ...
  2. Use Universal Login:

<!DOCTYPE html>



  <meta charset="utf-8">

  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

  <title>Sign In to TallyJ</title>

  <meta name="viewport" content="width=device-width, initial-scale=1.0" />



  <script src=""></script>


    // Decode utf8 characters properly

    var config = JSON.parse(decodeURIComponent(escape(window.atob('@@config@@'))));

    config.extraParams = config.extraParams || {};

    var connection = config.connection;

    var prompt = config.prompt;

    var languageDictionary;

    var language;

    if (config.dict && config.dict.signin && config.dict.signin.title) {

      languageDictionary = { title: config.dict.signin.title };

    } else if (typeof config.dict === 'string') {

      language = config.dict;


    var loginHint = config.extraParams.login_hint;

    // console.log(config);


    var options = {

      auth: {

        redirectUrl: config.callbackURL,

        responseType: (config.internalOptions || {}).response_type ||

          (config.callbackOnLocationHash ? 'token' : 'code'),

        params: config.internalOptions


      configurationBaseUrl: config.clientConfigurationBaseUrl,

      overrides: {

              __tenant: config.auth0Tenant,

              __token_issuer: config.auth0Domain


      assetsUrl:  config.assetsUrl,

      //allowedConnections: ['sms'], //connection ? [connection] : null,

      //allowedConnections: ['sms','google-oauth2','facebook','windowslive'],

      rememberLastLogin: !prompt,

      language: language,

      languageDictionary: languageDictionary,

      sso: false,

      theme: {

        logo:            '',

        //primaryColor:    'green'


      closable: false


    if(config.extraParams.login_hint === 'useSMS'){

      options.allowedConnections = ['sms'];





    var lock = new Auth0LockPasswordless(config.clientID, config.auth0Domain, options);;




  1. Rule:

function (user, context, callback) {

  const namespace = '';

  console.log('user 1', user);

  console.log('context 1', context);



    context.idToken[namespace + 'email'] =;

    context.idToken[namespace + 'email_verified'] = user.email_verified;




    context.idToken[namespace + 'phone'] = user.phone_number;

    context.idToken[namespace + 'phone_verified'] = user.phone_verified;



  callback(null, user, context);


  1. To configure your site to use Google or Facebook
  1. This is optional. If not enabling it, remove the lines from your AppSettings.config file.
  2. Your web server must serve TallyJ from an HTTPS address, which means you need an SSL certificate on your server. If you don’t know where to start, try using Certify the Web to set up SSL on your Windows Server IIS service.
  1. To use Google
  1. You need to obtain an account from Google.
  2. This article includes good instructions starting at “Creating a Google app for OAuth 2 and connecting the app to the project”.
  3. As mentioned in the article, set the Authorized redirect URI to:

https://[your web server]/[path to tallyj]/signin-google

  1. Once you get the Client ID and Secret, put them into the “AppSettings.config” file.
  1. To use Facebook
  1. You need to create an App in Facebook
  2. This article includes good instructions starting at “Create the app in Facebook”.
  3. In the “Valid OAuth Redirect URIs” field, put:
  1. Once you get the AppId and AppSecret, put them into the “AppSettings.config” file.
  1. Give yourself system administrator rights
  1. There is a page available to system administrators that shows a log of events, online voting usage and elections.  To view it, you must manually add yourself to a table in the SQL database.  Find the record with your Email address in the Memberships table, then change the Comment field to be “SysAdmin”. When you next log in, you will find a “Sys Admin” or “Sys Logs” link at the bottom of the list of elections and in the “Other Pages” menu when in an election.

TallyJ 2 Offline Installation

N.B: Whilst it may be possible in the future to make the installation of TallyJ 2 more seamless and automated, as of now it needs to be set up manually and for this, there are a specific set of requirements that need to be met:

TallyJ 2 is composed of two “parts” - a website and a database.

You can download these files from this Google Drive (please request access from Glen if you need it).

Update February 2019 - TallyJ also works well in Azure, either on a VM or as an Azure Web App. Contact Glen for more details.

Update for July 2019 - Now using .NET Framework 4.7.2.  Most servers will already have it. If not, you can download and install it (or any later 4.x version) from Microsoft.

  1. Unzip the contents to a folder on your computer e.g. C:\Inetpub\wwwroot\TallyJ\
  2. Open IIS and Add Application or Convert to Application to add the folder to the webserver.
  3. For the Application Pool, select .NET v4.5 in Integrated mode.
  4. If not installed in the "Inetpub" folder, ensure that the IIS Application Pool assigned has access to read files from the directory containing these files.
  5. If you do not have the ASP.NET State Service running on the computer, you may need to adjust the  <sessionState> setting in the web.config and change it so that it reads: mode="InProc"
  1. You can change this by making adjustments in the web.config file.
  1. If there is a <rewrite/> section in the web.config, that can be removed.
  1. However, if you want to force tellers to connect using HTTPS, then you will need to ensure that you have an SSL certificate set up on the server, and add a <rewrite> section like this to the web.config in the system.webServer section:


        <rule name="Redirect to HTTPS" stopProcessing="true">

            <match url="(.*)" />

            <conditions><add input="{HTTPS}" pattern="^OFF$" /></conditions>

            <action type="Redirect"

                         url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />



  1. Test the website. The initial page can be displayed without the database, but other pages rely on it.


  1. This is a definition file that tells Microsoft SQL how to set up the database.  
  2. To use, open SQL Server Management Studio, right-click on Databases and select Deploy Data-tier Application.
  3. Follow the prompts of the wizard until complete (use the default values or customize as needed) and when prompted for a DAC package to deploy, select the .dacpac file to upload.
  4. Once complete, the database should be created with the necessary tables.
  5. Finally, add a SQL user account to the database (e.g. IIS AppPool\TallyJ where “TallyJ” is the name of the AppPool) and set this user as the owner of the database (this ensures the AppPool can read and write to the database).
  1. To add a user account, expand the database just created (in this case TallyJ2d), go into the Security > Users folder, right-click on Users and select New User.
  2. To set a user as an owner of a database, go into the Membership page of the user properties, and check the box labelled db_owner.

Providing your SQL Instance is called SQLEXPRESS, then TallyJ 2 should be working at this stage. If your SQL instance is called something else, then you will need to adjust the connection string in the web.config file to match your instance.

Further Tips