Table of Contents
RPA Framework is a collection of open-source libraries and tools for Robotic Process Automation (RPA), and it is designed to be used with both Robot Framework and Python. The goal is to offer well-documented and actively maintained core libraries for Software Robot Developers.
Learn more about RPA at Robocorp Documentation.
The project is:
- 100% Open Source
- Sponsored by Robocorp
- Optimized for Robocorp Control Room and Developer Tools
- Accepting external contributions
- Homepage: https://www.github.com/robocorp/rpaframework/
- Documentation: https://rpaframework.org/
- PyPI: https://pypi.org/project/rpaframework/
- Release notes: https://rpaframework.org/releasenotes.html
- RSS feed: https://rpaframework.org/releases.xml
From the above packages, rpaframework-core and rpaframework-recognition are
support packages, which alone do not contain any libraries.
The RPA Framework project currently includes the following libraries:
The x in the PACKAGE column means that library is included in the rpaframework package and for example. x,pdf means that RPA.PDF library is provided in both the rpaframework and rpaframework-pdf packages.
| LIBRARY NAME | DESCRIPTION | PACKAGE |
| Archive | Archiving TAR and ZIP files | x |
| Assistant | Display information to a user and request input. | assistant |
| Browser.Selenium | Control browsers and automate the web | x |
| Browser.Playwright | Newer way to control browsers | special (more below) |
| Calendar | For date and time manipulations | x |
| Cloud.AWS | Use Amazon AWS services | x,aws |
| Cloud.Azure | Use Microsoft Azure services | x |
| Cloud.Google | Use Google Cloud services | |
| Crypto | Common hashing and encryption operations | x |
| Database | Interact with databases | x |
| Desktop | Cross-platform desktop automation | x |
| Desktop.Clipboard | Interact with the system clipboard | x |
| Desktop.OperatingSystem | Read OS information and manipulate processes | x |
| DocumentAI | Intelligent Document Processing wrapper | x |
| DocumentAI.Base64AI | Intelligent Document Processing service | x |
| DocumentAI.Nanonets | Intelligent Document Processing service | x |
| Email.Exchange | E-Mail operations (Exchange protocol) | x |
| Email.ImapSmtp | E-Mail operations (IMAP & SMTP) | x |
| Excel.Application | Control the Excel desktop application | x |
| Excel.Files | Manipulate Excel files directly | x |
| FileSystem | Read and manipulate files and paths | x |
| FTP | Interact with FTP servers | x |
| HTTP | Interact directly with web APIs | x |
| Hubspot | Access HubSpot CRM data objects | hubspot |
| Images | Manipulate images | x |
| JavaAccessBridge | Control Java applications | x |
| JSON | Manipulate JSON objects | x |
| MFA | Authenticate using one-time passwords (OTP) & OAuth2 | x |
| MSGraph | Access Microsoft 365 via the Microsoft Graph API | x |
| Notifier | Notify messages using different services | x |
| Decision OpenAI | Decision model (Jev, Laya) for typed decisions Artificial Intelligence service | decision openai |
| Outlook.Application | Control the Outlook desktop application | x |
| Read and create PDF documents | x,pdf | |
| Robocorp.Process | Use the Robocorp Process API | x |
| Robocorp.WorkItems | Use the Robocorp Work Items API | x |
| Robocorp.Vault | Use the Robocorp Secrets API | x |
| Robocorp.Storage | Use the Robocorp Asset Storage API | x |
| Salesforce | Salesforce operations | x |
| SAP | Control SAP GUI desktop client | x |
| Slack | Send messages and interact with Slack workspaces | x |
| Smartsheet | Access Smartsheet sheets | x |
| Tables | Manipulate, sort, and filter tabular data | x |
| Tasks | Control task execution | x |
| Twitter API interface | x | |
| Windows | Alternative library for Windows automation | x,windows |
| Word.Application | Control the Word desktop application | x |
The RPA.Browser.Playwright at the moment requires special installation, because of the package size and the post install step it needs to be fully installed.
Minimum required conda.yaml to install Playwright:
channels:
- conda-forge
dependencies:
- python=3.11.13
- nodejs=22.9.0
- pip=24.0
- pip:
- robotframework-browser==18.8.1
- rpaframework==31.1.2
rccPostInstall:
- rfbrowser initLearn about installing Python packages at Installing Python Packages.
Default installation method with Robocorp Developer Tools using conda.yaml:
channels:
- conda-forge
dependencies:
- python=3.11.13
- pip=24.0
- pip:
- rpaframework==31.1.2To install all extra packages (including Playwright dependencies), you can use:
channels:
- conda-forge
dependencies:
- python=3.11.13
- tesseract=5.4.1
- nodejs=22.9.0
- pip=24.0
- pip:
- robotframework-browser==18.8.1
- rpaframework==31.1.2
- rpaframework-aws==5.3.3
- rpaframework-google==9.0.2
- rpaframework-recognition==5.2.5
rccPostInstall:
- rfbrowser initSeparate installation of AWS, PDF and Windows libraries without the main
rpaframework:
channels:
- conda-forge
dependencies:
- python=3.11.13
- pip=24.0
- pip:
- rpaframework-aws==5.3.3 # included in the rpaframework as an extra
- rpaframework-pdf==7.3.3 # included in the rpaframework by default
- rpaframework-windows==7.5.2 # included in the rpaframework by defaultInstallation method with pip using Python venv:
python -m venv .venv
source .venv/bin/activate
pip install rpaframeworkNote
Python 3.9.2 or higher is required (tested up to 3.13)
After installation the libraries can be directly imported inside Robot Framework:
*** Settings ***
Library RPA.Browser.Selenium
*** Tasks ***
Login as user
Open available browser https://example.com
Input text id:user-name ${USERNAME}
Input text id:password ${PASSWORD}The libraries are also available inside Python:
from RPA.Browser.Selenium import Selenium
lib = Selenium()
lib.open_available_browser("https://example.com")
lib.input_text("id:user-name", username)
lib.input_text("id:password", password)Here is another example showing how to read an Excel file and filter rows using RPA.Excel.Files and RPA.Tables together:
*** Settings ***
Library RPA.Excel.Files
Library RPA.Tables
*** Tasks ***
Filter active employees
Open workbook employees.xlsx
${table}= Read worksheet as table header=True
Close workbook
${active}= Filter table by column ${table} Status == Active
Log Found ${active.size} active employeesAnd the same example in Python:
from RPA.Excel.Files import Files
from RPA.Tables import Tables
excel = Files()
tables = Tables()
excel.open_workbook("employees.xlsx")
table = excel.read_worksheet_as_table(header=True)
excel.close_workbook()
active = tables.filter_table_by_column(table, "Status", "==", "Active")
print(f"Found {active.size} active employees")- rpaframework.org for library documentation
- Robocorp Documentation for guides and tutorials
- #rpaframework channel in Robot Framework Slack if you have open questions or want to contribute
- Communicate with your fellow Software Robot Developers and Robocorp experts at Robocorp Developers Slack
Found a bug? Missing a critical feature? Interested in contributing? Head over to the Contribution guide to see where to get started.
Repository development is Python based and requires Python 3.11 or higher (tested up to 3.14) installed on the development machine. Python 3.10 and older are not supported since the November 2026 releases (3.10 reached end of life in October 2026).
Repository development tooling is based on uv and invoke. uv is used for
dependency management, building and running the package. Invoke is used for
scripting purposes, for example for linting, testing and publishing tasks.
Before writing any code, please read and acknowledge our extensive Dev Guide.
First steps to start developing:
Install uv (see uv installation docs)
git clone the repository
create a new Git branch or switch to correct branch or stay in master branch
- branch naming conventions: feature/name-of-feature, hotfix/name-of-the-issue, release/number-of-release
uv sync— installs the package and its dependencies into the .venv directoryif testing against Robocorp Robot which is using devdata/env.json:
- set environment variables
- or
uv buildand use the resulting .whl file (in the dist/ directory) in the Robot conda.yaml - or push the .whl to a repository and reference the raw URL in conda.yaml
uv run python -m robot <ROBOT_ARGS> <TARGET_ROBOT_FILE>- common ROBOT_ARGS from Robocorp Robot template:
--report NONE --outputdir output --logtitle "Task log"
- common ROBOT_ARGS from Robocorp Robot template:
uv run python <TARGET_PYTHON_FILE>invoke lintto make sure that code formatting follows rpaframework repository guidelines. Formatting is based on black and flake8 and those are run withinvoke lint.Library documentation can be generated from the repository root (the "meta" package level). Local changes to the main package are reflected automatically. For optional packages, use
invoke install-local --package <package_name>(e.g.rpaframework-aws) to install them as editable versions. Reset withinvoke install --reset.uv syncand/orinvoke install-local --package <package name>make docs- open
docs/build/html/index.htmlin a browser, or runmake localand navigate tolocalhost:8000for a live preview.
# Before [tool.uv.sources] rpaframework = { path = "packages/main", extras = ["cv", "playwright", "aws"] } rpaframework-google = { version = "^4.0.0" } rpaframework-windows = { version = "^4.0.0" } # After [tool.uv.sources] rpaframework = { path = "packages/main", extras = ["cv", "playwright"] } rpaframework-aws = { path = "packages/aws" } rpaframework-google = { version = "^4.0.0" } rpaframework-windows = { version = "^4.0.0" }
invoke test(runs both Python unittests and Robot Framework tests in the package tests/ directory)- to run a specific Python test:
uv run pytest path/to/test.py::test_function - to run a specific Robot Framework test:
inv testrobot -r <robot_name> -t <task_name>
- to run a specific Python test:
git commit changes
git push changes to remote
create a pull request from the branch describing the changes in the description
update docs/source/releasenotes.rst with changes (commit and push)
Packaging and publishing are done after changes have been merged into master branch. All the following steps should be done within master branch.
- in a pull request: update pyproject.toml with the new version according to semantic
versioning, run
uv lockin the package (and at the repository root when the root lock file is affected), and move the changes in docs/source/releasenotes.rst from Upcoming release into a dated block under Released that ends with the list of released versions, one bullet per package in the formrpaframework-core14.0.0 - merge the pull request once the GitHub Actions on it are green
git checkout master && git pull, then in the package directory runpython ../../tools/tag.py. It creates and pushes the tag<package>-<version>- the
releaseworkflow builds the package from the tagged commit, publishes it to PyPI (trusted publishing from thepypienvironment) and creates the GitHub release from the dated release-notes block that contains the version - when a package depends on another package of this repository with a raised version floor, release the dependency first: the dependent can only be relocked once the dependency is on PyPI
Some recommended tools for development
Visual Studio Code as a code editor with following extensions:
GitHub Desktop will make version management less prone to errors
This project is open-source and licensed under the terms of the Apache License 2.0.