We are constantly working to improve Anvil. Here you will find a summary of our changes, updated regularly.

May 2023

  • On Windows machines, the Ctrl+Shift+Z shortcut should now correctly redo actions.
  • When placed near the bottom of the window, the DatePicker component no longer drops down below the window height, it drops “up” instead.
  • The 3 dot context menu for asset files now includes “Replace…” and “Copy Asset Path”.
  • Improved autocompletion match emphasis: it now gets highlighted rather than underlined, which makes it easier to see.
  • Improved the way background tasks are displayed: you should now see the module name with each available background task, and if it’s part of a dependency the package name will also be included.
  • Added support for getting table names using list(app_tables).
  • New Help Tab: The Question Mark button in the Editor now opens a Help Tab complete with resources for beginners and guidance on where to go for help.
  • Fixed an error where Enterprise installations in environments with limited network connectivity could hang on startup.
  • Custom Packages are now supported for single-site installations using docker-compose.
  • Files in your app assets with a .wasm extension are now served with the correct Content-Type header.

April 2023

  • You can now easily copy the pathname of an asset by clicking the “Copy asset path” button after selecting an asset.
  • You can now see your invoices in the Billing tab of your account management page.

March 2023

  • Immediately rename Data Tables, Forms, Packages and Modules as they are created, leading to a smoother development experience.
  • To delete an app, you must now type in the app name to confirm you want to delete it.
  • The Account Management page now shows quotas and has a billing tab.
  • Client-side Plotly has been made much smaller to import (230kb -> 22kb).
  • Plotly has been migrated to version 5.
  • With Accelerated Data Tables, you can control which columns are accessible from a view.

February 2023

  • Autocomplete improvement: When using add_event_handler(...) on an Anvil component, it will offer the correct set of event names in the first argument, and it won’t automatically add the function call parentheses to the second argument.
  • The Account Modal now has a copyable link to allow invite developers to join via licence key.
  • “Code Snippets” and “Designer Toolbox” show/hide are now independent of each other, and the preference will persist on the browser.
  • Fixed issues causing spurious “DB Schema mismatch” messages.
  • App Logs containing emojis and other unusual characters are now displayed correctly.
  • Clicking on a global search result now scrolls line of code into center of screen, and not at the bottom.
  • Users are now able to manage their account subscriptions at anvil.works/manage.
  • When trying to upload an excessively large app logo, users now get a warning and offer to resize.
  • Server REPL output is now stored in the logs.
  • Fixed issue where passing a filename argument to mpl_util.plot_image() would result in an error.

January 2023

December 2022

  • New Data Files Service: We’ve made it easier than ever to attach large files to your app and use them on the server side with the Data Files service. It’s especially useful for machine learning models, large datasets and data that stays constant.

October 2022

  • Strict Transport Security (HSTS) is now available on custom domains
  • You can now opt in and out of the Anvil newsletter from your account page.
  • We’ve released a new version of the Uplink, restoring compatibility with newer versions of numpy. You can run pip install anvil-uplink --upgrade to get the latest version.

September 2022

  • Plotly Templates: You can now change the look of Plot components using new templates. This means you can now use all the pre-set Plotly templates or create your own. We’ve also added three new templates to match our new themes.

August 2022

  • You can now upgrade and switch plans in the Beta Editor from your Account settings.
  • The App List on the Editor’s landing page can now be resized by dragging, so that apps with long names are no longer truncated.
  • The ID of a currently running Background Task can be accessed within the task by reading anvil.server.context.background_task_id.
  • You can now get a temporary URL for a media object with anvil.media.TempUrl(media_object).

July 2022

  • The new Pico W Uplink: Anvil now makes it almost magically simple to connect a Raspberry Pi Pico W to a web app. With the new Pico Uplink, you can securely connect your Pico to the internet and control it from a web interface.
  • Split view is now resizeable: drag the code view screen to see more or less of the design view.
  • Code snippets are better than ever: you can now see more relevant examples and show only the named components in your Form.
  • New and improved syntax highlighting for all code files.
  • Autocompletion now works in HTML, CSS and JS files as well as in the Running App Console.
  • Using the Beta Editor is now even faster.
  • It’s now easier to see errors when you’re running your app in a separate tab. A red box will appear telling you that there’s an error.

