We are constantly working to improve Anvil. Here you will find a summary of our changes, updated regularly.
- You can now see the build limits for custom package installation in the My Account modal of the Anvil Editor. Build limits are per app.
- Previously, in an app with multiple databases, all databases would be expanded in the App Browser, making it difficult to navigate all your databases. Now, the Default database will always be expanded and the App Browser will remember the expanded/collapsed state of all other databases.
- If you clone an app template with a corresponding tutorial, a link to the tutorial will be available from within the Editor.
- Introduced the
dom_nodesAPI in HtmlTemplates: This allows you to access HTML elements by name from your Python code. Learn more in our documentation.
- When an anvil app is visited by a web crawler, direct HTTP calls to the server are now supported, instead of calls to the server over a websocket.
- Fixed a bug where it wasn’t possible to search through code in Split View when jumping between ItemTemplate and Form.
- Fixed a bug where email quotas weren’t displaying properly for dedicated users.
- It is now possible to add safe inline style attributes to the HTML in RichText components, such as
padding. See the full list of safe styles in our documentation.
- A Minimap is now available on the Editor’s Code View, which allows users to see all the code in one file at a glance. This feature can be toggled fom the Look and Feel tab of the My Account modal.
- The Editor Help Tab now has a search bar, so users can now search the knowledge base from within it.
- Users can now also access some learning resources directly from the Welcome page of the Editor.
- The Ctrl/Cmd+F search panel has been improved: It now includes the number of search results and a “Select All” button.
- Improved support for Plotly on Basic Python 3:
go.Figureconstructor now works as expected.
- Added support for
- More sensible errors are now raised for
- Improved the Schema Mismatch page: More specific migration options are now allowed and the tooltips are now more descriptive.
- 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
- 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
.wasmextension are now served with the correct
- 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.
- 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.
- 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
mpl_util.plot_image()would result in an error.
- New Anvil Editor Full Release: The New Anvil Editor is officially out of beta and is now the default Anvil Editor (We will still be supporting the Classic Editor, but it won’t receive any feature updates. Any apps created with the Classic Editor will still work in the new Editor and vice versa.) Major updates include:
- 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.
- 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 --upgradeto get the latest version.
- 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.
- 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
- You can now get a temporary URL for a media object with
- 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.
- 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 installto your apps and allowing you to install packages yourself-you can even directly edit a
- 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.
- 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:
- 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.
- 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
- 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
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
- 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.
- 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
- Expanding FlowPanels: Want to use FlowPanels, but make components expand into all horizontal space? Use the new
- Datetime improvements: We’ve brought better date and time support to client code, including
- Style your alerts with CSS using the new
- 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.
- 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_exceptionsdecorator 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.
- We added support for the
- Our client-side graph plotting library, Plotly, has been updated to the latest version (4.14.3).
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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 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.
- 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.
- 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.contextobject. 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.
- 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.
- 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_placeholderto add an “unselected” option to your DropDown. Read more in the documentation.
- 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.
- Whole-app search: Just press
Ctrl+Shift+Fto 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.
- 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_typesproperty, so you can request “only images” or “only
.xlsfiles”. 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.
- 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
NLTKand Segment analytics.
- 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
- 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.
- You can now download any Media object in the user’s browser by calling
- 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
- The YouTubeVideo component now raises a
state_changedevent when it starts or stops playing.
- 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.
- 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
tooltipproperty. Set it to display some extra text when you hover your mouse over the component.
- 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.facebook. Your existing apps will still work.
- Apps now load faster.
- 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>.anvilapp.netlinks still work).
- We made saving your apps a lot smoother.
- 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
- 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.
- We’ve made it even easier to download files from your Anvil app: You can set the
urlproperty 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