June 2022

  • Self-service Package Installation: It’s now even easier to take advantage of Python’s rich packaging ecosystem in Anvil. This month, we launched self-service package installation, bringing the full flexibility of pip install to your apps and allowing you to install packages yourself-you can even directly edit a requirements.txt
  • Anvil apps load faster by reducing how much a browser has to download to open an app.
  • You can now re-order tabs in the Beta Editor by dragging them.
  • We’ve made multiple alerts easier to read by adding backdrop overlay.
  • We’ve ended support for Internet Explorer. For more information, check out our announcement here.

May 2022

  • Accelerated Tables: We have just completed a full rewrite of the Data Tables back-end, bringing faster searching, fine-grained control over fetching, fewer round-trips to the server, and much more. The Data Tables API hasn’t changed, but the background implementation is now much smoother. Learn more here.
  • Your apps can now have multiple nested alerts.
  • You can receive invoices automatically by email – just open up the Account page in the Beta Editor.
  • You can disconnect a running Uplink script using a Python function call: anvil.server.disconnect()

April 2022

  • Files in the Assets Section now have a new toolbar that drops down from the left, allowing you to easily rename or delete them.
  • When using Run in New Tab to develop, hitting the refresh button will now reload the tab rather than replace it.
  • print statements got a speed boost: The Editor’s console output tab will now display print statements in a much more timely manner.

March 2022

  • The icons on inactive tabs in the Editor now have muted colors, so it’s easier to tell what type of tabs you have open.
  • App sessions now give information about which environment the app was run in.
  • The start page UI has been improved - your app list will always stay visible, no matter your screen size.
  • In the version history panel, you can now click on line numbers when there’s been a change to go directly to that point in the code.
  • Debugging in the server console has been improved to include tracebacks.
  • Don’t let JS swallow your exceptions: If you’re using a JS library that’s swallowing exceptions from your Python callbacks, you can now use anvil.js.report_all_exceptions(True, reraise=True). This way Anvil will report all the exceptions, without needing to decorate each individual function with @anvil.js.report_exceptions.

January 2022

  • Searching in App Logs is now much faster.
  • It is now easier to find your apps: On the start page, you can now search for an app by ID and sort your apps alphabetically or by date created.
  • It is now possible to depend on versions of a dependency, like Anvil Extras, other than published or development, so you can now control when you upgrade to the latest version.
  • You can now set the theme colors of your app dynamically in code with anvil.theme_colors.

December 2021

  • Improved App Logging: We’ve improved the search function in the App Logs and implemented some performance improvements. You can now search through your app’s logs using regex and filter by session type and environment.

September 2021

  • Introducing the new Anvil Editor (Beta): We’ve rebuilt the editor from the ground up. As well as a new look and feel, the new beta editor is packed with a ton of new features to make building your web apps as smooth as possible.
    • Version control in the Editor: powerful collaboration tools are now built into the Beta Editor. Use Git version control to create branches, merge commits and resolve conflicts.
    • Multiple deployments: Deploy development, staging and production versions of your app on separate URLs with separate databases, Uplinks and much more.
    • Split-view coding: You can now view your client code and your UI design side-by-side. Edit your Python code and tweak your UI without switching back and forth.
    • Tabbed editing: Keep multiple tabs open at once while you work on your app.
    • Run your app in a separate window: You can now run your app easily in a separate window. You can even run it in split screen while you edit your code.
    • Dark mode.
  • Offline Apps: Every Anvil app is now a Progressive Web App, so your users can install it on their home screens and open it wherever they are. Read the docs to learn more, and see a complete Offline To-Do App.
  • DataGrids are now responsive: Make your tables wrap easily on mobile devices with the new wrap_on property.
  • Expanding FlowPanels: Want to use FlowPanels, but make components expand into all horizontal space? Use the new expand layout property.
  • Datetime improvements: We’ve brought better date and time support to client code, including strptime.
  • Style your alerts with CSS using the new role property.
  • App Server v1.6: All of these improvements are, of course, available in the open-source App Server. Time to pip install --upgrade anvil-app-server.

June 2021

  • Anvil App Server v1.5.5 is out: The new release includes performance enhancements, bug fixes, the RichText component and more control over emails from the Users service.
  • You can now depend on third-party apps as well as your own apps. This will take the hassle out of updating your clone any time a dependency author releases a new feature or implements an important bug fix.
  • You can now configure the emails from the Users service: Set the outgoing email address and configure the emails sent when a new user signs up or forgets their password - all from the Users service UI.
  • Don’t let JS swallow your exceptions: If you’re using a JS library that’s swallowing exceptions from your Python callbacks, adding the new @anvil.js.report_exceptions decorator to your Python callback will allow Anvil to see the exceptions, so you can debug your code. See the docs.
  • Add multiple event handlers: When you’re handling component events from code, you can now add_event_handler() to add multiple handlers for one event. Read the docs.

May 2021

  • You can now easily convert binary data in Javascript to Anvil Media objects with anvil.js.to_media()
  • We added support for the functools module.
  • Our client-side graph plotting library, Plotly, has been updated to the latest version (4.14.3).

April 2021

  • RichText component: The new RichText component allows you to flexibly format text, embed other components into it, or safely display dynamic HTML. Read more about it.

March 2021

  • JS objects in Python: You can now import arbitrary JS objects into your Python code using anvil.js.window. Check out the quickstart to see how to use JS libraries in Python.
  • SAML authentication: If you’re on a Business plan or above, You can now easily build apps that accept SAML Authentication by enabling SAML in the Users Service. Read our announcement blog to find out more
  • Front-end speed boost: We’ve rebuilt how our UI components work, and our in-browser Python runtime, so forms now render faster.

October 2020

  • Portable Classes: You can now define your own classes and pass them between client and server code. Check out our documentation for more information and examples.
  • We’ve added extra security to the Users service, to protect your users against extended password-guessing attempts. If someone tries the wrong password too many times, they’ll get locked out – and the legitimate user will have to reset their account by email to prove it’s really them. Read about it in the Users Service docs.
  • We’ve released a major update to our in-browser Python support, bringing you more support for advanced Python features, and a significant increase in speed.
  • If you’re on a Dedicated or Enterprise plan, we’ve made it even easier to execute SQL against your Data Tables.

September 2020

  • Entries in Version History now indicate what’s changed at a glance.
  • v1.2 of our open-source App Server has been released. Improvements include two-factor authentication support for users service, OAuth fixes, and a more robust Downlink.

July 2020

  • You can now add two-factor authentication to any Anvil app, with the tick of a box. Read our announcement blog post to find out more.

May 2020

  • The Anvil App Server is now open source: you can now export your apps from Anvil, and host them anywhere. Read all about it on our blog.

March 2020

  • The Plotly integration with Anvil has been updated, so you can use the full power of Figure Factories and more.
  • We’ve added some more community-contributed components to the Anvil Component Library, including IFrames, pop-overs and more.

February 2020

  • You can now generate PDFs from Anvil Forms. Use the drag-and-drop Anvil designer to build your page, then create a PDF with one function call. You can also download it, save it in a Data Table, attach it to an email, or return it from an HTTP API endpoint. Find out more on our website.
  • You can now start your app with a Module, rather than a Form. So you can execute code before you’ve decided which page to open. Read the docs.
  • When you’re plotting with Matplotlib, you can now set a filename for the generated PNG file. (See the docs for anvil.mpl_util.plot_image())
  • Anvil now shows the name of the app you’re editing in the title bar.
  • If you export a Data Table to CSV, you can now receive SimpleObject values as JSON. See the docs for exporting CSV from the Anvil editor or from Python code.

January 2020

  • Python 3 is now the default for all Anvil apps: All new Anvil applications now use Python 3 by default – both in the browser and on the server. We will still support Python 2 apps. If you want to take advantage of new Python 3 features, though, we’ve put together a guide to help you upgrade.
  • It’s now easier to organise your Anvil code: You can group your forms and modules together into packages, and tuck your ItemTemplates safely away. Read more in the docs.

November 2019

  • More Information About Your Users: Sometimes it’s useful to know more about the person (or program) using your app. This is now a lot easier, with the anvil.server.context object. Read the docs to learn more.
  • Autocompleting imports: If you’re importing one form or module from another, the autocompleter now helps you. It also automatically suggests relative imports, which makes your code work better if used in dependency packages.
  • Faster saving for big apps: If you’re working on a big Anvil project, you will notice that your apps are now saving and running rather faster.

October 2019

  • Basic Python 3 server environment: everyone can now write server modules in Python 3. We’ll carry on supporting our Python 2 server environments (both Full, for paid users, and Basic for free users) but we’re excited to open up the possibilities of Python 3 to everyone.
  • Dev vs Prod: If you want to keep your development and production apps separate, we’ve made it even easier for you. Check out our how-to guide.
  • We’ve made browsing and searching your App Logs much faster.

September 2019

  • Scheduled Tasks: you can use Anvil to run a function at regular intervals. Just tag your function with @anvil.server.background_task, then open the Scheduled Tasks dialog.
  • DropDowns now have placeholders: Just tick include_placeholder to add an “unselected” option to your DropDown. Read more in the documentation.
  • Call Javascript from anywhere: If you use Javascript in your app, you can call it from any code, not just Custom HTML forms. See the docs for anvil.js.call_js().
  • Sort Data Tables in the editor: Check out the new sort buttons in the Data Table editor.
  • Easier editing of deeply nested RepeatingPanels: If you nest RepeatingPanels deeply inside each other, you’ll see we’ve cut down a lot on unnecessary repeats, so they’re easier to edit.

August 2019

  • Whole-app search: Just press Ctrl+Shift+F to search for text in your whole app at once!
  • Inline attachments for email: Want to embed images in your email? Now you can! Read the email attachments documentation for more.
  • We’ve expanded our Google Maps integration: Read the Maps documentation for more.

April 2019

  • We’ve updated Anvil’s HTTP API support, with a focus on making it easier to build secure APIs. Check out the API documentation.
  • Filter your uploads: FileLoader components now have a file_types property, so you can request “only images” or “only .xls files”. Read the API docs here
  • See the structure of your page: When you’re choosing components from the drop-down in the Properties panel, you can now see the full heirarchy of components, including their containers.
  • Store extra files in Git: If you’re using Git to store and modify your Anvil apps, you can now store extra files in that repository.

March 2019

  • Introducing Background Tasks: Now you can kick off long-running processes and monitor their progress without blocking your app. Just tag a function with @anvil.server.background_task, then call anvil.server.launch_background_task() to start it going.
  • Performance improvements: Server-side code starts faster, Data Tables access is faster, apps load faster.
  • We’ve made it easier to theme components in your Anvil app.
  • We’ve installed more packages for your server modules, including NLTK and Segment analytics.

February 2019

  • We’ve overhauled how you query Data Tables, and added a some flexible new queries, so you can perform much more fine-grained searches. Learn more on our blog.
  • You can now call server code without displaying a spinning loading indicator using anvil.server.no_loading_indicator.
  • You can now draw images onto Canvas components.
  • It’s now easier to work with files and Media in Server Modules: Get a temporary file from any Media object with anvil.media.TempFile(), and read files into Media objects with anvil.media.from_file(). Read the docs here
  • Anvil now works better with password managers, including Chrome’s built-in password manager.

January 2019

  • You can now download any Media object in the user’s browser by calling download(media).
  • If you use Javascript with Anvil – or external services such as Intercom – we’ve made it even easier to import these native libraries. Read the guide on our website.
  • Your app can now find out its ID with anvil.app.id, and whether this is the published version or running in the editor with anvil.app.branch.
  • The YouTubeVideo component now raises a state_changed event when it starts or stops playing.

December 2018

  • App Titles and Logos: Now you can customise the public face of your app using Titles and Logos. This configures search engine and social media previews as well as your app’s favicon and the title of the browser tab.
  • The Data Tables Service now tells you how many Rows are in your table.
  • Remembered user sessions are now stored in the Users table in Data Tables, so you can delete them to log users out.
  • There’s now a distinct URL associated with editing an app, so you can bookmark the Anvil editor with an app open.

September 2018

  • Introduced Data Grids: They make it easy to build apps where you display and interact with tables of data. Check out our blog post, and our tutorial: Getting Started with Data Grids
  • Introduced the “Require Secure Passwords” option in Anvil’s user authentication service. When you select “Require Secure Passwords”, Anvil prevents your users from re-using a password that’s too short, or has already been leaked in a data breach. “Require Secure Passwords” is enabled by default for all new apps, and you should turn it on for your existing apps too.
  • Now, almost every component has a tooltip property. Set it to display some extra text when you hover your mouse over the component.

August 2018

  • Database SQL queries: If you’re a Dedicated Server user, you can now connect directly to Anvil’s internal database and write queries with SQL.
  • It’s now easier to embed Anvil apps in other websites. When you open the Publish dialog, you now get a checkbox for “Embed this app in a web page”.
  • It’s now easier to lay things out in our drag-and-drop designer. Look out for the dotted lines to see which container you’re dropping a container in.
  • If you’re storing encrypted App Secrets in your Anvil app, you can now enter longer, multi-line strings.
  • The modules for our Google and Facebook integrations have moved - they’re now anvil.google and anvil.facebook. Your existing apps will still work.
  • Apps now load faster.

July 2018

  • Microsoft SSO: Users can now log into apps with their Microsoft accounts. Microsoft login (Azure Active Directory) is available for all our Business plan customers. Click here to read more.
  • Easily send and receive email from your code with the new Email Service. Check out the code samples, or watch our demo video.
  • Introduced the new form validation library which makes it a lot easier to validate user input.
  • We’ve introduced a new domain for your apps: Now, by default, your apps are available at <something>.anvil.app (the old <something>.anvilapp.net links still work).
  • We made saving your apps a lot smoother.

May 2018

  • Simple objects in Data Tables: You can now add “Simple Object” columns to your Data Tables. These can store strings, numbers, lists, or dicts - that’s any JSON object. And you can search inside them with a powerful query system. Find out more on our blog.
  • Easier code navigation: you can hold down the Ctrl key and click on a function or variable to jump to its definition.
  • Introduced the new FlowPanel, which lets you lay out components side-to-side. It’s great for grouping buttons, links or labels right next to each other.
  • We’ve made it easier to drag and drop Link components, so it’s clearer whether you’re dropping something next to a Link or inside it.
  • Added more options for displaying images in Image components: Shrink to fit, zoom to fill, or display your image at its original size no matter how big your page is.
  • Now you can control the spacing in a ColumnPanel with the column_spacing property.
  • We’ve made the Toolbox easier to navigate by highlighting the most commonly used components.
  • Fixed-width layouts are easier now too, with the XYPanel. Most of the time, you won’t be needing a fixed-width layout, but when you do, it’s right there.

March 2018

  • We’ve made it even easier to download files from your Anvil app: You can set the url property of a Link component to any Media object, even a temporary one.
  • Two-factor authentication: secure your access to the Anvil IDE by enabling two-factor auth on your account today. (Open the Anvil editor and choose My Account).
  • The Client Uplink: lets you connect un-trusted code to your Anvil apps, just like the Uplink. Read the docs.
  • Stripe credit card form customisation: you can now set an icon_url with anvil.stripe.checkout().